diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/AreaCodeDictFormDTO.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/AreaCodeDictFormDTO.java index 1f25e5db33..4340d4d015 100644 --- a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/AreaCodeDictFormDTO.java +++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/AreaCodeDictFormDTO.java @@ -17,4 +17,9 @@ public class AreaCodeDictFormDTO implements Serializable { * 根结点code 不传,则返回全部 */ private String rootAreaCode; + + /** + * 省级:province; 市级: city; 区县级: district ;乡(镇、街道)级:street ;社区级:community + */ + private String rootAreaLevel; } diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/constant/AreaCodeConstant.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/constant/AreaCodeConstant.java index 1968766228..c502a95e14 100644 --- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/constant/AreaCodeConstant.java +++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/constant/AreaCodeConstant.java @@ -11,4 +11,15 @@ public interface AreaCodeConstant { */ String SCREEN_TREE = "epmet:screen:tree:areacode"; + String THREE_SCREEN_TREE = "epmet:screen:tree:threeareacode"; + + /** + * 省级:province; 市级: city; 区县级: district ;乡(镇、街道)级:street ;社区级:community + */ + String PROVINCE = "province"; + String CITY = "city"; + String DISTRICT = "district"; + String STREET = "street"; + String COMMUNITY = "community"; + } diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/AreaCodeController.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/AreaCodeController.java index 3853c46ffa..5dc1747438 100644 --- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/AreaCodeController.java +++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/AreaCodeController.java @@ -92,7 +92,7 @@ public class AreaCodeController { */ @PostMapping("areacodedicttree") public Result> areaCodeDictTree(@RequestBody AreaCodeDictFormDTO formDTO){ - return new Result>().ok(areaCodeService.areaCodeDictTree(formDTO)); + return new Result>().ok(areaCodeService.areaCodeDictTreePlus(formDTO)); } } \ No newline at end of file diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/AreaCodeService.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/AreaCodeService.java index 110c0586ca..45222bbb53 100644 --- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/AreaCodeService.java +++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/AreaCodeService.java @@ -103,4 +103,6 @@ public interface AreaCodeService extends BaseService { * @date 2021/1/7 下午1:41 */ List areaCodeDictTree(AreaCodeDictFormDTO formDTO); + + List areaCodeDictTreePlus(AreaCodeDictFormDTO formDTO); } \ No newline at end of file diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/AreaCodeServiceImpl.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/AreaCodeServiceImpl.java index 20f152de4a..aa1e3a0134 100644 --- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/AreaCodeServiceImpl.java +++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/AreaCodeServiceImpl.java @@ -290,4 +290,256 @@ public class AreaCodeServiceImpl extends BaseServiceImpl areaCodeDictTreePlus(AreaCodeDictFormDTO formDTO){ + List tree = new ArrayList<>(); + String s = areaCodeRedis.get(AreaCodeConstant.THREE_SCREEN_TREE); + if (StringUtils.isNotBlank(s)){ + tree = JSON.parseArray(s,AreaCodeDictResultDTO.class); + }else { + List threeTree = beforeThreeTree(); + areaCodeRedis.set(AreaCodeConstant.THREE_SCREEN_TREE,threeTree); + tree = threeTree; + } + if (StringUtils.isBlank(formDTO.getRootAreaCode())){ + return tree; + } + // 传参为街道-社区级 + if (formDTO.getRootAreaLevel().equals(AreaCodeConstant.STREET) || formDTO.getRootAreaLevel().equals(AreaCodeConstant.COMMUNITY)){ + tree = disposeAfterTwoLevel(formDTO); + }else if (formDTO.getRootAreaLevel().equals(AreaCodeConstant.PROVINCE) || formDTO.getRootAreaLevel().equals(AreaCodeConstant.CITY) || formDTO.getRootAreaLevel().equals(AreaCodeConstant.DISTRICT)){ + tree = disposeBeforeThreeLevelFinal(formDTO,tree); + } + return tree; + } + + /** + * @Description 省市区三级联动查询 + * @Param + * @author zxc + * @date 2021/1/11 上午9:35 + */ + public List beforeThreeTree(){ + // 查询所有省市区 + List areaCodeDTOS = baseDao.selectAllArea(); + Map> groupByCity = areaCodeDTOS.stream().collect(Collectors.groupingBy(AreaCodeDTO::getCityCode)); + Map> groupByProvince = areaCodeDTOS.stream().collect(Collectors.groupingBy(AreaCodeDTO::getProvinceCode)); + List result = new ArrayList<>(); + List cityResult = new ArrayList<>(); + groupByCity.forEach((c, v) -> { + AreaCodeDictResultDTO cityDto = new AreaCodeDictResultDTO(); + cityDto.setName(v.get(NumConstant.ZERO).getCityName()); + cityDto.setCode(v.get(NumConstant.ZERO).getCityCode()); + cityDto.setParentCode(v.get(NumConstant.ZERO).getProvinceCode()); + List threeResult = new ArrayList<>(); + v.forEach(three -> { + AreaCodeDictResultDTO dto = new AreaCodeDictResultDTO(); + dto.setCode(three.getCountyCode()); + dto.setName(three.getCountyName()); + threeResult.add(dto); + }); + List threeSort = threeResult.stream().sorted(Comparator.comparing(AreaCodeDictResultDTO::getCode)).collect(Collectors.toList()); + cityDto.setChildren(threeSort); + cityResult.add(cityDto); + }); + groupByProvince.forEach((p,v) -> { + AreaCodeDictResultDTO dto = new AreaCodeDictResultDTO(); + dto.setCode(p); + dto.setName(v.get(NumConstant.ZERO).getProvinceName()); + List cityOnceResult = new ArrayList<>(); + cityResult.forEach(c -> { + if (dto.getCode().equals(c.getParentCode())){ + cityOnceResult.add(c); + } + }); + List citySort = cityOnceResult.stream().sorted(Comparator.comparing(AreaCodeDictResultDTO::getCode)).collect(Collectors.toList()); + dto.setChildren(citySort); + result.add(dto); + }); + List collect = result.stream().sorted(Comparator.comparing(AreaCodeDictResultDTO::getCode)).collect(Collectors.toList()); + return collect; + } + + /** + * @Description 街道-社区组织树查询 + * @Param + * @author zxc + * @date 2021/1/11 上午9:48 + */ + public List afterTwoTree(){ + // 查询所有街道、社区 + List areaCodeChildDTOS = childDao.selectAllChild(); + List fourResult = new ArrayList<>(); + // 街道-社区 + Map> groupByLevel = areaCodeChildDTOS.stream().collect(Collectors.groupingBy(AreaCodeChildDTO::getLevel)); + List levelFive = groupByLevel.get(NumConstant.FIVE); + Map> groupByPCode = levelFive.stream().collect(Collectors.groupingBy(AreaCodeChildDTO::getPCode)); + List levelFour = groupByLevel.get(NumConstant.FOUR); + levelFour.forEach(four -> { + AreaCodeDictResultDTO dto = new AreaCodeDictResultDTO(); + dto.setCode(four.getCode()); + dto.setName(four.getName()); + dto.setParentCode(four.getPCode()); + groupByPCode.forEach((pCode,v) -> { + if (dto.getCode().equals(pCode)){ + List fiveResult = new ArrayList<>(); + v.forEach(five -> { + AreaCodeDictResultDTO fiveDto = new AreaCodeDictResultDTO(); + fiveDto.setCode(five.getCode()); + fiveDto.setName(five.getName()); + fiveResult.add(fiveDto); + }); + List fiveSort = fiveResult.stream().sorted(Comparator.comparing(AreaCodeDictResultDTO::getCode)).collect(Collectors.toList()); + dto.setChildren(fiveSort); + } + }); + fourResult.add(dto); + }); + List collect = fourResult.stream().sorted(Comparator.comparing(AreaCodeDictResultDTO::getCode)).collect(Collectors.toList()); + return collect; + } + + /** + * @Description 街道-社区组织树处理 + * @Param form + * @author zxc + * @date 2021/1/11 上午9:58 + */ + public List disposeAfterTwoLevel(AreaCodeDictFormDTO form){ + List result = new ArrayList<>(); + List areaCodeDictResultDTOS = afterTwoTree(); + if (CollectionUtils.isEmpty(areaCodeDictResultDTOS)){ + return new ArrayList<>(); + } + if (form.getRootAreaLevel().equals(AreaCodeConstant.STREET)){ + for (AreaCodeDictResultDTO dto : areaCodeDictResultDTOS) { + if (dto.getCode().equals(form.getRootAreaCode())){ + result.add(dto); + } + } + }else { + for (AreaCodeDictResultDTO dto : areaCodeDictResultDTOS) { + if (!CollectionUtils.isEmpty(dto.getChildren())){ + for (AreaCodeDictResultDTO child : dto.getChildren()) { + if (child.getCode().equals(form.getRootAreaCode())){ + result.add(child); + } + } + } + } + } + return result; + } + + /** + * @Description 省市区获取 + * @Param form + * @Param tree + * @author zxc + * @date 2021/1/12 上午9:22 + */ + public List disposeBeforeThreeLevel(AreaCodeDictFormDTO form,List tree){ + List result = new ArrayList<>(); + if (CollectionUtils.isEmpty(tree)){ + return new ArrayList<>(); + } + if (form.getRootAreaLevel().equals(AreaCodeConstant.PROVINCE)){ + for (AreaCodeDictResultDTO dto : tree) { + if (dto.getCode().equals(form.getRootAreaCode())){ + result.add(dto); + return result; + } + } + }else if (form.getRootAreaLevel().equals(AreaCodeConstant.CITY)){ + for (AreaCodeDictResultDTO dto : tree) { + if (!CollectionUtils.isEmpty(dto.getChildren())){ + for (AreaCodeDictResultDTO city : dto.getChildren()) { + if (city.getCode().equals(form.getRootAreaCode())){ + result.add(city); + return result; + } + } + } + } + }else if (form.getRootAreaLevel().equals(AreaCodeConstant.DISTRICT)){ + for (AreaCodeDictResultDTO dto : tree) { + if (!CollectionUtils.isEmpty(dto.getChildren())){ + for (AreaCodeDictResultDTO city : dto.getChildren()) { + if (!CollectionUtils.isEmpty(city.getChildren())){ + for (AreaCodeDictResultDTO child : city.getChildren()) { + if (child.getCode().equals(form.getRootAreaCode())){ + result.add(child); + return result; + } + } + } + } + } + } + } + return result; + } + + /** + * @Description 拼接 街道-社区 + * @Param form + * @Param tree + * @author zxc + * @date 2021/1/12 上午9:21 + */ + public List disposeBeforeThreeLevelFinal(AreaCodeDictFormDTO form,List tree){ + List threeDto = disposeBeforeThreeLevel(form, tree); + List twoDto = afterTwoTree(); + if (CollectionUtils.isEmpty(threeDto)){ + return new ArrayList<>(); + } + if (!CollectionUtils.isEmpty(twoDto)){ + if (form.getRootAreaLevel().equals(AreaCodeConstant.PROVINCE)){ + for (AreaCodeDictResultDTO dto : tree) { + if (dto.getCode().equals(form.getRootAreaCode())){ + if (!CollectionUtils.isEmpty(dto.getChildren())){ + for (AreaCodeDictResultDTO city : dto.getChildren()) { + if (!CollectionUtils.isEmpty(city.getChildren())){ + for (AreaCodeDictResultDTO child : city.getChildren()) { + List areaList = new ArrayList<>(); + for (AreaCodeDictResultDTO area : twoDto) { + if (child.getCode().equals(area.getParentCode())){ + areaList.add(area); + } + } + child.setChildren(areaList); + } + } + } + } + } + } + }else if (form.getRootAreaLevel().equals(AreaCodeConstant.CITY)){ + for (AreaCodeDictResultDTO dto : threeDto) { + if (!CollectionUtils.isEmpty(dto.getChildren())){ + for (AreaCodeDictResultDTO child : dto.getChildren()) { + List areaList = new ArrayList<>(); + for (AreaCodeDictResultDTO area : twoDto) { + if (child.getCode().equals(area.getParentCode())){ + areaList.add(area); + } + } + child.setChildren(areaList); + } + } + } + }else{ + for (AreaCodeDictResultDTO dto : threeDto) { + List areaList = new ArrayList<>(); + for (AreaCodeDictResultDTO area : twoDto) { + if (dto.getCode().equals(area.getParentCode())){ + areaList.add(area); + } + } + dto.setChildren(areaList); + } + } + } + return threeDto; + } } \ No newline at end of file