| | |
| | | |
| | | @Override |
| | | public List<SgProjectTreeVO> projectTree(ProjectSearchDTO dto) { |
| | | List<String> sgCodeS = getSgCodeByUser(); |
| | | dto.setSgCodeS(sgCodeS); |
| | | List<SgProjectTreeVO> list = sgProjectInfoMapper.projectTree(dto); |
| | | if (CollectionUtils.isNotEmpty(list)){ |
| | | // 按省、市、县分组 |
| | | Map<String, Map<String, Map<String, List<SgProjectTreeVO>>>> groupedProjects = list.stream() |
| | | .collect(Collectors.groupingBy(SgProjectTreeVO::getProvinceNm, |
| | | Collectors.groupingBy(SgProjectTreeVO::getCityNm, |
| | | Collectors.groupingBy(SgProjectTreeVO::getCountyNm)))); |
| | | |
| | | // 构建树结构 |
| | | List<SgProjectTreeVO> result = new ArrayList<>(); |
| | | for (Map.Entry<String, Map<String, Map<String, List<SgProjectTreeVO>>>> provinceEntry : groupedProjects.entrySet()) { |
| | | String province = provinceEntry.getKey(); |
| | | Map<String, Map<String, List<SgProjectTreeVO>>> cityMap = provinceEntry.getValue(); |
| | | |
| | | SgProjectTreeVO provinceNode = new SgProjectTreeVO(); |
| | | provinceNode.setProvinceNm(province); |
| | | provinceNode.setId(UUID.randomUUID().toString().replace("-","")); |
| | | provinceNode.setRegionName(province); |
| | | provinceNode.setChildList(new ArrayList<>()); |
| | | long provinceNum = 0; |
| | | for (Map.Entry<String, Map<String, List<SgProjectTreeVO>>> cityEntry : cityMap.entrySet()) { |
| | | String city = cityEntry.getKey(); |
| | | Map<String, List<SgProjectTreeVO>> countyMap = cityEntry.getValue(); |
| | | |
| | | SgProjectTreeVO cityNode = new SgProjectTreeVO(); |
| | | List<String> cityIds = new ArrayList<>(); |
| | | cityNode.setCityNm(city); |
| | | cityNode.setId(UUID.randomUUID().toString().replace("-","")); |
| | | cityNode.setRegionName(city); |
| | | cityNode.setChildList(new ArrayList<>()); |
| | | |
| | | for (Map.Entry<String, List<SgProjectTreeVO>> countyEntry : countyMap.entrySet()) { |
| | | String county = countyEntry.getKey(); |
| | | List<SgProjectTreeVO> countyProjects = countyEntry.getValue(); |
| | | for (SgProjectTreeVO countyProject : countyProjects) { |
| | | countyProject.setRegionName(countyProject.getResNm()); |
| | | // 按省、片区、市、县、乡镇分组 |
| | | Map<String, Map<String, Map<String, Map<String, Map<String, List<SgProjectTreeVO>>>>>> groupedProjects = list.stream() |
| | | .collect( |
| | | Collectors.groupingBy(SgProjectTreeVO::getProvinceNm, |
| | | Collectors.groupingBy(SgProjectTreeVO::getLot, |
| | | Collectors.groupingBy(SgProjectTreeVO::getCityNm, |
| | | Collectors.groupingBy(SgProjectTreeVO::getCountyNm, |
| | | Collectors.groupingBy(SgProjectTreeVO::getTownNm |
| | | )))))); |
| | | List<SgProjectTreeVO> tree = new ArrayList<>(); |
| | | for (Map.Entry<String, Map<String, Map<String, Map<String, Map<String, List<SgProjectTreeVO>>>>>> provinceEntry : groupedProjects.entrySet()) { |
| | | SgProjectTreeVO provinceNode = new SgProjectTreeVO(); |
| | | provinceNode.setProvinceNm(provinceEntry.getKey()); |
| | | provinceNode.setRegionName(provinceEntry.getKey()); |
| | | provinceNode.setId(UUID.randomUUID().toString().replace("-","")); |
| | | provinceNode.setLevel(1); |
| | | List<SgProjectTreeVO> provinceChildren = new ArrayList<>(); |
| | | for (Map.Entry<String, Map<String, Map<String, Map<String, List<SgProjectTreeVO>>>>> lotEntry : provinceEntry.getValue().entrySet()) { |
| | | SgProjectTreeVO lotNode = new SgProjectTreeVO(); |
| | | List<String> lotIds = new ArrayList<>(); |
| | | lotNode.setLot(lotEntry.getKey()); |
| | | lotNode.setRegionName(lotEntry.getKey()); |
| | | lotNode.setId(UUID.randomUUID().toString().replace("-","")); |
| | | lotNode.setLevel(2); |
| | | List<SgProjectTreeVO> lotChildren = new ArrayList<>(); |
| | | for (Map.Entry<String, Map<String, Map<String, List<SgProjectTreeVO>>>> cityEntry : lotEntry.getValue().entrySet()) { |
| | | SgProjectTreeVO cityNode = new SgProjectTreeVO(); |
| | | List<String> cityIds = new ArrayList<>(); |
| | | cityNode.setCityNm(cityEntry.getKey()); |
| | | cityNode.setRegionName(cityEntry.getKey()); |
| | | cityNode.setId(UUID.randomUUID().toString().replace("-","")); |
| | | cityNode.setLevel(3); |
| | | List<SgProjectTreeVO> cityChildren = new ArrayList<>(); |
| | | for (Map.Entry<String, Map<String, List<SgProjectTreeVO>>> countyEntry : cityEntry.getValue().entrySet()) { |
| | | SgProjectTreeVO countyNode = new SgProjectTreeVO(); |
| | | List<String> countyIds = new ArrayList<>(); |
| | | countyNode.setCountyNm(countyEntry.getKey()); |
| | | countyNode.setRegionName(countyEntry.getKey()); |
| | | countyNode.setId(UUID.randomUUID().toString().replace("-","")); |
| | | countyNode.setLevel(4); |
| | | List<SgProjectTreeVO> countyChildren = new ArrayList<>(); |
| | | for (Map.Entry<String, List<SgProjectTreeVO>> townEntry : countyEntry.getValue().entrySet()) { |
| | | SgProjectTreeVO townNode = new SgProjectTreeVO(); |
| | | townNode.setTownNm(townEntry.getKey()); |
| | | townNode.setRegionName(townEntry.getKey()); |
| | | townNode.setChildList(townEntry.getValue()); |
| | | townNode.setChildNum((long) townEntry.getValue().size()); |
| | | townNode.setId(UUID.randomUUID().toString().replace("-","")); |
| | | townNode.setLevel(5); |
| | | townNode.setProjectIds(townEntry.getValue().stream().map(SgProjectTreeVO::getId).collect(Collectors.toList())); |
| | | countyIds.addAll(townNode.getProjectIds()); |
| | | countyChildren.add(townNode); |
| | | } |
| | | countyNode.setChildNum(countyChildren.stream().mapToLong(SgProjectTreeVO::getChildNum).sum()); |
| | | countyNode.setChildList(countyChildren); |
| | | countyNode.setProjectIds(countyIds); |
| | | cityIds.addAll(countyIds); |
| | | cityChildren.add(countyNode); |
| | | } |
| | | cityNode.setChildNum(cityChildren.stream().mapToLong(SgProjectTreeVO::getChildNum).sum()); |
| | | cityNode.setChildList(cityChildren); |
| | | cityNode.setProjectIds(cityIds); |
| | | lotIds.addAll(cityIds); |
| | | lotChildren.add(cityNode); |
| | | } |
| | | lotNode.setChildNum(lotChildren.stream().mapToLong(SgProjectTreeVO::getChildNum).sum()); |
| | | lotNode.setChildList(lotChildren); |
| | | lotNode.setProjectIds(lotIds); |
| | | provinceChildren.add(lotNode); |
| | | } |
| | | SgProjectTreeVO countyNode = new SgProjectTreeVO(); |
| | | countyNode.setCountyNm(county); |
| | | countyNode.setRegionName(county); |
| | | countyNode.setId(UUID.randomUUID().toString().replace("-","")); |
| | | countyNode.setChildList(new ArrayList<>(countyProjects)); |
| | | countyNode.setChildNum((long) countyProjects.size()); |
| | | countyNode.setProjectIds(countyProjects.stream().map(SgProjectTreeVO::getId).collect(Collectors.toList())); |
| | | cityIds.addAll(countyNode.getProjectIds()); |
| | | cityNode.getChildList().add(countyNode); |
| | | provinceNode.setChildNum(provinceChildren.stream().mapToLong(SgProjectTreeVO::getChildNum).sum()); |
| | | provinceNode.setChildList(provinceChildren); |
| | | tree.add(provinceNode); |
| | | } |
| | | |
| | | cityNode.setChildNum((long) cityIds.size()); |
| | | cityNode.setProjectIds(cityIds); |
| | | provinceNode.getChildList().add(cityNode); |
| | | provinceNum+= (long) cityIds.size(); |
| | | } |
| | | |
| | | provinceNode.setChildNum(provinceNum); |
| | | result.add(provinceNode); |
| | | } |
| | | return result; |
| | | return tree; |
| | | } |
| | | return new ArrayList<>(); |
| | | } |