|
@@ -1,22 +1,23 @@
|
|
|
package com.persagy.proxy.calculation.service.impl;
|
|
|
|
|
|
-import java.util.*;
|
|
|
-import java.util.stream.Collectors;
|
|
|
-
|
|
|
-import com.persagy.dmp.basic.model.QueryCriteria;
|
|
|
-import com.persagy.dmp.common.constant.CommonConstant;
|
|
|
-import com.persagy.dmp.common.helper.SpringHelper;
|
|
|
-import com.persagy.dmp.digital.client.DigitalObjectFacade;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
-
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.hutool.extra.spring.SpringUtil;
|
|
|
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.dmp.basic.dto.RequestData;
|
|
|
+import com.persagy.dmp.basic.model.QueryCriteria;
|
|
|
+import com.persagy.dmp.common.constant.CommonConstant;
|
|
|
import com.persagy.dmp.common.constant.ResponseCode;
|
|
|
import com.persagy.dmp.common.context.AppContext;
|
|
|
+import com.persagy.dmp.common.helper.SpringHelper;
|
|
|
import com.persagy.dmp.common.model.response.CommonResult;
|
|
|
+import com.persagy.dmp.delivery.entity.RelationDefineCollect;
|
|
|
import com.persagy.dmp.digital.client.DigitalObjectClient;
|
|
|
+import com.persagy.dmp.digital.client.DigitalObjectFacade;
|
|
|
import com.persagy.dmp.digital.client.DigitalRelationCaclClient;
|
|
|
import com.persagy.dmp.digital.entity.ObjectDigital;
|
|
|
import com.persagy.dmp.digital.entity.ObjectRelation;
|
|
@@ -32,13 +33,12 @@ import com.persagy.proxy.calculation.model.AdmManualRelationCalcDel;
|
|
|
import com.persagy.proxy.calculation.model.AdmRelationAddRequest;
|
|
|
import com.persagy.proxy.calculation.service.AdmManualRelCalService;
|
|
|
import com.persagy.proxy.common.entity.InstanceUrlParam;
|
|
|
-
|
|
|
-import cn.hutool.core.collection.CollUtil;
|
|
|
-import cn.hutool.core.date.DateUtil;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
-import cn.hutool.extra.spring.SpringUtil;
|
|
|
+import com.persagy.proxy.report.service.IRelationReportService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
|
|
|
/***
|
|
|
* Description: 手动计算逻辑处理类
|
|
@@ -53,6 +53,7 @@ public class AdmManualRelCalServiceImpl implements AdmManualRelCalService {
|
|
|
|
|
|
private final DigitalRelationCaclClient digitalRelationCaclClient;
|
|
|
private final DigitalObjectClient digitalObjectClient;
|
|
|
+ private final IRelationReportService relationReportService;
|
|
|
|
|
|
|
|
|
|
|
@@ -97,6 +98,7 @@ public class AdmManualRelCalServiceImpl implements AdmManualRelCalService {
|
|
|
if (relationTypeEnum == null){
|
|
|
return AdmCreateResponse.failure("不存在的关系类型");
|
|
|
}
|
|
|
+
|
|
|
// type为cadId直接提示从对象不存在CADID编码并且errorType=2
|
|
|
if (AdmObjectInfoConstant.CADID.equals(request.getType()) && relationTypeEnum.getHasCheckCadId()){
|
|
|
return AdmCreateResponse.failure("从对象不存在CADID编码","2");
|
|
@@ -144,7 +146,14 @@ public class AdmManualRelCalServiceImpl implements AdmManualRelCalService {
|
|
|
if (fromMap.get(fromContent).size()>1){
|
|
|
return AdmCreateResponse.failure(fromContent +":存在多个实例","2");
|
|
|
}
|
|
|
-
|
|
|
+ }
|
|
|
+ //验证 项目交付范围
|
|
|
+ Integer flag = validRelCollect(context, relationTypeEnum, request.getDeliveryType(), mainResultData, fromResultData);
|
|
|
+ switch (flag){
|
|
|
+ case 1 : return AdmCreateResponse.failure(mainResultData +":不存在","1");
|
|
|
+ case 2 : return AdmCreateResponse.failure(fromResultData +":不存在","2");
|
|
|
+ case 3 : return AdmCreateResponse.failure("不在项目交付范围内");
|
|
|
+ default:
|
|
|
}
|
|
|
RequestData requestData = RequestData.builder()
|
|
|
.graphCode(relationTypeEnum.getGraphCode())
|
|
@@ -493,4 +502,62 @@ public class AdmManualRelCalServiceImpl implements AdmManualRelCalService {
|
|
|
temp.put("projectId", objectDigital.getProjectId());
|
|
|
temp.putObject("statistics");
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 验证关系交付范围
|
|
|
+ * @param mainResultData 主对象
|
|
|
+ * @param fromResultData 从对象
|
|
|
+ * @return 0 成功; 1 主对象为空; 2 从对象为空; 3 不在项目交付范围内
|
|
|
+ **/
|
|
|
+ private Integer validRelCollect(InstanceUrlParam context, AdmRelationTypeEnum relationTypeEnum , Integer deliveryType, List<ObjectNode> mainResultData, List<ObjectNode> fromResultData){
|
|
|
+ if(CollUtil.isEmpty(mainResultData)){
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ if(CollUtil.isEmpty(fromResultData)){
|
|
|
+ return 2;
|
|
|
+ }
|
|
|
+ if(deliveryType != null){
|
|
|
+ QueryCriteria queryCriteria = new QueryCriteria();
|
|
|
+ ObjectNode objectNode = JsonNodeFactory.instance.objectNode();
|
|
|
+ objectNode.put("projectId", context.getProjectId());
|
|
|
+ objectNode.put("relCode", relationTypeEnum.getRelCode());
|
|
|
+ objectNode.put("graphCode", relationTypeEnum.getGraphCode());
|
|
|
+ objectNode.put("deliveryType",deliveryType);
|
|
|
+ queryCriteria.setCriteria(objectNode);
|
|
|
+ List<RelationDefineCollect> relationDefineCollects = relationReportService.doQueryRelationDefineCollectList(context, queryCriteria);
|
|
|
+ if(CollUtil.isEmpty(relationDefineCollects)){
|
|
|
+ return 3;
|
|
|
+ }
|
|
|
+ Set<String> fromSet = new HashSet<>();
|
|
|
+ fromResultData.forEach(obj -> {
|
|
|
+ if(obj.get("classCode") != null && obj.get("classCode").isTextual()){
|
|
|
+ fromSet.add(obj.get("classCode").asText());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ Set<String> mainSet = new HashSet<>();
|
|
|
+ mainResultData.forEach(obj -> {
|
|
|
+ if(obj.get("classCode") != null && obj.get("classCode").isTextual()){
|
|
|
+ mainSet.add(obj.get("classCode").asText());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ //关系无方向性
|
|
|
+ for(RelationDefineCollect collect : relationDefineCollects){
|
|
|
+ ArrayNode sourceTypeCodes = collect.getSourceTypeCodes();
|
|
|
+ Set<String> sourceTypeCodeSet = CollUtil.newHashSet();
|
|
|
+ sourceTypeCodes.forEach(classCode -> sourceTypeCodeSet.add(classCode.isTextual() ? classCode.asText() : ""));
|
|
|
+ ArrayNode endTypeCodes = collect.getEndTypeCodes();
|
|
|
+ Set<String> endTypeCodeSet = CollUtil.newHashSet();
|
|
|
+ endTypeCodes.forEach(classCode -> endTypeCodeSet.add(classCode.isTextual() ? classCode.asText() : ""));
|
|
|
+ if(sourceTypeCodeSet.contains(mainSet) && endTypeCodeSet.contains(endTypeCodeSet)){
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ if(sourceTypeCodeSet.contains(endTypeCodes) && endTypeCodeSet.contains(mainSet)){
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 3;
|
|
|
+ }
|
|
|
}
|