|
@@ -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;
|
|
@@ -508,4 +516,86 @@ public class DataStrategyImpl implements DataStrategy {
|
|
|
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;
|
|
|
+ }
|
|
|
}
|