From 3b51726b583c5a047b873b915d25197d02d08586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=92=BE=E9=85=92?= Date: Mon, 28 Oct 2024 00:23:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=8E=B7=E5=8F=96=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E8=A1=8C=E6=94=BF=E5=8C=BA=E5=88=92=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/project/ProjectController.java | 6 +- .../project/service/IProjectService.java | 2 +- .../service/impl/ProjectServiceImpl.java | 111 +++++++++--------- 3 files changed, 61 insertions(+), 58 deletions(-) diff --git a/fastbee-open-api/src/main/java/com/fastbee/data/controller/project/ProjectController.java b/fastbee-open-api/src/main/java/com/fastbee/data/controller/project/ProjectController.java index c6dcd71..f621a69 100644 --- a/fastbee-open-api/src/main/java/com/fastbee/data/controller/project/ProjectController.java +++ b/fastbee-open-api/src/main/java/com/fastbee/data/controller/project/ProjectController.java @@ -143,9 +143,9 @@ public class ProjectController extends BaseController /** * 查询项目的行政区划树状列表 */ - @GetMapping("/areaTree/{projectId}/{reachLevel}") + @GetMapping("/areaTree/{projectId}/{startLevel}") @ApiOperation("查询项目的行政区划树状列表") - public AjaxResult getProjectAreaTree(@PathVariable("projectId") Long projectId, @PathVariable("reachLevel") Integer reachLevel){ - return success(projectService.getProjectAreaTree(projectId, reachLevel)); + public AjaxResult getProjectAreaTree(@PathVariable("projectId") Long projectId, @PathVariable("startLevel") Integer startLevel){ + return success(projectService.getProjectAreaTree(projectId, startLevel)); } } diff --git a/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/IProjectService.java b/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/IProjectService.java index 16d3772..31aea42 100644 --- a/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/IProjectService.java +++ b/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/IProjectService.java @@ -78,5 +78,5 @@ public interface IProjectService * 获取项目行政区域列表 * @return 行政区域列表 */ - List getProjectAreaTree(Long projectId,Integer reachLevel); + List getProjectAreaTree(Long projectId,Integer startLevel); } diff --git a/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/impl/ProjectServiceImpl.java b/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/impl/ProjectServiceImpl.java index 6b29642..13a8f5d 100644 --- a/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/impl/ProjectServiceImpl.java +++ b/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/impl/ProjectServiceImpl.java @@ -27,7 +27,6 @@ import java.util.stream.Collectors; /** * 项目Service业务层处理 - * * @author kerwincui * @date 2024-09-26 */ @@ -81,13 +80,14 @@ public class ProjectServiceImpl implements IProjectService */ @Override public int insertProject(Project project) - { //判断选择的机构下是否已经绑定项目 -// List projectList = new LambdaQueryChainWrapper<>(projectMapper) -// .select(Project::getId, Project::getProjectName) -// .eq(Project::getDeptId, project.getDeptId()).list(); -// if(!projectList.isEmpty()){ -// throw new ServiceException("该机构下已经存在项目"); -// } + { + //判断选择的机构下是否已经绑定项目 + List projectList = new LambdaQueryChainWrapper<>(projectMapper) + .select(Project::getId, Project::getProjectName) + .eq(Project::getDeptId, project.getDeptId()).list(); + if(!projectList.isEmpty()){ + throw new ServiceException("该机构下已经存在项目"); + } //项目行政区域处理 //拆解项目行政区域代码信息 if(StringUtils.isBlank(project.getAdministrativeAreaCode())){ @@ -230,8 +230,9 @@ public class ProjectServiceImpl implements IProjectService .list(); //遍历项目,把已绑定项目的机构从机构列表中移除 for (Project project : projectList) { - if (Objects.nonNull(project.getDeptId())) - sysDeptList.removeIf(sysDept -> sysDept.getDeptId().equals(project.getDeptId())); + if (Objects.nonNull(project.getDeptId())) { + sysDeptList.removeIf(sysDept -> sysDept.getDeptId().equals(project.getDeptId())); + } } return sysDeptList; } @@ -283,6 +284,27 @@ public class ProjectServiceImpl implements IProjectService //判断项目的省、市、县、镇、村行政区划列表数据不为null isProvinceCodeBlank(project); + List administrativeCodeList = getTownAndvillageCodeList(project,startLevel); + + //查询项目所属县下面的所有镇、村行政区划列表 + List projectDistrictList; + LambdaQueryChainWrapper sysDistrictLambdaQueryChainWrapper = new LambdaQueryChainWrapper<>(sysDistrictMapper) + .select(SysDistrict::getId, SysDistrict::getParentId, SysDistrict::getName, SysDistrict::getAdcode, + SysDistrict::getLevel, SysDistrict::getFullName, SysDistrict::getName + , SysDistrict::getLng, SysDistrict::getLat); + + //限制行政区划级别 + projectDistrictList = sysDistrictLambdaQueryChainWrapper + .in(SysDistrict::getAdcode,administrativeCodeList) + .list(); + + System.err.println("项目所属县下面的所有镇、村行政区划列表"); + System.err.println(projectDistrictList); + //构建树状结构 + return buildTree(projectDistrictList); + } + + private static List getTownAndvillageCodeList(Project project,Integer startLevel) { //查询项目的省、市、县、镇、村行政区划列表数据 //目前项目下面的镇或者村都可以多选划分成一个项目 //找到项目行政区划开始多选的级别 @@ -292,6 +314,8 @@ public class ProjectServiceImpl implements IProjectService if (!provinceCodeList.stream().allMatch(provinceCode -> provinceCode.equals(provinceCodeList.get(0)))) { throw new ServiceException("项目省级行政区划只能包含一个省!"); } + //省去重 + List distinctProvinceCodeList = provinceCodeList.stream().distinct().collect(Collectors.toList()); //判断市是否多选 JSONArray cityCodeList = JSONUtil.parseArray(project.getCityCode()); @@ -299,67 +323,46 @@ public class ProjectServiceImpl implements IProjectService if (!cityCodeList.stream().allMatch(cityCode -> cityCode.equals(cityCodeList.get(0)))) { throw new ServiceException("项目市级行政区划只能包含一个市!"); } + //市去重 + List distinctCityCodeList = cityCodeList.stream().distinct().collect(Collectors.toList()); + //判断县是否多选 JSONArray countyCodeList = JSONUtil.parseArray(project.getCountyCode()); //判断集合中的元素值都相等则说明县未多选 if (!countyCodeList.stream().allMatch(countyCode -> countyCode.equals(countyCodeList.get(0)))) { throw new ServiceException("项目县级行政区划只能包含一个县!"); } + //县去重 + List distinctcCountyCodeList= countyCodeList.stream().distinct().collect(Collectors.toList()); + //判断镇是否多选 JSONArray townCodeList = JSONUtil.parseArray(project.getTownCode()); //判断集合中的元素值都相等则说明镇未多选 - List distinctTownCodeList = new ArrayList<>(); -// if (!townCodeList.stream().allMatch(townCode -> townCode.equals(townCodeList.get(0)))) { - //找出选择了哪些镇,给元素去重 - distinctTownCodeList = townCodeList.stream().distinct().collect(Collectors.toList()); - -// } + List distinctTownCodeList; + distinctTownCodeList = townCodeList.stream().distinct().collect(Collectors.toList()); JSONArray villageCodeList = JSONUtil.parseArray(project.getVillageCode()); System.err.println("镇行政区划代码"); System.err.println(distinctTownCodeList); System.err.println("村行政区划代码"); System.err.println(villageCodeList); - //合并镇、村行政区划代码集合 - List townAndvillageCodeList = new ArrayList<>(); - townAndvillageCodeList.addAll(distinctTownCodeList); - townAndvillageCodeList.addAll(villageCodeList); + //合并省、市、县、镇、村行政区划代码集合 + List administrativeCodeList = new ArrayList<>(); + int[] startLevels = {1, 2, 3, 4, 5}; + List> distinctCodeLists = Arrays.asList(distinctProvinceCodeList, distinctCityCodeList, distinctcCountyCodeList, distinctTownCodeList, villageCodeList); + + for (int i = 0; i < startLevels.length; i++) { + if (startLevel <= startLevels[i]) { + for (int j = i; j < distinctCodeLists.size(); j++) { + administrativeCodeList.addAll(distinctCodeLists.get(j)); + } + break; + } + } System.err.println("合并后镇、村行政区划代码"); - System.err.println(townAndvillageCodeList); - - //查询项目所属县下面的所有镇、村行政区划列表 - List projectDistrictList =new ArrayList<>(); - LambdaQueryChainWrapper sysDistrictLambdaQueryChainWrapper = new LambdaQueryChainWrapper<>(sysDistrictMapper) - .select(SysDistrict::getId, SysDistrict::getParentId, SysDistrict::getName, SysDistrict::getAdcode, - SysDistrict::getLevel, SysDistrict::getFullName, SysDistrict::getName - , SysDistrict::getLng, SysDistrict::getLat); -// List administrativeDivisionLevelList=new ArrayList<>(); -// //倒叙循环reachLevel次 -// for (int i = startLevel;i<6; i++) { -// administrativeDivisionLevelList.add(i); -// } - //限制行政区划级别 - projectDistrictList = sysDistrictLambdaQueryChainWrapper -// .in(SysDistrict::getLevel, administrativeDivisionLevelList) - -// .eq(SysDistrict::getParentId, countyCodeList.get(0)) -// .in(SysDistrict::getAdcode,townAndvillageCodeList) - .list(); - //过滤掉非项目行政区划的省份数据 - projectDistrictList = projectDistrictList.stream(). - filter(sysDistrict -> ( - sysDistrict.getAdcode().toString().equals(provinceCodeList.get(0).toString()) - && sysDistrict.getParentId()==null -// ||!sysDistrict.getAdcode().equals(cityCodeList.get(0)) -// ||!sysDistrict.getAdcode().equals(countyCodeList.get(0)) - ) - ) - .collect(Collectors.toList()); - System.err.println("项目所属县下面的所有镇、村行政区划列表"); - System.err.println(projectDistrictList); - //构建树状结构 - return buildTree(projectDistrictList); + System.err.println(administrativeCodeList); + return administrativeCodeList; } private static void isProvinceCodeBlank(Project project) {