fix: 优化逻辑
This commit is contained in:
parent
c6dc532040
commit
d30d873fa4
@ -162,18 +162,6 @@ public class MapLegendController {
|
||||
if (legend.getDataType() == null) {
|
||||
throw new BizException("图例数据类型(dataType: 1=结构,2=数据)不能为空.");
|
||||
}
|
||||
if (legend.getDataType() == 2 && StrUtil.isBlank(legend.getLayerCode())) {
|
||||
throw new BizException("关联的图层编码(layerCode)不能为空.");
|
||||
}
|
||||
if (StrUtil.isNotBlank(legend.getName())){
|
||||
if(StrUtil.isBlank(legend.getGroupName())){
|
||||
legend.setGroupName(legend.getName());
|
||||
}
|
||||
if(StrUtil.isBlank(legend.getParentName())){
|
||||
legend.setGroupName(legend.getName());
|
||||
}
|
||||
}
|
||||
legend.setRecordUser(SecurityUtils.getUserId());
|
||||
mapLegendService.saveOrUpdate(legend);
|
||||
return ResponseResult.success("保存成功.");
|
||||
}
|
||||
|
||||
@ -11,10 +11,13 @@ import com.yfd.platform.qgc_sys.mapLayer.domain.MsMapmoduleB;
|
||||
import com.yfd.platform.qgc_sys.mapLayer.mapper.MsMaplegendBMapper;
|
||||
import com.yfd.platform.qgc_sys.mapLayer.mapper.MsMapmoduleBMapper;
|
||||
import com.yfd.platform.qgc_sys.mapLayer.service.IMapLegendService;
|
||||
import com.yfd.platform.utils.SecurityUtils;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 地图图例基础服务实现
|
||||
@ -94,4 +97,143 @@ public class MapLegendServiceImpl extends ServiceImpl<MsMaplegendBMapper, MsMapl
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean saveOrUpdate(MsMaplegendB legend) {
|
||||
if (hasSameCode(legend)) {
|
||||
throw new BizException("存在相同编码的数据");
|
||||
}
|
||||
if (StrUtil.isNotBlank(legend.getId())) {
|
||||
updateSetLegend(legend);
|
||||
super.updateById(legend);
|
||||
} else {
|
||||
if (legend.getDataType() == 2 && StrUtil.isBlank(legend.getParentId())) {
|
||||
throw new BizException("请先创建图例父级结构再添加数据.");
|
||||
}
|
||||
if (legend.getDataType() == 2 && StrUtil.isBlank(legend.getLayerCode())) {
|
||||
throw new BizException("图层编码不能为空.");
|
||||
}
|
||||
List<MsMaplegendB> list = getSubLegendList(legend.getParentId());
|
||||
Integer maxOrderIndex = getMaxOrderIndex(list);
|
||||
legend.setOrderIndex(maxOrderIndex + 1);
|
||||
MsMaplegendB parentLegend = null;
|
||||
if (StrUtil.isNotBlank(legend.getParentId())) {
|
||||
parentLegend = this.getById(legend.getParentId());
|
||||
if (parentLegend == null) {
|
||||
throw new BizException("获取父级图例信息失败.请检查父级图例(parentId)是否存在.");
|
||||
}
|
||||
legend.setFullPath(parentLegend.getFullPath() + legend.getId() + ",");
|
||||
legend.setTreeLevel(parentLegend.getTreeLevel() + 1);
|
||||
legend.setHasChildren(0);
|
||||
} else {
|
||||
legend.setTreeLevel(1);
|
||||
legend.setFullPath(legend.getId() + ",");
|
||||
legend.setHasChildren(0);
|
||||
}
|
||||
if (legend.getDataType() == 1) {
|
||||
legend.setGroupName(legend.getName());
|
||||
legend.setParentName(legend.getName());
|
||||
} else {
|
||||
String fullPath = parentLegend.getFullPath();
|
||||
if (StrUtil.isNotBlank(fullPath)) {
|
||||
String[] path = fullPath.split(",");
|
||||
if (path.length == 1) {
|
||||
legend.setGroupName(parentLegend.getName());
|
||||
legend.setParentName(parentLegend.getName());
|
||||
} else if (path.length == 2) {
|
||||
legend.setGroupName(parentLegend.getName());
|
||||
MsMaplegendB root = this.getById(path[0]);
|
||||
if (root == null) {
|
||||
legend.setParentName(parentLegend.getParentName());
|
||||
} else {
|
||||
legend.setParentName(root.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (parentLegend != null && StrUtil.isBlank(legend.getLayerCode())) {
|
||||
legend.setLayerCode(parentLegend.getLayerCode());
|
||||
}
|
||||
legend.setIfShow(0);
|
||||
legend.setInternal(0);
|
||||
legend.setEnable(0);
|
||||
legend.setRecordUser(SecurityUtils.getUserId());
|
||||
legend.setModifyUser(SecurityUtils.getUserId());
|
||||
this.save(legend);
|
||||
if (parentLegend != null) {
|
||||
MsMaplegendB temp = new MsMaplegendB();
|
||||
temp.setId(parentLegend.getId());
|
||||
temp.setHasChildren(1);
|
||||
this.updateById(temp);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void updateSetLegend(MsMaplegendB legend) {
|
||||
if (StrUtil.isNotBlank(legend.getParentId())) {
|
||||
MsMaplegendB parent = this.getById(legend.getParentId());
|
||||
if (parent != null) {
|
||||
if (legend.getDataType() == 1) {
|
||||
legend.setParentName(parent.getName());
|
||||
legend.setFullPath(parent.getFullPath() + legend.getId() + ",");
|
||||
} else {
|
||||
legend.setGroupName(parent.getName());
|
||||
if (StrUtil.isNotBlank(parent.getFullPath())) {
|
||||
MsMaplegendB root = this.getById(parent.getFullPath().split(",")[0]);
|
||||
if (root != null) {
|
||||
legend.setParentName(root.getName());
|
||||
}
|
||||
legend.setFullPath(parent.getFullPath() + legend.getId() + ",");
|
||||
}
|
||||
}
|
||||
if (StrUtil.isNotBlank(legend.getFullPath())) {
|
||||
legend.setTreeLevel(legend.getFullPath().split(",").length);
|
||||
}
|
||||
}
|
||||
if (legend.getDataType() == 1) {
|
||||
legend.setGroupName(legend.getName());
|
||||
}
|
||||
} else {
|
||||
if (legend.getDataType() == 1) {
|
||||
legend.setGroupName(legend.getName());
|
||||
legend.setParentName(legend.getName());
|
||||
}
|
||||
legend.setFullPath(legend.getId() + ",");
|
||||
legend.setTreeLevel(1);
|
||||
}
|
||||
}
|
||||
|
||||
public List<MsMaplegendB> getSubLegendList(String parentId) {
|
||||
if (StrUtil.isNotBlank(parentId)) {
|
||||
return this.lambdaQuery()
|
||||
.eq(MsMaplegendB::getParentId, parentId)
|
||||
.orderByAsc(MsMaplegendB::getOrderIndex)
|
||||
.list();
|
||||
} else {
|
||||
return this.lambdaQuery()
|
||||
.eq(MsMaplegendB::getTreeLevel, 1)
|
||||
.orderByAsc(MsMaplegendB::getOrderIndex)
|
||||
.list();
|
||||
}
|
||||
}
|
||||
|
||||
public Integer getMaxOrderIndex(List<MsMaplegendB> list) {
|
||||
if (CollectionUtil.isEmpty(list)) {
|
||||
return 0;
|
||||
} else {
|
||||
return list.stream()
|
||||
.sorted(Comparator.comparing(MsMaplegendB::getOrderIndex).reversed())
|
||||
.toList()
|
||||
.getFirst()
|
||||
.getOrderIndex();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasSameCode(MsMaplegendB legend) {
|
||||
List<MsMaplegendB> list = this.lambdaQuery()
|
||||
.eq(MsMaplegendB::getNameEn, legend.getNameEn())
|
||||
.list();
|
||||
return !CollectionUtil.isEmpty(list) && !list.get(0).getId().equals(legend.getId());
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user