|
@@ -2,10 +2,12 @@ package com.persagy.adm.diagram.core.impl;
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
+import com.fasterxml.jackson.databind.JsonNode;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
|
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
|
+import com.persagy.adm.diagram.constant.Constants;
|
|
import com.persagy.adm.diagram.core.DataStrategy;
|
|
import com.persagy.adm.diagram.core.DataStrategy;
|
|
import com.persagy.adm.diagram.core.model.Diagram;
|
|
import com.persagy.adm.diagram.core.model.Diagram;
|
|
import com.persagy.adm.diagram.core.model.legend.Legend;
|
|
import com.persagy.adm.diagram.core.model.legend.Legend;
|
|
@@ -23,6 +25,7 @@ import com.persagy.dmp.common.constant.ResponseCode;
|
|
import com.persagy.dmp.common.exception.BusinessException;
|
|
import com.persagy.dmp.common.exception.BusinessException;
|
|
import com.persagy.dmp.digital.client.DigitalObjectFacade;
|
|
import com.persagy.dmp.digital.client.DigitalObjectFacade;
|
|
import com.persagy.dmp.digital.client.DigitalRelationFacade;
|
|
import com.persagy.dmp.digital.client.DigitalRelationFacade;
|
|
|
|
+import com.persagy.dmp.digital.entity.ObjectDigital;
|
|
import com.persagy.dmp.digital.entity.ObjectRelation;
|
|
import com.persagy.dmp.digital.entity.ObjectRelation;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
@@ -242,13 +245,41 @@ public class DataStrategyImpl implements DataStrategy {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public List<Diagram> getDiagrams(String diagramType, String projectId, String systemId, String groupCode, String name) {
|
|
public List<Diagram> getDiagrams(String diagramType, String projectId, String systemId, String groupCode, String name) {
|
|
|
|
+
|
|
|
|
+ Set<DiagramEntity> result = new HashSet<>();
|
|
|
|
+ //所有系统实例
|
|
|
|
+ List<ObjectNode> objectNodes = loadSystemInstance(projectId, groupCode);
|
|
|
|
+ //获取所有id
|
|
|
|
+ List<String> ids = objectNodes.stream().filter(node -> {
|
|
|
|
+ String objectName = Optional.ofNullable(node.get(Constants.NAME)).map(JsonNode::asText).orElse(StrUtil.EMPTY);
|
|
|
|
+ return objectName.contains(name);
|
|
|
|
+ }).map(jsonNodes -> jsonNodes.get(Constants.ID).asText()).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ if (CollectionUtil.isNotEmpty(ids)) {
|
|
|
|
+ //由系统实例名模糊匹配到的系统图列表
|
|
|
|
+ List<DiagramEntity> diagramsBySystemIds = diagramMapper.getDiagramsBySystemIds(ids);
|
|
|
|
+ //合并
|
|
|
|
+ result.addAll(diagramsBySystemIds);
|
|
|
|
+ }
|
|
|
|
+ //直接去系统图表根据名称模糊查询查出来的数据
|
|
List<DiagramEntity> diagrams = diagramMapper.getDiagrams(diagramType,
|
|
List<DiagramEntity> diagrams = diagramMapper.getDiagrams(diagramType,
|
|
projectId, systemId, groupCode, name);
|
|
projectId, systemId, groupCode, name);
|
|
- if (CollectionUtil.isNotEmpty(diagrams)) {
|
|
|
|
- return diagrams.stream().map(diagramEntity ->
|
|
|
|
- modelAdapter.toDiagram(diagramEntity)).collect(Collectors.toList());
|
|
|
|
- }
|
|
|
|
- return new ArrayList<>();
|
|
|
|
|
|
+ //合并
|
|
|
|
+ result.addAll(diagrams);
|
|
|
|
+
|
|
|
|
+ //转成map
|
|
|
|
+ Map<String, ObjectNode> map = objectNodes.stream().collect(Collectors.toMap(node
|
|
|
|
+ -> node.get(Constants.ID).asText(), node -> node));
|
|
|
|
+
|
|
|
|
+ return result.stream().map(diagramEntity -> {
|
|
|
|
+ Diagram diagram = modelAdapter.toDiagram(diagramEntity);
|
|
|
|
+ ObjectNode node = map.get(diagramEntity.getSystemId());
|
|
|
|
+ if (node != null) {
|
|
|
|
+ diagram.setSystemInstanceName(node.get(Constants.NAME).asText());
|
|
|
|
+ }
|
|
|
|
+ return diagram;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -299,9 +330,9 @@ public class DataStrategyImpl implements DataStrategy {
|
|
@Override
|
|
@Override
|
|
public List<ObjectNode> loadObjectsByType(List<String> equipmentTypes, String projectId,
|
|
public List<ObjectNode> loadObjectsByType(List<String> equipmentTypes, String projectId,
|
|
String systemId, String groupCode) {
|
|
String systemId, String groupCode) {
|
|
- QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, "equipment");
|
|
|
|
|
|
+ QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, Constants.EQUIPMENT);
|
|
if (CollectionUtil.isNotEmpty(equipmentTypes)) {
|
|
if (CollectionUtil.isNotEmpty(equipmentTypes)) {
|
|
- ArrayNode types = criteria.getCriteria().putArray("classCode");
|
|
|
|
|
|
+ ArrayNode types = criteria.getCriteria().putArray(ObjectDigital.CLASS_CODE_HUM);
|
|
equipmentTypes.forEach(types::add);
|
|
equipmentTypes.forEach(types::add);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -348,19 +379,27 @@ public class DataStrategyImpl implements DataStrategy {
|
|
return JsonNodeUtils.toListNode(allRelations, null, null);
|
|
return JsonNodeUtils.toListNode(allRelations, null, null);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 查询obj_from 和 objTo 的数据
|
|
|
|
+ *
|
|
|
|
+ * @param projectId 项目id
|
|
|
|
+ * @param groupCode 集团code
|
|
|
|
+ * @param objectIds 对象id列表
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
private List<ObjectRelation> queryRelationsByObjIds(String projectId, String groupCode, List<String> objectIds) {
|
|
private List<ObjectRelation> queryRelationsByObjIds(String projectId, String groupCode, List<String> objectIds) {
|
|
List<ObjectRelation> resultList = new ArrayList<>();
|
|
List<ObjectRelation> resultList = new ArrayList<>();
|
|
//obj_from
|
|
//obj_from
|
|
CompletableFuture<List<ObjectRelation>> fromFuture = CompletableFuture.supplyAsync(() -> {
|
|
CompletableFuture<List<ObjectRelation>> fromFuture = CompletableFuture.supplyAsync(() -> {
|
|
QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper);
|
|
QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper);
|
|
- ArrayNode objFrom = criteria.getCriteria().putArray("objFrom");
|
|
|
|
|
|
+ ArrayNode objFrom = criteria.getCriteria().putArray(ObjectRelation.OBJ_FROM_HUM);
|
|
Optional.ofNullable(objectIds).ifPresent(strings -> strings.forEach(objFrom::add));
|
|
Optional.ofNullable(objectIds).ifPresent(strings -> strings.forEach(objFrom::add));
|
|
return DigitalRelationFacade.query(groupCode, projectId, null, null, criteria);
|
|
return DigitalRelationFacade.query(groupCode, projectId, null, null, criteria);
|
|
}, executor);
|
|
}, executor);
|
|
//obj_to
|
|
//obj_to
|
|
CompletableFuture<List<ObjectRelation>> toFuture = CompletableFuture.supplyAsync(() -> {
|
|
CompletableFuture<List<ObjectRelation>> toFuture = CompletableFuture.supplyAsync(() -> {
|
|
QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper);
|
|
QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper);
|
|
- ArrayNode objTo = criteria.getCriteria().putArray("objTo");
|
|
|
|
|
|
+ ArrayNode objTo = criteria.getCriteria().putArray(ObjectRelation.OBJ_TO_HUM);
|
|
Optional.ofNullable(objectIds).ifPresent(strings -> strings.forEach(objTo::add));
|
|
Optional.ofNullable(objectIds).ifPresent(strings -> strings.forEach(objTo::add));
|
|
return DigitalRelationFacade.query(groupCode, projectId, null, null, criteria);
|
|
return DigitalRelationFacade.query(groupCode, projectId, null, null, criteria);
|
|
}, executor);
|
|
}, executor);
|
|
@@ -389,8 +428,8 @@ public class DataStrategyImpl implements DataStrategy {
|
|
if (CollectionUtil.isEmpty(objectIds)) {
|
|
if (CollectionUtil.isEmpty(objectIds)) {
|
|
throw new BusinessException(ResponseCode.A0400.getCode(), "objectIds不能为空");
|
|
throw new BusinessException(ResponseCode.A0400.getCode(), "objectIds不能为空");
|
|
}
|
|
}
|
|
- QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, "equipment");
|
|
|
|
- ArrayNode arr = criteria.getCriteria().putArray("id");
|
|
|
|
|
|
+ QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, Constants.EQUIPMENT);
|
|
|
|
+ ArrayNode arr = criteria.getCriteria().putArray(Constants.ID);
|
|
objectIds.forEach(arr::add);
|
|
objectIds.forEach(arr::add);
|
|
|
|
|
|
return DigitalObjectFacade.query(groupCode, projectId, null, null, criteria);
|
|
return DigitalObjectFacade.query(groupCode, projectId, null, null, criteria);
|
|
@@ -410,10 +449,11 @@ public class DataStrategyImpl implements DataStrategy {
|
|
throw new BusinessException(ResponseCode.A0400.getCode(), "relationIds不能为空");
|
|
throw new BusinessException(ResponseCode.A0400.getCode(), "relationIds不能为空");
|
|
}
|
|
}
|
|
QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper);
|
|
QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper);
|
|
- ArrayNode nodes = criteria.getCriteria().putArray("id");
|
|
|
|
|
|
+ ArrayNode nodes = criteria.getCriteria().putArray(Constants.ID);
|
|
relationIds.forEach(nodes::add);
|
|
relationIds.forEach(nodes::add);
|
|
|
|
|
|
- List<ObjectRelation> result = DigitalRelationFacade.query(groupCode, projectId, null, null, criteria);
|
|
|
|
|
|
+ List<ObjectRelation> result = DigitalRelationFacade.query(groupCode, projectId,
|
|
|
|
+ null, null, criteria);
|
|
return JsonNodeUtils.toListNode(result, null, null);
|
|
return JsonNodeUtils.toListNode(result, null, null);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -426,7 +466,7 @@ public class DataStrategyImpl implements DataStrategy {
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public List<ObjectNode> loadSystemInstance(String projectId, String groupCode) {
|
|
public List<ObjectNode> loadSystemInstance(String projectId, String groupCode) {
|
|
- QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, "system");
|
|
|
|
|
|
+ QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, Constants.SYSTEM);
|
|
return DigitalObjectFacade.query(groupCode, projectId, null, null, criteria);
|
|
return DigitalObjectFacade.query(groupCode, projectId, null, null, criteria);
|
|
}
|
|
}
|
|
}
|
|
}
|