117 lines
3.9 KiB
Java
117 lines
3.9 KiB
Java
|
|
package com.gunshi.project.xyt.service;
|
|||
|
|
|
|||
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|||
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||
|
|
import com.google.common.collect.Lists;
|
|||
|
|
import com.gunshi.db.dao.BaseOrderDao;
|
|||
|
|
import com.gunshi.project.xyt.entity.basedata.AddvcdSearch;
|
|||
|
|
import com.gunshi.project.xyt.entity.basedata.StAddvcdTreeVo;
|
|||
|
|
import com.gunshi.project.xyt.mapper.StAddvcdDMapper;
|
|||
|
|
import com.gunshi.project.xyt.model.StAddvcdD;
|
|||
|
|
import com.gunshi.util.common.tree.TreeUtil;
|
|||
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|||
|
|
import org.apache.commons.lang3.StringUtils;
|
|||
|
|
import org.springframework.stereotype.Service;
|
|||
|
|
|
|||
|
|
import java.util.Date;
|
|||
|
|
import java.util.List;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @author Sun Lejun
|
|||
|
|
* @version 1.0
|
|||
|
|
* @date 2024/1/25
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
@Service
|
|||
|
|
public class StAdcdService extends BaseOrderDao<StAddvcdDMapper, StAddvcdD> {
|
|||
|
|
//省行政区划 13位0
|
|||
|
|
private static final String ADDVCD_SH = "0000000000000";
|
|||
|
|
//市行政区划 11位0
|
|||
|
|
private static final String ADDVCD_SI = "00000000000";
|
|||
|
|
//区行政区划 9位0
|
|||
|
|
private static final String ADDVCD_QU = "000000000";
|
|||
|
|
//乡行政区划 6位0
|
|||
|
|
private static final String ADDVCD_XI = "000000";
|
|||
|
|
//镇行政区划 3位0
|
|||
|
|
private static final String ADDVCD_ZN = "000";
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 根据编码查询区划
|
|||
|
|
* @param addcd 区划编码
|
|||
|
|
* @return 区划
|
|||
|
|
*/
|
|||
|
|
public StAddvcdD queryByAddcd(String addcd) {
|
|||
|
|
return this.getBaseMapper().selectById(addcd);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public Page<StAddvcdD> queryBySearch(AddvcdSearch addvcdSearch) {
|
|||
|
|
QueryWrapper<StAddvcdD> queryWrapper = new QueryWrapper<>();
|
|||
|
|
queryWrapper.like(StAddvcdD.COL_ADDVCD, addvcdSearch.getKeyword());
|
|||
|
|
queryWrapper.or();
|
|||
|
|
queryWrapper.like(StAddvcdD.COL_ADDVNM, addvcdSearch.getKeyword());
|
|||
|
|
queryWrapper.orderByAsc(StAddvcdD.COL_SORT_ON);
|
|||
|
|
return super.page(new Page<>(addvcdSearch.getPage(), addvcdSearch.getPageSize()), queryWrapper);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 查询行政区划下级(包含本级)树
|
|||
|
|
* @param addvcd 只匹配前面的位数 比如42就查询42开始的
|
|||
|
|
* @return 行政区划下级(包含本级)树
|
|||
|
|
*/
|
|||
|
|
public List<StAddvcdTreeVo> queryTree(String addvcd){
|
|||
|
|
List<StAddvcdTreeVo> stAddvcdTreeVos = this.getBaseMapper().queryTree(addvcd);
|
|||
|
|
if(CollectionUtils.isEmpty(stAddvcdTreeVos)){
|
|||
|
|
return Lists.newArrayList();
|
|||
|
|
}
|
|||
|
|
stAddvcdTreeVos.forEach(t -> t.setParentCode(getParentAddvcd(t.getAddvcd())));
|
|||
|
|
String parentKey;
|
|||
|
|
if(StringUtils.isBlank(addvcd)){
|
|||
|
|
parentKey = "/";
|
|||
|
|
}
|
|||
|
|
if (addvcd.length() > 15) {
|
|||
|
|
parentKey = addvcd.substring(0, 15);
|
|||
|
|
} else {
|
|||
|
|
parentKey = String.format("%1$-15s", addvcd).replace(' ', '0');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return TreeUtil.list2ListTree(
|
|||
|
|
stAddvcdTreeVos, parentKey,
|
|||
|
|
StAddvcdTreeVo::getAddvcd, StAddvcdTreeVo::getParentCode, StAddvcdTreeVo::setChildren, null);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 重新排序
|
|||
|
|
* @param stAddvcdD 区划信息
|
|||
|
|
*/
|
|||
|
|
private void resort(StAddvcdD stAddvcdD){
|
|||
|
|
QueryWrapper<StAddvcdD> queryWrapper = new QueryWrapper<>();
|
|||
|
|
super.updateOrder(queryWrapper, StAddvcdD::getSortOn, StAddvcdD::setSortOn, stAddvcdD, StAddvcdD::getAddvcd, t -> t.setTm(new Date()));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public String getParentAddvcd(String addvcd){
|
|||
|
|
//省
|
|||
|
|
if(addvcd.endsWith(ADDVCD_SH)){
|
|||
|
|
return "/";
|
|||
|
|
}
|
|||
|
|
//市
|
|||
|
|
if(addvcd.endsWith(ADDVCD_SI)){
|
|||
|
|
return addvcd.substring(0,2)+ADDVCD_SH;
|
|||
|
|
}
|
|||
|
|
//区
|
|||
|
|
if(addvcd.endsWith(ADDVCD_QU)){
|
|||
|
|
return addvcd.substring(0,4)+ADDVCD_SI;
|
|||
|
|
}
|
|||
|
|
//乡
|
|||
|
|
if(addvcd.endsWith(ADDVCD_XI)){
|
|||
|
|
return addvcd.substring(0,6)+ADDVCD_QU;
|
|||
|
|
}
|
|||
|
|
//镇
|
|||
|
|
if(addvcd.endsWith(ADDVCD_ZN)){
|
|||
|
|
return addvcd.substring(0,9)+ADDVCD_XI;
|
|||
|
|
}
|
|||
|
|
return addvcd.substring(0,12)+ADDVCD_ZN;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|