吉安感知网项目-后端
linwei
2026-01-29 1abd541be8d02dabaa77d3c6d2fecde5ef0e4b5b
drone-service/drone-system/src/main/java/org/sxkj/system/service/impl/RegionServiceImpl.java
@@ -19,6 +19,7 @@
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
@@ -26,9 +27,12 @@
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.tool.utils.*;
import org.sxkj.common.func.Streams;
import org.sxkj.system.cache.RegionCache;
import org.sxkj.system.entity.Region;
import org.sxkj.system.excel.RegionExcel;
import org.sxkj.system.excel.RegionImportExcel;
import org.sxkj.system.mapper.RegionMapper;
import org.sxkj.system.param.RegionPageParam;
import org.sxkj.system.service.IRegionService;
import org.sxkj.system.vo.RegionVO;
import org.springframework.stereotype.Service;
@@ -122,11 +126,47 @@
      return baseMapper.lazyTree(parentCode, param);
   }
   // WHEN
   //    region_level = '5' THEN town_name
   // WHEN
   //    region_level = '4' THEN district_name
   // WHEN
   //    region_level = '3' THEN city_name
   // WHEN
   //    region_level = '2' THEN province_name
   @Override
   public void importRegion(List<RegionExcel> data, Boolean isCovered) {
   public void importRegion(List<RegionImportExcel> data, Boolean isCovered) {
      List<Region> list = new ArrayList<>();
      data.forEach(regionExcel -> {
         Region region = BeanUtil.copy(regionExcel, Region.class);
         region.setRegionLevel(Integer.valueOf(regionExcel.getRegionLevel()));
         region.setCityName("吉安市");
         region.setCityCode("360800000000");
         region.setProvinceCode("360000000000");
         region.setProvinceName("江西省");
         if (region.getRegionLevel().equals(DISTRICT_LEVEL)) {
            region.setDistrictCode(region.getCode());
            region.setDistrictName(region.getName());
         }
         if (region.getRegionLevel().equals(TOWN_LEVEL)) {
            String parentCode = region.getParentCode();
            Region byCode = getByCode(parentCode);
            region.setDistrictCode(byCode.getCode());
            region.setDistrictName(byCode.getName());
            region.setTownCode(region.getCode());
            region.setTownName(region.getName());
         }
         if (region.getRegionLevel().equals(VILLAGE_LEVEL)) {
            String parentCode = region.getParentCode();
            Region byCode = getByCode(parentCode);
            region.setTownCode(byCode.getCode());
            region.setTownName(byCode.getName());
            Region byCode2 = getByCode(byCode.getParentCode());
            region.setDistrictCode(byCode2.getCode());
            region.setDistrictName(byCode2.getName());
            region.setVillageCode(region.getCode());
            region.setVillageName(region.getName());
         }
         list.add(region);
      });
      if (isCovered) {
@@ -195,15 +235,15 @@
   @Override
   public TreeVo buildRegionTree(String parentCode) {
      if(StringUtil.isBlank(parentCode)){
      if (StringUtil.isBlank(parentCode)) {
         return null;
      }
      LambdaQueryWrapper<Region> query = Wrappers.<Region>lambdaQuery()
         .le(Region::getRegionLevel, 3)
         .likeRight(Region::getParentCode, parentCode.replaceAll("0+$", ""))
         .or(regionLambdaQueryWrapper ->
               regionLambdaQueryWrapper.eq(Region::getCode, parentCode)
            );
            regionLambdaQueryWrapper.eq(Region::getCode, parentCode)
         );
      List<Region> list = list(query);
      List<TreeVo> regionVOS = Streams.toList(list, region -> {
         TreeVo vo = new TreeVo();
@@ -218,13 +258,17 @@
      List<TreeVo> regionVOS1 = buildRegionTree(regionVOS, parentCode);
      TreeVo treeVo = map.get(parentCode);
      if(Objects.nonNull(treeVo)){
      if (Objects.nonNull(treeVo)) {
         treeVo.setChildrens(regionVOS1);
      }
      return treeVo;
   }
   @Override
   public IPage<RegionVO> selectRegionPage(IPage<RegionVO> page, RegionPageParam regionPageParam) {
      return baseMapper.selectRegionPage(page, regionPageParam);
   }
   /**
    * Query regions by parentCode and build a recursive tree structure
@@ -234,7 +278,7 @@
    * @return List of RegionVO trees starting from the specified parentCode
    */
   public List<TreeVo> buildRegionTree(List<TreeVo> allRegions, String parentCode) {
      if(CollectionUtil.isEmpty(allRegions)){
      if (CollectionUtil.isEmpty(allRegions)) {
         return Collections.EMPTY_LIST;
      }
@@ -249,7 +293,7 @@
   /**
    * Recursive method to build the region tree
    *
    * @param regionMap Map of regions grouped by parentCode
    * @param regionMap   Map of regions grouped by parentCode
    * @param currentCode Current region code to process
    * @return List of RegionVOs with children populated
    */