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 { //省行政区划 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 queryBySearch(GeneralSearch search) { QueryWrapper 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 queryTree(String addvcd){ List 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 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; } }