通讯录查询修改

master
Xusan 2024-05-16 09:40:25 +08:00
parent a69c192cff
commit b73970108c
4 changed files with 261 additions and 2 deletions

View File

@ -19,6 +19,9 @@ public class AddressBootDto extends CommDto{
@ApiModelProperty(value = "行政区划")
private String adcd;
@ApiModelProperty(value = "行政区划级别 0省,1市,2县,3镇,4村,5组 ,(点击树查询下级, 点击查询按钮查询本级)", example = "0")
private Integer adlevel;
@ApiModelProperty(value = "登录用户id")
private String userId;
}

View File

@ -12,6 +12,9 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import static com.whdc.utils.AdinfoUtils.likeAdcd;
/**
* <p>
@ -28,8 +31,15 @@ public class AddressBookServiceImpl extends ServiceImpl<AddressBookMapper, Addre
public IPage<AddressBookVo> page(AddressBootDto dto) {
String adcd = dto.getAdcd();
if (StringUtils.isNotBlank(adcd)) {
Integer adlevel = dto.getAdlevel();
if (StringUtils.isNotBlank(dto.getAdcd()) && Objects.nonNull(adlevel)) {
dto.setAdcd( "LIKE " + likeAdcd(dto.getAdcd(), adlevel) + "%");
} else {
if (StringUtils.isNotBlank(dto.getAdcd())) {
dto.setAdcd( "= " + dto.getAdcd());
}
}
return baseMapper.page(dto.getPage(), dto);

View File

@ -0,0 +1,246 @@
package com.whdc.utils;
import org.apache.commons.lang3.StringUtils;
import java.util.Objects;
/**
* Description:
* Created by XuSan on 2024/3/14.
*
* @author XuSan
* @version 1.0
*/
public class AdinfoUtils {
/**
*
*
* @param adcd
* @param adlevel
* @return
*/
public static String likeAdcd(String adcd, Integer adlevel) {
// // 判断行政区划和行政区划等级是否匹配
// validateAdcdAndAdlevel(adcd, adlevel);
if (adlevel > 5) {
adlevel = 5;
}
switch (adlevel) {
case 0:
if (adcd.length() < 2){
return adcd;
}
return adcd.substring(0, 2);
case 1:
if (adcd.length() < 4){
return adcd;
}
return adcd.substring(0, 4);
case 2:
if (adcd.length() < 6){
return adcd;
}
return adcd.substring(0, 6);
case 3:
if (adcd.length() < 9){
return adcd;
}
return adcd.substring(0, 9);
case 4:
if (adcd.length() < 12){
return adcd;
}
return adcd.substring(0, 12);
case 5:
return adcd;
default:
throw new RuntimeException("不支持该行政区划等级");
}
}
/**
*
*
* @param adcd
* @param adlevel
* @return
*/
public static String getParentAdcd(String adcd, Integer adlevel) {
if (Objects.isNull(adlevel)){
adlevel = getAdlevel(adcd);
}
if (adlevel > 5) {
adlevel = 5;
}
switch (adlevel) {
case 0:
return adcd.substring(0, 2) + "0000000000000";
case 1:
return adcd.substring(0, 4) + "00000000000";
case 2:
return adcd.substring(0, 6) + "000000000";
case 3:
return adcd.substring(0, 9) + "000000";
case 4:
return adcd.substring(0, 12) + "000";
case 5:
return adcd;
default:
throw new RuntimeException("不支持该行政区划等级");
}
}
/**
*
*
* @param adlevel
* @return
*/
public static String getAdcdRight( Integer adlevel) {
if (adlevel > 5) {
adlevel = 5;
}
switch (adlevel) {
case 0:
return "0000000000000";
case 1:
return "00000000000";
case 2:
return "000000000";
case 3:
return "000000";
case 4:
return "000";
case 5:
return "";
default:
throw new RuntimeException("不支持该行政区划等级");
}
}
/**
*
*
* @param adcd
* @param adlevel
* @return
*/
public static void validateAdcdAndAdlevel(String adcd, Integer adlevel) {
// 避免重复代码,提取为私有方法
validateAdcd(adcd, adlevel, 2);
validateAdcd(adcd, adlevel, 4);
validateAdcd(adcd, adlevel, 6);
validateAdcd(adcd, adlevel, 9);
validateAdcd(adcd, adlevel, 12);
}
/**
*
*
* @param adcd
* @param adlevel
* @param startIndex
* @throws RuntimeException
*/
private static void validateAdcd(String adcd, Integer adlevel, int startIndex) throws RuntimeException {
if (StringUtils.isBlank(adcd) || adcd.length() < startIndex) {
throw new RuntimeException("行政区划编码错误 " + adcd);
}
// String subAdcd = adcd.substring(startIndex);
int adlevelBySubAdcd = getAdlevelBySubAdcd(adcd,startIndex);
if (adlevel != adlevelBySubAdcd || adlevel+1 != adlevelBySubAdcd || adlevel-1 != adlevelBySubAdcd) {
throw new RuntimeException("行政区划编码和行政区划等级不匹配");
}
}
/**
*
*
* @param adcd
* @return
*/
public static int getAdlevel(String adcd) {
if (StringUtils.isBlank(adcd) || adcd.length() != 15) {
throw new RuntimeException("行政区划编码错误 " + adcd);
}
// 避免重复代码,提取为私有方法
int subAdcd = getAdlevelBySubAdcd(adcd, 2);
if (5 != subAdcd) {
return subAdcd;
}
subAdcd = getAdlevelBySubAdcd(adcd, 4);
if (5 != subAdcd) {
return subAdcd;
}
subAdcd = getAdlevelBySubAdcd(adcd, 6);
if (5 != subAdcd) {
return subAdcd;
}
subAdcd = getAdlevelBySubAdcd(adcd, 9);
if (5 != subAdcd) {
return subAdcd;
}
subAdcd = getAdlevelBySubAdcd(adcd, 12);
return subAdcd;
}
/**
*
*
* @param adcd
* @return
*/
public static int getAdlevelBySubAdcd(String adcd, int startIndex) {
String subAdcd = adcd.substring(startIndex);
// 根据行政区划分析出的行政区划等级
int expectedLevel = 0;
switch (subAdcd) {
case "0000000000000": // 省
break;
case "00000000000": // 市
expectedLevel = 1;
break;
case "000000000": // 县
expectedLevel = 2;
break;
case "000000": // 镇
expectedLevel = 3;
break;
case "000": // 村
expectedLevel = 4;
break;
default:
// 村
expectedLevel = 5;
}
return expectedLevel;
}
}

View File

@ -21,7 +21,7 @@
AND AB.NAME LIKE CONCAT('%', #{dto.name}, '%')
</if>
<if test="dto.adcd != null and dto.adcd != '' ">
AND AB.ADCD LIKE CONCAT('', #{dto.adcd}, '%')
AND AB.ADCD #{dto.adcd}
</if>
<if test="dto.phone != null and dto.phone != '' ">
AND AB.PHONE LIKE CONCAT('', #{dto.phone}, '%')