添加新增行政区域接口参数校验,,优化获取行政区域树状列表逻辑。完善添加站点行区域信息校验逻辑等
This commit is contained in:
parent
5b2ea1f01b
commit
476e766342
@ -87,10 +87,11 @@ public class GSitesServiceImpl extends ServiceImpl<GSiteGroupsMapper,GSiteGroups
|
|||||||
if (StringUtils.isBlank(gGroupSiteDto.getAreaCode())) {
|
if (StringUtils.isBlank(gGroupSiteDto.getAreaCode())) {
|
||||||
throw new ServiceException("请选择行政区域!");
|
throw new ServiceException("请选择行政区域!");
|
||||||
}
|
}
|
||||||
|
//行政区完整编码校验
|
||||||
if(StringUtils.isBlank(gGroupSiteDto.getFullAreaCode())){
|
if(StringUtils.isBlank(gGroupSiteDto.getFullAreaCode())){
|
||||||
throw new ServiceException("请提交行政区域完整编码!");
|
throw new ServiceException("请提交行政区域完整编码!");
|
||||||
}
|
}
|
||||||
//未上传站点地图json数据
|
//站点图标校验
|
||||||
if(StringUtils.isBlank(gGroupSiteDto.getIcon())){
|
if(StringUtils.isBlank(gGroupSiteDto.getIcon())){
|
||||||
throw new ServiceException("请选择站点图标!");
|
throw new ServiceException("请选择站点图标!");
|
||||||
}
|
}
|
||||||
|
@ -58,16 +58,72 @@ public class SysDistrictServiceImpl implements ISysDistrictService
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增行政区划
|
* 新增行政区划
|
||||||
*
|
*
|
||||||
* @param sysDistrict 行政区划
|
* @param sysDistrict 行政区划
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int insertSysDistrict(SysDistrict sysDistrict)
|
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);
|
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)){
|
if(StringUtils.isBlank(mapOutlineUrl)){
|
||||||
return sysDistrictMapper.updateSysDistrict(sysDistrict);
|
return sysDistrictMapper.updateSysDistrict(sysDistrict);
|
||||||
}
|
}
|
||||||
|
|
||||||
//判断行政区划轮廓json文件路url是否是完整url还是相对url
|
//判断行政区划轮廓json文件路url是否是完整url还是相对url
|
||||||
if((mapOutlineUrl.contains("http://") || mapOutlineUrl.contains("https://"))){
|
verifySaveJsonData(sysDistrict, mapOutlineUrl);
|
||||||
//如果不是是相对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);
|
|
||||||
}
|
|
||||||
|
|
||||||
return sysDistrictMapper.updateSysDistrict(sysDistrict);
|
return sysDistrictMapper.updateSysDistrict(sysDistrict);
|
||||||
}
|
}
|
||||||
@ -132,22 +171,7 @@ public class SysDistrictServiceImpl implements ISysDistrictService
|
|||||||
return sysDistrictMapper.deleteSysDistrictById(id);
|
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));
|
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) {
|
private List<SysDistrict> buildTree(List<SysDistrict> SysDistricts) {
|
||||||
Map<Long, SysDistrict> map = new HashMap<>();
|
Map<Long, SysDistrict> map = new HashMap<>();
|
||||||
List<SysDistrict> roots = new ArrayList<>();
|
List<SysDistrict> roots = new ArrayList<>();
|
||||||
for (SysDistrict sysDistrict : SysDistricts) {
|
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) {
|
private List<SysDistrict> getDistricts(List<SysDistrict> SysDistricts, Map<Long, SysDistrict> map, List<SysDistrict> roots) {
|
||||||
for (SysDistrict sysDistrict : SysDistricts) {
|
for (SysDistrict sysDistrict : SysDistricts) {
|
||||||
Long parentId = sysDistrict.getParentId();
|
Long parentId = sysDistrict.getParentId();
|
||||||
|
//如果父节点为空或者父节点不在map中,则该节点为根节点
|
||||||
if (parentId == null || !map.containsKey(parentId)) {
|
if (parentId == null || !map.containsKey(parentId)) {
|
||||||
roots.add(sysDistrict);
|
roots.add(sysDistrict);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
SysDistrict parent = map.get(parentId);
|
SysDistrict parent = map.get(parentId);
|
||||||
if (parent.getChildren() == null) {
|
if (parent.getChildren() == null) {
|
||||||
parent.setChildren(new ArrayList<>());
|
parent.setChildren(new ArrayList<>());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user