添加新增行政区域接口参数校验,,优化获取行政区域树状列表逻辑。完善添加站点行区域信息校验逻辑等

This commit is contained in:
mi9688 2024-10-29 13:21:37 +08:00
parent 5b2ea1f01b
commit 476e766342
2 changed files with 104 additions and 40 deletions

View File

@ -87,10 +87,11 @@ public class GSitesServiceImpl extends ServiceImpl<GSiteGroupsMapper,GSiteGroups
if (StringUtils.isBlank(gGroupSiteDto.getAreaCode())) {
throw new ServiceException("请选择行政区域!");
}
//行政区完整编码校验
if(StringUtils.isBlank(gGroupSiteDto.getFullAreaCode())){
throw new ServiceException("请提交行政区域完整编码!");
}
//未上传站点地图json数据
//站点图标校验
if(StringUtils.isBlank(gGroupSiteDto.getIcon())){
throw new ServiceException("请选择站点图标!");
}

View File

@ -65,9 +65,65 @@ public class SysDistrictServiceImpl implements ISysDistrictService
@Override
public int insertSysDistrict(SysDistrict sysDistrict)
{
//校验必填项adCode
if(Objects.isNull(sysDistrict.getAdcode())){
throw new ServiceException("行政区划编码不能为空!");
}
//检验adCode不能重复
List<SysDistrict> sysDistrictList = new LambdaQueryChainWrapper<>(sysDistrictMapper).select(SysDistrict::getId)
.eq(SysDistrict::getAdcode, sysDistrict.getAdcode()).list();
if(!sysDistrictList.isEmpty()){
throw new ServiceException("行政区划编码重复!");
}
//校验adCode长度
if(sysDistrict.getAdcode().toString().trim().length() != 12){
throw new ServiceException("行政区划编码长度必须为12位数字");
}
//校验必填项name
if(StringUtils.isBlank(sysDistrict.getName())){
throw new ServiceException("行政区划名称不能为空!");
}
//校验必填项level
if(Objects.isNull(sysDistrict.getLevel())){
throw new ServiceException("行政区划级别不能为空!");
}
//是否上传行政区划
String mapOutlineUrl = sysDistrict.getMapOutlineUrl();
//未上传行政区划轮廓不做处理
if(StringUtils.isBlank(mapOutlineUrl)){
return sysDistrictMapper.insertSysDistrict(sysDistrict);
}
verifySaveJsonData(sysDistrict, mapOutlineUrl);
return sysDistrictMapper.insertSysDistrict(sysDistrict);
}
/**
* 验证并保存轮廓json数据
* @param mapOutlineUrl 地图轮廓json文件访问uel
*/
private void verifySaveJsonData(SysDistrict sysDistrict, String mapOutlineUrl) {
//行政区划轮廓json文件url必须是绝对完整
if(!(mapOutlineUrl.contains("http://") || mapOutlineUrl.contains("https://"))){
throw new ServiceException("行政区划轮廓json文件url不正确");
}
//上传行政区划轮廓进行数据处理
String jsonData = HttpUtil.get(mapOutlineUrl);
System.err.println("获取到行政区划轮廓json:"+jsonData);
//读取文件内容
if (Objects.isNull(jsonData)) {
throw new ServiceException("上传行政区划地图轮廓json数据为空");
}
//校验文件内容是否是json格式
if (!isValidJson(jsonData)) {
throw new ServiceException("json格式不正确");
}
//保存相对路径
int startIndex = mapOutlineUrl.indexOf("/profile/upload/");
String relativeUrl = mapOutlineUrl.substring(startIndex);
sysDistrict.setMapOutlineUrl(relativeUrl);
sysDistrict.setMapOutline(jsonData);
}
/**
* 修改行政区划
*/
@ -79,25 +135,8 @@ public class SysDistrictServiceImpl implements ISysDistrictService
if(StringUtils.isBlank(mapOutlineUrl)){
return sysDistrictMapper.updateSysDistrict(sysDistrict);
}
//判断行政区划轮廓json文件路url是否是完整url还是相对url
if((mapOutlineUrl.contains("http://") || mapOutlineUrl.contains("https://"))){
//如果不是是相对url则代表修改过行政区划轮廓数据
String jsonData = HttpUtil.get(mapOutlineUrl);
System.err.println("获取到行政区划轮廓json:"+jsonData);
//读取文件内容
if (Objects.isNull(jsonData)) {
throw new ServiceException("上传行政区划地图轮廓json数据为空");
}
//校验文件内容是否是json格式
if (!isValidJson(jsonData)) {
throw new ServiceException("json格式不正确");
}
int startIndex = mapOutlineUrl.indexOf("/profile/upload/");
String relativeUrl = mapOutlineUrl.substring(startIndex);
sysDistrict.setMapOutlineUrl(relativeUrl);
sysDistrict.setMapOutline(jsonData);
}
verifySaveJsonData(sysDistrict, mapOutlineUrl);
return sysDistrictMapper.updateSysDistrict(sysDistrict);
}
@ -132,22 +171,7 @@ public class SysDistrictServiceImpl implements ISysDistrictService
return sysDistrictMapper.deleteSysDistrictById(id);
}
/**
* 查询行政区划树状列表
*/
@Override
public List<SysDistrict> selectSysDistrictTree(Integer level) {
System.err.println("等级:level:"+level);
//计算查询用时
long startTime = System.currentTimeMillis();
List<SysDistrict> sysDistrictList = new LambdaQueryChainWrapper<>(sysDistrictMapper)
.select(SysDistrict::getId,SysDistrict::getAdcode, SysDistrict::getParentId, SysDistrict::getName,
SysDistrict::getFullName )
.ge(Objects.nonNull(level),SysDistrict::getLevel, level)
.list();
System.err.println("查询用时:"+(System.currentTimeMillis()-startTime));
return buildTree(sysDistrictList);
}
/**
* 查询指定地区行政区划树状列表
*/
@ -178,23 +202,62 @@ public class SysDistrictServiceImpl implements ISysDistrictService
return Collections.singletonList(sysDistricts.get(0));
}
/**
* 查询行政区划树状列表
*/
@Override
public List<SysDistrict> selectSysDistrictTree(Integer level) {
System.err.println("等级:level:"+level);
//计算查询用时
long startTime = System.currentTimeMillis();
List<SysDistrict> sysDistrictList = new LambdaQueryChainWrapper<>(sysDistrictMapper)
.select(SysDistrict::getId,SysDistrict::getAdcode, SysDistrict::getParentId,SysDistrict::getLevel,
SysDistrict::getName, SysDistrict::getFullName )
.ge(Objects.nonNull(level),SysDistrict::getLevel, level)
.list();
System.err.println("查询用时:"+(System.currentTimeMillis()-startTime));
return buildTree(sysDistrictList);
}
private List<SysDistrict> buildTree(List<SysDistrict> SysDistricts) {
Map<Long, SysDistrict> map = new HashMap<>();
List<SysDistrict> roots = new ArrayList<>();
for (SysDistrict sysDistrict : SysDistricts) {
map.put(sysDistrict.getAdcode(), sysDistrict);
//处理直辖市情况
if (!map.containsKey(sysDistrict.getAdcode())) {
map.put(sysDistrict.getAdcode(), sysDistrict);
}
}
return getDistricts(SysDistricts, map, roots);
List<SysDistrict> sysDistrictList = getDistricts(SysDistricts, map, roots);
//处理直辖市情况
for (SysDistrict sysDistrict : sysDistrictList) {
if(isMunicipality(sysDistrict.getName())&&sysDistrict.getLevel()==1){
List<SysDistrict> children = sysDistrict.getChildren();
SysDistrict district = children.get(0);
children.remove(0);
sysDistrict.setChildren(Collections.singletonList(district));
sysDistrict.getChildren().get(0).setChildren(children);
}
}
return sysDistrictList;
}
/**
* 判断是否是直辖市
* @param name 行政区域名称
* @return true: false:不是
*/
private Boolean isMunicipality(String name) {
return name.equals("北京")||name.equals("天津") ||name.equals("上海")||name.equals("重庆");
}
private List<SysDistrict> getDistricts(List<SysDistrict> SysDistricts, Map<Long, SysDistrict> map, List<SysDistrict> roots) {
for (SysDistrict sysDistrict : SysDistricts) {
Long parentId = sysDistrict.getParentId();
//如果父节点为空或者父节点不在map中则该节点为根节点
if (parentId == null || !map.containsKey(parentId)) {
roots.add(sysDistrict);
} else {
}
else {
SysDistrict parent = map.get(parentId);
if (parent.getChildren() == null) {
parent.setChildren(new ArrayList<>());