|
@@ -8,6 +8,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
|
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
|
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
+import com.persagy.adm.diagram.client.DicClient;
|
|
|
+import com.persagy.adm.diagram.client.RwdClient;
|
|
|
import com.persagy.adm.diagram.constant.Constants;
|
|
|
import com.persagy.adm.diagram.core.DataStrategy;
|
|
|
import com.persagy.adm.diagram.core.model.Diagram;
|
|
@@ -22,12 +24,14 @@ import com.persagy.adm.diagram.entity.DiagramType;
|
|
|
import com.persagy.adm.diagram.entity.LegendEntity;
|
|
|
import com.persagy.adm.diagram.entity.ModelAdapter;
|
|
|
import com.persagy.adm.diagram.entity.TemplateEntity;
|
|
|
+import com.persagy.adm.diagram.frame.BdtpRequest;
|
|
|
import com.persagy.adm.diagram.util.ServiceUtil;
|
|
|
import com.persagy.dmp.basic.model.QueryCriteria;
|
|
|
import com.persagy.dmp.basic.model.QueryOperator;
|
|
|
import com.persagy.dmp.basic.utils.JsonNodeUtils;
|
|
|
import com.persagy.dmp.common.constant.ResponseCode;
|
|
|
import com.persagy.dmp.common.exception.BusinessException;
|
|
|
+import com.persagy.dmp.common.model.response.CommonResult;
|
|
|
import com.persagy.dmp.digital.client.DigitalObjectFacade;
|
|
|
import com.persagy.dmp.digital.client.DigitalRelationFacade;
|
|
|
import com.persagy.dmp.digital.entity.ObjectDigital;
|
|
@@ -58,6 +62,10 @@ import java.util.stream.Collectors;
|
|
|
public class DataStrategyImpl implements DataStrategy {
|
|
|
|
|
|
@Autowired
|
|
|
+ private DicClient dicClient;
|
|
|
+ @Autowired
|
|
|
+ private RwdClient rwdClient;
|
|
|
+ @Autowired
|
|
|
private ModelAdapter modelAdapter;
|
|
|
@Autowired
|
|
|
private ObjectMapper objectMapper;
|
|
@@ -271,22 +279,26 @@ public class DataStrategyImpl implements DataStrategy {
|
|
|
* @return 系统图列表
|
|
|
*/
|
|
|
@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);
|
|
|
+ //名称不为空时
|
|
|
+ if (StrUtil.isNotBlank(name)) {
|
|
|
+ //获取所有id
|
|
|
+ List<String> ids = objectNodes.stream().filter(node -> {
|
|
|
+ String objectName = Optional.ofNullable(node.get(Constants.NAME)).map(JsonNode::asText).orElse(StrUtil.EMPTY);
|
|
|
+ return StrUtil.contains(objectName, name);
|
|
|
+ }).map(jsonNodes -> jsonNodes.get(Constants.ID).asText()).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (CollectionUtil.isNotEmpty(ids)) {
|
|
|
+ //由系统实例名模糊匹配到的系统图列表
|
|
|
+ List<DiagramEntity> diagramsBySystemIds = diagramMapper.getDiagramsBySystemIds(ids);
|
|
|
+ //合并
|
|
|
+ result.addAll(diagramsBySystemIds);
|
|
|
+ }
|
|
|
}
|
|
|
//直接去系统图表根据名称模糊查询查出来的数据
|
|
|
List<DiagramEntity> diagrams = diagramMapper.getDiagrams(diagramType,
|
|
@@ -298,7 +310,7 @@ public class DataStrategyImpl implements DataStrategy {
|
|
|
Map<String, ObjectNode> map = objectNodes.stream().collect(Collectors.toMap(node
|
|
|
-> node.get(Constants.ID).asText(), node -> node));
|
|
|
|
|
|
- return result.stream().map(diagramEntity -> {
|
|
|
+ return result.stream().filter(Objects::nonNull).map(diagramEntity -> {
|
|
|
Diagram diagram = modelAdapter.toDiagram(diagramEntity);
|
|
|
ObjectNode node = map.get(diagramEntity.getSystemId());
|
|
|
if (node != null) {
|
|
@@ -501,6 +513,89 @@ public class DataStrategyImpl implements DataStrategy {
|
|
|
@Override
|
|
|
public List<ObjectNode> loadSystemInstance(String projectId, String groupCode) {
|
|
|
QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, Constants.SYSTEM);
|
|
|
- return DigitalObjectFacade.query(groupCode, projectId, null, null, criteria);
|
|
|
+ List<ObjectNode> result = DigitalObjectFacade.query(groupCode, projectId, null, null, criteria);
|
|
|
+ return result == null ? new ArrayList<>() : result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 项目下的专业 -> 系统 ->系统实例 的树状结构数据
|
|
|
+ *
|
|
|
+ * @return 列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<ObjectNode> loadMajorSystemInstance() {
|
|
|
+ BdtpRequest req = BdtpRequest.getCurrent();
|
|
|
+ String groupCode = req.getGroupCode();
|
|
|
+ String projectId = req.getProjectId();
|
|
|
+ String appId = req.getAppId();
|
|
|
+ String userId = req.getUserId();
|
|
|
+ //查询专业
|
|
|
+ CompletableFuture<List<ObjectNode>> majorFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
+ QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper);
|
|
|
+ criteria.getCriteria().put(Constants.TYPE, Constants.MAJOR);
|
|
|
+ CommonResult<List<ObjectNode>> result = dicClient.dataQuery(groupCode, projectId,
|
|
|
+ appId, userId, criteria);
|
|
|
+ return result.getData();
|
|
|
+ }, executor);
|
|
|
+ //查询系统
|
|
|
+ CompletableFuture<List<ObjectNode>> systemFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
+ QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, Constants.SYSTEM);
|
|
|
+ CommonResult<List<ObjectNode>> result = rwdClient.queryObjectType(groupCode, projectId,
|
|
|
+ appId, userId, criteria);
|
|
|
+ return result.getData();
|
|
|
+ }, executor);
|
|
|
+ //查询系统实例
|
|
|
+ CompletableFuture<List<ObjectNode>> instanceFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
+ QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, Constants.SYSTEM);
|
|
|
+ return DigitalObjectFacade.query(groupCode, projectId, appId, userId, criteria);
|
|
|
+ }, executor);
|
|
|
+
|
|
|
+ CompletableFuture.allOf(majorFuture, systemFuture, instanceFuture).join();
|
|
|
+
|
|
|
+ List<ObjectNode> result = null;
|
|
|
+ try {
|
|
|
+ result = buildMajorSystemInstance(majorFuture.get(), systemFuture.get(), instanceFuture.get());
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 组装树状结构
|
|
|
+ *
|
|
|
+ * @param majorNodes 专业节点列表
|
|
|
+ * @param systemNodes 系统节点列表
|
|
|
+ * @param instanceNodes 系统实例节点列表
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<ObjectNode> buildMajorSystemInstance(List<ObjectNode> majorNodes, List<ObjectNode> systemNodes,
|
|
|
+ List<ObjectNode> instanceNodes) {
|
|
|
+ //TODO 是否会存在有些系统没有对应的专业、有些实例没有对应的系统
|
|
|
+ //组装系统和系统实例的树状结构
|
|
|
+ Optional.ofNullable(systemNodes).ifPresent(nodes -> nodes.stream().filter(Objects::nonNull).forEach(node -> {
|
|
|
+ String systemCode = node.get(Constants.CODE).asText();
|
|
|
+ Optional.ofNullable(instanceNodes).ifPresent(items -> {
|
|
|
+ List<ObjectNode> childrenList = items.stream().filter(Objects::nonNull).filter(item -> {
|
|
|
+ JsonNode jsonNode = item.get(ObjectDigital.CLASS_CODE_HUM);
|
|
|
+ return jsonNode != null && StrUtil.equalsIgnoreCase(jsonNode.asText(), systemCode);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ ArrayNode children = node.putArray(Constants.CHILDREN);
|
|
|
+ children.addAll(childrenList);
|
|
|
+ });
|
|
|
+ }));
|
|
|
+ //组装专业和系统的树状结构
|
|
|
+ Optional.ofNullable(majorNodes).ifPresent(nodes -> nodes.stream().filter(Objects::nonNull).forEach(node -> {
|
|
|
+ String majorCode = node.get(Constants.CODE).asText();
|
|
|
+ Optional.ofNullable(systemNodes).ifPresent(items -> {
|
|
|
+ List<ObjectNode> childrenList = items.stream().filter(Objects::nonNull).filter(item -> {
|
|
|
+ JsonNode jsonNode = item.get(Constants.MAJOR_CODE);
|
|
|
+ return jsonNode != null && StrUtil.equalsIgnoreCase(jsonNode.asText(), majorCode);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ ArrayNode children = node.putArray(Constants.CHILDREN);
|
|
|
+ children.addAll(childrenList);
|
|
|
+ });
|
|
|
+ }));
|
|
|
+ return majorNodes;
|
|
|
}
|
|
|
}
|