通讯录查询修改
parent
a69c192cff
commit
b73970108c
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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}, '%')
|
||||
|
|
|
|||
Loading…
Reference in New Issue