Browse Source

Merge branch 'develop' of http://39.106.8.246:3003/BDTP/digital-delivery

zhaoyk 3 years ago
parent
commit
c7f9ab7df2
43 changed files with 1193 additions and 441 deletions
  1. 21 21
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/DiagramController.java
  2. 25 0
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/adm/handler/InitRunner.java
  3. 8 1
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/dictionary/service/IAdmDictBaseService.java
  4. 3 3
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/dictionary/service/impl/AdmDictServiceImpl.java
  5. 3 1
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/service/Impl/DefineInfoMigration.java
  6. 3 1
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/service/Impl/DefineTypeMigration.java
  7. 3 2
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/service/Impl/ObjectDigitalMigration.java
  8. 3 2
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/service/Impl/ObjectRelationMigration.java
  9. 18 18
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/report/controller/ComponentBuildingController.java
  10. 2 1
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/report/controller/RelationReportController.java
  11. 19 1
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/report/service/IRelationReportService.java
  12. 69 0
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/report/service/impl/RelationReportService.java
  13. 6 1
      adm-business/adm-server/.easy.api.config
  14. 32 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/constant/AdmModelFileStatusEnum.java
  15. 45 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/controller/AdmDeliverPlanController.java
  16. 45 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/controller/AdmModelBackController.java
  17. 56 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/controller/AdmModelController.java
  18. 15 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/dao/AdmModelFileMapper.java
  19. 69 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/domain/DeliverPlanVo.java
  20. 53 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/domain/ModelFileVo.java
  21. 18 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/domain/QueryModelFileVo.java
  22. 125 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/entity/AdmModelFile.java
  23. 9 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/AdmDeliverPlanService.java
  24. 16 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/AdmModelBackService.java
  25. 22 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/AdmModelFileService.java
  26. 18 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/AdmModelService.java
  27. 21 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/impl/AdmDeliverPlanServiceImpl.java
  28. 117 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/impl/AdmModelBackServiceImpl.java
  29. 38 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/impl/AdmModelFileServiceImpl.java
  30. 29 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/impl/AdmModelServiceImpl.java
  31. 2 3
      adm-business/adm-server/src/main/java/com/persagy/adm/server/auth/controller/AdmAuthController.java
  32. 33 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/client/RwdClient.java
  33. 15 3
      adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/controller/AppController.java
  34. 0 362
      adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/controller/ToolController.java
  35. 5 3
      adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/entity/Dict.java
  36. 5 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/entity/db/AdmProblem.java
  37. 45 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/entity/db/ObjectInfoCollect.java
  38. 41 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/entity/db/ObjectTypeCollect.java
  39. 43 0
      adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/entity/db/RelationDefineCollect.java
  40. 11 17
      adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/service/impl/SyncAppImpl.java
  41. 32 0
      adm-business/adm-server/src/main/resources/db/init/schema.sql
  42. 48 0
      adm-business/adm-server/src/main/resources/mapper/AdmModelFileMapper.xml
  43. 2 1
      pom.xml

+ 21 - 21
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/DiagramController.java

@@ -122,28 +122,28 @@ public class DiagramController {
     private void buildLinesAndNodes(Diagram diagram, Map<String, Object> map) {
         Optional.ofNullable(map.get("lines")).ifPresent(lines ->
                 diagram.setLines(Arrays.asList(parser.parseContent(parser.toJson(lines), Line[].class))));
-        Optional.ofNullable(map.get("template")).ifPresent(template -> {
-            List<DiagramNode> nodes = new ArrayList<>();
-            Optional.ofNullable(parser.parseContent(parser.toJson(template), DiagramTemplate.class)).ifPresent(diagramTemplate -> {
-                List<Container> containers = diagramTemplate.getContainers();
-                if (CollectionUtil.isNotEmpty(containers)) {
-                    containers.forEach(container -> {
-                        if (container.isEquipmentBox()) {
-                            List<IComponent> children = container.getChildren();
-                            if (CollectionUtil.isNotEmpty(children)) {
-                                children.forEach(iComponent -> {
-                                    if (StrUtil.equalsIgnoreCase(iComponent.getCompType(), EquipmentNode.TYPE)) {
-                                        DiagramNode node = parser.parseContent(parser.toJson(iComponent), DiagramNode.class);
-                                        nodes.add(node);
-                                    }
-                                });
+        List<DiagramNode> nodes = new ArrayList<>();
+        Optional.ofNullable(map.get("template")).flatMap(template ->
+                Optional.ofNullable(parser.parseContent(parser.toJson(template), DiagramTemplate.class)))
+                .ifPresent(diagramTemplate -> {
+                    List<Container> containers = diagramTemplate.getContainers();
+                    if (CollectionUtil.isNotEmpty(containers)) {
+                        containers.forEach(container -> {
+                            if (container.isEquipmentBox()) {
+                                List<IComponent> children = container.getChildren();
+                                if (CollectionUtil.isNotEmpty(children)) {
+                                    children.forEach(iComponent -> {
+                                        if (StrUtil.equalsIgnoreCase(iComponent.getCompType(), EquipmentNode.TYPE)) {
+                                            DiagramNode node = parser.parseContent(parser.toJson(iComponent), DiagramNode.class);
+                                            nodes.add(node);
+                                        }
+                                    });
+                                }
                             }
-                        }
-                    });
-                }
-            });
-            diagram.setNodes(nodes);
-        });
+                        });
+                    }
+                });
+        diagram.setNodes(nodes);
     }
 
     /**

+ 25 - 0
adm-business/adm-middleware/src/main/java/com/persagy/proxy/adm/handler/InitRunner.java

@@ -0,0 +1,25 @@
+package com.persagy.proxy.adm.handler;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+/**
+ * adm-middleware应用初始化
+ * @author : lijie
+ * Update By 2022/1/17 17:05
+ */
+@Component
+@Order(1)
+@Slf4j
+public class InitRunner implements CommandLineRunner {
+
+	@Override
+	public void run(String... args) throws Exception {
+		log.info("初始化...ZipSecureFile...MinInflateRatio");
+		// 初始化
+		ZipSecureFile.setMinInflateRatio(-1.0D);
+	}
+
+}

+ 8 - 1
adm-business/adm-middleware/src/main/java/com/persagy/proxy/dictionary/service/IAdmDictBaseService.java

@@ -76,13 +76,20 @@ public interface IAdmDictBaseService<T>{
     AdmResponse doQueryObjectTypeCollect(InstanceUrlParam context, QueryCriteria queryCriteria);
 
     /**
-     * 设置采集信息点
+     * 查询采集 类型
      * @param context
      * @param clazz
      * @param voList
      * @return
      */
     List<T> doSetObjectInfoCollect(InstanceUrlParam context, Class<T> clazz, List<T> voList);
+
+    /**
+     * 设置采集 类型
+     * @param typeList
+     * @param collectTypeList
+     * @return
+     */
     List<AdmObjectType> doSetObjectTypeCollect(List<AdmObjectType> typeList, List<ObjectTypeCollect> collectTypeList);
 
 

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

@@ -86,7 +86,7 @@ public class AdmDictServiceImpl<T> extends AbstractAdmDictBaseServiceImpl<T> imp
 
         QueryCriteria criteriaCollect = new QueryCriteria();
         ObjectNode nodeCol = JsonNodeFactory.instance.objectNode();
-        nodeCol.put("projectId", context.getProjectId());
+        nodeCol.put("objType", type);
         criteriaCollect.setCriteria(nodeCol);
 
         AdmResponse colType = doQueryObjectTypeCollect(context, criteriaCollect);
@@ -181,7 +181,7 @@ public class AdmDictServiceImpl<T> extends AbstractAdmDictBaseServiceImpl<T> imp
                 }else{
                     major.setChildren(systemCodes);
                 }
-                
+
                 //系统下的设备类
                 if(CollUtil.isNotEmpty(systemEquipMap) && CollUtil.isNotEmpty(systemCodes)){
                     for (AdmObjectType systemType : systemCodes) {
@@ -444,7 +444,7 @@ public class AdmDictServiceImpl<T> extends AbstractAdmDictBaseServiceImpl<T> imp
      * @param request
      */
     private void revertSortField(AdmDictQueryCriteria request){
-     request.setOrders("showOrder asc, name desc");
+        request.setOrders("showOrder asc, name desc");
     }
 
     /**

+ 3 - 1
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/service/Impl/DefineInfoMigration.java

@@ -79,6 +79,8 @@ public class DefineInfoMigration extends MigrationAbstractServiceImpl<ObjectInfo
             log.info("######################### DefineInfo 批量插入数据 #########################");
             DataMigrationResponse response = insertBatch(admDefineList, ObjectInfoDefine.class, insertUrl);
             syncDataList.addAll(processDataForLog(response, MigrationType.CREATE.getCode()));
+            super.addSynLog(context, syncDataList);
+            return AdmResponse.success(syncDataList);
         }
         List<ObjectNode> objectNodeListPro = JsonNodeUtils.toListNode(projectDefineList, null, null);
         Map<String,Object> projectDefineMap = toEntityMap(objectNodeListPro, ObjectInfoDefine.class);
@@ -314,7 +316,7 @@ public class DefineInfoMigration extends MigrationAbstractServiceImpl<ObjectInfo
             excel.setCode(define.getCode());
             excel.setName(define.getName());
             excel.setType(type);
-            excel.setCreateTime(define.getCreationTime().toString());
+            excel.setCreateTime(define.getCreationTime() == null ? "" : define.getCreationTime().toString());
             excel.setUpdateTime(define.getModifiedTime() == null ? "" : define.getModifiedTime().toString());
             dataMigrationExcels.add(excel);
         }

+ 3 - 1
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/service/Impl/DefineTypeMigration.java

@@ -81,6 +81,8 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
             log.info("######################### DefineType 批量插入数据 #########################");
             DataMigrationResponse dataMigrationResponse = insertBatch(admDefineList, ObjectTypeDefine.class, insertUrl);
             syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.CREATE.getCode()));
+            super.addSynLog(context, syncDataList);
+            return AdmResponse.success(syncDataList);
         }
         List<ObjectNode> objectNodeListPro = JsonNodeUtils.toListNode(objectNodeList, null, null);
         Map<String,Object> projectDefineMap = toEntityMap(objectNodeListPro, ObjectTypeDefine.class);
@@ -283,7 +285,7 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
             excel.setCode(objectTypeDefine.getCode());
             excel.setName(objectTypeDefine.getName());
             excel.setType(type);
-            excel.setCreateTime(objectTypeDefine.getCreationTime().toString());
+            excel.setCreateTime(objectTypeDefine.getCreationTime() == null ? "" : objectTypeDefine.getCreationTime().toString());
             excel.setUpdateTime(objectTypeDefine.getModifiedTime() == null ? "" : objectTypeDefine.getModifiedTime().toString());
             if(objectTypeDefine.getGroupCode().equals("0") && objectTypeDefine.getProjectId().equals("0")){
                 excel.setMark("标准字典");

+ 3 - 2
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/service/Impl/ObjectDigitalMigration.java

@@ -212,7 +212,8 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
 
             DataMigrationResponse dataMigrationResponse = insertBatch(admData, ObjectDigital.class, insertUrl);
             syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.CREATE.getCode()));
-
+            super.addSynLog(context, syncDataList);
+            return;
         }
         Map<String,Object> projectMap = toEntityMap(projObjectNodeList, ObjectDigital.class);
         Map<String,Object> admMap = toEntityMap(admData, ObjectDigital.class);
@@ -428,7 +429,7 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
             excel.setId(digital.getId());
             excel.setName(String.join(StrUtil.DASHED, digital.getLocalId() == null ? "" : digital.getLocalId(), digital.getLocalName() == null ? "" : digital.getLocalName()));
             excel.setType(type);
-            excel.setCreateTime(digital.getCreationTime().toString());
+            excel.setCreateTime(digital.getCreationTime() == null ? "" : digital.getCreationTime().toString());
             excel.setUpdateTime(digital.getModifiedTime() == null ? "" :digital.getModifiedTime().toString());
             dataMigrationExcels.add(excel);
         }

+ 3 - 2
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/service/Impl/ObjectRelationMigration.java

@@ -333,7 +333,8 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
         if(CollUtil.isEmpty(projectRelations)){
             DataMigrationResponse dataMigrationResponse = insertBatch(admRelations, ObjectRelation.class, insertUrl);
             syncDataList = processDataForLog(dataMigrationResponse, MigrationType.CREATE.getCode());
-
+            super.addSynLog(context, syncDataList);
+            return;
         }
         List<ObjectNode> objectNodeListPro = JsonNodeUtils.toListNode(projectRelations, null, null);
         Map<String,Object> projectDefineMap = toEntityMap(objectNodeListPro, ObjectRelation.class);
@@ -471,7 +472,7 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
             excel.setObjFrom(objectRelation.getObjFrom());
             excel.setObjTo(objectRelation.getObjTo());
             excel.setType(type);
-            excel.setCreateTime(objectRelation.getCreationTime().toString());
+            excel.setCreateTime(objectRelation.getCreationTime() == null ? "" : objectRelation.getCreationTime().toString());
             excel.setUpdateTime(objectRelation.getModifiedTime() == null ? "" :objectRelation.getModifiedTime().toString());
             dataMigrationExcels.add(excel);
         }

+ 18 - 18
adm-business/adm-middleware/src/main/java/com/persagy/proxy/report/controller/ComponentBuildingController.java

@@ -1,15 +1,14 @@
 package com.persagy.proxy.report.controller;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
-import com.persagy.proxy.object.model.AdmBuilding;
-import com.persagy.proxy.object.model.AdmFloor;
 import com.persagy.proxy.adm.request.AdmQueryCriteria;
 import com.persagy.proxy.adm.request.AdmResponse;
-import com.persagy.proxy.object.service.IAdmBuildingService;
-import com.persagy.proxy.object.service.IAdmFloorService;
 import com.persagy.proxy.adm.utils.AdmContextUtil;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
+import com.persagy.proxy.object.model.AdmBuilding;
+import com.persagy.proxy.object.model.AdmFloor;
+import com.persagy.proxy.object.service.IAdmBuildingService;
+import com.persagy.proxy.object.service.IAdmFloorService;
 import com.persagy.proxy.object.service.impl.AdmFloorServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -68,7 +67,6 @@ public class ComponentBuildingController {
 		if(CollUtil.isEmpty(buildings)) {
 			return;
 		}
-		// 按建筑计算模型数量 - 这里先这样写,这种统计不太合理,统计建筑里所有楼层模型总计被使用次数。确认是否需要后再考虑是否移除
 		// 收集建筑下的楼层,处理信息点
 		List<AdmFloor> admFloors = new ArrayList<>(16);
 		for(AdmBuilding building:buildings) {
@@ -77,19 +75,21 @@ public class ComponentBuildingController {
 				continue;
 			}
 			admFloors.addAll(floors);
+			/** 20220117 新版ADM中,不再存在不同楼层使用同一模型的场景,此查询不需要有了。删除 */
+			// 按建筑计算模型数量 - 这里先这样写,这种统计不太合理,统计建筑里所有楼层模型总计被使用次数。确认是否需要后再考虑是否移除
 			// 收集所有模型Id
-			List<Object> modelIds = CollUtil.getFieldValues(floors, "modelId", true);
-			if(CollUtil.isEmpty(modelIds)) {
-				continue;
-			}
-			// 查询模型使用次数
-			AdmQueryCriteria floorCriteria = new AdmQueryCriteria();
-			String inSql = CollUtil.join(modelIds, StrUtil.COMMA,"'","'");
-			floorCriteria.setFilters(" modelId in (" + inSql + ") ");
-			floorCriteria.setOnlyCount(true);
-			AdmResponse floorRs = floorService.query(floorCriteria);
-			// 设置次数
-			building.setCount(floorRs.getCount());
+//			List<Object> modelIds = CollUtil.getFieldValues(floors, "modelId", true);
+//			if(CollUtil.isEmpty(modelIds)) {
+//				continue;
+//			}
+//			// 查询模型使用次数
+//			AdmQueryCriteria floorCriteria = new AdmQueryCriteria();
+//			String inSql = CollUtil.join(modelIds, StrUtil.COMMA,"'","'");
+//			floorCriteria.setFilters(" modelId in (" + inSql + ") ");
+//			floorCriteria.setOnlyCount(true);
+//			AdmResponse floorRs = floorService.query(floorCriteria);
+//			// 设置次数
+//			building.setCount(floorRs.getCount());
 		}
 		floorService.ensureSpecialValues(AdmContextUtil.toDmpContext(), admFloors, AdmFloorServiceImpl.QUERY);
 	}

+ 2 - 1
adm-business/adm-middleware/src/main/java/com/persagy/proxy/report/controller/RelationReportController.java

@@ -38,6 +38,7 @@ import com.persagy.proxy.report.model.EquipmentExcel;
 import com.persagy.proxy.report.service.IRelationReportService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
 import org.apache.poi.ss.usermodel.*;
 import org.springframework.util.ResourceUtils;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -326,7 +327,7 @@ public class RelationReportController {
 			if (!file.exists()) {
 				file = ResourceUtils.getFile(AdmCommonConstant.SERVER_ROOT_PATH + AdmExcelUtil.TEMP_PAHT + "relation-template.xlsx");
 			}
-			
+			//ExcelUtil.getWriter(file).getWorkbook().write(response.getOutputStream());
 			excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(file).build();
 		} catch (Exception e) {
 			log.error("下载报告-点表失败", e);

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

@@ -13,8 +13,9 @@ import com.persagy.dmp.define.entity.GraphDefine;
 import com.persagy.dmp.define.entity.ObjectInfoDefine;
 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 lombok.SneakyThrows;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
 
 /**
  * 报表/模板下载
@@ -272,4 +273,21 @@ public interface IRelationReportService {
 	 * @return
 	 */
 	Map<String, List<ObjectNode>> findObjectNodesByPage(String groupCode, String projectId, Set<String> objTypes, String infoKey, Set<String> codes);
+
+
+	/**
+	 * 查询采集 范围
+	 * @param context
+	 * @param queryCriteria
+	 * @return
+	 */
+	List<RelationDefineCollect> doQueryRelationDefineCollect(InstanceUrlParam context, QueryCriteria queryCriteria);
+
+	/**
+	 * 设置采集 范围
+	 * @param relList
+	 * @param collectRelList
+	 * @return
+	 */
+	void doSetRelationDefineCollect(List<JSONObject> relList, List<RelationDefineCollect> collectRelList);
 }

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

@@ -21,6 +21,7 @@ import com.persagy.dmp.common.constant.CommonConstant;
 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.common.utils.JsonHelper;
 import com.persagy.dmp.define.client.DigitalDefineFacade;
 import com.persagy.dmp.define.client.DigitalGraphDefineFacade;
 import com.persagy.dmp.define.client.DigitalObjectInfoFacade;
@@ -29,6 +30,7 @@ import com.persagy.dmp.define.entity.GraphDefine;
 import com.persagy.dmp.define.entity.ObjectInfoDefine;
 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.client.DigitalObjectFacade;
 import com.persagy.dmp.digital.client.DigitalRelationFacade;
 import com.persagy.dmp.digital.client.DigitalRelationProjectCalFacade;
@@ -40,10 +42,17 @@ import com.persagy.proxy.adm.constant.AdmCommonConstant;
 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;
 import com.persagy.proxy.report.service.IRelationReportService;
 import lombok.SneakyThrows;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -59,6 +68,9 @@ import java.util.stream.Collectors;
 @Service
 public class RelationReportService implements IRelationReportService {
 
+	@Autowired
+	private DmpRwdClient rwdClient;
+
 	@Override
 	public List<ObjectTypeDefine> queryClassList(String groupCode, String projectId, Set<String> classCodes, Set<String> objTypes, List<OrderItem> orderItems) {
 		ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
@@ -393,6 +405,57 @@ public class RelationReportService implements IRelationReportService {
 		return result;
 	}
 
+	/**
+	 * 查询采集 范围
+	 *
+	 * @param context
+	 * @param queryCriteria
+	 * @return
+	 */
+	@Override
+	public List<RelationDefineCollect> doQueryRelationDefineCollect(InstanceUrlParam context, QueryCriteria queryCriteria) {
+		// 转换参数
+		JSONObject para = null;
+		try {
+			para = JsonHelper.toJsonObject(queryCriteria);
+		} catch (IOException e) {
+			return null;
+		}
+		// 调用中台查询
+		DmpResult<JSONArray> dmpResult = rwdClient.queryObjectRelCollect(context, para);
+		List<RelationDefineCollect> admVOs = AdmEntityTransferUtil.toAdmMultiEntity(dmpResult.getData(), null, RelationDefineCollect.class);
+		return  admVOs;
+	}
+
+	/**
+	 * 设置采集 范围
+	 *
+	 * @param relList
+	 * @param collectRelList
+	 * @return
+	 */
+	@Override
+	public void doSetRelationDefineCollect(List<JSONObject> relList, List<RelationDefineCollect> collectRelList) {
+		if(CollUtil.isEmpty(relList)){
+			return ;
+		}
+		if(CollUtil.isEmpty(collectRelList)){
+			return ;
+		}
+		for (RelationDefineCollect relCol : collectRelList){
+			if(relCol.getDeliveryType() == null){
+				continue;
+			}
+			for(JSONObject jsonObject : relList){
+				if(relCol.getRelCode().equals(jsonObject.getString("code")) && relCol.getGraphCode().equals(jsonObject.getString("graphicId"))){
+					jsonObject.put("deliveryType", relCol.getDeliveryType());
+				}
+			}
+		}
+
+	}
+
+
 	@Override
 	public ObjectNode getObjectByCodeAndId(String groupCode, String projectId, String graphCode, String relCode, String objFrom, String objTo) {
 		// 获取出关联对象
@@ -742,6 +805,9 @@ 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,
@@ -799,6 +865,7 @@ public class RelationReportService implements IRelationReportService {
 		if(MapUtil.isEmpty(relMap)) {
 			return resultList;
 		}
+
 		// 组装&排序
 		resultList = CollUtil.sort(typeMap.values(), Comparator.comparing(b -> b.getIntValue("sort")));
 		for(JSONObject result:resultList) {
@@ -818,6 +885,8 @@ public class RelationReportService implements IRelationReportService {
 					continue;
 				}
 				List<JSONObject> relList = CollUtil.sort(rels.values(), Comparator.comparing(b -> b.getString("relationTypeCode")));
+				//设置关系交付范围
+				doSetRelationDefineCollect(relList, relationDefineCollects);
 				graph.put("relationTypeProjectList", relList);
 			}
 		}

+ 6 - 1
adm-business/adm-server/.easy.api.config

@@ -1,8 +1,13 @@
 #额外要求header中携带token
 module=adm-server
+api.tag[@java.lang.Deprecated]=deprecated
 method.additional.param[groovy:!it.containingClass().name().startsWith("com.persagy.adm.server.auth.controller")]={name:"projectId",value:"Pj5001120003",desc:"项目id",required:true}
 method.additional.param[groovy:!it.containingClass().name().startsWith("com.persagy.adm.server.auth.controller")]={name:"groupCode",value:"XG",desc:"集团编码",required:true}
 method.additional.param[groovy:!it.containingClass().name().startsWith("com.persagy.adm.server.auth.controller")]={name:"appId",value:"ADM",desc:"appId",required:false}
 method.additional.param[groovy:!it.containingClass().name().startsWith("com.persagy.adm.server.auth.controller")]={name:"userId",value:"0",desc:"账号id",required:true}
 method.additional.header[groovy:!it.ann("org.springframework.web.bind.annotation.PostMapping","value").startsWith("/account/login")]={name:"token",value:"12.13.14",desc:"当前用户token值",required:true}
-method.additional.header[groovy:it.ann("org.springframework.web.bind.annotation.PostMapping","value").startsWith("/login/loginInfo")]={name:"loginDeviceType",value:"1",desc:"登录设备类型,1-pc,2-Android,3-ios,4-其他",required:true}
+method.additional.header[groovy:it.ann("org.springframework.web.bind.annotation.PostMapping","value").startsWith("/login/loginInfo")]={name:"loginDeviceType",value:"1",desc:"登录设备类型,1-pc,2-Android,3-ios,4-其他",required:true}
+field.required=@javax.validation.constraints.NotBlank
+field.required=@javax.validation.constraints.NotNull
+field.required=@javax.validation.constraints.NotEmpty
+field.ignore=@com.fasterxml.jackson.annotation.JsonIgnore#value

+ 32 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/constant/AdmModelFileStatusEnum.java

@@ -0,0 +1,32 @@
+package com.persagy.adm.server.algorithm.constant;
+/**
+ * 模型文件状态枚举
+ * @author : lijie
+ * Update By 2022/1/17 10:47
+ */
+public enum AdmModelFileStatusEnum {
+    /**上传完成*/
+    UPLOAD_COMPLETED("1", "上传完成"),
+    /**模型初步检查完成*/
+    FIRST_CHECK_COMPLETED("2", "模型初步检查完成"),
+    /**同步数据完成*/
+    SYNC_DATA_COMPLETED("3", "同步数据完成"),
+    /**模型正常结束*/
+    NORMAL_COMPLETED("4", "模型正常结束");
+
+    private String value;
+    private String desc;
+
+    AdmModelFileStatusEnum(String value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}

+ 45 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/controller/AdmDeliverPlanController.java

@@ -0,0 +1,45 @@
+package com.persagy.adm.server.algorithm.controller;
+
+import com.persagy.adm.server.algorithm.domain.DeliverPlanVo;
+import com.persagy.adm.server.algorithm.domain.ModelFileVo;
+import com.persagy.adm.server.algorithm.domain.QueryModelFileVo;
+import com.persagy.adm.server.algorithm.service.AdmModelService;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.utils.ResultHelper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 02-交付计划入口
+ * 后端服务名:adm-server
+ * @author : lijie
+ * Update By 2022/1/12 14:01
+ */
+@RestController
+@RequestMapping("/deliver/plan")
+@RequiredArgsConstructor
+public class AdmDeliverPlanController {
+
+    private final AdmModelService admModelService;
+
+    /**
+     * 020101-交付计划-处理BOSS产生的交付计划
+     * @param deliverPlanVo : 交付计划信息
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<java.lang.Void>>
+     * @author : lijie
+     * Update By 2022/1/14 17:22
+     */
+    @PostMapping(value = "/relayDeliverPlan")
+    public CommonResult<List<Void>> relayDeliverPlan(@Validated @RequestBody DeliverPlanVo deliverPlanVo) {
+        admModelService.relayDeliverPlan(deliverPlanVo);
+        return ResultHelper.multi(new ArrayList<>());
+    }
+
+}

+ 45 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/controller/AdmModelBackController.java

@@ -0,0 +1,45 @@
+package com.persagy.adm.server.algorithm.controller;
+
+
+import com.persagy.adm.server.algorithm.domain.ModelFileVo;
+import com.persagy.adm.server.algorithm.domain.QueryModelFileVo;
+import com.persagy.adm.server.algorithm.service.AdmModelBackService;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.utils.ResultHelper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 02-模型文件后台管理
+ * @author : lijie
+ * Update By 2022/1/17 10:30
+ */
+@RestController
+@RequestMapping("/model/back")
+@RequiredArgsConstructor
+public class AdmModelBackController {
+
+    private final AdmModelBackService admModelBackService;
+
+
+    /**
+     * 020101-模型文件后台管理-进行模型文件解析
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.adm.server.algorithm.entity.AdmModelFile>>
+     * @author : lijie
+     * Update By 2022/1/12 16:32
+     * @undone
+     */
+    @PostMapping(value = "/analysisModelsBack")
+    public CommonResult<List<Void>> analysisModelsBack() {
+        admModelBackService.analysisModelBack();
+
+        return ResultHelper.multi(new ArrayList<>());
+    }
+
+}

+ 56 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/controller/AdmModelController.java

@@ -0,0 +1,56 @@
+package com.persagy.adm.server.algorithm.controller;
+
+import com.persagy.adm.server.algorithm.domain.ModelFileVo;
+import com.persagy.adm.server.algorithm.domain.QueryModelFileVo;
+import com.persagy.adm.server.algorithm.service.AdmModelService;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.utils.ResultHelper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 01-模型文件管理
+ * 后端服务名:adm-server
+ * @author : lijie
+ * Update By 2022/1/12 14:01
+ */
+@RestController
+@RequestMapping("/model")
+@RequiredArgsConstructor
+public class AdmModelController {
+
+    private final AdmModelService admModelService;
+
+    /**
+     * 010101-模型文件-根据建筑id查询模型文件列表
+     * @param queryModelFileVo : 模型文件查询信息
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.adm.server.algorithm.entity.AdmModelFile>>
+     * @author : lijie
+     * Update By 2022/1/12 16:32
+     * @undone
+     */
+    @PostMapping(value = "/queryModelFilesByBuildingId")
+    public CommonResult<List<ModelFileVo>> queryFloorsByBuildingId(@RequestBody QueryModelFileVo queryModelFileVo) {
+        return ResultHelper.multi(new ArrayList<>());
+    }
+    /**
+     * 010102-模型文件-创建模型文件信息
+     * @param modelFileVo : 模型文件信息
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.Void>
+     * @author : lijie
+     * Update By 2022/1/12 16:54
+     * @undone
+     */
+    @PostMapping(value = "/saveModelFile")
+    public CommonResult<List<Void>> saveModelFile(@Validated @RequestBody ModelFileVo modelFileVo) {
+        return ResultHelper.multi(new ArrayList<>());
+    }
+
+}

+ 15 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/dao/AdmModelFileMapper.java

@@ -0,0 +1,15 @@
+package com.persagy.adm.server.algorithm.dao;
+
+import com.persagy.adm.server.algorithm.entity.AdmModelFile;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Entity com.persagy.adm.server.algorithm.entity.AdmModelFile
+ */
+public interface AdmModelFileMapper extends BaseMapper<AdmModelFile> {
+
+}
+
+
+
+

+ 69 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/domain/DeliverPlanVo.java

@@ -0,0 +1,69 @@
+package com.persagy.adm.server.algorithm.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.Date;
+import java.util.Set;
+
+/**
+ * 交付计划VO类
+ * @author : lijie
+ * Update By 2022/1/14 16:26
+ */
+@Data
+public class DeliverPlanVo {
+    /**
+     * 交付计划总id
+     * @mock @string(8)
+     * */
+    @NotBlank
+    private String deliverPlanMasterId;
+    /**
+     * 交付计划id
+     * @mock @string(8)
+     * */
+    @NotBlank
+    private String deliverPlanId;
+    /**
+     * 交付计划名称
+     * @mock @string(8)
+     * */
+    @NotBlank
+    private String deliverPlanName;
+    /**商品编码集合*/
+    @NotEmpty
+    private Set<String> skuCodes;
+    /**
+     * 数量
+     * @mock @natural(0,10000)
+     * */
+    private Integer number;
+    /**
+     * 开始时间,时间戳格式
+     * @mock @timestamp
+     * */
+    private Long startTime;
+    /**
+     * 结束时间,时间戳格式
+     * @mock @timestamp
+     * */
+    private Long endTime;
+    /**
+     * 项目id
+     * @mock @string(8)
+     * */
+    private String itemId;
+    /**
+     * 项目名称
+     * @mock @string(8)
+     * */
+    private String itemName;
+    /**
+     * 创建人名称:管家名称
+     * @mock @string(5)
+     * */
+    private String creator;
+}

+ 53 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/domain/ModelFileVo.java

@@ -0,0 +1,53 @@
+package com.persagy.adm.server.algorithm.domain;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 模型文件VO类
+ * @author : lijie
+ * Update By 2022/1/12 16:54
+ */
+@Data
+public class ModelFileVo {
+
+
+    /**模型文件名称*/
+    @NotBlank
+    private String originalName;
+
+    /**模型文件的当前处理状态:1=上传完毕, 2=模型初步检查完成, 3=同步数据完成, 4=模型正常结束*/
+    private Integer status;
+
+    /**上传模型文件的用户id*/
+    private String userId;
+
+    /**上传模型文件的用户名*/
+    private String userName;
+
+    /**模型文件id*/
+    private String revitFileId;
+
+    /**模型解析后生成的数据文件id*/
+    @NotBlank
+    private String dataFileId;
+
+    /**模型解析后生成的小数据文件id,对应楼层的floorMap*/
+    private String minDataFileId;
+
+    /**模型文件所属楼层id*/
+    @NotBlank
+    private String floorId;
+
+    /**模型文件所属楼层名称*/
+    private String floorName;
+
+    /**建筑id*/
+    @NotBlank
+    private String buildingId;
+
+    /**模型文件版本*/
+    private String revitVersion;
+
+}

+ 18 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/domain/QueryModelFileVo.java

@@ -0,0 +1,18 @@
+package com.persagy.adm.server.algorithm.domain;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 查询模型文件的VO类
+ * @author : lijie
+ * Update By 2022/1/12 15:14
+ */
+@Data
+public class QueryModelFileVo {
+    /**建筑id*/
+    @NotBlank
+    private String buildingId;
+
+}

+ 125 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/entity/AdmModelFile.java

@@ -0,0 +1,125 @@
+package com.persagy.adm.server.algorithm.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+import org.json.JSONObject;
+
+/**
+ * 模型文件
+ * @author : lijie
+ * Update By 2022/1/12 16:24
+ */
+@TableName(value ="adm_model_file",autoResultMap = true)
+@Data
+public class AdmModelFile extends AuditableEntity<AdmModelFile> {
+
+    /**
+     * 模型文件的上传原始名
+     */
+    private String originalName;
+
+    /**
+     * 楼层模型的版本号
+     */
+    private Integer version;
+
+    /**
+     * 上传模型文件的用户id
+     */
+    private String userId;
+
+    /**
+     * 上传模型文件的用户名
+     */
+    private String userName;
+
+    /**
+     * 模型文件的当前处理状态:1=上传完毕, 2=模型初步检查完成, 3=同步数据完成, 4=模型正常结束
+     */
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    @TableField(value = "note",typeHandler = JacksonTypeHandler.class)
+    private JSONObject note;
+
+    /**
+     * 模型文件id
+     */
+    private String revitFileId;
+
+    /**
+     * 模型解析后生成的数据文件id
+     */
+    private String dataFileId;
+
+    /**
+     * 模型解析后生成的小数据文件id,对应楼层的floorMap
+     */
+    private String minDataFileId;
+
+    /**
+     * 模型文件所属楼层id
+     */
+    private String floorId;
+
+    /**
+     * 建筑id
+     */
+    private String buildingId;
+
+    /**
+     * 项目id
+     */
+    private String projectId;
+
+    /**
+     * 集团编码
+     */
+    private String groupCode;
+
+    /**
+     * 模型文件是否已被删除
+     */
+    private Boolean removed;
+
+    /**
+     * 跟数据中心同步数据失败时的重试次数
+     */
+    private Integer syncRetryTimes;
+
+    /**
+     * 上次重试日期
+     */
+    private Date syncRetryDate;
+
+    /**
+     * 上次同步到数据中心时的错误消息
+     */
+    private String syncErrorMsg;
+
+    /**
+     * 模型的标高
+     */
+    private Double level;
+
+    /**
+     * 存储模型状态信息
+     */
+    @TableField(value = "status_info",typeHandler = JacksonTypeHandler.class)
+    private JSONObject statusInfo;
+
+    /**
+     * 模型文件版本
+     */
+    private String revitVersion;
+}

+ 9 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/AdmDeliverPlanService.java

@@ -0,0 +1,9 @@
+package com.persagy.adm.server.algorithm.service;
+
+/**
+ * 对接BOSS的交付计划逻辑处理接口
+ * @author : lijie
+ * Update By 2022/1/14 16:07
+ */
+public interface AdmDeliverPlanService {
+}

+ 16 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/AdmModelBackService.java

@@ -0,0 +1,16 @@
+package com.persagy.adm.server.algorithm.service;
+/**
+ * 模型解析后台逻辑处理接口
+ * @author : lijie
+ * Update By 2022/1/17 10:33
+ */
+public interface AdmModelBackService {
+    /**
+     * 后台解析模型文件
+     * return : void
+     * @author : lijie
+     * Update By 2022/1/17 10:35
+     */
+    void analysisModelBack();
+
+}

+ 22 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/AdmModelFileService.java

@@ -0,0 +1,22 @@
+package com.persagy.adm.server.algorithm.service;
+
+import com.persagy.adm.server.algorithm.entity.AdmModelFile;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * 模型文件逻辑处理接口
+ * @author : lijie
+ * Update By 2022/1/17 10:51
+ */
+public interface AdmModelFileService extends IService<AdmModelFile> {
+    /**
+     * 根据状态查询模型文件列表
+     * @param status : {@see AdmModelStatusEnum#value}
+     * @return : java.util.List<com.persagy.adm.server.algorithm.entity.AdmModelFile>
+     * @author : lijie
+     * Update By 2022/1/17 10:52
+     */
+    List<AdmModelFile> listByStatus(String status);
+}

+ 18 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/AdmModelService.java

@@ -0,0 +1,18 @@
+package com.persagy.adm.server.algorithm.service;
+
+import com.persagy.adm.server.algorithm.domain.DeliverPlanVo;
+
+/**
+ * 模型文件的逻辑处理接口
+ * @author : lijie
+ * Update By 2022/1/12 14:06
+ */
+public interface AdmModelService {
+    /**
+     * 处理BOSS产生的交付计划
+     * @param deliverPlanVo : 交付计划信息
+     * @author : lijie
+     * Update By 2022/1/14 17:22
+     */
+    void relayDeliverPlan(DeliverPlanVo deliverPlanVo);
+}

+ 21 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/impl/AdmDeliverPlanServiceImpl.java

@@ -0,0 +1,21 @@
+package com.persagy.adm.server.algorithm.service.impl;
+
+import com.persagy.adm.server.algorithm.service.AdmDeliverPlanService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class AdmDeliverPlanServiceImpl implements AdmDeliverPlanService {
+
+
+
+
+
+
+
+
+
+}

+ 117 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/impl/AdmModelBackServiceImpl.java

@@ -0,0 +1,117 @@
+package com.persagy.adm.server.algorithm.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.util.ZipUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.adm.server.algorithm.constant.AdmModelFileStatusEnum;
+import com.persagy.adm.server.algorithm.entity.AdmModelFile;
+import com.persagy.adm.server.algorithm.service.AdmModelBackService;
+import com.persagy.adm.server.algorithm.service.AdmModelFileService;
+import com.persagy.dmp.file.utils.FileStorageHelper;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+/**
+ * 模型解析后台逻辑处理接口
+ * @author : lijie
+ * Update By 2022/1/17 10:34
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class AdmModelBackServiceImpl implements AdmModelBackService {
+
+    private final AdmModelFileService admModelFileService;
+
+    /**
+     * 后台解析模型文件
+     * return : void
+     * @author : lijie
+     * Update By 2022/1/17 10:35
+     */
+    @Override
+    public void analysisModelBack() {
+        // 1.查询状态为3的文件
+        List<AdmModelFile> admModelFiles = admModelFileService
+                .listByStatus(AdmModelFileStatusEnum.SYNC_DATA_COMPLETED.getValue());
+        if (CollUtil.isEmpty(admModelFiles)){
+            return;
+        }
+        // 2.遍历文件
+        for (AdmModelFile admModelFile : admModelFiles) {
+            if (StrUtil.isBlank(admModelFile.getDataFileId())){
+                continue;
+            }
+            // 2.1 从文件服务下载jsonz文件
+            Map<String, JSONObject> gzipResultMap = unzipDataModelFile(FileStorageHelper.downloadStream(admModelFile.getDataFileId()));
+            if (MapUtil.isEmpty(gzipResultMap)){
+                admModelFile.setRemoved(Boolean.TRUE);
+                continue;
+            }
+
+
+
+        }
+
+    }
+    /**
+     * 解压数据文件流
+     * @param inputStream :数据文件流
+     * @return : java.util.Map<java.lang.String,com.alibaba.fastjson.JSONObject>
+     * @author : lijie
+     * Update By 2022/1/17 11:59
+     */
+    private Map<String, JSONObject> unzipDataModelFile(InputStream inputStream) {
+        Map<String, byte[]> byteMap = unzipDataModelFileToByteArray(inputStream);
+        Set<String> keySet = byteMap.keySet();
+        Map<String, JSONObject> resultMap = MapUtil.newHashMap(keySet.size());
+        for (String key : keySet) {
+            byte[] bytes = byteMap.get(key);
+            if (null==bytes || bytes.length<=0){
+                continue;
+            }
+            resultMap.put(key,JSONObject.parseObject(StrUtil.str(bytes, StandardCharsets.UTF_8)));
+        }
+        return resultMap;
+    }
+    /**
+     * 解压文件到字节流
+     * @param inputStream : 数据文件流
+     * @return : java.util.Map<java.lang.String,java.io.ByteArrayInputStream>  
+     * @author : lijie
+     * Update By 2022/1/17 12:02
+     */
+    @SneakyThrows
+    private Map<String, byte[]> unzipDataModelFileToByteArray(InputStream inputStream){
+        if (null==inputStream){
+            return new HashMap<>(0);
+        }
+        Map<String, byte[]> resultMap = MapUtil.newHashMap();
+        ZipInputStream zipInputStream = new ZipInputStream(inputStream,Charset.forName("GBK"));
+        ZipUtil.read(zipInputStream,zipEntry -> {
+            if (zipEntry.isDirectory()){
+                return;
+            }
+            resultMap.put(zipEntry.getName(),IoUtil.readBytes(zipInputStream,false));
+        });
+        return resultMap;
+    }
+}

+ 38 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/impl/AdmModelFileServiceImpl.java

@@ -0,0 +1,38 @@
+package com.persagy.adm.server.algorithm.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.persagy.adm.server.algorithm.entity.AdmModelFile;
+import com.persagy.adm.server.algorithm.service.AdmModelFileService;
+import com.persagy.adm.server.algorithm.dao.AdmModelFileMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 模型文件逻辑处理接口
+ * @author : lijie
+ * Update By 2022/1/17 10:54
+ */
+@Service
+public class AdmModelFileServiceImpl extends ServiceImpl<AdmModelFileMapper, AdmModelFile> implements AdmModelFileService{
+    /**
+     * 根据状态查询模型文件列表
+     * @param status : {@see AdmModelStatusEnum#value}
+     * @return : java.util.List<com.persagy.adm.server.algorithm.entity.AdmModelFile>
+     * @author : lijie
+     * Update By 2022/1/17 10:52
+     */
+    @Override
+    public List<AdmModelFile> listByStatus(String status) {
+        LambdaQueryWrapper<AdmModelFile> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AdmModelFile::getStatus,status);
+        queryWrapper.eq(AdmModelFile::getRemoved,"0");
+        queryWrapper.eq(AdmModelFile::getValid,Boolean.TRUE);
+        return this.list(queryWrapper);
+    }
+}
+
+
+
+

+ 29 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/algorithm/service/impl/AdmModelServiceImpl.java

@@ -0,0 +1,29 @@
+package com.persagy.adm.server.algorithm.service.impl;
+
+import com.persagy.adm.server.algorithm.domain.DeliverPlanVo;
+import com.persagy.adm.server.algorithm.service.AdmModelService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * 模型文件的逻辑处理类
+ * @author : lijie
+ * Update By 2022/1/12 14:08
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class AdmModelServiceImpl implements AdmModelService {
+    /**
+     * 处理BOSS产生的交付计划
+     * @param deliverPlanVo : 交付计划信息
+     * @author : lijie
+     * Update By 2022/1/14 17:22
+     */
+    @Override
+    public void relayDeliverPlan(DeliverPlanVo deliverPlanVo) {
+        // 1.根据商品code与项目任务模板的映射数据与规则生成项目任务数据
+        // 2.调用dmp-rwd服务根据商品code生成交付范围
+    }
+}

+ 2 - 3
adm-business/adm-server/src/main/java/com/persagy/adm/server/auth/controller/AdmAuthController.java

@@ -13,9 +13,8 @@ import org.springframework.web.bind.annotation.*;
 /**
  * 00-登录及权限控制
  * 后端服务名:adm-server
- * @author lvxy
- * @date 2021/8/25
- * @module adm-server
+ * @author : lijie
+ * Update By 2022/1/12 14:00
  */
 @RestController
 @RequestMapping("/auth")

+ 33 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/client/RwdClient.java

@@ -3,6 +3,9 @@ package com.persagy.adm.server.custom.client;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.adm.server.custom.entity.InfoDef;
 import com.persagy.adm.server.custom.entity.TypeDef;
+import com.persagy.adm.server.custom.entity.db.ObjectInfoCollect;
+import com.persagy.adm.server.custom.entity.db.ObjectTypeCollect;
+import com.persagy.adm.server.custom.entity.db.RelationDefineCollect;
 import com.persagy.dmp.basic.config.DigitalFeignConfig;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.common.model.response.CommonResult;
@@ -20,6 +23,36 @@ import java.util.List;
 public interface RwdClient {
 
 	/**
+	 * 查询交付范围内类型定义
+	 */
+	@PostMapping("/rwd/def/class/collect/query")
+	CommonResult<List<ObjectTypeCollect>> queryDefineTypeCollect(@RequestParam("groupCode") String groupCode,
+												@RequestParam("projectId") String projectId,
+												@RequestParam("appId") String appId,
+												@RequestParam("userId") String userId,
+												@RequestBody QueryCriteria criteria);
+
+	/**
+	 * 查询交付范围内关系定义
+	 */
+	@PostMapping("/rwd/def/rel/collect/query")
+	CommonResult<List<RelationDefineCollect>> queryDefineRelCollect(@RequestParam("groupCode") String groupCode,
+															 @RequestParam("projectId") String projectId,
+															 @RequestParam("appId") String appId,
+															 @RequestParam("userId") String userId,
+															 @RequestBody QueryCriteria criteria);
+
+	/**
+	 * 查询交付范围内信息点定义
+	 */
+	@PostMapping("/rwd/def/funcid/collect/query")
+	CommonResult<List<ObjectInfoCollect>> queryDefineInfoCollect(@RequestParam("groupCode") String groupCode,
+												@RequestParam("projectId") String projectId,
+												@RequestParam("appId") String appId,
+												@RequestParam("userId") String userId,
+												@RequestBody QueryCriteria criteria);
+
+	/**
 	 * 查询类型定义
 	 * @param groupCode 集团编码
 	 * @param projectId 项目ID

+ 15 - 3
adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/controller/AppController.java

@@ -9,11 +9,15 @@ import com.persagy.adm.server.custom.entity.DownLoadData;
 import com.persagy.adm.server.custom.entity.UploadRtn;
 import com.persagy.adm.server.custom.service.ISyncApp;
 import com.persagy.adm.server.custom.service.ServiceUtil;
+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.common.utils.ResultHelper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
@@ -60,11 +64,19 @@ public class AppController {
 		DownLoadData data;
 		if(StrUtil.isNotBlank(req.getBuildingId())) {
 			data = syncApp.downloadBuildingData(req.getGroupCode(), req.getProjectId(), req.getUserId(), req.getClientId(), req.getBuildingId(), req.getBdtpDownloadTs(), req.getAdmDownloadTs());
-		} else
-			data = syncApp.downloadProjectData(req.getGroupCode(), req.getProjectId(), req.getUserId(), req.getClientId(), req.getBdtpDownloadTs(), req.getAdmDownloadTs());
+		}else {
+			throw new BusinessException(ResponseCode.A0400.getCode(),"建筑ID不能为空");
+		}
 		return ResultHelper.single(data);
 	}
 
+	/**
+	 * 下载对象关系数据
+	 */
+	@RequestMapping("/downloadObjRel")
+	public CommonResult<DownLoadData> downloadObjRel(@RequestBody AdmRequest req){
+		return ResultHelper.single(syncApp.downloadProjectData(req.getGroupCode(), req.getProjectId(), req.getUserId(), req.getClientId(), req.getBdtpDownloadTs(), req.getAdmDownloadTs()));
+	}
 
 	@RequestMapping("/upload")
 	public CommonResult<UploadRtn> upload(HttpServletRequest request){

+ 0 - 362
adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/controller/ToolController.java

@@ -1,362 +0,0 @@
-package com.persagy.adm.server.custom.controller;
-
-import cn.hutool.core.util.IdUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.persagy.adm.server.custom.client.RwdClient;
-import com.persagy.adm.server.custom.common.AdmConst;
-import com.persagy.adm.server.custom.common.AdmRequest;
-import com.persagy.adm.server.custom.dao.*;
-import com.persagy.adm.server.custom.entity.Dict;
-import com.persagy.adm.server.custom.entity.InfoDef;
-import com.persagy.adm.server.custom.entity.TypeDef;
-import com.persagy.adm.server.custom.entity.db.*;
-import com.persagy.adm.server.custom.service.IConfigService;
-import com.persagy.adm.server.custom.service.ISyncApp;
-import com.persagy.adm.server.custom.service.ServiceUtil;
-import com.persagy.dmp.basic.model.QueryCriteria;
-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.common.utils.ResultHelper;
-import com.persagy.dmp.define.entity.GraphDefine;
-import com.persagy.dmp.define.entity.RelationDefine;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.web.bind.annotation.*;
-
-import java.io.IOException;
-import java.util.*;
-
-@CrossOrigin
-@RestController
-@RequestMapping("/tool")
-public class ToolController {
-
-	@Autowired
-	private ObjectMapper objectMapper;
-
-	@Autowired
-	@Qualifier(ServiceUtil.SYNC_APP_IMPL)
-	private ISyncApp syncApp;
-
-	@Autowired
-	private RwdClient rwdClient;
-
-	@Autowired
-	private IConfigService configService;
-
-	@Autowired
-	private AdmM2dEquipMapper m2dEquipMapper;
-
-	@GetMapping("/hello")
-	public CommonResult<Integer> hello(){
-		return ResultHelper.single(configService.queryCommonConfig(null).size());
-	}
-
-	@RequestMapping("/dict")
-	public CommonResult<Dict> dict(@RequestBody AdmRequest req, @RequestParam(required = false) String module){
-		Dict map = syncApp.queryDict(req.getGroupCode(), req.getProjectId(), req.getUserId(), !"infos".equals(module), false);
-
-		List<Map<String, Object>> majorList = map.getMajor();
-		List<TypeDef> sysList = map.getSystem();
-		List<TypeDef> equipList = map.getEquipment();
-		distinct(sysList);
-		distinct(equipList);
-
-		clearTime(majorList);
-		clearTime(sysList);
-		clearTime(equipList);
-
-		//设置正向交付类型
-		List<AdmM2dEquip> m2dList = configService.queryM2dEquip(req.getProjectId());
-		HashSet<String> m2dSet = new HashSet<>();
-		m2dList.forEach(item -> m2dSet.add(item.getClassCode()));
-		for(TypeDef eqType : equipList) {
-			if(m2dSet.contains(eqType.getCode()))
-				eqType.setM2d(true);
-		}
-
-		//组织专业-系统树形结构
-		for(Map<String, Object> major : majorList){
-			ArrayList<TypeDef> childrenSys = new ArrayList<>();
-			major.put("children", childrenSys);
-			String majorCode = (String) major.get("code");
-			for(Iterator<TypeDef> sysIter = sysList.iterator(); sysIter.hasNext();){
-				TypeDef sysDef = sysIter.next();
-				if(sysDef.getMajorCode() != null && sysDef.getMajorCode().equals(majorCode)){
-					childrenSys.add(sysDef);
-					sysIter.remove();
-				}
-			}
-		}
-		map.setSystem(null);
-
-		if("infos".equals(module)) { //信息点配置
-
-		} else { //关系、管道、无模型设备
-			List<RelationDefine> relDefs = (List<RelationDefine>)map.getRelation();
-			List<GraphDefine> graph = ServiceUtil.call (() -> rwdClient.queryGraphDef(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), new QueryCriteria()));
-			List<Map<String, Object>> rels = new ArrayList<>();
-			for(GraphDefine gd : graph){
-				HashMap<String, Object> m = new HashMap<>();
-				m.put("code", gd.getCode());
-				m.put("name", gd.getName());
-				m.put("type", "graph");
-				rels.add(m);
-
-				ArrayList<RelationDefine> chidren = new ArrayList<>();
-				m.put("children", chidren);
-				for(RelationDefine relDef : relDefs) {
-					if(relDef.getGraphCode().equals(gd.getCode()))
-						chidren.add(relDef);
-				}
-			}
-			map.setRelation(rels);
-		}
-
-		return ResultHelper.single(map);
-	}
-
-	private <T> void distinct(List<T> list){
-		List<T> result = new ArrayList<>();
-		HashSet<String> codes = new HashSet<>();
-		for(T def : list) {
-			String code = null;
-			if(def instanceof TypeDef)
-				code = ((TypeDef) def).getCode();
-			else if(def instanceof InfoDef)
-				code = ((InfoDef) def).getCode();
-			if(!codes.contains(code)) {
-				codes.add(code);
-				result.add(def);
-			}
-		}
-		list.clear();
-		list.addAll(result);
-	}
-
-	private void clearTime(List<?> list){
-		for(Object o : list) {
-			if(o instanceof TypeDef) {
-				((TypeDef) o).setCreationTime(null);
-				((TypeDef) o).setModifiedTime(null);
-			} else if(o instanceof Map) {
-				((Map) o).put("creationTime", null);
-				((Map) o).put("modifiedTime", null);
-				((Map) o).put("name", ((Map) o).get("label")); //handle major
-			}
-		}
-	}
-
-	@RequestMapping("/cfgs")
-	public CommonResult<Object> cfgs(@RequestBody AdmRequest req, @RequestParam(required = false) String module){
-		String projectId = req.getProjectId();
-		HashMap<String, Object> data = new HashMap<>();
-
-		//配置数据查询
-		if("infos".equals(module)) { //信息点配置
-			List<AdmInfosConfig> infoConfig = configService.queryInfosConfig(projectId);
-			data.put("infoConfig", infoConfig);
-		} else {
-			List<AdmRelsConfig> relConfig = configService.queryRelsConfig(projectId);
-			List<AdmPipeConfig> pipeConfig = configService.queryPipeConfig(projectId);
-			List<AdmContainerConfig> containerConfig = configService.queryContainerConfig(projectId);
-
-			data.put("relConfig", relConfig);
-			data.put("pipeConfig", pipeConfig);
-			data.put("containerConfig", containerConfig);
-		}
-
-		return ResultHelper.single(data);
-	}
-
-	@RequestMapping("/typeInfos")
-	public CommonResult<Object> typeInfos(@RequestBody AdmRequest req, @RequestParam String typeCode){
-		QueryCriteria criteria = new QueryCriteria();
-		ObjectNode node = objectMapper.createObjectNode();
-		node.put("classCode", typeCode);
-		criteria.setCriteria(node);
-
-		List<Object> roots = new ArrayList<>();
-
-		List<InfoDef> funcList = ServiceUtil.call(() -> rwdClient.queryFunc(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), criteria));
-		distinct(funcList);
-		for(InfoDef infoDef : funcList) {
-			if("交付工具".equals(infoDef.getFirstTag()))
-				continue;
-			buildInfosTree(roots, infoDef);
-		}
-
-		return ResultHelper.single(roots);
-	}
-
-	private void buildInfosTree(List<Object> roots, InfoDef infoDef){
-		Map<String, Object> folder = null;
-		if(StrUtil.isNotBlank(infoDef.getFirstTag())) {
-			folder = findParent(roots, infoDef.getFirstTag());
-			if(StrUtil.isNotBlank(infoDef.getSecondTag())){
-				folder = findParent((List<Object>) folder.get("children"), infoDef.getSecondTag());
-			}
-		}
-		if(folder == null)
-			roots.add(infoDef);
-		else
-			((List<Object>) folder.get("children")).add(infoDef);
-	}
-
-	private Map<String, Object> findParent(List<Object> list, String tag){
-		for(Object o : list){
-			if(o instanceof Map){
-				if(tag.equals(((Map) o).get("code")))
-					return (Map<String, Object>) o;
-			}
-		}
-
-		Map<String, Object> p = new HashMap<>();
-		p.put("code", tag);
-		p.put("name", tag);
-		p.put("info_tag", true);
-		p.put("children", new ArrayList<>());
-		list.add(p);
-		return p;
-	}
-
-	@Autowired
-	private AdmRelsConfigMapper relsConfigMapper;
-	@Autowired
-	private AdmPipeConfigMapper pipeConfigMapper;
-	@Autowired
-	private AdmContainerConfigMapper containerConfigMapper;
-
-	@PostMapping("/updateCfgItem")
-	public CommonResult<Object> updateCfgItem(@RequestBody Map<String, Object> content) {
-		String type = (String) content.get("type");
-		Map<String, Object> itemMap = (Map<String, Object>) content.get("item");
-		String delId = (String) content.get("delId");
-		String newId = null;
-		if(itemMap != null && !itemMap.containsKey("id")){
-			newId = IdUtil.fastSimpleUUID();
-			itemMap.put("id", newId);
-		}
-
-		boolean create = newId != null;
-		if("rel".equals(type)) {
-			doUpdateItem(delId, itemMap, create, AdmRelsConfig.class, relsConfigMapper);
-		} else if ("pipe".equals(type)) {
-			doUpdateItem(delId, itemMap, create, AdmPipeConfig.class, pipeConfigMapper);
-		} else if("container".equals(type)) {
-			doUpdateItem(delId, itemMap, create, AdmContainerConfig.class, containerConfigMapper);
-		}
-
-		return ResultHelper.single(newId);
-	}
-	
-	private <T extends BaseAdmEntity> void doUpdateItem(String delId, Map<String, Object> itemMap, boolean create, Class<T> cls, BaseMapper<T> mapper){
-		if(StrUtil.isNotBlank(delId))
-			mapper.deleteById(delId);
-		else {
-			T cfg = mapToObj(itemMap, cls);
-			if(create)
-				mapper.insert(cfg);
-			else
-				mapper.updateById(cfg);
-		}
-	}
-
-	private <T extends BaseAdmEntity> T mapToObj(Map<String, Object> map, Class<T> cls){
-		try {
-			String json = objectMapper.writeValueAsString(map);
-			return objectMapper.readValue(json, cls);
-		} catch (IOException e) {
-			e.printStackTrace();
-			throw new BusinessException(ResponseCode.A0427.getCode(), ResponseCode.A0427.getDesc());
-		}
-	}
-
-	@Autowired
-	private AdmInfosConfigMapper infosConfigMapper;
-
-	@PostMapping("/updateInfos")
-	public CommonResult<Object> updateInfos(@RequestBody AdmInfosConfig cfg) {
-		String newId = null;
-		if(StrUtil.isBlank(cfg.getId())){
-			newId = IdUtil.fastSimpleUUID();
-			cfg.setId(newId);
-		}
-		if(cfg.getInfos() != null) {
-			for(Object o : cfg.getInfos()) {
-				if(o instanceof Map){
-					((Map<?, ?>) o).remove("name");
-					((Map<?, ?>) o).remove("cfgItemType");
-				}
-			}
-		}
-
-		if(newId != null)
-			infosConfigMapper.insert(cfg);
-		else
-			infosConfigMapper.updateById(cfg);
-
-		return ResultHelper.single(newId);
-	}
-
-	@PostMapping("/updateM2d")
-	public CommonResult<Object> updateM2d(@RequestBody Map<String, Object> cfg){
-		String code = (String) cfg.get("code");
-		boolean m2d = (Boolean)cfg.get("m2d");
-		AdmM2dEquip item = m2dEquipMapper.selectOne(new QueryWrapper<AdmM2dEquip>().eq("class_code", code));
-		if(m2d){
-			if(item == null){
-				item = new AdmM2dEquip();
-				item.setId(IdUtil.simpleUUID());
-				item.setClassCode(code);
-				m2dEquipMapper.insert(item);
-			}
-		} else {
-			if(item != null)
-				m2dEquipMapper.deleteById(item.getId());
-		}
-		return ResultHelper.success();
-	}
-
-	@PostMapping("/bdAndFls")
-	public CommonResult<List<ObjectNode>> bdAndFls(@RequestBody AdmRequest req){
-		Map<String, Object> data = syncApp.downloadFrameData(req.getGroupCode(), req.getProjectId(), req.getUserId());
-		List<ObjectNode> bdAndFls = (List<ObjectNode>)data.get("buildingsAndFloors");
-
-		List<ObjectNode> bds = new ArrayList<>();
-		Iterator<ObjectNode> iter = bdAndFls.iterator();
-		while (iter.hasNext()){
-			ObjectNode node = iter.next();
-			if(AdmConst.OBJ_TYPE_BUILDING.equals(node.get("objType").asText())) {
-				bds.add(node);
-				iter.remove();
-			}
-		}
-
-		for(ObjectNode bd : bds) {
-			String id = bd.get("id").asText();
-			for(ObjectNode fl : bdAndFls) {
-				JsonNode node = fl.get("buildingId");
-				if(node != null){
-					String bdId = node.asText();
-					if(bdId.equals(id)){
-						ArrayNode children = (ArrayNode)bd.get("children");
-						if(children == null)
-							children = bd.putArray("children");
-						children.add(fl);
-					}
-				}
-			}
-		}
-
-		return ResultHelper.single(bds);
-	}
-
-}

+ 5 - 3
adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/entity/Dict.java

@@ -1,5 +1,7 @@
 package com.persagy.adm.server.custom.entity;
 
+import com.persagy.adm.server.custom.entity.db.ObjectInfoCollect;
+import com.persagy.adm.server.custom.entity.db.ObjectTypeCollect;
 import lombok.Data;
 
 import java.util.List;
@@ -13,12 +15,12 @@ public class Dict {
 
 	private List<Map<String, Object>> major;
 
-	private List<TypeDef> system;
+	private List<ObjectTypeCollect> system;
 
-	private List<TypeDef> equipment;
+	private List<ObjectTypeCollect> equipment;
 
 	private List<? extends Object> relation;
 
-	private List<InfoDef> infos;
+	private List<ObjectInfoCollect> infos;
 
 }

+ 5 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/entity/db/AdmProblem.java

@@ -95,5 +95,10 @@ public class AdmProblem extends BaseAdmDataEntity implements Serializable {
      */
     private Integer status;
 
+    /**
+     * 备注
+     */
+    private String remark;
+
 
 }

+ 45 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/entity/db/ObjectInfoCollect.java

@@ -0,0 +1,45 @@
+package com.persagy.adm.server.custom.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 平台/项目级采集的信息点定义
+ * @author linhuili
+ * @date 2021-10-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "dt_define_info_collect", autoResultMap = true)
+public class ObjectInfoCollect extends AuditableEntity {
+    /** 集团编码 */
+    private String groupCode;
+    /** 项目ID 0-平台级 1-项目级 */
+    private String projectId;
+    /** 关联信息点id */
+    @NotNull(message = "信息点ID不能为空")
+    private String defineInfoId;
+    /** 信息点编码 */
+    private String code;
+    /** 信息点类型 */
+    private String classCode;
+    /** 是否为关键信息点(台账详情使用)  */
+    private Boolean keyWord;
+    /** 交付类型:0-项目交付 1-现场交付  */
+    private Integer deliveryType;
+    /** 是否交付 0-否 1-是 */
+    private Boolean isDelivery;
+    /** 交付实例范围 */
+    private String instanceScope;
+    /** 交付数据来源 */
+    private String dataSource;
+    /** 现场收集信息 */
+    private String collectInfo;
+    /** 备注 */
+    private String remark;
+
+}

+ 41 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/entity/db/ObjectTypeCollect.java

@@ -0,0 +1,41 @@
+package com.persagy.adm.server.custom.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 平台/项目级采集的信息点定义
+ * @author linhuili
+ * @date 2021-10-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "dt_define_type_collect", autoResultMap = true)
+public class ObjectTypeCollect extends AuditableEntity {
+    /** 集团编码 */
+    private String groupCode;
+    /** 项目ID 0-平台级 1-项目级 */
+    private String projectId;
+    /** 关联类型ID */
+    @NotNull(message = "类型ID不能为空")
+    private String defineTypeId;
+    /** 类型编码编码 */
+    private String code;
+    /** 对象类型 */
+    private String objType;
+    /** 交付类型:0-项目交付 1-现场交付  */
+    private Integer deliveryType;
+    /** 是否交付 0-否 1-是 */
+    private Integer isDelivery;
+    /** 交付范围:实例范围 */
+    private String instanceScope;
+    /** 交付范围:依赖&关联 */
+    private String associationRelation;
+    /** 备注 */
+    private String remark;
+
+}

+ 43 - 0
adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/entity/db/RelationDefineCollect.java

@@ -0,0 +1,43 @@
+package com.persagy.adm.server.custom.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 平台/项目级采集的信息点定义
+ * @author linhuili
+ * @date 2021-10-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "dt_define_relation_collect", autoResultMap = true)
+public class RelationDefineCollect extends AuditableEntity {
+    /** 集团编码 */
+    private String groupCode;
+    /** 项目ID 0-平台级 1-项目级 */
+    private String projectId;
+    /** 交付类型:0-项目交付 1-现场交付  */
+    private Integer deliveryType;
+    /** 源端对象类型编码 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ArrayNode sourceTypeCodes;
+    /** 末端对象类型编码 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ArrayNode endTypeCodes;
+    /** 图类型编码 */
+    private String graphCode;
+    /** 边类型编码  */
+    private String relCode;
+    /** 计算方式:0-手动计算 1-自动计算 */
+    private Integer automaticFlag;
+    /** 管道用途 */
+    private String pipeUse;
+    /** 备注 */
+    private String remark;
+
+}

+ 11 - 17
adm-business/adm-server/src/main/java/com/persagy/adm/server/custom/service/impl/SyncAppImpl.java

@@ -23,7 +23,6 @@ import com.persagy.adm.server.custom.service.*;
 import com.persagy.adm.server.custom.util.DataExtrasUtil;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.common.constant.ValidEnum;
-import com.persagy.dmp.define.entity.RelationDefine;
 import com.persagy.dmp.digital.client.DigitalObjectClient;
 import com.persagy.dmp.digital.client.DigitalRelationClient;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -61,12 +60,6 @@ public class SyncAppImpl implements ISyncApp {
 	private AdmJobSpaceMapper jobSpaceMapper;
 
 	@Autowired
-	private AdmProblemArchMapper problemArchMapper;
-
-	@Autowired
-	private AdmProblemEquipMapper problemEquipMapper;
-
-	@Autowired
 	private AdmFileMapper fileMapper;
 
 	@Autowired
@@ -126,13 +119,14 @@ public class SyncAppImpl implements ISyncApp {
 		majorCriteria.getCriteria().put("type", "major");
 		List<Map<String, Object>> majorList = ServiceUtil.call (() -> dicClient.dataQuery(groupCode, projectId, AdmConst.APP_ID, userId, majorCriteria));
 
-		//查询系统和设备定义
-		QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, AdmConst.OBJ_TYPE_SYSTEM, AdmConst.OBJ_TYPE_EQUIPMENT);
-		List<TypeDef> typeList = ServiceUtil.queryAllPage(() -> rwdClient.queryObjectType(groupCode, projectId, AdmConst.APP_ID, userId, criteria), criteria, new Pagination(500));
+		// 查询基于交付范围的系统和设备定义
+		QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper,AdmConst.OBJ_TYPE_SYSTEM, AdmConst.OBJ_TYPE_EQUIPMENT);
+		List<ObjectTypeCollect> typeList = ServiceUtil.queryAllPage(() -> rwdClient.queryDefineTypeCollect(groupCode, projectId, AdmConst.APP_ID, userId, criteria), criteria, new Pagination(500));
+
 
-		LinkedList<TypeDef> sysList = new LinkedList<>();
-		LinkedList<TypeDef> equipList = new LinkedList<>();
-		for(TypeDef def : typeList){
+		LinkedList<ObjectTypeCollect> sysList = new LinkedList<>();
+		LinkedList<ObjectTypeCollect> equipList = new LinkedList<>();
+		for(ObjectTypeCollect def : typeList){
 			if(def.getObjType().equals(AdmConst.OBJ_TYPE_SYSTEM))
 				sysList.add(def);
 			else if(def.getObjType().equals(AdmConst.OBJ_TYPE_EQUIPMENT))
@@ -144,17 +138,17 @@ public class SyncAppImpl implements ISyncApp {
 		data.setSystem(sysList);
 		data.setEquipment(equipList);
 
-		//查询关系定义
+//		查询基于交付范围的关系定义
 		if(includeRel) {
-			List<RelationDefine> relList = ServiceUtil.call(() -> rwdClient.queryRelDef(groupCode, projectId, AdmConst.APP_ID, userId, new QueryCriteria()));
+			List<RelationDefineCollect> relList = ServiceUtil.call(() -> rwdClient.queryDefineRelCollect(groupCode, projectId, AdmConst.APP_ID, userId, new QueryCriteria()));
 			data.setRelation(relList);
 		}
 
-		//查询信息点定义
+		//查询基于交付范围的信息点定义
 		if(includeInfos) {
 			QueryCriteria qc = new QueryCriteria();
 			qc.setCriteria(objectMapper.createObjectNode());
-			List<InfoDef> funcList = ServiceUtil.call(() -> rwdClient.queryFunc(groupCode, projectId, AdmConst.APP_ID, userId, qc));
+			List<ObjectInfoCollect> funcList = ServiceUtil.call(() -> rwdClient.queryDefineInfoCollect(groupCode, projectId, AdmConst.APP_ID, userId, qc));
 			data.setInfos(funcList);
 		}
 

+ 32 - 0
adm-business/adm-server/src/main/resources/db/init/schema.sql

@@ -371,3 +371,35 @@ CREATE TABLE IF NOT EXISTS `project_user`  (
   PRIMARY KEY (`id`) USING BTREE,
   UNIQUE INDEX `project_user_pk_2`(`project_id`, `user_id`) USING BTREE
 ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COMMENT = '项目用户关系表' ROW_FORMAT = Dynamic;
+
+CREATE TABLE IF NOT EXISTS `adm_model_file` (
+    `id` varchar(50) NOT NULL COMMENT '主键',
+    `original_name` varchar(255) DEFAULT NULL COMMENT '模型文件的上传原始名',
+    `version` int NOT NULL AUTO_INCREMENT COMMENT '楼层模型的版本号',
+    `user_id` varchar(80) DEFAULT NULL COMMENT '上传模型文件的用户id',
+    `user_name` varchar(80) DEFAULT NULL COMMENT '上传模型文件的用户名',
+    `status` smallint DEFAULT NULL COMMENT '模型文件的当前处理状态:1=上传完毕, 2=模型初步检查完成, 3=同步数据完成, 4=模型正常结束',
+    `note` json DEFAULT NULL COMMENT '备注',
+    `revit_file_id` varchar(50) DEFAULT NULL COMMENT '模型文件id',
+    `data_file_id` varchar(50) NOT NULL COMMENT '模型解析后生成的数据文件id',
+    `min_data_file_id` varchar(50) DEFAULT NULL COMMENT '模型解析后生成的小数据文件id,对应楼层的floorMap',
+    `floor_id` varchar(50) NOT NULL COMMENT '模型文件所属楼层(model_floor表id)',
+    `building_id` varchar(50) NOT NULL COMMENT '建筑id',
+    `project_id` varchar(50) DEFAULT '0' COMMENT '项目id',
+    `group_code` varchar(50) DEFAULT '0' COMMENT '集团编码',
+    `removed` tinyint(1) DEFAULT 0 COMMENT '模型文件是否已被删除',
+    `sync_retry_times` int DEFAULT NULL COMMENT '跟数据中心同步数据失败时的重试次数',
+    `sync_retry_date` timestamp NULL DEFAULT NULL COMMENT '上次重试日期',
+    `sync_error_msg` text DEFAULT NULL COMMENT '上次同步到数据中心时的错误消息',
+    `level` double(53,0) DEFAULT NULL COMMENT '模型的标高',
+    `status_info` json DEFAULT NULL COMMENT '存储模型状态信息',
+    `revit_version` varchar(50) DEFAULT NULL COMMENT '模型文件版本',
+    `creator` varchar(32) DEFAULT '0' COMMENT '创建人',
+    `creation_time` char(14) DEFAULT NULL COMMENT '创建时间',
+    `modifier` varchar(32) DEFAULT '0' COMMENT '最后更新人',
+    `modified_time` char(14) DEFAULT NULL COMMENT '最后更新时间',
+    `valid` tinyint DEFAULT '1' COMMENT '合法标识',
+    `ts` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '乐观锁',
+    PRIMARY KEY (`id`) USING BTREE,
+    UNIQUE INDEX `idx_1`(`version`, `floor_id`, `building_id`, `project_id`, `group_code`,`valid`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='模型文件表';

+ 48 - 0
adm-business/adm-server/src/main/resources/mapper/AdmModelFileMapper.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.adm.server.algorithm.dao.AdmModelFileMapper">
+
+    <resultMap id="BaseResultMap" type="com.persagy.adm.server.algorithm.entity.AdmModelFile">
+            <id property="id" column="id" jdbcType="VARCHAR"/>
+            <result property="originalName" column="original_name" jdbcType="VARCHAR"/>
+            <result property="version" column="version" jdbcType="INTEGER"/>
+            <result property="userId" column="user_id" jdbcType="VARCHAR"/>
+            <result property="userName" column="user_name" jdbcType="VARCHAR"/>
+            <result property="status" column="status" jdbcType="SMALLINT"/>
+            <result property="note" column="note" jdbcType="OTHER" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
+            <result property="revitFileId" column="revit_file_id" jdbcType="VARCHAR"/>
+            <result property="dataFileId" column="data_file_id" jdbcType="VARCHAR"/>
+            <result property="minDataFileId" column="min_data_file_id" jdbcType="VARCHAR"/>
+            <result property="floorId" column="floor_id" jdbcType="VARCHAR"/>
+            <result property="buildingId" column="building_id" jdbcType="VARCHAR"/>
+            <result property="projectId" column="project_id" jdbcType="VARCHAR"/>
+            <result property="groupCode" column="group_code" jdbcType="VARCHAR"/>
+            <result property="removed" column="removed" jdbcType="BOOLEAN"/>
+            <result property="syncRetryTimes" column="sync_retry_times" jdbcType="INTEGER"/>
+            <result property="syncRetryDate" column="sync_retry_date" jdbcType="TIMESTAMP"/>
+            <result property="syncErrorMsg" column="sync_error_msg" jdbcType="VARCHAR"/>
+            <result property="level" column="level" jdbcType="DOUBLE"/>
+            <result property="statusInfo" column="status_info" jdbcType="OTHER" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
+            <result property="revitVersion" column="revit_version" jdbcType="VARCHAR"/>
+            <result property="creator" column="creator" jdbcType="VARCHAR"/>
+            <result property="creationTime" column="creation_time" jdbcType="CHAR"/>
+            <result property="modifier" column="modifier" jdbcType="VARCHAR"/>
+            <result property="modifiedTime" column="modified_time" jdbcType="CHAR"/>
+            <result property="valid" column="valid" jdbcType="TINYINT"/>
+            <result property="ts" column="ts" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,original_name,version,
+        user_id,user_name,status,
+        note,revit_file_id,data_file_id,
+        min_data_file_id,floor_id,building_id,
+        project_id,group_code,removed,
+        sync_retry_times,sync_retry_date,sync_error_msg,
+        level,status_info,revit_version,
+        creator,creation_time,modifier,
+        modified_time,valid,ts
+    </sql>
+</mapper>

+ 2 - 1
pom.xml

@@ -5,11 +5,12 @@
     <parent>
         <artifactId>dmp-package</artifactId>
         <groupId>com.persagy</groupId>
-        <version>1.0.0</version>
+        <version>1.1.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.persagy</groupId>
     <artifactId>adm</artifactId>
+    <version>1.0.0</version>
     <packaging>pom</packaging>
 
     <modules>