134 lines
4.3 KiB
Java
134 lines
4.3 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.GeneralSearch;
|
|
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.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 queryByAddvcd(String addcd) {
|
|
return this.getBaseMapper().selectById(addcd);
|
|
}
|
|
|
|
public Page<StAddvcdD> queryBySearch(GeneralSearch search) {
|
|
QueryWrapper<StAddvcdD> queryWrapper = new QueryWrapper<>();
|
|
queryWrapper.like(StAddvcdD.COL_ADDVCD, search.getKeyword());
|
|
queryWrapper.or();
|
|
queryWrapper.like(StAddvcdD.COL_ADDVNM, search.getKeyword());
|
|
queryWrapper.orderByAsc(StAddvcdD.COL_SORT_ON);
|
|
return super.page(search.getPageSo().toPage(), 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 (addvcd.length() >= 15) {
|
|
return stAddvcdTreeVos;
|
|
} else {
|
|
parentKey = getParentAddvcd(String.format("%1$-15s", addvcd).replace(' ', '0'));
|
|
}
|
|
|
|
return TreeUtil.list2ListTree(
|
|
stAddvcdTreeVos, parentKey,
|
|
StAddvcdTreeVo::getAddvcd, StAddvcdTreeVo::getParentCode, StAddvcdTreeVo::setChildren, null);
|
|
}
|
|
|
|
/**
|
|
* 新增行政区划
|
|
* @param stAddvcdD 行政区划信息
|
|
*/
|
|
public void insert(StAddvcdD stAddvcdD) {
|
|
stAddvcdD.setTm(new Date());
|
|
stAddvcdD.setCreateTm(new Date());
|
|
super.save(stAddvcdD);
|
|
resort(stAddvcdD);
|
|
}
|
|
|
|
/**
|
|
* 更新行政区划
|
|
* @param stAddvcdD 行政区划信息
|
|
*/
|
|
public void update(StAddvcdD stAddvcdD) {
|
|
stAddvcdD.setTm(new Date());
|
|
super.updateById(stAddvcdD);
|
|
resort(stAddvcdD);
|
|
}
|
|
|
|
/**
|
|
* 重新排序
|
|
* @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;
|
|
}
|
|
|
|
|
|
}
|