From 476e7663421ef054437d9c586f3b8357cce2defd Mon Sep 17 00:00:00 2001 From: mi9688 Date: Tue, 29 Oct 2024 13:21:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E5=A2=9E=E8=A1=8C?= =?UTF-8?q?=E6=94=BF=E5=8C=BA=E5=9F=9F=E6=8E=A5=E5=8F=A3=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=EF=BC=8C=EF=BC=8C=E4=BC=98=E5=8C=96=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=A1=8C=E6=94=BF=E5=8C=BA=E5=9F=9F=E6=A0=91=E7=8A=B6?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E9=80=BB=E8=BE=91=E3=80=82=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=AB=99=E7=82=B9=E8=A1=8C=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=A0=A1=E9=AA=8C=E9=80=BB=E8=BE=91=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/GSitesServiceImpl.java | 3 +- .../service/impl/SysDistrictServiceImpl.java | 141 +++++++++++++----- 2 files changed, 104 insertions(+), 40 deletions(-) diff --git a/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/service/impl/GSitesServiceImpl.java b/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/service/impl/GSitesServiceImpl.java index 851ba91..56fa934 100644 --- a/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/service/impl/GSitesServiceImpl.java +++ b/fastbee-service/fastbee-ggroup-service/src/main/java/com/fastbee/ggroup/service/impl/GSitesServiceImpl.java @@ -87,10 +87,11 @@ public class GSitesServiceImpl extends ServiceImpl 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 selectSysDistrictTree(Integer level) { - System.err.println("等级:level:"+level); - //计算查询用时 - long startTime = System.currentTimeMillis(); - List 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 selectSysDistrictTree(Integer level) { + System.err.println("等级:level:"+level); + //计算查询用时 + long startTime = System.currentTimeMillis(); + List 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 buildTree(List SysDistricts) { Map map = new HashMap<>(); List 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 sysDistrictList = getDistricts(SysDistricts, map, roots); + //处理直辖市情况 + for (SysDistrict sysDistrict : sysDistrictList) { + if(isMunicipality(sysDistrict.getName())&&sysDistrict.getLevel()==1){ + List 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 getDistricts(List SysDistricts, Map map, List 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<>());