gunshi-project-ss/src/main/java/com/gunshi/project/xyt/service/StAdcdService.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 queryByAddcd(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;
}
}