Quellcode durchsuchen

交付范围 关系范围

lvxianyun vor 3 Jahren
Ursprung
Commit
aff3f1bddc

+ 2 - 2
adm-business/adm-middleware/src/main/java/com/persagy/proxy/calculation/model/AdmRelationAddRequest.java

@@ -9,8 +9,6 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Set;
 
 @Data
@@ -36,5 +34,7 @@ public class AdmRelationAddRequest implements Serializable {
     @JSONField(name = "graphicType",alternateNames = {"parentCode","graphic_type"})
     private String graphicType;
 
+    /** 交付范围 0项目交付,1现场交付**/
+    private Integer deliveryType;
 
 }

+ 82 - 15
adm-business/adm-middleware/src/main/java/com/persagy/proxy/calculation/service/impl/AdmManualRelCalServiceImpl.java

@@ -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;
+    }
 }

+ 4 - 2
adm-business/adm-middleware/src/main/java/com/persagy/proxy/common/client/DmpRwdClient.java

@@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.persagy.dmp.basic.config.DigitalFeignConfig;
 import com.persagy.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.delivery.entity.ObjectTypeCollect;
+import com.persagy.dmp.delivery.entity.RelationDefineCollect;
 import com.persagy.proxy.common.constant.DmpUrlConstant;
 import com.persagy.proxy.common.entity.DmpResult;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
@@ -222,7 +224,7 @@ public interface DmpRwdClient {
      * @return: com.persagy.dmp.common.DmpResult
      */
     @PostMapping(DmpUrlConstant.DEF_CLASS_COLLECT)
-    DmpResult<JSONArray> queryObjectClassCollect(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONObject criteria);
+    DmpResult<List<ObjectTypeCollect>> queryObjectClassCollect(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONObject criteria);
 
 
 
@@ -234,7 +236,7 @@ public interface DmpRwdClient {
      * @return: com.persagy.dmp.common.DmpResult
      */
     @PostMapping(DmpUrlConstant.DEF_REL_COLLECT)
-    DmpResult<JSONArray> queryObjectRelCollect(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONObject criteria);
+    DmpResult<List<RelationDefineCollect>> queryObjectRelCollect(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONObject criteria);
 
 
 }

+ 2 - 2
adm-business/adm-middleware/src/main/java/com/persagy/proxy/dictionary/service/impl/AbstractAdmDictBaseServiceImpl.java

@@ -365,8 +365,8 @@ public class AbstractAdmDictBaseServiceImpl<T> implements IAdmDictBaseService<T>
         }
         // 调用中台查询
         log.info(para.toString());
-        DmpResult<JSONArray> dmpResult = rwdClient.queryObjectClassCollect(context, para);
-        List<ObjectTypeCollect> admVOs = AdmEntityTransferUtil.toAdmMultiEntity(dmpResult.getData(), null, ObjectTypeCollect.class);
+        DmpResult<List<ObjectTypeCollect>> dmpResult = rwdClient.queryObjectClassCollect(context, para);
+        List<ObjectTypeCollect> admVOs = dmpResult.getData();
         // 设置返回值
         AdmResponse response = AdmResponse.success(admVOs);
         return response;

+ 5 - 1
adm-business/adm-middleware/src/main/java/com/persagy/proxy/dictionary/service/impl/AdmDictServiceImpl.java

@@ -88,14 +88,17 @@ public class AdmDictServiceImpl<T> extends AbstractAdmDictBaseServiceImpl<T> imp
             admResponse = queryDictObjectTypeTree(context ,type,clazz);
         }
 
+        //获取交付范围内的设备
         QueryCriteria criteriaCollect = new QueryCriteria();
         ObjectNode nodeCol = JsonNodeFactory.instance.objectNode();
         nodeCol.put("objType", type);
+        nodeCol.put("projectId", context.getProjectId());
         criteriaCollect.setCriteria(nodeCol);
 
         AdmResponse colType = doQueryObjectTypeCollect(context, criteriaCollect);
         List<AdmObjectType> admObjectTypes = (List<AdmObjectType>) admResponse.getContent();
         List<ObjectTypeCollect> collectList = (List<ObjectTypeCollect>) colType.getContent();
+        //标记项目范围内的设备类
         admResponse.setContent(doSetObjectTypeCollect(admObjectTypes, collectList));
         return admResponse;
     }
@@ -597,7 +600,8 @@ public class AdmDictServiceImpl<T> extends AbstractAdmDictBaseServiceImpl<T> imp
         if("common".equals(dictType)){
             criteria.setFilters("groupCode = '0' and projectId = '0'");
         }else{
-            criteria.setFilters("groupCode = '"+context.getGroupCode()+"' and projectId = '"+context.getProjectId()+"'");
+            //criteria.setFilters("groupCode = '"+context.getGroupCode()+"' and projectId = '"+context.getProjectId()+"'");
+            criteria.setFilters(" projectId = '"+context.getProjectId()+"'");
         }
         criteria.setName(classCode);
         AdmResponse admResponse = doQueryObjectInfoCollect(context, criteria, "classCode", clazz);

+ 10 - 1
adm-business/adm-middleware/src/main/java/com/persagy/proxy/report/service/IRelationReportService.java

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -15,6 +16,7 @@ import com.persagy.dmp.define.entity.ObjectTypeDefine;
 import com.persagy.dmp.define.entity.RelationDefine;
 import com.persagy.dmp.delivery.entity.RelationDefineCollect;
 import com.persagy.dmp.digital.entity.ObjectRelation;
+import com.persagy.proxy.common.entity.DmpResult;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
 
 /**
@@ -274,6 +276,13 @@ public interface IRelationReportService {
 	 */
 	Map<String, List<ObjectNode>> findObjectNodesByPage(String groupCode, String projectId, Set<String> objTypes, String infoKey, Set<String> codes);
 
+	/**
+	 * 查询采集 范围
+	 * @param context
+	 * @param queryCriteria
+	 * @return
+	 */
+	DmpResult<List<RelationDefineCollect>> doQueryRelationDefineCollect(InstanceUrlParam context, QueryCriteria queryCriteria);
 
 	/**
 	 * 查询采集 范围
@@ -281,7 +290,7 @@ public interface IRelationReportService {
 	 * @param queryCriteria
 	 * @return
 	 */
-	List<RelationDefineCollect> doQueryRelationDefineCollect(InstanceUrlParam context, QueryCriteria queryCriteria);
+	List<RelationDefineCollect> doQueryRelationDefineCollectList(InstanceUrlParam context, QueryCriteria queryCriteria);
 
 	/**
 	 * 设置采集 范围

+ 26 - 8
adm-business/adm-middleware/src/main/java/com/persagy/proxy/report/service/impl/RelationReportService.java

@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.dto.GraphParentMes;
 import com.persagy.dmp.basic.dto.RequestData;
@@ -43,7 +44,6 @@ import com.persagy.proxy.adm.constant.AdmRelationTypeEnum;
 import com.persagy.proxy.adm.constant.SpaceTypeEnum;
 import com.persagy.proxy.adm.strategy.relationdata.RelationObjectStrategy;
 import com.persagy.proxy.adm.utils.AdmContextUtil;
-import com.persagy.proxy.adm.utils.AdmEntityTransferUtil;
 import com.persagy.proxy.common.client.DmpRwdClient;
 import com.persagy.proxy.common.entity.DmpResult;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
@@ -413,7 +413,7 @@ public class RelationReportService implements IRelationReportService {
 	 * @return
 	 */
 	@Override
-	public List<RelationDefineCollect> doQueryRelationDefineCollect(InstanceUrlParam context, QueryCriteria queryCriteria) {
+	public DmpResult<List<RelationDefineCollect>> doQueryRelationDefineCollect(InstanceUrlParam context, QueryCriteria queryCriteria) {
 		// 转换参数
 		JSONObject para = null;
 		try {
@@ -422,8 +422,21 @@ public class RelationReportService implements IRelationReportService {
 			return null;
 		}
 		// 调用中台查询
-		DmpResult<JSONArray> dmpResult = rwdClient.queryObjectRelCollect(context, para);
-		List<RelationDefineCollect> admVOs = AdmEntityTransferUtil.toAdmMultiEntity(dmpResult.getData(), null, RelationDefineCollect.class);
+		DmpResult<List<RelationDefineCollect>> dmpResult = rwdClient.queryObjectRelCollect(context, para);
+		return dmpResult;
+	}
+
+	/**
+	 * 查询采集 范围
+	 *
+	 * @param context
+	 * @param queryCriteria
+	 * @return
+	 */
+	@Override
+	public List<RelationDefineCollect> doQueryRelationDefineCollectList(InstanceUrlParam context, QueryCriteria queryCriteria) {
+		DmpResult<List<RelationDefineCollect>> dmpResult = doQueryRelationDefineCollect(context, queryCriteria);
+		List<RelationDefineCollect> admVOs = dmpResult.getData();
 		return  admVOs;
 	}
 
@@ -805,9 +818,6 @@ public class RelationReportService implements IRelationReportService {
 	 */
 	private List<JSONObject> getGraphRelationProjectTree(String groupCode, String projectId, String content) {
 		List<JSONObject> resultList = new ArrayList<>();
-
-		//获取交付范围
-		List<RelationDefineCollect> relationDefineCollects = doQueryRelationDefineCollect(AdmContextUtil.toDmpContext(), new QueryCriteria());
 		// 1.获取所有的一级,二级图类型定义
 		QueryCriteria parentCriteria = new QueryCriteria();
 		List<GraphDefine> graphDefines = DigitalGraphDefineFacade.query(groupCode, projectId,
@@ -867,6 +877,12 @@ public class RelationReportService implements IRelationReportService {
 		}
 
 		// 组装&排序
+		// 获取交付范围
+		QueryCriteria relationCollect = new QueryCriteria();
+		ObjectNode criteria = JsonNodeFactory.instance.objectNode();
+		criteria.put("projectId", projectId);
+		relationCollect.setCriteria(criteria);
+		List<RelationDefineCollect> relationDefineCollects = doQueryRelationDefineCollectList(AdmContextUtil.toDmpContext(), relationCollect);
 		resultList = CollUtil.sort(typeMap.values(), Comparator.comparing(b -> b.getIntValue("sort")));
 		for(JSONObject result:resultList) {
 			String typeId = result.getString("graphTypeId");
@@ -993,7 +1009,7 @@ public class RelationReportService implements IRelationReportService {
 								Map<String, AdmRelationTypeEnum> graphRelTypeMap,
 								Map<String, RelationDefine> relationDefineMap,Map<String, Integer> relCountMap) {
 		String key = graphicId + StrUtil.UNDERLINE + relCode;
-		AdmRelationTypeEnum typeEnum = MapUtil.get(graphRelTypeMap, key, AdmRelationTypeEnum.class);
+ 		AdmRelationTypeEnum typeEnum = MapUtil.get(graphRelTypeMap, key, AdmRelationTypeEnum.class);
 		RelationDefine relationDefine = relationDefineMap.getOrDefault(key,new RelationDefine());
 		JSONObject result = new JSONObject();
 		result.put("count", relCountMap.getOrDefault(key,0));
@@ -1035,6 +1051,8 @@ public class RelationReportService implements IRelationReportService {
 			String valKey = key+StrUtil.UNDERLINE+zoneType;
 			result.put("count",relCountMap.getOrDefault(valKey,0));
 		}
+		//关系采集范围 默认全部,不做限制 0 项目交付 1现场交付
+		result.put("deliveryType", -1);
 		return result;
 	}