优化获取项目行政区划接口逻辑
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("查询项目的行政区划树状列表")
|
@ApiOperation("查询项目的行政区划树状列表")
|
||||||
public AjaxResult getProjectAreaTree(@PathVariable("projectId") Long projectId, @PathVariable("reachLevel") Integer reachLevel){
|
public AjaxResult getProjectAreaTree(@PathVariable("projectId") Long projectId, @PathVariable("startLevel") Integer startLevel){
|
||||||
return success(projectService.getProjectAreaTree(projectId, reachLevel));
|
return success(projectService.getProjectAreaTree(projectId, startLevel));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,5 +78,5 @@ public interface IProjectService
|
|||||||
* 获取项目行政区域列表
|
* 获取项目行政区域列表
|
||||||
* @return 行政区域列表
|
* @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业务层处理
|
* 项目Service业务层处理
|
||||||
*
|
|
||||||
* @author kerwincui
|
* @author kerwincui
|
||||||
* @date 2024-09-26
|
* @date 2024-09-26
|
||||||
*/
|
*/
|
||||||
@ -81,13 +80,14 @@ public class ProjectServiceImpl implements IProjectService
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int insertProject(Project project)
|
public int insertProject(Project project)
|
||||||
{ //判断选择的机构下是否已经绑定项目
|
{
|
||||||
// List<Project> projectList = new LambdaQueryChainWrapper<>(projectMapper)
|
//判断选择的机构下是否已经绑定项目
|
||||||
// .select(Project::getId, Project::getProjectName)
|
List<Project> projectList = new LambdaQueryChainWrapper<>(projectMapper)
|
||||||
// .eq(Project::getDeptId, project.getDeptId()).list();
|
.select(Project::getId, Project::getProjectName)
|
||||||
// if(!projectList.isEmpty()){
|
.eq(Project::getDeptId, project.getDeptId()).list();
|
||||||
// throw new ServiceException("该机构下已经存在项目");
|
if(!projectList.isEmpty()){
|
||||||
// }
|
throw new ServiceException("该机构下已经存在项目");
|
||||||
|
}
|
||||||
//项目行政区域处理
|
//项目行政区域处理
|
||||||
//拆解项目行政区域代码信息
|
//拆解项目行政区域代码信息
|
||||||
if(StringUtils.isBlank(project.getAdministrativeAreaCode())){
|
if(StringUtils.isBlank(project.getAdministrativeAreaCode())){
|
||||||
@ -230,8 +230,9 @@ public class ProjectServiceImpl implements IProjectService
|
|||||||
.list();
|
.list();
|
||||||
//遍历项目,把已绑定项目的机构从机构列表中移除
|
//遍历项目,把已绑定项目的机构从机构列表中移除
|
||||||
for (Project project : projectList) {
|
for (Project project : projectList) {
|
||||||
if (Objects.nonNull(project.getDeptId()))
|
if (Objects.nonNull(project.getDeptId())) {
|
||||||
sysDeptList.removeIf(sysDept -> sysDept.getDeptId().equals(project.getDeptId()));
|
sysDeptList.removeIf(sysDept -> sysDept.getDeptId().equals(project.getDeptId()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return sysDeptList;
|
return sysDeptList;
|
||||||
}
|
}
|
||||||
@ -283,6 +284,27 @@ public class ProjectServiceImpl implements IProjectService
|
|||||||
//判断项目的省、市、县、镇、村行政区划列表数据不为null
|
//判断项目的省、市、县、镇、村行政区划列表数据不为null
|
||||||
isProvinceCodeBlank(project);
|
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)))) {
|
if (!provinceCodeList.stream().allMatch(provinceCode -> provinceCode.equals(provinceCodeList.get(0)))) {
|
||||||
throw new ServiceException("项目省级行政区划只能包含一个省!");
|
throw new ServiceException("项目省级行政区划只能包含一个省!");
|
||||||
}
|
}
|
||||||
|
//省去重
|
||||||
|
List<Object> distinctProvinceCodeList = provinceCodeList.stream().distinct().collect(Collectors.toList());
|
||||||
|
|
||||||
//判断市是否多选
|
//判断市是否多选
|
||||||
JSONArray cityCodeList = JSONUtil.parseArray(project.getCityCode());
|
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)))) {
|
if (!cityCodeList.stream().allMatch(cityCode -> cityCode.equals(cityCodeList.get(0)))) {
|
||||||
throw new ServiceException("项目市级行政区划只能包含一个市!");
|
throw new ServiceException("项目市级行政区划只能包含一个市!");
|
||||||
}
|
}
|
||||||
|
//市去重
|
||||||
|
List<Object> distinctCityCodeList = cityCodeList.stream().distinct().collect(Collectors.toList());
|
||||||
|
|
||||||
//判断县是否多选
|
//判断县是否多选
|
||||||
JSONArray countyCodeList = JSONUtil.parseArray(project.getCountyCode());
|
JSONArray countyCodeList = JSONUtil.parseArray(project.getCountyCode());
|
||||||
//判断集合中的元素值都相等则说明县未多选
|
//判断集合中的元素值都相等则说明县未多选
|
||||||
if (!countyCodeList.stream().allMatch(countyCode -> countyCode.equals(countyCodeList.get(0)))) {
|
if (!countyCodeList.stream().allMatch(countyCode -> countyCode.equals(countyCodeList.get(0)))) {
|
||||||
throw new ServiceException("项目县级行政区划只能包含一个县!");
|
throw new ServiceException("项目县级行政区划只能包含一个县!");
|
||||||
}
|
}
|
||||||
|
//县去重
|
||||||
|
List<Object> distinctcCountyCodeList= countyCodeList.stream().distinct().collect(Collectors.toList());
|
||||||
|
|
||||||
//判断镇是否多选
|
//判断镇是否多选
|
||||||
JSONArray townCodeList = JSONUtil.parseArray(project.getTownCode());
|
JSONArray townCodeList = JSONUtil.parseArray(project.getTownCode());
|
||||||
//判断集合中的元素值都相等则说明镇未多选
|
//判断集合中的元素值都相等则说明镇未多选
|
||||||
List<Object> distinctTownCodeList = new ArrayList<>();
|
List<Object> distinctTownCodeList;
|
||||||
// if (!townCodeList.stream().allMatch(townCode -> townCode.equals(townCodeList.get(0)))) {
|
|
||||||
//找出选择了哪些镇,给元素去重
|
|
||||||
distinctTownCodeList = townCodeList.stream().distinct().collect(Collectors.toList());
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
distinctTownCodeList = townCodeList.stream().distinct().collect(Collectors.toList());
|
||||||
JSONArray villageCodeList = JSONUtil.parseArray(project.getVillageCode());
|
JSONArray villageCodeList = JSONUtil.parseArray(project.getVillageCode());
|
||||||
|
|
||||||
System.err.println("镇行政区划代码");
|
System.err.println("镇行政区划代码");
|
||||||
System.err.println(distinctTownCodeList);
|
System.err.println(distinctTownCodeList);
|
||||||
System.err.println("村行政区划代码");
|
System.err.println("村行政区划代码");
|
||||||
System.err.println(villageCodeList);
|
System.err.println(villageCodeList);
|
||||||
//合并镇、村行政区划代码集合
|
//合并省、市、县、镇、村行政区划代码集合
|
||||||
List<Object> townAndvillageCodeList = new ArrayList<>();
|
List<Object> administrativeCodeList = new ArrayList<>();
|
||||||
townAndvillageCodeList.addAll(distinctTownCodeList);
|
int[] startLevels = {1, 2, 3, 4, 5};
|
||||||
townAndvillageCodeList.addAll(villageCodeList);
|
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("合并后镇、村行政区划代码");
|
||||||
System.err.println(townAndvillageCodeList);
|
System.err.println(administrativeCodeList);
|
||||||
|
return administrativeCodeList;
|
||||||
//查询项目所属县下面的所有镇、村行政区划列表
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void isProvinceCodeBlank(Project project) {
|
private static void isProvinceCodeBlank(Project project) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user