|
@@ -1,17 +1,12 @@
|
|
|
package com.persagy.adm.diagram.core;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
-import cn.hutool.core.util.IdUtil;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
-import com.persagy.adm.diagram.core.model.EquipmentNode;
|
|
|
-import com.persagy.adm.diagram.core.model.base.Container;
|
|
|
import com.persagy.adm.diagram.core.model.Diagram;
|
|
|
import com.persagy.adm.diagram.core.model.DiagramNode;
|
|
|
-import com.persagy.adm.diagram.core.model.Label;
|
|
|
-import com.persagy.adm.diagram.core.model.legend.Legend;
|
|
|
+import com.persagy.adm.diagram.core.model.EquipmentNode;
|
|
|
+import com.persagy.adm.diagram.core.model.base.Container;
|
|
|
import com.persagy.adm.diagram.core.model.logic.DataFilter;
|
|
|
-import com.persagy.adm.diagram.core.model.logic.MatchFilter;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
@@ -38,11 +33,12 @@ public class DiagramDataLoader {
|
|
|
|
|
|
private List<ObjectNode> optionalRels;
|
|
|
|
|
|
- private HashMap<String, List<Legend>> legendsCache = new HashMap<>();
|
|
|
+ private DiagramBuilder builder;
|
|
|
|
|
|
public DiagramDataLoader(Diagram diagram, DataStrategy dataStrategy) {
|
|
|
this.diagram = diagram;
|
|
|
this.dataStrategy = dataStrategy;
|
|
|
+ this.builder = new DiagramBuilder(diagram, dataStrategy);
|
|
|
}
|
|
|
|
|
|
public void load(){
|
|
@@ -85,6 +81,7 @@ public class DiagramDataLoader {
|
|
|
} else
|
|
|
containers = new ArrayList<>();
|
|
|
|
|
|
+ //TODO 数据查询,需要区分打包设备
|
|
|
if(equipTypes.size() > 0)
|
|
|
optionalObjs = dataStrategy.loadObjectsByType(equipTypes, diagram.getProjectId(), diagram.getSystemId(), diagram.getGroupCode());
|
|
|
else
|
|
@@ -108,12 +105,13 @@ public class DiagramDataLoader {
|
|
|
addEquipNodes();
|
|
|
buildContainers();
|
|
|
|
|
|
- if(optionalObjs.size() > 0) {
|
|
|
- List<String> objIds = new ArrayList<>(optionalObjs.size());
|
|
|
- optionalObjs.forEach(obj -> objIds.add(obj.get("id").asText()));
|
|
|
- optionalRels = dataStrategy.loadRelationsByType(null, objIds, diagram.getProjectId(), diagram.getGroupCode());
|
|
|
- } else
|
|
|
- optionalRels = new ArrayList<>();
|
|
|
+ //TODO 关系查询,需要区分打包设备
|
|
|
+// if(optionalObjs.size() > 0) {
|
|
|
+// List<String> objIds = new ArrayList<>(optionalObjs.size());
|
|
|
+// optionalObjs.forEach(obj -> objIds.add(obj.get("id").asText()));
|
|
|
+// optionalRels = dataStrategy.loadRelationsByType(null, objIds, diagram.getProjectId(), diagram.getGroupCode());
|
|
|
+// } else
|
|
|
+// optionalRels = new ArrayList<>();
|
|
|
|
|
|
addLines();
|
|
|
}
|
|
@@ -131,32 +129,10 @@ public class DiagramDataLoader {
|
|
|
for(Container con : containers) {
|
|
|
for(ObjectNode obj : optionalObjs){
|
|
|
if (match(obj, con)) {
|
|
|
- EquipmentNode node = new EquipmentNode();
|
|
|
- node.setId(IdUtil.simpleUUID());
|
|
|
- node.setObjId(obj.get("id").asText());
|
|
|
- node.setObjClassCode(obj.get("classCode").asText());
|
|
|
- node.setDataObject(obj);
|
|
|
-
|
|
|
- Label label = new Label();
|
|
|
- String content = null;
|
|
|
- if(obj.get("localName") != null)
|
|
|
- content = obj.get("localName").asText();
|
|
|
- if(StrUtil.isBlank(content))
|
|
|
- content = obj.get("name").asText();
|
|
|
- label.setContent(content);
|
|
|
- node.setLabel(label);
|
|
|
-
|
|
|
- diagram.getNodes().add(node);
|
|
|
-
|
|
|
- con.addComp(node);
|
|
|
- node.setContainerId(con.getId());
|
|
|
- node.setLayoutIndex(con.getChildren().size() - 1);
|
|
|
-
|
|
|
- Legend legend = findLegend(node, obj);
|
|
|
- if(legend != null) {
|
|
|
- node.setLegendId(legend.getId());
|
|
|
- node.setLegend(legend);
|
|
|
- }
|
|
|
+ if(con.getEquipPack() != null)
|
|
|
+ builder.addPackData(con, obj);
|
|
|
+ else
|
|
|
+ builder.addEquipNode(con, obj);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -209,53 +185,16 @@ public class DiagramDataLoader {
|
|
|
// }
|
|
|
|
|
|
private boolean match(ObjectNode obj, Container con) {
|
|
|
- String classCode = obj.get("classCode").asText();
|
|
|
+ String classCode = DiagramBuilder.getClassCode(obj);
|
|
|
if(con.getEquipmentTypes() != null && con.getEquipmentTypes().contains(classCode)) {
|
|
|
DataFilter filter = con.getDataFilter();
|
|
|
if(filter != null)
|
|
|
- return filter.filter(getDataForFilter(filter, obj));
|
|
|
+ return filter.filter(obj);
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- private Object getDataForFilter(DataFilter filter, ObjectNode obj){
|
|
|
- if(filter instanceof MatchFilter) {
|
|
|
- MatchFilter mf = (MatchFilter) filter;
|
|
|
- if(mf.getObject().equals(MatchFilter.OBJ_NAME)) {
|
|
|
- String name = null;
|
|
|
- if(obj.get("localName") != null)
|
|
|
- name = obj.get("localName").asText();
|
|
|
- if(StrUtil.isBlank(name))
|
|
|
- name = obj.get("name").asText();
|
|
|
- return name;
|
|
|
- } else if(mf.getObject().startsWith(MatchFilter.OBJ_INFOS)) {
|
|
|
- String infoCode = mf.getObject().substring(MatchFilter.OBJ_INFOS.length());
|
|
|
- return obj.get(infoCode);
|
|
|
- }
|
|
|
- }
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- private Legend findLegend(EquipmentNode node, ObjectNode obj){
|
|
|
- String classCode = node.getObjClassCode();
|
|
|
- List<Legend> legends = legendsCache.get(classCode);
|
|
|
- if (legends == null) {
|
|
|
- legends = dataStrategy.getLegendsForEquipment(classCode);
|
|
|
- if (legends == null)
|
|
|
- legends = new ArrayList<>();
|
|
|
- legendsCache.put(classCode, legends);
|
|
|
- }
|
|
|
- if(legends.size() > 0) {
|
|
|
- for(Legend legend : legends) {
|
|
|
- if(CollUtil.isNotEmpty(legend.getDiagramTypes()) && legend.getDiagramTypes().contains(diagram.getType()))
|
|
|
- return legend; //优先返回适配系统图类型的图例
|
|
|
- }
|
|
|
- return legends.get(0); //缺省取第一个
|
|
|
- }
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
private void buildContainers() {
|
|
|
for(Container con : containers) {
|
|
|
if(con.isEquipmentBox()) {
|