| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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) { |
| | |
| | | |
| | | @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(); |
| | |
| | | |
| | | 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 |
| | |
| | | * @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; |
| | | } |
| | | |
| | |
| | | /** |
| | | * 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 |
| | | */ |