优化获取项目行政区划接口逻辑
This commit is contained in:
parent
c19a08f78c
commit
3b51726b58
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -78,5 +78,5 @@ public interface IProjectService
|
||||
* 获取项目行政区域列表
|
||||
* @return 行政区域列表
|
||||
*/
|
||||
List<SysDistrict> getProjectAreaTree(Long projectId,Integer reachLevel);
|
||||
List<SysDistrict> getProjectAreaTree(Long projectId,Integer startLevel);
|
||||
}
|
||||
|
@ -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<Project> projectList = new LambdaQueryChainWrapper<>(projectMapper)
|
||||
// .select(Project::getId, Project::getProjectName)
|
||||
// .eq(Project::getDeptId, project.getDeptId()).list();
|
||||
// if(!projectList.isEmpty()){
|
||||
// throw new ServiceException("该机构下已经存在项目");
|
||||
// }
|
||||
{
|
||||
//判断选择的机构下是否已经绑定项目
|
||||
List<Project> 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<Object> administrativeCodeList = getTownAndvillageCodeList(project,startLevel);
|
||||
|
||||
//查询项目所属县下面的所有镇、村行政区划列表
|
||||
List<SysDistrict> projectDistrictList;
|
||||
LambdaQueryChainWrapper<SysDistrict> 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<Object> 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<Object> 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<Object> 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<Object> distinctcCountyCodeList= countyCodeList.stream().distinct().collect(Collectors.toList());
|
||||
|
||||
//判断镇是否多选
|
||||
JSONArray townCodeList = JSONUtil.parseArray(project.getTownCode());
|
||||
//判断集合中的元素值都相等则说明镇未多选
|
||||
List<Object> distinctTownCodeList = new ArrayList<>();
|
||||
// if (!townCodeList.stream().allMatch(townCode -> townCode.equals(townCodeList.get(0)))) {
|
||||
//找出选择了哪些镇,给元素去重
|
||||
distinctTownCodeList = townCodeList.stream().distinct().collect(Collectors.toList());
|
||||
|
||||
// }
|
||||
List<Object> 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<Object> townAndvillageCodeList = new ArrayList<>();
|
||||
townAndvillageCodeList.addAll(distinctTownCodeList);
|
||||
townAndvillageCodeList.addAll(villageCodeList);
|
||||
//合并省、市、县、镇、村行政区划代码集合
|
||||
List<Object> administrativeCodeList = new ArrayList<>();
|
||||
int[] startLevels = {1, 2, 3, 4, 5};
|
||||
List<List<Object>> 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<SysDistrict> projectDistrictList =new ArrayList<>();
|
||||
LambdaQueryChainWrapper<SysDistrict> sysDistrictLambdaQueryChainWrapper = new LambdaQueryChainWrapper<>(sysDistrictMapper)
|
||||
.select(SysDistrict::getId, SysDistrict::getParentId, SysDistrict::getName, SysDistrict::getAdcode,
|
||||
SysDistrict::getLevel, SysDistrict::getFullName, SysDistrict::getName
|
||||
, SysDistrict::getLng, SysDistrict::getLat);
|
||||
// List<Integer> 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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user