Ver código fonte

优化:关系导入逻辑

lijie 3 anos atrás
pai
commit
e0ab7f48a8
44 arquivos alterados com 484 adições e 88 exclusões
  1. 30 5
      src/main/java/com/persagy/proxy/adm/strategy/RelationObjectContext.java
  2. 12 2
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/AbstractRelationObject.java
  3. 132 6
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/AbstractReportRelationObject.java
  4. 6 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/AcAirNetworkDischargeRelationObject.java
  5. 5 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/AcAirNetworkReturnRelationObject.java
  6. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSh2BdRelationObject.java
  7. 5 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSh2FlRelationObject.java
  8. 5 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSh2ShRelationObject.java
  9. 5 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSh2SpRelationObject.java
  10. 5 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSp2BdRelationObject.java
  11. 5 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSp2FlRelationObject.java
  12. 5 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSp2SpRelationObject.java
  13. 5 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/ConvectionNetworkMixMechRelationObject.java
  14. 5 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/ConvectionNetworkNaturalRelationObject.java
  15. 5 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/ConvectionNetworkOnewayMechRelationObject.java
  16. 5 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/DeafultRelationObject.java
  17. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/EquipPowerEqBackupRelationObject.java
  18. 5 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/EquipPowerEqNormalRelationObject.java
  19. 5 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/EquipPowerSyBackupRelationObject.java
  20. 5 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/EquipPowerSyNormalRelationObject.java
  21. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechCtrlEqCtrlRelationObject.java
  22. 6 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechCtrlSyCtrlRelationObject.java
  23. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchEq2BdRelationObject.java
  24. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchEq2FlRelationObject.java
  25. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchEq2ShRelationObject.java
  26. 5 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchSy2BdRelationObject.java
  27. 6 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchSy2FlRelationObject.java
  28. 6 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchSy2ShRelationObject.java
  29. 6 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchSy2SpRelationObject.java
  30. 5 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechInArchEq2BdRelationObject.java
  31. 6 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechInArchEq2FlRelationObject.java
  32. 6 1
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechInArchEq2SpRelationObject.java
  33. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/RadiationNetworkConnectRelationObject.java
  34. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/RadiationNetworkTransparentRelationObject.java
  35. 12 3
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/RelationObjectStrategy.java
  36. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/SensorRelationshipSs2EqRelationObject.java
  37. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/SensorRelationshipSs2SpRelationObject.java
  38. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/SensorRelationshipSs2SyRelationObject.java
  39. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/TrafficNetworkFFCloseRelationObject.java
  40. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/TrafficNetworkFFOpenRelationObject.java
  41. 6 0
      src/main/java/com/persagy/proxy/adm/strategy/relationdata/TrafficNetworkNormalRelationObject.java
  42. 48 56
      src/main/java/com/persagy/proxy/report/controller/RelationReportController.java
  43. 12 0
      src/main/java/com/persagy/proxy/report/service/IRelationReportService.java
  44. 32 2
      src/main/java/com/persagy/proxy/report/service/impl/RelationReportService.java

+ 30 - 5
src/main/java/com/persagy/proxy/adm/strategy/RelationObjectContext.java

@@ -1,12 +1,10 @@
 package com.persagy.proxy.adm.strategy;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 import javax.annotation.Resource;
 
+import cn.hutool.core.util.StrUtil;
 import org.springframework.stereotype.Component;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -73,7 +71,34 @@ public class RelationObjectContext {
 		}
 		return strategy == null ? "不存在此类型" : strategy.beforeSaveRelationObject(relationObject, groupCode, projectId, code, typeEnum);
 	}
-	
+	/**
+	 * 检查关联对象的合法性
+	 *
+	 * @param relationObjects 当前需要校验的对象
+	 * @param groupCode
+	 * @param projectId
+	 * @param relType graphCode_relCode
+	 * @param code 获取对象的依据
+	 * @param typeEnum ADM定义的类型
+	 * @return String - 校验失败的原因, ObjectNode -- BDTP接口的参数,不会返回null,请用instanceOf 判断返回值
+	 */
+	public Map<String,Object> checkRelationObjects(List<AdmRelationObject> relationObjects, String groupCode,
+												   String projectId, String relType, String code,
+												   AdmRelationTypeEnum typeEnum) {
+		RelationObjectStrategy strategy = this.relationObjectStrategyMap.get(relType);
+		if (strategy == null && typeEnum != null) {
+			strategy = this.relationObjectStrategyMap.get(AdmRelationType.DEFAULT_RELATION_OBJECT);
+		}
+		if (null==strategy){
+			Map<String,Object> result = new HashMap<>();
+			relationObjects.forEach(obj->{
+						result.put(StrUtil.toString(obj.getMasterCode())+StrUtil.UNDERLINE+StrUtil.toString(obj.getSlaveCode()),"不存在此类型");
+					});
+			return result;
+		}
+		return strategy.beforeSaveRelationObjects(relationObjects, groupCode, projectId, code, typeEnum);
+	}
+
 	/**
 	 * 批量保存对象之间的关系
 	 * 

+ 12 - 2
src/main/java/com/persagy/proxy/adm/strategy/relationdata/AbstractRelationObject.java

@@ -1,6 +1,7 @@
 package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -108,9 +109,18 @@ public abstract class AbstractRelationObject implements RelationObjectStrategy {
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code, AdmRelationTypeEnum typeEnum) {
 		return this.beforeSaveRelationObject(relationObject, groupCode, projectId, code);
 	}
-	
+
 	protected Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		throw new UnsupportedOperationException("未实现的策略方法");
 	}
-	
+
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code, AdmRelationTypeEnum typeEnum) {
+		return this.beforeSaveRelationObjects(relationObjects, groupCode, projectId, code);
+	}
+
+	protected Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		throw new UnsupportedOperationException("未实现的策略方法");
+	}
+
 }

+ 132 - 6
src/main/java/com/persagy/proxy/adm/strategy/relationdata/AbstractReportRelationObject.java

@@ -1,9 +1,9 @@
 package com.persagy.proxy.adm.strategy.relationdata;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.proxy.adm.constant.AdmCommonConstant;
@@ -14,6 +14,7 @@ import com.persagy.proxy.report.service.IRelationReportService;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
+import org.json.JSONObject;
 
 /**
  * 报表数据抽象类
@@ -208,10 +209,135 @@ public abstract class AbstractReportRelationObject extends AbstractRelationObjec
 			objectNode.put("objTo", slave.get("id").asText());
 			return objectNode;
 		}
-		
 		return result; 
-	} 
-	
+	}
+
+	/**
+	 * 检查关系对象数据的正确性,并完成额外字段的赋值功能
+	 *
+	 * @param relationTypeEnum AdmRelationTypeEnum枚举类
+	 * @param code
+	 * @return String - 校验失败的原因, ObjectNode -- BDTP接口的参数,不会返回null,请用instanceOf 判断返回值
+	 */
+	protected Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, AdmRelationTypeEnum relationTypeEnum,
+														   String groupCode, String projectId, String code) {
+		Map<String, Object> result = new HashMap<>();
+		if (CollUtil.isEmpty(relationObjects)){
+			return CollUtil.newHashMap(0);
+		}
+		// 收集master的识别编码
+		Set<String> masterCodes = new HashSet<>();
+		Set<String> masterObjTypes = new HashSet<>();
+		// 收集slave的识别编码
+		Set<String> slaveCodes = new HashSet<>();
+		Set<String> slaveObjTypes = new HashSet<>();
+		for (AdmRelationObject relationObject : relationObjects) {
+			if (!StrUtil.isAllNotBlank(relationObject.getMasterCode(), relationObject.getSlaveCode())) {
+				result.put(StrUtil.toString(relationObject.getMasterCode())+StrUtil.UNDERLINE
+						+StrUtil.toString(relationObject.getSlaveCode()),"主对象或从对象的识别编码为空");
+				continue;
+			}
+			// 获取备用的类型
+			String relationType = relationTypeEnum.getRelationType();
+			int indexOf = relationType.indexOf("_");
+			String relCodeBak = indexOf > 0 ? relationType.substring(0, indexOf) : relationType;
+			String relCode = relationTypeEnum.getRelCode();
+			String relCodePrefix = ObjTypeMapping.getRelCodePrefix(relCode);
+			String masterObjType = ObjTypeMapping.PREFIX_FULLNAME.get(relCodePrefix);
+			if (StrUtil.isBlank(masterObjType)) {
+				relCodePrefix = ObjTypeMapping.getRelCodePrefix(relCodeBak);
+				relCodePrefix = StrUtil.upperFirst(relCodePrefix);
+				masterObjType = ObjTypeMapping.PREFIX_FULLNAME.get(relCodePrefix);
+				if (StrUtil.isBlank(masterObjType)) {
+					result.put(relationObject.getMasterCode()+StrUtil.UNDERLINE +relationObject.getSlaveCode(),"边类型错误");
+					continue;
+				}
+			}
+			String slaveObjType = ObjTypeMapping.PREFIX_FULLNAME.get(ObjTypeMapping.getRelCodeSuffix(relCode));
+			if (StrUtil.isBlank(slaveObjType)) {
+				String relCodeSuffix = StrUtil.upperFirst(ObjTypeMapping.getRelCodeSuffix(relCodeBak));
+				slaveObjType = ObjTypeMapping.PREFIX_FULLNAME.get(relCodeSuffix);
+				if (StrUtil.isBlank(slaveObjType)) {
+					result.put(relationObject.getMasterCode()+StrUtil.UNDERLINE +relationObject.getSlaveCode(),"边类型错误");
+					continue;
+				}
+			}
+			if (StrUtil.isBlank(code)
+					|| !RelationObjectStrategy.OBJNAME_2_TYPE.containsKey(code)
+					|| StrUtil.isBlank(RelationObjectStrategy.OBJNAME_2_TYPE.get(code))) {
+				result.put(relationObject.getMasterCode()+StrUtil.UNDERLINE +relationObject.getSlaveCode(),"未找到主对象");
+				continue;
+			}
+			masterCodes.add(relationObject.getMasterCode());
+			slaveCodes.add(relationObject.getSlaveCode());
+			masterObjTypes.add(masterObjType);
+			slaveObjTypes.add(slaveObjType);
+		}
+		if (StrUtil.isBlank(code)
+				|| !RelationObjectStrategy.OBJNAME_2_TYPE.containsKey(code)
+				|| StrUtil.isBlank(RelationObjectStrategy.OBJNAME_2_TYPE.get(code))
+				|| CollUtil.isEmpty(masterCodes)
+				|| CollUtil.isEmpty(slaveCodes)
+				|| CollUtil.isEmpty(masterObjTypes)
+				|| CollUtil.isEmpty(slaveObjTypes)) {
+			return result;
+		}
+		// 查询出对象信息
+		Map<String,List<ObjectNode>> masterMap = this.relationReportService.findObjectNodesByPage(groupCode, projectId,
+				masterObjTypes, RelationObjectStrategy.OBJNAME_2_TYPE.get(code), masterCodes);
+		Map<String,List<ObjectNode>> slaveMap = this.relationReportService.findObjectNodesByPage(groupCode, projectId,
+				slaveObjTypes, RelationObjectStrategy.OBJNAME_2_TYPE.get(code), slaveCodes);
+		String relationType = relationTypeEnum.getRelationType();
+		int indexOf = relationType.indexOf("_");
+		String relCodeSuffix = StrUtil.upperFirst(ObjTypeMapping
+				.getRelCodeSuffix(indexOf > 0 ? relationType.substring(0, indexOf) : relationType));
+		for (AdmRelationObject relationObject : relationObjects) {
+			String key = StrUtil.toString(relationObject.getMasterCode())+StrUtil.UNDERLINE
+					+StrUtil.toString(relationObject.getSlaveCode());
+			if (result.containsKey(key)){
+				continue;
+			}
+			List<ObjectNode> masterNodes = masterMap.get(relationObject.getMasterCode());
+			if (CollectionUtil.isEmpty(masterNodes)) {
+				result.put(relationObject.getMasterCode()+StrUtil.UNDERLINE +relationObject.getSlaveCode(),"未找到主对象");
+				continue;
+			}
+			if (masterNodes.size() > 1) {
+				result.put(relationObject.getMasterCode()+StrUtil.UNDERLINE +relationObject.getSlaveCode(),"匹配到多个主对象");
+				continue;
+			}
+			List<ObjectNode> slaveNodes = slaveMap.get(relationObject.getSlaveCode());
+			if (CollectionUtil.isEmpty(slaveNodes)) {
+				result.put(relationObject.getMasterCode()+StrUtil.UNDERLINE +relationObject.getSlaveCode(),"未找到从对象");
+				continue;
+			}
+			if (slaveNodes.size() > 1) {
+				result.put(relationObject.getMasterCode()+StrUtil.UNDERLINE +relationObject.getSlaveCode(),"匹配到多个从对象");
+				continue;
+			}
+			// 添加关系数据
+			ObjectNode master = masterNodes.get(0);
+			ObjectNode slave = slaveNodes.get(0);
+			String masterClassCode = master.get("classCode") == null ? AdmCommonConstant.EMPTY : master.get("classCode").asText();
+			String slaveClassCode = slave.get("classCode") == null ? AdmCommonConstant.EMPTY : slave.get("classCode").asText();
+			String subResult = this.checkRelationObject(master, masterClassCode, slave, slaveClassCode);
+			if (StrUtil.isBlank(subResult)) {
+				ObjectNode objectNode = OBJECT_MAPPER.createObjectNode();
+				String graphCode = relationTypeEnum.getGraphCode();
+				objectNode.put("graphId", "Gt" + graphCode + "001");
+				objectNode.put("graphCode", graphCode);
+				objectNode.put("relCode", relationTypeEnum.getRelCode());
+				if ("Sp".equals(relCodeSuffix)) {
+					objectNode.put("relValue", masterClassCode);
+				}
+				objectNode.put("objFrom", master.get("id").asText());
+				objectNode.put("objTo", slave.get("id").asText());
+				result.put(relationObject.getMasterCode()+StrUtil.UNDERLINE +relationObject.getSlaveCode(),objectNode);
+			}
+		}
+		return result;
+	}
+
 	/**
 	 * 检查关系对象数据的正确性,并可完成额外字段的赋值功能
 	 * 默认不实现,由子类实现

+ 6 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/AcAirNetworkDischargeRelationObject.java

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -77,5 +78,9 @@ public class AcAirNetworkDischargeRelationObject extends AbstractReportRelationO
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2EQ_ACAIRNETWORK_3, groupCode, projectId, code);
 	}
-	
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2EQ_ACAIRNETWORK_3, groupCode, projectId, code);
+	}
+
 }

+ 5 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/AcAirNetworkReturnRelationObject.java

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -77,5 +78,9 @@ public class AcAirNetworkReturnRelationObject extends AbstractReportRelationObje
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2EQ_ACAIRNETWORK_2, groupCode, projectId, code);
 	}
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2EQ_ACAIRNETWORK_2, groupCode, projectId, code);
+	}
 	
 }

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSh2BdRelationObject.java

@@ -17,6 +17,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -74,5 +75,10 @@ public class ArchForArchSh2BdRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SH2BD_ARCHFORARCH, groupCode, projectId, code);
 	}
+
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SH2BD_ARCHFORARCH, groupCode, projectId, code);
+	}
 	
 }

+ 5 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSh2FlRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -89,5 +90,8 @@ public class ArchForArchSh2FlRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SH2FL_ARCHFORARCH, groupCode, projectId, code);
 	}
-	
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SH2FL_ARCHFORARCH, groupCode, projectId, code);
+	}
 }

+ 5 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSh2ShRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -81,4 +82,8 @@ public class ArchForArchSh2ShRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SH2SH_ARCHFORARCH, groupCode, projectId, code);
 	}
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SH2SH_ARCHFORARCH, groupCode, projectId, code);
+	}
 }

+ 5 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSh2SpRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -98,5 +99,8 @@ public class ArchForArchSh2SpRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SH2SP_ARCHFORARCH, groupCode, projectId, code);
 	}
-
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SH2SP_ARCHFORARCH, groupCode, projectId, code);
+	}
 }

+ 5 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSp2BdRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -96,5 +97,8 @@ public class ArchForArchSp2BdRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SP2BD_ARCHFORARCH, groupCode, projectId, code);
 	}
-	
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SP2BD_ARCHFORARCH, groupCode, projectId, code);
+	}
 }

+ 5 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSp2FlRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -99,5 +100,8 @@ public class ArchForArchSp2FlRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SP2FL_ARCHFORARCH, groupCode, projectId, code);
 	}
-	
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SP2FL_ARCHFORARCH, groupCode, projectId, code);
+	}
 }

+ 5 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/ArchForArchSp2SpRelationObject.java

@@ -17,6 +17,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -102,5 +103,8 @@ public class ArchForArchSp2SpRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SP2SP_ARCHFORARCH, groupCode, projectId, code);
 	}
-	
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SP2SP_ARCHFORARCH, groupCode, projectId, code);
+	}
 }

+ 5 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/ConvectionNetworkMixMechRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -80,6 +81,10 @@ public class ConvectionNetworkMixMechRelationObject extends AbstractReportRelati
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SP2SP_CONVECTIONNETWORK_2, groupCode, projectId, code);
 	}
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SP2SP_CONVECTIONNETWORK_2, groupCode, projectId, code);
+	}
 
 	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,

+ 5 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/ConvectionNetworkNaturalRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -80,6 +81,10 @@ public class ConvectionNetworkNaturalRelationObject extends AbstractReportRelati
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SP2SP_CONVECTIONNETWORK_1, groupCode, projectId, code);
 	}
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SP2SP_CONVECTIONNETWORK_1, groupCode, projectId, code);
+	}
 
 	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,

+ 5 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/ConvectionNetworkOnewayMechRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -80,7 +81,10 @@ public class ConvectionNetworkOnewayMechRelationObject extends AbstractReportRel
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SP2SP_CONVECTIONNETWORK_3, groupCode, projectId, code);
 	}
-
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SP2SP_CONVECTIONNETWORK_3, groupCode, projectId, code);
+	}
 	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,
 			String slaveClassCode) {

+ 5 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/DeafultRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -79,5 +80,9 @@ public class DeafultRelationObject extends AbstractReportRelationObject {
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code, AdmRelationTypeEnum typeEnum) {
 		return this.beforeSaveRelationObject(relationObject, typeEnum, groupCode, projectId, code);
 	}
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code, AdmRelationTypeEnum typeEnum) {
+		return this.beforeSaveRelationObjects(relationObjects, typeEnum, groupCode, projectId, code);
+	}
 
 }

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/EquipPowerEqBackupRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -80,6 +81,10 @@ public class EquipPowerEqBackupRelationObject extends AbstractReportRelationObje
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2EQ_EQUIPPOWER_2, groupCode, projectId, code);
 	}
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2EQ_EQUIPPOWER_2, groupCode, projectId, code);
+	}
 
 	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,
@@ -89,5 +94,6 @@ public class EquipPowerEqBackupRelationObject extends AbstractReportRelationObje
 		}
 		return null;
 	}
+
 	
 }

+ 5 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/EquipPowerEqNormalRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -80,6 +81,10 @@ public class EquipPowerEqNormalRelationObject extends AbstractReportRelationObje
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2EQ_EQUIPPOWER_1, groupCode, projectId, code);
 	}
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2EQ_EQUIPPOWER_1, groupCode, projectId, code);
+	}
 
 	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,

+ 5 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/EquipPowerSyBackupRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -80,7 +81,10 @@ public class EquipPowerSyBackupRelationObject extends AbstractReportRelationObje
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2EQ_EQUIPPOWER_4, groupCode, projectId, code);
 	}
-
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2EQ_EQUIPPOWER_4, groupCode, projectId, code);
+	}
 	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,
 			String slaveClassCode) {

+ 5 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/EquipPowerSyNormalRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -80,6 +81,10 @@ public class EquipPowerSyNormalRelationObject extends AbstractReportRelationObje
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2EQ_EQUIPPOWER_3, groupCode, projectId, code);
 	}
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2EQ_EQUIPPOWER_3, groupCode, projectId, code);
+	}
 
 	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechCtrlEqCtrlRelationObject.java

@@ -20,6 +20,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -78,5 +79,10 @@ public class MechCtrlEqCtrlRelationObject extends AbstractReportRelationObject {
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2EQ_CONTROLRELATION_1, groupCode, projectId, code);
 	}
+
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2EQ_CONTROLRELATION_1, groupCode, projectId, code);
+	}
 	
 }

+ 6 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechCtrlSyCtrlRelationObject.java

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -77,5 +78,9 @@ public class MechCtrlSyCtrlRelationObject extends AbstractReportRelationObject {
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2SY_CONTROLRELATION_2, groupCode, projectId, code);
 	}
-	
+
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2SY_CONTROLRELATION_2, groupCode, projectId, code);
+	}
 }

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchEq2BdRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -99,4 +100,9 @@ public class MechForArchEq2BdRelationObject extends AbstractReportRelationObject
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2BD_FOR, groupCode, projectId, code);
 	}
 
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2BD_FOR, groupCode, projectId, code);
+	}
+
 }

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchEq2FlRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -100,4 +101,9 @@ public class MechForArchEq2FlRelationObject extends AbstractReportRelationObject
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2FL_FOR, groupCode, projectId, code);
 	}
 
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2FL_FOR, groupCode, projectId, code);
+	}
+
 }

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchEq2ShRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -98,5 +99,10 @@ public class MechForArchEq2ShRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2SH_FOR, groupCode, projectId, code);
 	}
+
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2SH_FOR, groupCode, projectId, code);
+	}
 	
 }

+ 5 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchSy2BdRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -82,4 +83,8 @@ public class MechForArchSy2BdRelationObject extends AbstractReportRelationObject
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SY2BD_FOR, groupCode, projectId, code);
 	}
 
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SY2BD_FOR, groupCode, projectId, code);
+	}
 }

+ 6 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchSy2FlRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -90,5 +91,9 @@ public class MechForArchSy2FlRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SY2FL_FOR, groupCode, projectId, code);
 	}
-	
+
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SY2FL_FOR, groupCode, projectId, code);
+	}
 }

+ 6 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchSy2ShRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -81,5 +82,9 @@ public class MechForArchSy2ShRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SY2SH_FOR, groupCode, projectId, code);
 	}
-	
+
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SY2SH_FOR, groupCode, projectId, code);
+	}
 }

+ 6 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechForArchSy2SpRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -98,5 +99,9 @@ public class MechForArchSy2SpRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.SY2SP_FOR, groupCode, projectId, code);
 	}
-	
+
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SY2SP_FOR, groupCode, projectId, code);
+	}
 }

+ 5 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechInArchEq2BdRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -92,4 +93,8 @@ public class MechInArchEq2BdRelationObject extends AbstractReportRelationObject
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2BD, groupCode, projectId, code);
 	}
 
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2BD, groupCode, projectId, code);
+	}
 }

+ 6 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechInArchEq2FlRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -86,5 +87,9 @@ public class MechInArchEq2FlRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2FL, groupCode, projectId, code);
 	}
-	
+
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2FL, groupCode, projectId, code);
+	}
 }

+ 6 - 1
src/main/java/com/persagy/proxy/adm/strategy/relationdata/MechInArchEq2SpRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -81,5 +82,9 @@ public class MechInArchEq2SpRelationObject extends AbstractReportRelationObject
 	public Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code) {
 		return this.beforeSaveRelationObject(relationObject, AdmRelationTypeEnum.EQ2SP_IN, groupCode, projectId, code);
 	}
-	
+
+	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2SP_IN, groupCode, projectId, code);
+	}
 }

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/RadiationNetworkConnectRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -82,6 +83,11 @@ public class RadiationNetworkConnectRelationObject extends AbstractReportRelatio
 	}
 
 	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SP2SP_RADIATIONNETWORK_1, groupCode, projectId, code);
+	}
+
+	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,
 			String slaveClassCode) {
 		if (!SpaceTypeEnum.LightingZone.getCode().equals(masterClassCode)) {

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/RadiationNetworkTransparentRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -82,6 +83,11 @@ public class RadiationNetworkTransparentRelationObject extends AbstractReportRel
 	}
 
 	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SP2SP_RADIATIONNETWORK_2, groupCode, projectId, code);
+	}
+
+	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,
 			String slaveClassCode) {
 		if (!SpaceTypeEnum.LightingZone.getCode().equals(masterClassCode)) {

+ 12 - 3
src/main/java/com/persagy/proxy/adm/strategy/relationdata/RelationObjectStrategy.java

@@ -33,9 +33,9 @@ public interface RelationObjectStrategy {
 		{
             put("对象ID", "id");
             put("对象名称", "name");
-            put("对象本地编码", "local_id");
-            put("对象本地名称", "local_name");
-            put("设计图纸中编码", "cad_id");
+            put("对象本地编码", "localId");
+            put("对象本地名称", "localName");
+            put("设计图纸中编码", "cADID");
         }
     };
     
@@ -89,6 +89,15 @@ public interface RelationObjectStrategy {
 	 * @return String - 校验失败的原因, ObjectNode -- BDTP接口的参数,不会返回null,请用instanceOf 判断返回值
 	 */
 	Object beforeSaveRelationObject(AdmRelationObject relationObject, String groupCode, String projectId, String code, AdmRelationTypeEnum typeEnum);
+	/**
+	 * 检查关系对象数据的正确性,并完成额外字段的赋值功能
+	 *
+	 * @param relationTypeEnum AdmRelationTypeEnum枚举类
+	 * @param code
+	 * @return String - 校验失败的原因, ObjectNode -- BDTP接口的参数,不会返回null,请用instanceOf 判断返回值
+	 */
+	Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode,
+												 String projectId, String code, AdmRelationTypeEnum relationTypeEnum);
 
 	/**
 	 * 保存对象之间的关系

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/SensorRelationshipSs2EqRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -82,6 +83,11 @@ public class SensorRelationshipSs2EqRelationObject extends AbstractReportRelatio
 	}
 
 	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2EQ_SENSORRELATIONSHIP_SS2EQ, groupCode, projectId, code);
+	}
+
+	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,
 			String slaveClassCode) {
 		if (!AdmObjectInfoConstant.CHECK_SENSOR_CODES.contains(masterClassCode)) {

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/SensorRelationshipSs2SpRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -83,6 +84,11 @@ public class SensorRelationshipSs2SpRelationObject extends AbstractReportRelatio
 	}
 
 	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2SP_SENSORRELATIONSHIP_SS2SP, groupCode, projectId, code);
+	}
+
+	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,
 			String slaveClassCode) {
 		if (!AdmObjectInfoConstant.CHECK_SENSOR_CODES.contains(masterClassCode)) {

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/SensorRelationshipSs2SyRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -82,6 +83,11 @@ public class SensorRelationshipSs2SyRelationObject extends AbstractReportRelatio
 	}
 
 	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.EQ2SY_SENSORRELATIONSHIP_SS2SY, groupCode, projectId, code);
+	}
+
+	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,
 			String slaveClassCode) {
 		if (!AdmObjectInfoConstant.CHECK_SENSOR_CODES.contains(masterClassCode)) {

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/TrafficNetworkFFCloseRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -82,6 +83,11 @@ public class TrafficNetworkFFCloseRelationObject extends AbstractReportRelationO
 	}
 
 	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SP2SP_TRAFFICNETWORK_3, groupCode, projectId, code);
+	}
+
+	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,
 			String slaveClassCode) {
 		if (!SpaceTypeEnum.GeneralZone.getCode().equals(masterClassCode)) {

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/TrafficNetworkFFOpenRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -82,6 +83,11 @@ public class TrafficNetworkFFOpenRelationObject extends AbstractReportRelationOb
 	}
 
 	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SP2SP_TRAFFICNETWORK_2, groupCode, projectId, code);
+	}
+
+	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,
 			String slaveClassCode) {
 		if (!SpaceTypeEnum.GeneralZone.getCode().equals(masterClassCode)) {

+ 6 - 0
src/main/java/com/persagy/proxy/adm/strategy/relationdata/TrafficNetworkNormalRelationObject.java

@@ -2,6 +2,7 @@ package com.persagy.proxy.adm.strategy.relationdata;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -82,6 +83,11 @@ public class TrafficNetworkNormalRelationObject extends AbstractReportRelationOb
 	}
 
 	@Override
+	public Map<String,Object> beforeSaveRelationObjects(List<AdmRelationObject> relationObjects, String groupCode, String projectId, String code) {
+		return this.beforeSaveRelationObjects(relationObjects, AdmRelationTypeEnum.SP2SP_TRAFFICNETWORK_1, groupCode, projectId, code);
+	}
+
+	@Override
 	protected String checkRelationObject(ObjectNode master, String masterClassCode, ObjectNode slave,
 			String slaveClassCode) {
 		if (!SpaceTypeEnum.GeneralZone.getCode().equals(masterClassCode)) {

+ 48 - 56
src/main/java/com/persagy/proxy/report/controller/RelationReportController.java

@@ -3,6 +3,7 @@ package com.persagy.proxy.report.controller;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.poi.excel.ExcelReader;
 import cn.hutool.poi.excel.ExcelUtil;
 import cn.hutool.poi.excel.RowUtil;
 import cn.hutool.poi.excel.WorkbookUtil;
@@ -483,7 +484,7 @@ public class RelationReportController {
 	public AdmResponse importFile(@RequestParam("file") MultipartFile file, @RequestParam String relType, 
 			@RequestParam(required = false) String zoneType, HttpServletRequest request, HttpServletResponse response) {
 		String failure = null;
-		XSSFWorkbook workbook = null;
+		Workbook workbook = null;
 		FileOutputStream fileOutputStream = null;
 		try {
 			if (file == null) {
@@ -503,86 +504,77 @@ public class RelationReportController {
 			// 批量更新数据
 			List<ObjectNode> relationObjects = new ArrayList<ObjectNode>();
 			InstanceUrlParam context = AdmContextUtil.toDmpContext();
-			workbook = new XSSFWorkbook(file.getInputStream());
-		    XSSFSheet sheet = workbook.getSheet("关系维护");
-		    // 获取识别码的属性
-		    String code = sheet.getRow(2).getCell(1).toString();
-		    int lastRowNum = sheet.getLastRowNum();
-		    for (int i = 5; i <= lastRowNum; i++) {
-		    	XSSFRow xssfRow = sheet.getRow(i);
-		    	if (xssfRow == null) {
-					continue;
+			ExcelReader excelReader = ExcelUtil.getReader(file.getInputStream(), "关系维护");
+			// 获取真实行数
+			int rowCount = excelReader.getRowCount();
+			if (rowCount<=5){
+				// 没有数据,直接返回成功
+				return AdmResponse.success(Lists.newArrayList(AdmExcelUtil.getImportResult(graphId, successNum, failurNum)));
+			}
+			String code = StrUtil.utf8Str(excelReader.readCellValue(1,2));
+			if (StrUtil.isBlank(code)){
+				return AdmResponse.failure("未选择识别编码");
+			}
+			for (int i = 5; i < rowCount; i=i+1000) {
+				List<AdmRelationObject> admRelationObjects = new ArrayList<>();
+				int index = Math.min(i + 1000, rowCount);
+				for (int j = i; j < index; j++) {
+					String masterCodeCell = StrUtil.utf8Str(excelReader.readCellValue(0,j));
+					String slaveCodeCell = StrUtil.utf8Str(excelReader.readCellValue(8,j));
+					String masterIdCell = StrUtil.utf8Str(excelReader.readCellValue(3,j));
+					String slaveIdCell = StrUtil.utf8Str(excelReader.readCellValue(11,j));
+					AdmRelationObject relationObject = new AdmRelationObject();
+					relationObject.setMasterCode(masterCodeCell);
+					relationObject.setSlaveCode(slaveCodeCell);
+					relationObject.setMasterId(masterIdCell);
+					relationObject.setSlaveId(slaveIdCell);
+					admRelationObjects.add(relationObject);
 				}
-		    	// 封装cell数据
-		    	XSSFCell masterCodeCell = xssfRow.getCell(0);
-		    	XSSFCell slaveCodeCell = xssfRow.getCell(8);
-		    	XSSFCell masterIdCell = xssfRow.getCell(3);
-		    	XSSFCell slaveIdCell = xssfRow.getCell(11);
-		    	
-		    	AdmRelationObject relationObject = new AdmRelationObject();
-		    	relationObject.setMasterCode(masterCodeCell == null ? null : masterCodeCell.getStringCellValue());
-		    	relationObject.setSlaveCode(slaveCodeCell == null ? null : slaveCodeCell.getStringCellValue());
-		    	relationObject.setMasterId(masterIdCell == null ? null : masterIdCell.getStringCellValue());
-		    	relationObject.setSlaveId(slaveIdCell == null ? null : slaveIdCell.getStringCellValue());
-		    	
-		    	// 校验数据
-				Object result = this.relationObjectContext.checkRelationObject(relationObject, context.getGroupCode(),
+				Map<String, Object> resultMap = this.relationObjectContext.checkRelationObjects(admRelationObjects, context.getGroupCode(),
 						context.getProjectId(), graphAndRelKey, code, typeEnum);
-				if (result instanceof String) {
-					failurNum++;
-					xssfRow.createCell(16).setCellValue((String)result);
-					continue;
+				for (int j = i; j < index; j++) {
+					String masterCodeCell = StrUtil.utf8Str(excelReader.readCellValue(0, j));
+					String slaveCodeCell = StrUtil.utf8Str(excelReader.readCellValue(8, j));
+					String key = StrUtil.toString(masterCodeCell) + StrUtil.UNDERLINE +StrUtil.toString(slaveCodeCell);
+					Object str = resultMap.getOrDefault(key, "对象不存在");
+					if (str instanceof String) {
+						failurNum++;
+						CellUtil.setCellValue(CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(excelReader.getSheet(),j),16),str,null);
+						continue;
+					}
+					ObjectNode relation = (ObjectNode) str;
+					graphId = relation.get("graphId") == null ? graphId : relation.get("graphId").asText();
+					// 每一千条数据,批量新增一次
+					relationObjects.add(relation);
+					rowNums.add(j);
 				}
-				ObjectNode relation = (ObjectNode) result;
-				graphId = relation.get("graphId") == null ? graphId : relation.get("graphId").asText();
-				
-				// 每一千条数据,批量新增一次
-				rowNums.add(i);
-				relationObjects.add(relation);
-				if (relationObjects.size() >= 1000) {
+				if (CollUtil.isNotEmpty(relationObjects)) {
 					boolean objects = this.relationObjectContext.saveRelationObjects(relationObjects, context.getGroupCode(),
 							context.getProjectId(), graphAndRelKey);
 					if (objects) {
 						successNum += relationObjects.size();
 						for (int rowNum : rowNums) {
-							sheet.getRow(rowNum).createCell(16).setCellValue("关联成功");
+							CellUtil.setCellValue(CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(excelReader.getSheet(),rowNum),16),"关联成功",null);
 						}
 					} else {
 						failurNum += relationObjects.size();
 						for (int rowNum : rowNums) {
-							sheet.getRow(rowNum).createCell(16).setCellValue("关联失败");
+							CellUtil.setCellValue(CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(excelReader.getSheet(),rowNum),16),"关联失败",null);
 						}
 					}
 					rowNums.clear();
 					relationObjects.clear();
 				}
 			}
-		    // 最后一次遗留数据录入
-		    if (CollectionUtil.isNotEmpty(relationObjects)) {
-		    	boolean objects = this.relationObjectContext.saveRelationObjects(relationObjects, context.getGroupCode(), context.getProjectId(), graphAndRelKey);
-				if (objects) {
-					successNum += relationObjects.size();
-					for (int rowNum : rowNums) {
-						sheet.getRow(rowNum).createCell(16).setCellValue("关联成功");
-					}
-				} else {
-					failurNum += relationObjects.size();
-					for (int rowNum : rowNums) {
-						sheet.getRow(rowNum).createCell(16).setCellValue("关联失败");
-					}
-				}
-			}
-		    
-        	try {
+			try {
         		// 调用中台存储完成之后,此文件存储至本地
         		String fileName = context.getProjectId() + AdmCommonConstant.LINE_THROUGH + relType + AdmCommonConstant.EXCEL_SUFFIX_XLSX;
         		File templateFile = AdmExcelUtil.createTemplateFile(AdmCommonConstant.SERVER_ROOT_PATH + AdmExcelUtil.TEMP_PAHT, fileName);
         		fileOutputStream = new FileOutputStream(templateFile);
-        		workbook.write(fileOutputStream);
+        		excelReader.getWorkbook().write(fileOutputStream);
 			} catch (Exception e) {
 				log.error("文件存储失败", e);
 			}
-        	
         	return AdmResponse.success(Lists.newArrayList(AdmExcelUtil.getImportResult(graphId, successNum, failurNum)));
 		} catch (Exception e) {
 			log.error("文件导入失败", e);

+ 12 - 0
src/main/java/com/persagy/proxy/report/service/IRelationReportService.java

@@ -260,4 +260,16 @@ public interface IRelationReportService {
 	 * Update By lijie 2021/11/16 16:18
 	 */
 	Map<String, List<ObjectInfoDefine>> queryDefineInfoMapByClassCodes(Set<String> classCodes);
+	/**
+	 * 获取指定对象信息
+	 * <p>定制接口,不建议兼容额外的处理方案</p>
+	 *
+	 * @param groupCode: 集团编码
+	 * @param projectId: 项目id
+	 * @param objTypes: 对象类型集合
+	 * @param infoKey:	信息点key
+	 * @param codes: 信息点值集合
+	 * @return
+	 */
+	Map<String, List<ObjectNode>> findObjectNodesByPage(String groupCode, String projectId, Set<String> objTypes, String infoKey, Set<String> codes);
 }

+ 32 - 2
src/main/java/com/persagy/proxy/report/service/impl/RelationReportService.java

@@ -365,7 +365,36 @@ public class RelationReportService implements IRelationReportService {
 		this.queryPageObjects(all, queryCriteria, groupCode, projectId);
 		return all;
 	}
-	
+
+	@Override
+	public Map<String, List<ObjectNode>> findObjectNodesByPage(String groupCode, String projectId, Set<String> objTypes,
+															   String infoKey, Set<String> codes) {
+		if (StrUtil.isBlank(infoKey) || CollUtil.isEmpty(objTypes) || CollUtil.isEmpty(codes)){
+			return new HashMap<>();
+		}
+		ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+		QueryCriteria queryCriteria = new QueryCriteria();
+		ObjectNode criteria = objectMapper.createObjectNode();
+		criteria.putPOJO(infoKey, codes);
+		criteria.putPOJO("objType", objTypes);
+		criteria.put("valid", 1);
+		queryCriteria.setCriteria(criteria);
+		queryCriteria.setPage(1L);
+		queryCriteria.setSize(SpringHelper.getLong("persagy.common.sql.limit",500L));
+		List<ObjectNode> all = new ArrayList<ObjectNode>();
+		this.queryPageObjects(all, queryCriteria, groupCode, projectId);
+		Map<String, List<ObjectNode>> result = new HashMap<>();
+		for (ObjectNode objectNode : all) {
+			if (!objectNode.has(infoKey) || !objectNode.get(infoKey).isTextual()){
+				continue;
+			}
+			List<ObjectNode> list = result.getOrDefault(objectNode.get(infoKey).asText(), new ArrayList<>());
+			list.add(objectNode);
+			result.put(objectNode.get(infoKey).asText(),list);
+		}
+		return result;
+	}
+
 	@Override
 	public ObjectNode getObjectByCodeAndId(String groupCode, String projectId, String graphCode, String relCode, String objFrom, String objTo) {
 		// 获取出关联对象
@@ -982,7 +1011,8 @@ public class RelationReportService implements IRelationReportService {
 	 * @param projectId
 	 */
 	private void queryPageObjects(List<ObjectNode> all, QueryCriteria objectCriteria, String groupCode, String projectId) {
-		CommonResult<List<ObjectNode>> queryPrototype = DigitalObjectFacade.queryPrototype(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, objectCriteria);
+		CommonResult<List<ObjectNode>> queryPrototype = DigitalObjectFacade.queryPrototype(groupCode, projectId,
+				AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, objectCriteria);
 		Long count = queryPrototype.getCount();
 		List<ObjectNode> infos = queryPrototype.getData();
 		if (count == null || CollectionUtil.isEmpty(infos)) {