Преглед изворни кода

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

lijie пре 3 година
родитељ
комит
238d48c418
100 измењених фајлова са 3840 додато и 198 уклоњено
  1. 37 1
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/DiagramController.java
  2. 177 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/IconController.java
  3. 8 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/DataStrategy.java
  4. 58 6
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/impl/DataStrategyImpl.java
  5. 39 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/dao/IconMapper.java
  6. 5 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/demo/DemoDataStrategy.java
  7. 53 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/entity/IconEntity.java
  8. 53 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/service/IconService.java
  9. 58 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/service/impl/IconServiceImpl.java
  10. 2 0
      adm-business/adm-diagram/src/main/resources/bootstrap.yml
  11. 19 0
      adm-business/adm-diagram/src/main/resources/db.init/schema.sql
  12. 48 0
      adm-business/adm-diagram/src/main/resources/mapper/DiagramIcon.xml
  13. 0 77
      adm-business/adm-middleware/pom.xml
  14. 10 0
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/constant/MigrationConstant.java
  15. 45 11
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/controller/DataMigrationController.java
  16. 37 6
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/DataMigrationHandler.java
  17. 16 2
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/IDataMigration.java
  18. 1 1
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/IDataMigrationProcess.java
  19. 1 1
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/IDefineDataMigration.java
  20. 3 2
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/service/MigrationAbstractService.java
  21. 1 1
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/service/MigrationLogService.java
  22. 87 23
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/DefineInfoMigration.java
  23. 75 16
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/DefineTypeMigration.java
  24. 2 2
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/service/Impl/MigrationAbstractServiceImpl.java
  25. 2 2
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/service/Impl/MigrationLogServiceImpl.java
  26. 91 25
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/ObjectDigitalMigration.java
  27. 78 22
      adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/ObjectRelationMigration.java
  28. 45 0
      adm-business/adm-server/pom.xml
  29. 30 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/aop/ExceptionAspect.java
  30. 35 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/client/DicClient.java
  31. 17 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/client/ImageServiceClient.java
  32. 60 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/client/OldAdmClient.java
  33. 79 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/client/RwdClient.java
  34. 61 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/common/AdmConst.java
  35. 25 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/common/AdmMessageConst.java
  36. 37 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/common/AdmRequest.java
  37. 36 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/common/AdmResult.java
  38. 23 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/config/AdmCommonConfig.java
  39. 46 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/config/AdmRabbitConfig.java
  40. 27 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/config/TestConfig.java
  41. 67 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/controller/AdmFileController.java
  42. 161 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/controller/AppController.java
  43. 43 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/controller/ManageController.java
  44. 359 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/controller/ToolController.java
  45. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmClientFlagMapper.java
  46. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmComponentMapper.java
  47. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmConfigMapper.java
  48. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmContainerConfigMapper.java
  49. 7 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmDefineProblemTypeMapper.java
  50. 16 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmFileMapper.java
  51. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmInfosConfigMapper.java
  52. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmJobSpaceMapper.java
  53. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmM2dEquipMapper.java
  54. 11 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmMessagePMapper.java
  55. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmObjectMapper.java
  56. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmPipeConfigMapper.java
  57. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmPipeMapper.java
  58. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmProblemArchMapper.java
  59. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmProblemEquipMapper.java
  60. 16 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmProblemMapper.java
  61. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmQrCodeMapper.java
  62. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmRelationMapper.java
  63. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmRelsConfigMapper.java
  64. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmServeAreaMapper.java
  65. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmUploadJobMapper.java
  66. 14 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmUploadLogMapper.java
  67. 53 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/datatx/DataTxHandler.java
  68. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/datatx/ObjectForTx.java
  69. 55 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/datatx/ObjectMapper4Tx.java
  70. 101 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/AdmProblem.java
  71. 51 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/BuildingData.java
  72. 16 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/CadFileInfo.java
  73. 18 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/CadFileQueryParam.java
  74. 58 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/D2mMessage.java
  75. 25 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/Dict.java
  76. 55 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/DownLoadData.java
  77. 43 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/InfoDef.java
  78. 31 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/Pagination.java
  79. 22 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/ProjectData.java
  80. 30 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/TypeDef.java
  81. 51 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/UploadData.java
  82. 42 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/UploadRtn.java
  83. 21 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmClientFlag.java
  84. 18 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmComponent.java
  85. 59 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmConfig.java
  86. 14 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmContainerConfig.java
  87. 18 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmDefineProblemType.java
  88. 97 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmFile.java
  89. 67 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmInfosConfig.java
  90. 71 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmJobSpace.java
  91. 18 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmM2dEquip.java
  92. 35 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmMessageP.java
  93. 90 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmObject.java
  94. 98 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmPipe.java
  95. 24 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmPipeConfig.java
  96. 67 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmProblemArch.java
  97. 20 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmProblemEquip.java
  98. 61 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmQrCode.java
  99. 28 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmRelation.java
  100. 0 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmRelsConfig.java

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

@@ -5,8 +5,10 @@ import com.persagy.adm.diagram.core.DataStrategy;
 import com.persagy.adm.diagram.core.model.Diagram;
 import com.persagy.adm.diagram.core.model.template.DiagramTemplate;
 import com.persagy.adm.diagram.frame.BdtpRequest;
+import com.persagy.adm.diagram.manage.DemoDiagramManager;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.web.bind.annotation.CrossOrigin;
@@ -32,6 +34,8 @@ public class DiagramController {
     @Autowired
     @Qualifier("dataStrategyImpl")
     private DataStrategy dataStrategy;
+    @Autowired
+    private DemoDiagramManager diagramManager;
 
     /**
      * 系统图列表接口
@@ -39,6 +43,7 @@ public class DiagramController {
      * @param diagram 请求参数
      * @return 系统图列表
      */
+    @ApiOperation("系统图列表接口")
     @PostMapping("/getDiagrams")
     public CommonResult<List<Diagram>> getDiagrams(@RequestBody Diagram diagram) {
         BdtpRequest current = BdtpRequest.getCurrent();
@@ -57,6 +62,7 @@ public class DiagramController {
      * @param diagram 系统图对象信息
      * @return 是否成功
      */
+    @ApiOperation("新增系统图")
     @PostMapping("/newDiagram")
     public CommonResult<Diagram> newDiagram(@RequestBody Diagram diagram) {
         return ResultHelper.single(dataStrategy.saveDiagram(diagram));
@@ -68,6 +74,7 @@ public class DiagramController {
      * @param diagramId 系统图id
      * @return 是否成功
      */
+    @ApiOperation("删除系统图")
     @GetMapping("/deleteDiagram")
     public CommonResult<Boolean> deleteDiagram(String diagramId) {
         return ResultHelper.single(dataStrategy.deleteDiagram(diagramId));
@@ -79,16 +86,18 @@ public class DiagramController {
      * @param diagramId 系统图id
      * @return 系统图对象信息
      */
+    @ApiOperation("根据系统图id获取系统图信息")
     @GetMapping("/getDiagram")
     public CommonResult<Diagram> getDiagram(String diagramId) {
         return ResultHelper.single(dataStrategy.getDiagram(diagramId));
     }
 
     /**
-     * 系统实例查询
+     * 系统实例查询
      *
      * @return 系统实例
      */
+    @ApiOperation("系统实例查询")
     @PostMapping("/system/instance")
     public CommonResult<List<ObjectNode>> loadSystemInstance() {
         BdtpRequest current = BdtpRequest.getCurrent();
@@ -102,17 +111,31 @@ public class DiagramController {
      *
      * @return 列表
      */
+    @ApiOperation("项目下的专业 -> 系统 ->系统实例 的树状结构数据")
     @PostMapping("/major/system/instance")
     public CommonResult<List<ObjectNode>> loadMajorSystemInstance() {
         return ResultHelper.multi(dataStrategy.loadMajorSystemInstance());
     }
 
     /**
+     * 根据系统类获取系统类型下的模板列表  以树状结构数据返回
+     *
+     * @param diagram diagram.getSystem() 参数
+     * @return 列表
+     */
+    @ApiOperation("据系统类获取系统类型下的模板列表")
+    @PostMapping("/systemType/template")
+    public CommonResult<List<ObjectNode>> loadSystemTypeTemplate(@RequestBody Diagram diagram) {
+        return ResultHelper.multi(dataStrategy.loadSystemTypeTemplate(diagram));
+    }
+
+    /**
      * 根据系统图类型获取模板列表
      *
      * @param diagramType 系统图类型
      * @return 模板列表
      */
+    @ApiOperation("根据系统图类型获取模板列表")
     @GetMapping("/getTemplates/ByType")
     public CommonResult<List<DiagramTemplate>> getTemplatesByType(String diagramType) {
         return ResultHelper.multi(dataStrategy.getTemplates(diagramType));
@@ -124,6 +147,7 @@ public class DiagramController {
      * @param templateId 模板id
      * @return 模板信息
      */
+    @ApiOperation("根据模板id获取系统模板信息")
     @GetMapping("/getTemplate/ById")
     public CommonResult<DiagramTemplate> getTemplateById(String templateId) {
         return ResultHelper.single(dataStrategy.getTemplate(templateId));
@@ -134,8 +158,20 @@ public class DiagramController {
      *
      * @return 模板列表
      */
+    @ApiOperation("获取所有的系统模板")
     @GetMapping("/getTemplates")
     public CommonResult<List<DiagramTemplate>> getTemplates() {
         return ResultHelper.multi(dataStrategy.getTemplates());
     }
+
+    /**
+     * 加载数据
+     *
+     * @return 模板列表
+     */
+    @ApiOperation("加载数据")
+    @PostMapping("/loadData")
+    public CommonResult<Diagram> loadData(@RequestBody Diagram diagram) {
+        return ResultHelper.single(diagramManager.loadData(diagram.getId(), true));
+    }
 }

+ 177 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/IconController.java

@@ -0,0 +1,177 @@
+package com.persagy.adm.diagram.controller;
+
+import cn.hutool.http.HttpUtil;
+import com.persagy.adm.diagram.entity.IconEntity;
+import com.persagy.adm.diagram.frame.BdtpRequest;
+import com.persagy.adm.diagram.service.IconService;
+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.file.model.FileInfo;
+import com.persagy.dmp.file.model.FileInfoCreator;
+import com.persagy.dmp.file.utils.FileStorageHelper;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.imageio.ImageIO;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.awt.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * 图标相关接口
+ *
+ * @author liyang
+ * @date 2022-01-06
+ */
+@RestController
+@CrossOrigin
+@RequestMapping("/icon")
+public class IconController {
+
+    @Autowired
+    private IconService iconService;
+
+    /**
+     * 上传图标接口
+     *
+     * @param file     文件
+     * @param legendId 所关联的图例id
+     * @param system   图例所属系统类型
+     * @param skin     皮肤
+     * @return
+     */
+    @ApiOperation("上传图标")
+    @PostMapping("/uploadIcon")
+    public CommonResult<Object> uploadIcon(@RequestParam("file") MultipartFile file,
+                                           @RequestParam String legendId,
+                                           @RequestParam String system,
+                                           @RequestParam(required = false) String skin) {
+        String fileName = file.getOriginalFilename();
+        long size = file.getSize();
+
+        IconEntity entity = new IconEntity();
+        entity.setIconSkin(skin);
+        entity.setLegendId(legendId);
+        entity.setSystemType(system);
+        entity.setIconSize(String.valueOf(size));
+
+        Optional.ofNullable(fileName).ifPresent(s -> {
+            int index = s.lastIndexOf(".");
+            String name = s.substring(0, index);
+            String fileType = s.substring(index + 1);
+            entity.setIconName(name);
+            entity.setIconType(fileType);
+        });
+
+        InputStream inputStream = null;
+        Image img = null;
+        try {
+            inputStream = file.getInputStream();
+            img = ImageIO.read(file.getInputStream());
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        boolean isImage = img == null || img.getWidth(null) <= 0 || img.getHeight(null) <= 0;
+        if (null == inputStream || isImage) {
+            throw new BusinessException(ResponseCode.A0400.getCode(), "文件不能为空,并且必须是图片!");
+        }
+
+        FileInfo fileInfo = FileInfoCreator.of(BdtpRequest.getCurrent().getGroupCode(), null,
+                null, entity.getIconName());
+        String fileId = FileStorageHelper.uploadFile(fileInfo, inputStream);
+        try {
+            inputStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        entity.setIconFileId(fileId);
+
+        return ResultHelper.single(iconService.saveIcon(entity));
+
+    }
+
+    /**
+     * 图标预览
+     *
+     * @param request  请求体
+     * @param response 响应体
+     * @param iconId   图标数据id
+     */
+    @ApiOperation("图标预览")
+    @GetMapping("/showImage")
+    public void showImage(HttpServletRequest request, HttpServletResponse response,
+                          @RequestParam("id") String iconId) {
+        IconEntity info = iconService.getIconInfo(iconId);
+        if (null == info) {
+            throw new BusinessException(ResponseCode.A0400.getCode(), "未查到此数据");
+        }
+        FileInfo fileInfo = FileStorageHelper.downloadUrl(info.getIconFileId());
+        // 2.通过http请求获取文件流
+        byte[] bytes = HttpUtil.downloadBytes(fileInfo.getFileDownloadUrl());
+        ServletOutputStream out = null;
+        try {
+            response.setHeader("Content-Type", "image/" + info.getIconType());
+            out = response.getOutputStream();
+            out.write(bytes);
+            out.flush();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (out != null) {
+                try {
+                    out.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    /**
+     * 根据图例id获取图标列表
+     *
+     * @param legendId 图例id
+     * @return
+     */
+    @ApiOperation("根据图例id获取图标列表")
+    @GetMapping("/icons/legend")
+    public CommonResult<List<IconEntity>> getIconsByLegendId(String legendId) {
+        return ResultHelper.multi(iconService.getIconsByLegendId(legendId));
+    }
+
+    /**
+     * 获取项目 集团 下的所有图标
+     *
+     * @return
+     */
+    @ApiOperation("获取所有图标")
+    @GetMapping("/icons")
+    public CommonResult<List<IconEntity>> getIcons() {
+        return ResultHelper.multi(iconService.getIcons());
+    }
+
+    /**
+     * 根据系统类型获取所有图标
+     *
+     * @return
+     */
+    @ApiOperation("根据系统类型获取所有图标")
+    @GetMapping("/icons/type")
+    public CommonResult<List<IconEntity>> getIconsBySystemType(String system) {
+        return ResultHelper.multi(iconService.getIconsBySystemType(system));
+    }
+}

+ 8 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/DataStrategy.java

@@ -79,4 +79,12 @@ public interface DataStrategy {
      * @return 列表
      */
     List<ObjectNode> loadMajorSystemInstance();
+
+    /**
+     * 根据系统类获取系统类型下的模板列表  以树状结构数据返回
+     *
+     * @param diagram diagram.getSystem() 参数
+     * @return
+     */
+    List<ObjectNode> loadSystemTypeTemplate(Diagram diagram);
 }

+ 58 - 6
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/impl/DataStrategyImpl.java

@@ -247,7 +247,9 @@ public class DataStrategyImpl implements DataStrategy {
             throw new BusinessException(ResponseCode.A0400.getCode(), "equipmentType不能为空");
         }
         String systemCode = Optional.of(equipmentType).map(s -> s.substring(0, 4)).orElse(StrUtil.EMPTY);
-        return getLegends(systemCode);
+        List<Legend> list = getLegends(systemCode);
+        //按设备类型过滤
+        return list.stream().filter(legend -> legend.getEquipmentTypes() != null && legend.getEquipmentTypes().contains(equipmentType)).collect(Collectors.toList());
     }
 
     /**
@@ -396,7 +398,7 @@ public class DataStrategyImpl implements DataStrategy {
     /**
      * 根据关系类型列表、节点id列表、项目id、集团code获取对象关系列表
      *
-     * @param relationTypes 关系类型列表
+     * @param relationTypes 关系类型列表 [graphCode, relCode]
      * @param objectIds     节点id列表
      * @param projectId     项目id
      * @param groupCode     集团code
@@ -408,17 +410,21 @@ public class DataStrategyImpl implements DataStrategy {
         if (CollectionUtil.isEmpty(objectIds)) {
             throw new BusinessException(ResponseCode.A0400.getCode(), "objectIds不能为空");
         }
+
+        //按图类型过滤查询
+        Set<String> graphTypes = new HashSet<>();
+        relationTypes.forEach(relTypeArr -> graphTypes.add(relTypeArr[0]));
         //查询到的所有关系
-        List<ObjectRelation> allRelations = queryRelationsByObjIds(projectId, groupCode, objectIds);
+        List<ObjectRelation> allRelations = queryRelationsByObjIds(projectId, groupCode, objectIds, graphTypes);
         //所有关系类型
         Set<String> types = new HashSet<>();
         Optional.ofNullable(relationTypes).ifPresent(relations ->
-                relations.forEach(strings -> types.addAll(Arrays.asList(strings))));
+                relations.forEach(strings -> types.add(strings[0] + '/' + strings[1])));
         Set<String> typeSet = types.stream().filter(Objects::nonNull).collect(Collectors.toSet());
         //最终符合结果的关系
         if (CollectionUtil.isNotEmpty(typeSet)) {
             List<ObjectRelation> res = allRelations.stream().filter(objectRelation ->
-                    typeSet.contains(objectRelation.getRelCode())).collect(Collectors.toList());
+                    typeSet.contains(objectRelation.getGraphCode() + '/' + objectRelation.getRelCode())).collect(Collectors.toList());
             //转换并返回
             return JsonNodeUtils.toListNode(res, null, null);
         }
@@ -431,15 +437,24 @@ public class DataStrategyImpl implements DataStrategy {
      * @param projectId 项目id
      * @param groupCode 集团code
      * @param objectIds 对象id列表
+     * @param graphTypes 关系的图类型(同时处理图类型和边类型不太可行,优选图类型过滤)
      * @return
      */
-    private List<ObjectRelation> queryRelationsByObjIds(String projectId, String groupCode, List<String> objectIds) {
+    private List<ObjectRelation> queryRelationsByObjIds(String projectId, String groupCode, List<String> objectIds, Set<String> graphTypes) {
         List<ObjectRelation> resultList = new ArrayList<>();
+
+        //graph_code
+        ArrayNode graphCode = objectMapper.createArrayNode();
+        if(graphTypes.size() > 0)
+            graphTypes.forEach(code -> graphCode.add(code));
+
         //obj_from
         CompletableFuture<List<ObjectRelation>> fromFuture = CompletableFuture.supplyAsync(() -> {
             QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper);
             ArrayNode objFrom = criteria.getCriteria().putArray(ObjectRelation.OBJ_FROM_HUM);
             Optional.ofNullable(objectIds).ifPresent(strings -> strings.forEach(objFrom::add));
+            if(graphCode.size() > 0)
+                criteria.getCriteria().set(ObjectRelation.GRAPH_CODE_HUM, graphCode);
             return DigitalRelationFacade.query(groupCode, projectId, null, null, criteria);
         }, executor);
         //obj_to
@@ -447,6 +462,8 @@ public class DataStrategyImpl implements DataStrategy {
             QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper);
             ArrayNode objTo = criteria.getCriteria().putArray(ObjectRelation.OBJ_TO_HUM);
             Optional.ofNullable(objectIds).ifPresent(strings -> strings.forEach(objTo::add));
+            if(graphCode.size() > 0)
+                criteria.getCriteria().set(ObjectRelation.GRAPH_CODE_HUM, graphCode);
             return DigitalRelationFacade.query(groupCode, projectId, null, null, criteria);
         }, executor);
 
@@ -598,4 +615,39 @@ public class DataStrategyImpl implements DataStrategy {
         }));
         return majorNodes;
     }
+
+    /**
+     * 根据系统类获取系统类型下的模板列表  以树状结构数据返回
+     *
+     * @param diagram diagram.getSystem() 参数
+     * @return
+     */
+    @Override
+    public List<ObjectNode> loadSystemTypeTemplate(Diagram diagram) {
+        if (diagram == null || StrUtil.isBlank(diagram.getSystem())) {
+            throw new BusinessException(ResponseCode.A0400.getCode(), "系统类[system]不能为空");
+        }
+        String system = diagram.getSystem();
+        List<DiagramType> diagramTypes = diagramTypeMapper.getDiagramTypes();
+        //符合system的系统图类型数据
+        List<DiagramType> diagramTypeList = Optional.ofNullable(diagramTypes).map(types -> types.stream().filter(diagramType ->
+                diagramType.getDSystem().equalsIgnoreCase(system)).collect(Collectors.toList())).orElse(new ArrayList<>());
+
+        List<TemplateEntity> templates = templateMapper.getTemplates();
+        List<ObjectNode> objectNodes = JsonNodeUtils.toListNode(diagramTypeList, null, null);
+        Optional.ofNullable(objectNodes).ifPresent(nodes -> nodes.forEach(node -> {
+            JsonNode jsonNode = node.get(Constants.CODE);
+            ArrayNode children = node.putArray(Constants.CHILDREN);
+            if (jsonNode != null) {
+                List<TemplateEntity> templateEntities = templates.stream().filter(templateEntity ->
+                        templateEntity.getDiagramType().equalsIgnoreCase(jsonNode.asText())).collect(Collectors.toList());
+                if (CollectionUtil.isNotEmpty(templateEntities)) {
+                    List<ObjectNode> templateNodes = JsonNodeUtils.toListNode(templateEntities, null, null);
+                    children.addAll(templateNodes);
+                }
+            }
+        }));
+
+        return objectNodes;
+    }
 }

+ 39 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/dao/IconMapper.java

@@ -0,0 +1,39 @@
+package com.persagy.adm.diagram.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.adm.diagram.entity.IconEntity;
+
+import java.util.List;
+
+/**
+ * 图例Dao
+ *
+ * @author liyang
+ * @date 2022-01-05
+ */
+public interface IconMapper extends BaseMapper<IconEntity> {
+
+
+    /**
+     * 获取某个图例下的所有图标
+     *
+     * @param legendId 图例id
+     * @return
+     */
+    List<IconEntity> getIconsByLegendId(String legendId);
+
+    /**
+     * 获取所有图标
+     *
+     * @return
+     */
+    List<IconEntity> getIcons();
+
+    /**
+     * 根据系统类型获取所有图标
+     *
+     * @param systemType 系统类型
+     * @return
+     */
+    List<IconEntity> getIconsBySystemType(String systemType);
+}

+ 5 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/demo/DemoDataStrategy.java

@@ -386,4 +386,9 @@ public class DemoDataStrategy implements DataStrategy {
 	public List<ObjectNode> loadMajorSystemInstance() {
 		return null;
 	}
+
+	@Override
+	public List<ObjectNode> loadSystemTypeTemplate(Diagram diagram) {
+		return null;
+	}
 }

+ 53 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/entity/IconEntity.java

@@ -0,0 +1,53 @@
+package com.persagy.adm.diagram.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * 图标实体
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@TableName(value = "diagram_icon")
+public class IconEntity extends AuditableEntity<IconEntity> {
+
+    /**
+     * 图标原名称
+     */
+    private String iconName;
+
+    /**
+     * 图标文件类型
+     */
+    private String iconType;
+    /**
+     * 图标所属系统类型
+     */
+    private String systemType;
+
+    /**
+     * 图标大小
+     */
+    private String iconSize;
+
+    /**
+     * 图标对应的文件id
+     */
+    private String iconFileId;
+
+    /**
+     * 图标皮肤
+     */
+    private String iconSkin;
+
+    /**
+     * 所属图例id
+     */
+    private String legendId;
+
+
+}

+ 53 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/service/IconService.java

@@ -0,0 +1,53 @@
+package com.persagy.adm.diagram.service;
+
+import com.persagy.adm.diagram.entity.IconEntity;
+
+import java.util.List;
+
+/**
+ * 图标服务
+ *
+ * @author liyang
+ * @date 2022-01-06
+ */
+public interface IconService {
+
+    /**
+     * 图标保存
+     *
+     * @param entity 图标对象信息
+     * @return
+     */
+    IconEntity saveIcon(IconEntity entity);
+
+    /**
+     * 根据id获取数据信息
+     *
+     * @param iconId
+     * @return
+     */
+    IconEntity getIconInfo(String iconId);
+
+    /**
+     * 根据图例id获取所有图标
+     *
+     * @param legendId 图例id
+     * @return
+     */
+    List<IconEntity> getIconsByLegendId(String legendId);
+
+    /**
+     * 获取所有图标
+     *
+     * @return
+     */
+    List<IconEntity> getIcons();
+
+    /**
+     * 根据系统类型获取所有图标
+     *
+     * @param system 系统类型
+     * @return
+     */
+    List<IconEntity> getIconsBySystemType(String system);
+}

+ 58 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/service/impl/IconServiceImpl.java

@@ -0,0 +1,58 @@
+package com.persagy.adm.diagram.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import com.persagy.adm.diagram.dao.IconMapper;
+import com.persagy.adm.diagram.entity.IconEntity;
+import com.persagy.adm.diagram.frame.BdtpRequest;
+import com.persagy.adm.diagram.service.IconService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class IconServiceImpl implements IconService {
+
+    @Autowired
+    private IconMapper iconMapper;
+
+    /**
+     * 保存图标
+     *
+     * @param entity 图标对象信息
+     * @return
+     */
+    @Override
+    public IconEntity saveIcon(IconEntity entity) {
+
+        entity.setId(IdUtil.simpleUUID());
+        iconMapper.insert(entity);
+
+        return entity;
+    }
+
+    @Override
+    public IconEntity getIconInfo(String iconId) {
+        return iconMapper.selectById(iconId);
+    }
+
+    @Override
+    public List<IconEntity> getIconsByLegendId(String legendId) {
+        return iconMapper.getIconsByLegendId(legendId);
+    }
+
+    @Override
+    public List<IconEntity> getIcons() {
+        return iconMapper.getIcons();
+    }
+    /**
+     * 根据系统类型获取所有图标
+     *
+     * @param systemType 系统类型
+     * @return
+     */
+    @Override
+    public List<IconEntity> getIconsBySystemType(String systemType) {
+        return iconMapper.getIconsBySystemType(systemType);
+    }
+}

+ 2 - 0
adm-business/adm-diagram/src/main/resources/bootstrap.yml

@@ -21,6 +21,8 @@ persagy:
       service: http://develop.ysbdtp.com/dmp-rwd
     dic:
       service: http://develop.ysbdtp.com/dmp-dic
+    file:
+      service: http://develop.ysbdtp.com/dmp-file
 
 #    driver-class-name: com.mysql.cj.jdbc.Driver
 #  datasource:

+ 19 - 0
adm-business/adm-diagram/src/main/resources/db.init/schema.sql

@@ -76,3 +76,22 @@ CREATE TABLE IF NOT EXISTS `diagram` (
   KEY `idx_project_id_system_id` (`project_id`,`system_id`) USING BTREE,
   KEY `idx_project_id_group_code` (`project_id`,`group_code`) USING BTREE
 ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC COMMENT='系统图表结构';
+
+-- 图标
+CREATE TABLE IF NOT EXISTS `diagram_icon` (
+  `id` varchar(40) NOT NULL COMMENT '主键',
+  `legend_id` varchar(40) DEFAULT NULL COMMENT '图例id',
+  `icon_name` varchar(255) DEFAULT NULL COMMENT '图标文件原名',
+  `icon_type` varchar(255) DEFAULT NULL COMMENT '图标文件类型',
+  `system_type` varchar(40) DEFAULT NULL COMMENT '图标所属系统类型',
+  `icon_size` varchar(255) DEFAULT NULL COMMENT '图标大小',
+  `icon_file_id` varchar(255) NOT NULL COMMENT '图标对应的文件id',
+  `icon_skin` varchar(255) DEFAULT NULL COMMENT '图标皮肤',
+  `creator` varchar(32) DEFAULT NULL COMMENT '创建人',
+  `creation_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
+  `modifier` varchar(32) DEFAULT NULL COMMENT '最后修改人',
+  `modified_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
+  `valid` tinyint DEFAULT 1 NOT NULL COMMENT '合法标识',
+  `ts` timestamp default current_timestamp on update current_timestamp NOT NULL COMMENT '乐观锁',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB ROW_FORMAT=DYNAMIC COMMENT='图标表结构';

+ 48 - 0
adm-business/adm-diagram/src/main/resources/mapper/DiagramIcon.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.diagram.dao.IconMapper">
+
+    <resultMap id="iconBaseMap" type="com.persagy.adm.diagram.entity.IconEntity">
+        <id column="id" property="id" jdbcType="VARCHAR"/>
+        <result column="icon_name" property="iconName" jdbcType="VARCHAR"/>
+        <result column="icon_type" property="iconType" jdbcType="VARCHAR"/>
+        <result column="system_type" property="systemType" jdbcType="VARCHAR"/>
+        <result column="icon_size" property="iconSize" jdbcType="VARCHAR"/>
+        <result column="icon_file_id" property="iconFileId" jdbcType="VARCHAR"/>
+        <result column="icon_skin" property="iconSkin" jdbcType="VARCHAR"/>
+        <result column="legend_id" property="legendId" jdbcType="VARCHAR"/>
+        <result column="creator" property="creator" jdbcType="VARCHAR"/>
+        <result column="creation_time" property="creationTime" jdbcType="CHAR"/>
+        <result column="modifier" property="modifier" jdbcType="VARCHAR"/>
+        <result column="modified_time" property="modifiedTime" jdbcType="CHAR"/>
+        <result column="valid" property="valid" jdbcType="TINYINT"/>
+        <result column="ts" property="ts" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="baseSql">
+        id,icon_name,icon_type,system_type,icon_size,icon_file_id,icon_skin,legend_id,
+        creator,creation_time,modifier,modified_time,valid,ts
+    </sql>
+
+    <select id="getIconsByLegendId" resultMap="iconBaseMap">
+        SELECT
+        <include refid="baseSql"/>
+        FROM diagram_icon
+        WHERE valid = 1 AND legend_id=#{legendId}
+    </select>
+
+    <select id="getIcons" resultMap="iconBaseMap">
+        SELECT
+        <include refid="baseSql"/>
+        FROM diagram_icon
+        WHERE valid = 1
+    </select>
+    <select id="getIconsBySystemType" resultMap="iconBaseMap">
+        SELECT
+        <include refid="baseSql"/>
+        FROM diagram_icon
+        WHERE valid = 1 AND system_type=#{systemType}
+    </select>
+</mapper>
+
+

+ 0 - 77
adm-business/adm-middleware/pom.xml

@@ -11,59 +11,16 @@
     <groupId>com.persagy</groupId>
     <artifactId>adm-middleware</artifactId>
 
-    <repositories>
-        <repository>
-            <id>Persagy</id>
-            <name>persagy</name>
-            <url>http://47.93.132.139:8081/nexus/content/groups/public/</url>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-        </repository>
-        <repository>
-            <id>persagy</id>
-            <name>releases Repository</name>
-            <url>http://47.93.132.139:8081/nexus/content/repositories/persagy/</url>
-            <layout>default</layout>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-        </repository>
-
-        <repository>
-            <id>osgeo</id>
-            <name>Open Source Geospatial Foundation Repository</name>
-            <url>https://repo.osgeo.org/repository/release/</url>
-        </repository>
-    </repositories>
-
-    <properties>
-        <java.version>1.8</java.version>
-        <easyexcel.version>2.2.8</easyexcel.version>
-    </properties>
     <dependencies>
         <!-- 配置中心(包含注册中心) -->
         <dependency>
             <groupId>com.persagy</groupId>
             <artifactId>integrated-config-client</artifactId>
-            <exclusions>
-                <exclusion>
-                    <artifactId>xstream</artifactId>
-                    <groupId>com.thoughtworks.xstream</groupId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <!-- 阿里云扫描漏洞要求版本需>=1.4.18 -->
         <dependency>
             <groupId>com.thoughtworks.xstream</groupId>
             <artifactId>xstream</artifactId>
-            <version>1.4.18</version>
         </dependency>
         <dependency>
             <groupId>com.persagy</groupId>
@@ -80,50 +37,16 @@
             </exclusions>
         </dependency>
         <dependency>
-            <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
-        </dependency>
-        <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>easyexcel</artifactId>
-            <version>${easyexcel.version}</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>asm</artifactId>
-                    <groupId>org.ow2.asm</groupId>
-                </exclusion>
-                <exclusion>
-                    <artifactId>poi</artifactId>
-                    <groupId>org.apache.poi</groupId>
-                </exclusion>
-                <exclusion>
-                    <artifactId>poi-ooxml</artifactId>
-                    <groupId>org.apache.poi</groupId>
-                </exclusion>
-                <exclusion>
-                    <artifactId>poi-ooxml-schemas</artifactId>
-                    <groupId>org.apache.poi</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
         <dependency>
             <groupId>org.geotools</groupId>
             <artifactId>gt-main</artifactId>
-            <version>23.0</version>
         </dependency>
         <dependency>
             <groupId>com.persagy</groupId>
             <artifactId>dmp-auth-starter</artifactId>
-            <version>1.0.0</version>
         </dependency>
     </dependencies>
 </project>

+ 10 - 0
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/constant/MigrationConstant.java

@@ -23,18 +23,24 @@ public class MigrationConstant {
     public final static String DEF_CLASS_INSERT = "/dmp-rwd/rwd/def/class/createBatch?";
     public final static String DEF_CLASS_DELETE = "/dmp-rwd/rwd/def/class/deleteBatch?";
     public final static String DEF_CLASS_UPDATE = "/dmp-rwd/rwd/def/class/updateBatch?";
+    /**   对象实例表 sql脚本 开头  ***/
+    public final static String DEF_CLASS_SQL_PRE = "REPLACE INTO `dt_define_type`(`id`, `code`, `name`, `alias_code`, `alias_name`, `obj_type`, `group_code`, `project_id`, `major_code`, `system_code`, `equipment_code`, `parent_code`, `version`, `source_from`, `creator`, `creation_time`, `modifier`, `modified_time`, `valid`)  VALUES \n ";
+
 
     /**   信息点 接口 ***/
     public final static String DEF_FUNCID = "/dmp-rwd/rwd/def/funcid?";
     public final static String DEF_FUNCID_INSERT = "/dmp-rwd/rwd/def/funcid/createBatch?";
     public final static String DEF_FUNCID_DELETE = "/dmp-rwd/rwd/def/funcid/deleteBatch?";
     public final static String DEF_FUNCID_UPDATE = "/dmp-rwd/rwd/def/funcid/updateBatch?";
+    /**   对象实例表 sql脚本 开头  ***/
+    public final static String DEF_FUNCID_SQL_PRE = "REPLACE INTO `dt_define_info`(`id`, `code`, `name`, `alias_code`, `alias_name`, `class_code`, `group_code`, `project_id`, `category`, `first_tag`, `second_tag`, `priority`, `input_mode`, `unit`, `data_type`, `is_multiple`, `is_region`, `formater`, `data_source`, `remark`, `sub_flag`, `weak_point`, `show_order`, `version`, `source_from`, `creator`, `creation_time`, `modifier`, `modified_time`, `valid`) VALUES\n";
 
     /**   图类型表 接口 需要提供批量 ***/
     public final static String DEF_GRAPH = "/dmp-rwd/rwd/def/graph/query?";
     public final static String DEF_GRAPH_INSERT = "/dmp-rwd/rwd/def/graph/create?";
     public final static String DEF_GRAPH_DELETE = "/dmp-rwd/rwd/def/graph/delete?";
     public final static String DEF_GRAPH_UPDATE = "/dmp-rwd/rwd/def/graph/update?";
+    public final static String DEF_GRAPH_UPDATE_SQL_PRE ="REPLACE INTO `dt_define_graph` ( `id`, `code`,`name`, `first_category`, `second_category`,`second_category_mes`, `remark`, `object_types`,`creator`, `creation_time` , `modifier`,`modified_time`,`valid` ) VALUES \n ";
 
     /**   边类型表 接口  ***/
     public final static String DEF_REL = "/dmp-rwd/rwd/def/rel/query?";
@@ -48,6 +54,8 @@ public class MigrationConstant {
     public final static String DT_OBJECT_INSERT = "/dmp-rwd/rwd/instance/object/create?";
     public final static String DT_OBJECT_DELETE = "/dmp-rwd/rwd/instance/object/delete?";
     public final static String DT_OBJECT_UPDATE = "/dmp-rwd/rwd/instance/object/update?";
+    /**   对象实例表 sql脚本 开头  ***/
+    public final static String DT_OBJECT_SQL_PRE = "REPLACE INTO `dt_object`(`id`, `name`, `local_id`, `local_name`, `group_code`, `project_id`, `obj_type`, `class_code`, `grouping`, `infos`, `virtual_codes`, `create_app`, `update_app`, `creator`, `creation_time`, `modifier`, `modified_time`, `valid`) VALUES \n";
 
 
     /**   关系实例表 接口  ***/
@@ -55,4 +63,6 @@ public class MigrationConstant {
     public final static String DT_RELATION_INSERT = "/dmp-rwd/rwd/instance/relation/create?";
     public final static String DT_RELATION_DELETE = "/dmp-rwd/rwd/instance/relation/delete?";
     public final static String DT_RELATION_UPDATE = "/dmp-rwd/rwd/instance/relation/update?";
+    /**   对象实例表 sql脚本 开头  ***/
+    public final static String DT_RELATION_SQL_PRE = "REPLACE INTO `dt_relation`(`id`, `group_code`, `project_id`, `graph_id`, `graph_code`, `rel_code`, `rel_value`, `obj_from`, `obj_to`, `create_app`, `update_app`, `creator`, `creation_time`, `modifier`, `modified_time`, `valid` ) VALUES \n";
 }

+ 45 - 11
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/controller/DataMigrationController.java

@@ -14,12 +14,9 @@ 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.JsonHelper;
-import com.persagy.dmp.migrate.client.DigitalMigrateLogFacade;
-import com.persagy.dmp.rwd.migrate.entity.SyncData;
 import com.persagy.proxy.adm.request.AdmQueryCriteria;
 import com.persagy.proxy.adm.request.AdmResponse;
 import com.persagy.proxy.adm.utils.AdmContextUtil;
-import com.persagy.proxy.adm.utils.AdmQueryCriteriaHelper;
 import com.persagy.proxy.common.entity.DmpResult;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
 import com.persagy.proxy.migration.constant.MigrationConstant;
@@ -27,17 +24,17 @@ import com.persagy.proxy.migration.constant.MigrationObjType;
 import com.persagy.proxy.migration.handler.DataMigrationHandler;
 import com.persagy.proxy.migration.model.DataMigrationExcel;
 import com.persagy.proxy.migration.model.MigrationInfo;
-import com.persagy.proxy.migration.service.MigrationLogService;
+import com.persagy.proxy.migration.service.IMigrationLogService;
+import com.persagy.proxy.migration.service.Impl.DataBaseBackup;
 import com.persagy.proxy.object.model.AdmProject;
 import com.persagy.proxy.object.service.IAdmProjectService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-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 org.springframework.web.bind.annotation.*;
 
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedOutputStream;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
@@ -59,7 +56,7 @@ import java.util.Map;
 public class DataMigrationController {
     private final DataMigrationHandler dataMigrationHandler;
     private final IAdmProjectService projectService;
-    private final MigrationLogService logService;
+    private final IMigrationLogService logService;
     /**
      * 导出待迁移的数据信息
      *
@@ -149,10 +146,47 @@ public class DataMigrationController {
     }
 
     /**
-     * 迁移数据,执行脚本获取
+     * 迁移数据,获取执行脚本文件
      */
-    public void getMigrateSqlFile(){
+    @GetMapping("/getSqlFile")
+    public void getMigrateSqlFile(HttpServletResponse response){
+        InstanceUrlParam context = AdmContextUtil.toDmpContext();
+        StringBuffer dataMigrationSqls = dataMigrationHandler.handleAndGetSqlList(context);
+
+        response.setCharacterEncoding("utf-8");
+        //设置响应的内容类型
+        response.setContentType("text/plain");
+        //设置文件的名称和格式
+        response.addHeader("Content-Disposition","attachment;filename="
+                + genAttachmentFileName( context.getProjectId(), "JSON_FOR_UCC_")//设置名称格式,没有这个中文名称无法显示
+                + ".sql");
+        BufferedOutputStream buff = null;
+        ServletOutputStream outStr = null;
+        try {
+            outStr = response.getOutputStream();
+            buff = new BufferedOutputStream(outStr);
+            buff.write(dataMigrationSqls.toString().getBytes("UTF-8"));
+            buff.flush();
+            buff.close();
+        } catch (Exception e) {
+            log.error("导出文件文件出错:{}",e);
+        } finally {try {
+            buff.close();
+            outStr.close();
+        } catch (Exception e) {
+            log.error("关闭流对象出错 e:{}",e);
+        }
+        }
+    }
+
 
+    public  String genAttachmentFileName(String cnName, String defaultName) {
+        try {
+            cnName = new String(cnName.getBytes("gb2312"), "ISO8859-1");
+        } catch (Exception e) {
+            cnName = defaultName;
+        }
+        return cnName;
     }
 
     /**

+ 37 - 6
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/DataMigrationHandler.java

@@ -7,6 +7,12 @@ import com.persagy.proxy.common.entity.InstanceUrlParam;
 import com.persagy.proxy.migration.constant.MigrationTable;
 import com.persagy.proxy.migration.model.DataMigrationExcel;
 import com.persagy.proxy.migration.model.MigrationInfo;
+import com.persagy.proxy.migration.service.*;
+import com.persagy.proxy.migration.service.Impl.DefineInfoMigration;
+import com.persagy.proxy.migration.service.Impl.DefineTypeMigration;
+import com.persagy.proxy.migration.service.Impl.ObjectDigitalMigration;
+import com.persagy.proxy.migration.service.Impl.ObjectRelationMigration;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
@@ -19,7 +25,13 @@ import java.util.*;
  * @date 2021/12/3 11:14
  */
 @Component
+@RequiredArgsConstructor
 public class DataMigrationHandler {
+    private final DefineTypeMigration typeMigration;
+    private final DefineInfoMigration infoMigration;
+
+    private final ObjectDigitalMigration objectDigitalMigration;
+    private final ObjectRelationMigration objectRelationMigration;
 
     private static Map<String, IDataMigration> migrationMap = new HashMap<>(16);
 
@@ -30,14 +42,14 @@ public class DataMigrationHandler {
      */
     public Map<String, List<DataMigrationExcel>> handleDicData(InstanceUrlParam context, MigrationInfo migrationInfo){
         Map<String,List<DataMigrationExcel>> results = new HashMap<>(2);
-        AdmResponse admResponseType = DefineTypeMigration.getInstance().compareByCount(context, migrationInfo);
+        AdmResponse admResponseType = typeMigration.compareByCount(context, migrationInfo);
 
         if(!admResponseType.getResult().equals(DmpResult.SUCCESS)){
             List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
             dataMigrationExcels.addAll((Collection<? extends DataMigrationExcel>) admResponseType.getContent());
             results.put(MigrationTable.DTDEFINETYPE.getCode(), dataMigrationExcels);
         }
-        AdmResponse admResponseInfo = DefineInfoMigration.getInstance().compareByCount(context, migrationInfo);
+        AdmResponse admResponseInfo = infoMigration.compareByCount(context, migrationInfo);
         if(!admResponseInfo.getResult().equals(DmpResult.SUCCESS)){
             List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
             dataMigrationExcels.addAll((Collection<? extends DataMigrationExcel>) admResponseInfo.getContent());
@@ -46,6 +58,25 @@ public class DataMigrationHandler {
         return results;
     }
 
+
+    /**
+     * 获取迁移脚本
+     * @param context
+     */
+    public StringBuffer handleAndGetSqlList(InstanceUrlParam context){
+        StringBuffer sqls = new StringBuffer("");
+        if(CollUtil.isNotEmpty(migrationMap)){
+            for (MigrationTable migrationTable : MigrationTable.values()){
+                if(!migrationMap.containsKey(migrationTable.getCode())){
+                    continue;
+                }
+                sqls.append(migrationMap.get(migrationTable.getCode()).migrateForSql(context));
+            }
+        }
+        return sqls;
+    }
+
+
     /**
      * 获取迁移数据信息
      * @param context
@@ -87,9 +118,9 @@ public class DataMigrationHandler {
 
     @PostConstruct
     private void initHandleService(){
-        addMap(MigrationTable.DTDEFINETYPE.getCode(), DefineTypeMigration.getInstance());
-        addMap(MigrationTable.DTDEFINEINFO.getCode(), DefineInfoMigration.getInstance());
-        addMap(MigrationTable.DTOBJECT.getCode(), ObjectDigitalMigration.getInstance());
-        addMap(MigrationTable.DTRELATION.getCode(), ObjectRelationMigration.getInstance());
+        addMap(MigrationTable.DTDEFINETYPE.getCode(), typeMigration);
+        addMap(MigrationTable.DTDEFINEINFO.getCode(), infoMigration);
+        addMap(MigrationTable.DTOBJECT.getCode(), objectDigitalMigration);
+        addMap(MigrationTable.DTRELATION.getCode(), objectRelationMigration);
     }
 }

+ 16 - 2
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/IDataMigration.java

@@ -1,4 +1,4 @@
-package com.persagy.proxy.migration.handler;
+package com.persagy.proxy.migration.service;
 
 import com.persagy.proxy.adm.request.AdmResponse;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
@@ -19,9 +19,23 @@ public interface IDataMigration{
     /**
      * 数据迁移
      * @param context
-     * @return
+     * @return excel
      */
     List<DataMigrationExcel> migrateForExcel(InstanceUrlParam context, MigrationInfo migrationInfo);
+
+    /**
+     * 数据迁移
+     * @param context
+     * @return log
+     */
     AdmResponse migrateForLog(InstanceUrlParam context, MigrationInfo migrationInfo);
 
+
+    /**
+     * 数据迁移
+     * @param context
+     * @return sql 文件
+     */
+    String migrateForSql(InstanceUrlParam context);
+
 }

+ 1 - 1
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/IDataMigrationProcess.java

@@ -1,4 +1,4 @@
-package com.persagy.proxy.migration.handler;
+package com.persagy.proxy.migration.service;
 
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.rwd.migrate.entity.SyncData;

+ 1 - 1
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/IDefineDataMigration.java

@@ -1,4 +1,4 @@
-package com.persagy.proxy.migration.handler;
+package com.persagy.proxy.migration.service;
 
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.proxy.common.entity.InstanceUrlParam;

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

@@ -14,16 +14,17 @@ import java.util.Set;
 
 /**
  * @author lvxianyun
- * @title: MigrationAbstractService
+ * @title: IMigrationAbstractService
  * @projectName adm-middleware
  * @description: 提供基础的数据操作方法
  * @date 2021/12/3 10:42
  */
-public interface MigrationAbstractService<T> {
+public interface IMigrationAbstractService<T> {
 
     /**
      * adm交付数据(A) ∩ 现场数据(B)
      * (A∩B) A
+     *
      *  需要进一步对比的数据
      */
     Map<String,Object> doIntersectionGetFrom(Map<String,Object> from, Map<String,Object> to);

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

@@ -12,7 +12,7 @@ import com.persagy.proxy.common.entity.InstanceUrlParam;
  * @description: 迁移日志服务
  * @date 2022/1/5 17:21
  */
-public interface MigrationLogService {
+public interface IMigrationLogService {
 
     AdmResponse queryMigrationLog(InstanceUrlParam context, AdmQueryCriteria request);
 }

+ 87 - 23
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/DefineInfoMigration.java

@@ -1,4 +1,4 @@
-package com.persagy.proxy.migration.handler;
+package com.persagy.proxy.migration.service.Impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
@@ -19,8 +19,12 @@ import com.persagy.proxy.migration.constant.MigrationType;
 import com.persagy.proxy.migration.model.DataMigrationExcel;
 import com.persagy.proxy.migration.model.DataMigrationResponse;
 import com.persagy.proxy.migration.model.MigrationInfo;
+import com.persagy.proxy.migration.service.IDataMigration;
+import com.persagy.proxy.migration.service.IDataMigrationProcess;
+import com.persagy.proxy.migration.service.IDefineDataMigration;
 import com.persagy.proxy.migration.service.Impl.MigrationAbstractServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -33,23 +37,8 @@ import java.util.stream.Collectors;
  * @date 2021/12/8 17:28
  */
 @Slf4j
+@Service
 public class DefineInfoMigration extends MigrationAbstractServiceImpl<ObjectInfoDefine> implements IDataMigration, IDefineDataMigration<ObjectInfoDefine>, IDataMigrationProcess<ObjectInfoDefine> {
-    
-    private static DefineInfoMigration instance;
-
-    private DefineInfoMigration() {}
-
-    // 静态方法返回该实例
-    public static DefineInfoMigration getInstance() {
-        if(instance == null) {
-            synchronized (DefineInfoMigration.class) {
-                if (instance == null) {
-                    instance = new DefineInfoMigration();
-                }
-            }
-        }
-        return instance;
-    }
 
     /**
      * 数据迁移
@@ -139,6 +128,87 @@ public class DefineInfoMigration extends MigrationAbstractServiceImpl<ObjectInfo
     }
 
     /**
+     * 数据迁移
+     *
+     * @param context
+     * @return sql 文件
+     */
+    @Override
+    public String migrateForSql(InstanceUrlParam context) {
+        //获取自定义的信息点数据
+        QueryCriteria queryCriteria = getCustomQueryCriteria(context);
+        List<ObjectInfoDefine> admDefineList = getAdmData(context, queryCriteria);
+        if(CollUtil.isEmpty(admDefineList)){
+            return "";
+        }
+        StringBuffer sqls = new StringBuffer(" \n -- 数据迁移  dt_define_info ------ \n");
+        sqls.append(MigrationConstant.DEF_FUNCID_SQL_PRE);
+        admDefineList.forEach(infoDefine -> {
+            sqls.append("(");
+            sqls.append("'").append(infoDefine.getId()).append("',");
+            sqls.append("'").append(infoDefine.getCode()).append("',");
+            sqls.append("'").append(infoDefine.getName()).append("',");
+            sqls.append("'").append(infoDefine.getAliasCode()).append("',");
+            sqls.append("'").append(infoDefine.getAliasName()).append("',");
+            sqls.append("'").append(infoDefine.getClassCode()).append("',");
+            sqls.append("'").append(infoDefine.getGroupCode()).append("',");
+            sqls.append("'").append(infoDefine.getProjectId()).append("',");
+            sqls.append("'").append(infoDefine.getCategory()).append("',");
+            sqls.append("'").append(infoDefine.getFirstTag()).append("',");
+            sqls.append("'").append(infoDefine.getSecondTag()).append("',");
+            sqls.append("'").append(infoDefine.getPriority()).append("',");
+            sqls.append("'").append(infoDefine.getInputMode()).append("',");
+            if (infoDefine.getUnit() == null) {
+                sqls.append(infoDefine.getUnit()).append(",");
+            } else {
+                sqls.append("'").append(infoDefine.getUnit()).append("',");
+            }
+            sqls.append("'").append(infoDefine.getDataType()).append("',");
+            sqls.append(infoDefine.getIsMultiple()?1:0).append(",");
+            sqls.append(infoDefine.getIsRegion()?1:0).append(",");
+            if (infoDefine.getFormater() == null) {
+                sqls.append(infoDefine.getFormater()).append(",");
+            } else {
+                sqls.append("'").append(infoDefine.getFormater()).append("',");
+            }
+            if (infoDefine.getDataSource() == null) {
+                sqls.append(infoDefine.getDataSource()).append(",");
+            } else {
+                sqls.append("'").append(infoDefine.getDataSource()).append("',");
+            }
+            if (infoDefine.getRemark() == null) {
+                sqls.append(infoDefine.getRemark()).append(",");
+            } else {
+                sqls.append("'").append(infoDefine.getRemark()).append("',");
+            }
+            sqls.append(infoDefine.getSubFlag()?1:0).append(",");
+            sqls.append(infoDefine.getWeakPoint()?1:0).append(",");
+            sqls.append(infoDefine.getShowOrder()).append(",");
+            sqls.append("'").append(infoDefine.getVersion()).append("',");
+            sqls.append(infoDefine.getSourceFrom()).append(",");
+            sqls.append("'").append(infoDefine.getCreator()).append("',");
+            sqls.append("'").append(infoDefine.getCreationTime()).append("',");
+            if (infoDefine.getModifier() == null) {
+                sqls.append(infoDefine.getModifier()).append(",");
+            } else {
+                sqls.append("'").append(infoDefine.getModifier()).append("',");
+            }
+
+            if (infoDefine.getModifiedTime() == null) {
+                sqls.append(infoDefine.getModifiedTime()).append(",");
+            } else {
+                sqls.append("'").append(infoDefine.getModifiedTime()).append(",");
+            }
+            sqls.append(infoDefine.getValid());
+            sqls.append("),");
+        });
+        String sql = sqls.toString();
+        sql = sql.substring(0, sql.lastIndexOf(","));
+        sql +=";";
+        return sql;
+    }
+
+    /**
      * 获取adm交付的数据,默认获取有效数据
      *
      * @param context
@@ -371,10 +441,8 @@ public class DefineInfoMigration extends MigrationAbstractServiceImpl<ObjectInfo
             log.error(" ######################### DefineInfo adm已交付需要同步的数据:"+ ResponseCode.C0320.getDesc() +" 同步结束 #########################");
             return dataMigrationExcels;
         }
-        //String insertUrl = requestUrl(context, migrationInfo, MigrationType.INSERT.getCode());
         if(CollUtil.isEmpty(projectDefineList)){
             log.info("######################### DefineInfo 获取批量插入数据 #########################");
-            //DataMigrationResponse response = insertBatch(admDefineList, ObjectInfoDefine.class, insertUrl);
             dataMigrationExcels.addAll(processDataForExcel(admDefineList, MigrationType.CREATE.getCode()));
             return dataMigrationExcels;
         }
@@ -397,8 +465,6 @@ public class DefineInfoMigration extends MigrationAbstractServiceImpl<ObjectInfo
         Map<String,Object> subtractFromDelete = doSubtractDel(admDefineMap, projectDefineMap);
         if(!CollUtil.isEmpty(subtractFromDelete)){
             List<String> deleteIds = subtractFromDelete.entrySet().stream().map(en -> en.getKey()).collect(Collectors.toList());
-            //String delUrl = requestUrl(context, migrationInfo, MigrationType.DELETE.getCode());
-            //DataMigrationResponse response = deleteBatch(deleteIds, ObjectInfoDefine.class, delUrl);
             List<ObjectInfoDefine> delData = toListByIds(deleteIds, projectDefineList);
             dataMigrationExcels.addAll(processDataForExcel(delData, MigrationType.DELETE.getCode()));
         }
@@ -413,8 +479,6 @@ public class DefineInfoMigration extends MigrationAbstractServiceImpl<ObjectInfo
             Map<String, Object> compareData = compareData(intersectionUpdateFrom, intersectionUpdateTo);
             if(CollUtil.isNotEmpty(compareData) && compareData.size() > 0){
                 List<ObjectInfoDefine> updateData = toList(compareData, admDefineList);
-                //String updateUrl = requestUrl(context, migrationInfo, MigrationType.UPDATE.getCode());
-                //updateBatch(updateData, ObjectInfoDefine.class, updateUrl)
                 dataMigrationExcels.addAll(processDataForExcel(updateData, MigrationType.UPDATE.getCode()));
             }
         }

+ 75 - 16
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/DefineTypeMigration.java

@@ -1,4 +1,4 @@
-package com.persagy.proxy.migration.handler;
+package com.persagy.proxy.migration.service.Impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
@@ -9,6 +9,7 @@ import com.persagy.dmp.basic.utils.JsonNodeUtils;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.model.entity.BaseEntity;
 import com.persagy.dmp.define.client.DigitalDefineFacade;
+import com.persagy.dmp.define.entity.ObjectInfoDefine;
 import com.persagy.dmp.define.entity.ObjectTypeDefine;
 import com.persagy.dmp.rwd.migrate.entity.SyncData;
 import com.persagy.proxy.adm.request.AdmResponse;
@@ -19,8 +20,12 @@ import com.persagy.proxy.migration.constant.MigrationType;
 import com.persagy.proxy.migration.model.DataMigrationExcel;
 import com.persagy.proxy.migration.model.DataMigrationResponse;
 import com.persagy.proxy.migration.model.MigrationInfo;
+import com.persagy.proxy.migration.service.IDataMigration;
+import com.persagy.proxy.migration.service.IDataMigrationProcess;
+import com.persagy.proxy.migration.service.IDefineDataMigration;
 import com.persagy.proxy.migration.service.Impl.MigrationAbstractServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -32,23 +37,9 @@ import java.util.stream.Collectors;
  * @date 2021/12/1 19:38
  */
 @Slf4j
+@Service
 public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectTypeDefine> implements IDataMigration, IDefineDataMigration<ObjectTypeDefine>, IDataMigrationProcess<ObjectTypeDefine> {
 
-    private static DefineTypeMigration instance;
-
-    private DefineTypeMigration() {}
-
-    // 静态方法返回该实例
-    public static DefineTypeMigration getInstance() {
-        if(instance == null) {
-            synchronized (DefineTypeMigration.class) {
-                if (instance == null) {
-                    instance = new DefineTypeMigration();
-                }
-            }
-        }
-        return instance;
-    }
     /**
      * 数据迁移 迁移项目级 集团级 字典信息
      *
@@ -140,6 +131,74 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
     }
 
     /**
+     * 数据迁移
+     *
+     * @param context
+     * @return sql 文件
+     */
+    @Override
+    public String migrateForSql(InstanceUrlParam context) {
+        //获取自定义的类型数据
+        QueryCriteria queryCriteria = getCustomQueryCriteria(context);
+        List<ObjectTypeDefine> admDefineList = getAdmData(context, queryCriteria);
+        if(CollUtil.isEmpty(admDefineList)){
+            return "";
+        }
+        StringBuffer sqls = new StringBuffer(" \n -- 数据迁移  dt_define_type ------ \n");
+        sqls.append(MigrationConstant.DEF_CLASS_SQL_PRE);
+        admDefineList.forEach(typeDefine ->{
+            sqls.append("(");
+            sqls.append("'").append(typeDefine.getId()).append("',");
+            sqls.append("'").append(typeDefine.getCode()).append("',");
+            sqls.append("'").append(typeDefine.getName()).append("',");
+            sqls.append("'").append(typeDefine.getAliasCode()).append("',");
+            sqls.append("'").append(typeDefine.getAliasName()).append("',");
+            sqls.append("'").append(typeDefine.getObjType()).append("',");
+            sqls.append("'").append(typeDefine.getGroupCode()).append("',");
+            sqls.append("'").append(typeDefine.getProjectId()).append("',");
+
+            if (typeDefine.getMajorCode() == null) {
+                sqls.append(typeDefine.getMajorCode()).append(",");
+            } else {
+                sqls.append("'").append(typeDefine.getMajorCode()).append("',");
+            }
+
+            sqls.append("'").append(typeDefine.getSystemCode()).append("',");
+
+            if (typeDefine.getEquipmentCode() == null) {
+                sqls.append(typeDefine.getEquipmentCode()).append(",");
+            } else {
+                sqls.append("'").append(typeDefine.getEquipmentCode()).append("',");
+            }
+
+            sqls.append("'").append(typeDefine.getParentCode()).append("',");
+            sqls.append("'").append(typeDefine.getVersion()).append("',");
+            sqls.append(typeDefine.getSourceFrom()).append(",");
+            sqls.append("'").append(typeDefine.getCreator()).append("',");
+            sqls.append("'").append(typeDefine.getCreationTime()).append("',");
+
+            if (typeDefine.getModifier() == null) {
+                sqls.append(typeDefine.getModifier()).append(",");
+            } else {
+                sqls.append("'").append(typeDefine.getModifier()).append("',");
+            }
+
+            if (typeDefine.getModifiedTime() == null) {
+                sqls.append(typeDefine.getModifiedTime()).append(",");
+            } else {
+                sqls.append("'").append(typeDefine.getModifiedTime()).append("',");
+            }
+
+            sqls.append(typeDefine.getValid());
+            sqls.append("),");
+        });
+        String sql = sqls.toString();
+        sql = sql.substring(0, sql.lastIndexOf(","));
+        sql +=";";
+        return sql;
+    }
+
+    /**
      * 获取adm交付的数据,默认获取有效数据
      *
      * @param context

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

@@ -23,7 +23,7 @@ import com.persagy.proxy.migration.constant.MigrationConstant;
 import com.persagy.proxy.migration.model.DataMigrationExcel;
 import com.persagy.proxy.migration.model.DataMigrationResponse;
 import com.persagy.proxy.migration.model.MigrationInfo;
-import com.persagy.proxy.migration.service.MigrationAbstractService;
+import com.persagy.proxy.migration.service.IMigrationAbstractService;
 import lombok.extern.slf4j.Slf4j;
 
 import java.io.IOException;
@@ -39,7 +39,7 @@ import java.util.stream.Collectors;
  * @date 2021/12/3 10:56
  */
 @Slf4j
-public class MigrationAbstractServiceImpl<T> implements MigrationAbstractService<T> {
+public class MigrationAbstractServiceImpl<T> implements IMigrationAbstractService<T> {
 
     /**
      * adm交付数据(A) ∩ 现场数据(B)

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

@@ -18,7 +18,7 @@ import com.persagy.proxy.adm.utils.AdmQueryCriteriaHelper;
 import com.persagy.proxy.common.entity.DmpResult;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
 import com.persagy.proxy.migration.constant.MigrationTable;
-import com.persagy.proxy.migration.service.MigrationLogService;
+import com.persagy.proxy.migration.service.IMigrationLogService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -36,7 +36,7 @@ import java.util.stream.Collectors;
  */
 @Service
 @Slf4j
-public class MigrationLogServiceImpl implements MigrationLogService {
+public class MigrationLogServiceImpl implements IMigrationLogService {
     @Override
     public AdmResponse queryMigrationLog(InstanceUrlParam context, AdmQueryCriteria request) {
         QueryCriteria queryCriteria = AdmQueryCriteriaHelper.toDmpCriteria(request);

+ 91 - 25
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/ObjectDigitalMigration.java

@@ -1,4 +1,4 @@
-package com.persagy.proxy.migration.handler;
+package com.persagy.proxy.migration.service.Impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
@@ -8,6 +8,9 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.JsonNodeUtils;
 import com.persagy.dmp.common.constant.ResponseCode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.define.entity.ObjectTypeDefine;
 import com.persagy.dmp.digital.client.DigitalObjectFacade;
 import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.rwd.migrate.entity.SyncData;
@@ -20,8 +23,11 @@ import com.persagy.proxy.migration.constant.MigrationType;
 import com.persagy.proxy.migration.model.DataMigrationExcel;
 import com.persagy.proxy.migration.model.DataMigrationResponse;
 import com.persagy.proxy.migration.model.MigrationInfo;
+import com.persagy.proxy.migration.service.IDataMigration;
+import com.persagy.proxy.migration.service.IDataMigrationProcess;
 import com.persagy.proxy.migration.service.Impl.MigrationAbstractServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -34,24 +40,9 @@ import java.util.stream.Collectors;
  * @date 2021/12/8 19:53
  */
 @Slf4j
+@Service
 public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectDigital> implements IDataMigration, IDataMigrationProcess<ObjectDigital> {
 
-   private static ObjectDigitalMigration instance;
-
-    private ObjectDigitalMigration() {}
-
-    // 静态方法返回该实例
-    public static ObjectDigitalMigration getInstance() {
-        if(instance == null) {
-            synchronized (ObjectDigitalMigration.class) {
-                if (instance == null) {
-                    instance = new ObjectDigitalMigration();
-                }
-            }
-        }
-        return instance;
-    }
-
     /**
      * 数据迁移前,数据对比信息 汇总
      *
@@ -102,6 +93,88 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
         return AdmResponse.success();
     }
 
+    /**
+     * 数据迁移
+     *
+     * @param context
+     * @return sql 文件
+     */
+    @Override
+    public String migrateForSql(InstanceUrlParam context) {
+        StringBuffer sqls = new StringBuffer(" \n -- 数据迁移  dt_object ------ \n");
+        //获取已经采集的数据
+        StringBuffer sqls_temp = new StringBuffer();
+        for(MigrationObjType objType : MigrationObjType.values()){
+            QueryCriteria queryCriteria = getQueryCriteria(objType.getCode());
+            List<ObjectNode> admData = getAdmData(context,queryCriteria);
+            if(CollUtil.isEmpty(admData)){
+                continue;
+            }
+            appendValues(admData, sqls_temp);
+        }
+        if(sqls_temp.length() == 0){
+            return "";
+        }
+        sqls.append(MigrationConstant.DT_OBJECT_SQL_PRE);
+        sqls.append(sqls_temp);
+        String sql = sqls.toString();
+        sql = sql.substring(0, sql.lastIndexOf(","));
+        sql += ";";
+        sql = sql.replaceAll("\"","\\\\\"");
+        return sql;
+    }
+
+    private StringBuffer appendValues(List<ObjectNode> admData, StringBuffer sqls){
+        admData.forEach(obj -> {
+            ObjectDigital objectDigital = JsonNodeUtils.toEntity(obj, ObjectDigital.class, "infos");
+            sqls.append("(");
+            sqls.append("'").append(objectDigital.getId()).append("',");
+            if (objectDigital.getName() == null) {
+                sqls.append(objectDigital.getName()).append(",");
+            } else {
+                sqls.append("'").append(objectDigital.getName()).append("',");
+            }
+
+            if (objectDigital.getLocalId() == null) {
+                sqls.append(objectDigital.getLocalId()).append(",");
+            } else {
+                sqls.append("'").append(objectDigital.getLocalId()).append("',");
+            }
+            if (objectDigital.getLocalName() == null) {
+                sqls.append(objectDigital.getLocalName()).append(",");
+            } else {
+                sqls.append("'").append(objectDigital.getLocalName()).append("',");
+            }
+            sqls.append("'").append(objectDigital.getGroupCode()).append("',");
+            sqls.append("'").append(objectDigital.getProjectId()).append("',");
+            sqls.append("'").append(objectDigital.getObjType()).append("',");
+            sqls.append("'").append(objectDigital.getClassCode()).append("',");
+            sqls.append("'").append(objectDigital.getGrouping()).append("',");
+            sqls.append("'").append(objectDigital.getInfos()).append("',");
+            if (objectDigital.getVirtualCodes() == null) {
+                sqls.append(objectDigital.getVirtualCodes()).append(",");
+            } else {
+                sqls.append("'").append(objectDigital.getVirtualCodes()).append("',");
+            }
+            if (objectDigital.getCreateApp() == null) {
+                sqls.append(objectDigital.getCreateApp()).append(",");
+            } else {
+                sqls.append("'").append(objectDigital.getCreateApp()).append("',");
+            }
+            if (objectDigital.getUpdateApp() == null) {
+                sqls.append(objectDigital.getUpdateApp()).append(",");
+            } else {
+                sqls.append("'").append(objectDigital.getUpdateApp()).append("',");
+            }
+            sqls.append("'").append(objectDigital.getCreator()).append("',");
+            sqls.append("'").append(objectDigital.getCreationTime()).append("',");
+            sqls.append("'").append(objectDigital.getModifier()).append("',");
+            sqls.append("'").append(objectDigital.getModifiedTime()).append("',");
+            sqls.append(objectDigital.getValid());
+            sqls.append("),");
+        });
+        return sqls;
+    }
     private QueryCriteria getQueryCriteria(String typeCode){
         QueryCriteria queryCriteria = new QueryCriteria();
         queryCriteria.setSize(-1L);
@@ -201,9 +274,7 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
             return Collections.emptyList();
         }
 
-        //String insertUrl = requestUrl(context, migrationInfo, MigrationType.INSERT.getCode());
         if(CollUtil.isEmpty(objectNodeList)){
-            //DataMigrationResponse dataMigrationResponse = insertBatch(admData, ObjectDigital.class, insertUrl);
             dataMigrationExcels.addAll(processDataForExcel(admData, MigrationType.CREATE.getCode()));
             return dataMigrationExcels;
         }
@@ -213,7 +284,6 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
         Map<String,Object> doSubtractFromInsert = doSubtractAdd(admMap, projectMap);
         if(!CollUtil.isEmpty(doSubtractFromInsert)){
             List<ObjectNode> insertData = toList(doSubtractFromInsert, admData);
-            //DataMigrationResponse dataMigrationResponse = insertBatch(insertData, ObjectDigital.class, insertUrl);
             dataMigrationExcels.addAll(processDataForExcel(insertData, MigrationType.CREATE.getCode()));
         }
 
@@ -223,8 +293,6 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
             List<String> deleteIds = doSubtractFromDelete.entrySet().stream().map(en -> en.getKey()).collect(Collectors.toList());
 
             List<ObjectNode> deleteData = toListByIds(deleteIds, objectNodeList);
-            //String delUrl = requestUrl(context, migrationInfo, MigrationType.DELETE.getCode());
-            //DataMigrationResponse dataMigrationResponse = deleteBatch(deleteIds, ObjectDigital.class, delUrl);
             dataMigrationExcels.addAll(processDataForExcel(deleteData, MigrationType.DELETE.getCode()));
         }
 
@@ -236,8 +304,6 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
             Map<String, Object> compareData = compareData(intersectionUpdateFrom, intersectionUpdateTo);
             if(CollUtil.isNotEmpty(compareData) && compareData.size() > 0){
                 List<ObjectNode> updateData = toList(compareData, admData);
-                //String updateUrl = requestUrl(context, migrationInfo, MigrationType.UPDATE.getCode());
-                //DataMigrationResponse dataMigrationResponse = updateBatch(updateData, ObjectDigital.class, updateUrl);
                 dataMigrationExcels.addAll(processDataForExcel(updateData, MigrationType.UPDATE.getCode()));
             }
         }
@@ -352,7 +418,7 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
             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.setUpdateTime(digital.getModifiedTime().toString());
+            excel.setUpdateTime(digital.getModifiedTime() == null ? "" :digital.getModifiedTime().toString());
             dataMigrationExcels.add(excel);
         }
         return dataMigrationExcels;

+ 78 - 22
adm-business/adm-middleware/src/main/java/com/persagy/proxy/migration/handler/ObjectRelationMigration.java

@@ -1,4 +1,4 @@
-package com.persagy.proxy.migration.handler;
+package com.persagy.proxy.migration.service.Impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
@@ -8,26 +8,28 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.JsonNodeUtils;
 import com.persagy.dmp.common.constant.ResponseCode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
 import com.persagy.dmp.common.model.entity.BaseEntity;
 import com.persagy.dmp.define.client.DigitalGraphDefineFacade;
 import com.persagy.dmp.define.client.DigitalRelationDefineFacade;
 import com.persagy.dmp.define.entity.GraphDefine;
 import com.persagy.dmp.define.entity.RelationDefine;
 import com.persagy.dmp.digital.client.DigitalRelationFacade;
+import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.digital.entity.ObjectRelation;
 import com.persagy.dmp.rwd.migrate.entity.SyncData;
 import com.persagy.proxy.adm.constant.AdmCommonConstant;
 import com.persagy.proxy.adm.request.AdmResponse;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
-import com.persagy.proxy.migration.constant.MiGrationRelCode;
-import com.persagy.proxy.migration.constant.MigrationConstant;
-import com.persagy.proxy.migration.constant.MigrationTable;
-import com.persagy.proxy.migration.constant.MigrationType;
+import com.persagy.proxy.migration.constant.*;
 import com.persagy.proxy.migration.model.DataMigrationExcel;
 import com.persagy.proxy.migration.model.DataMigrationResponse;
 import com.persagy.proxy.migration.model.MigrationInfo;
+import com.persagy.proxy.migration.service.IDataMigration;
+import com.persagy.proxy.migration.service.IDataMigrationProcess;
 import com.persagy.proxy.migration.service.Impl.MigrationAbstractServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
 
 import java.util.*;
 import java.util.concurrent.*;
@@ -41,24 +43,9 @@ import java.util.stream.Collectors;
  * @date 2021/12/8 19:51
  */
 @Slf4j
+@Service
 public class ObjectRelationMigration extends MigrationAbstractServiceImpl<ObjectRelation> implements IDataMigration, IDataMigrationProcess<ObjectRelation> {
 
-    private static ObjectRelationMigration instance;
-
-    private ObjectRelationMigration() {}
-
-    // 静态方法返回该实例
-    public static ObjectRelationMigration getInstance() {
-        if(instance == null) {
-            synchronized (ObjectRelationMigration.class) {
-                if (instance == null) {
-                    instance = new ObjectRelationMigration();
-                }
-            }
-        }
-        return instance;
-    }
-
     /**
      * 数据迁移
      *
@@ -148,6 +135,75 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
         return AdmResponse.success();
     }
 
+    /**
+     * 数据迁移
+     *
+     * @param context
+     * @return sql 文件
+     */
+    @Override
+    public String migrateForSql(InstanceUrlParam context) {
+        StringBuffer sqls = new StringBuffer(" \n -- 数据迁移  dt_relation ------ \n");
+        //获取已经采集的数据
+        StringBuffer sqls_temp = new StringBuffer();
+        for (MiGrationRelCode miGrationRelCode: MiGrationRelCode.values()){
+            QueryCriteria queryCriteria = getQueryCriteria(miGrationRelCode.getCode());
+            List<ObjectRelation> admData = getAdmData(context,queryCriteria);
+            if(CollUtil.isEmpty(admData)){
+                continue;
+            }
+            appendValues(admData, sqls_temp);
+        }
+        if(sqls_temp.length() == 0){
+            return "";
+        }
+        sqls.append(MigrationConstant.DT_RELATION_SQL_PRE);
+        sqls.append(sqls_temp);
+        String sql = sqls.toString();
+        sql = sql.substring(0, sql.lastIndexOf(","));
+        sql +=";";
+        return sql;
+    }
+
+    private StringBuffer appendValues(List<ObjectRelation> admData, StringBuffer sqls){
+        admData.forEach(relation -> {
+            sqls.append("(");
+            sqls.append("'").append(relation.getId()).append("',");
+            sqls.append("'").append(relation.getGroupCode()).append("',");
+            sqls.append("'").append(relation.getProjectId()).append("',");
+            if (relation.getGraphId() == null) {
+                sqls.append(relation.getGraphId()).append(",");
+            } else {
+                sqls.append("'").append(relation.getGraphId()).append("',");
+            }
+            sqls.append("'").append(relation.getGraphCode()).append("',");
+            sqls.append("'").append(relation.getRelCode()).append("',");;
+            if (relation.getRelValue() == null) {
+                sqls.append(relation.getRelValue()).append(",");
+            } else {
+                sqls.append("'").append(relation.getRelValue()).append("',");
+            }
+            sqls.append("'").append(relation.getObjFrom()).append("',");
+            sqls.append("'").append(relation.getObjTo()).append("',");
+            if (relation.getCreateApp() == null) {
+                sqls.append(relation.getCreateApp()).append(",");
+            } else {
+                sqls.append("'").append(relation.getCreateApp()).append("',");
+            }
+            if (relation.getUpdateApp() == null) {
+                sqls.append(relation.getUpdateApp()).append(",");
+            } else {
+                sqls.append("'").append(relation.getUpdateApp()).append("',");
+            }
+            sqls.append("'").append(relation.getCreator()).append("',");
+            sqls.append("'").append(relation.getCreationTime()).append("',");
+            sqls.append("'").append(relation.getModifier()).append("',");
+            sqls.append("'").append(relation.getModifiedTime()).append("',");
+            sqls.append(relation.getValid());
+            sqls.append("),");
+        });
+        return sqls;
+    }
     private ExecutorService getExcecutor(){
         ExecutorService service = new ThreadPoolExecutor(10, 15, 0L, TimeUnit.MILLISECONDS,
                 new LinkedBlockingQueue(), new ThreadFactory() {
@@ -365,7 +421,7 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
             excel.setObjTo(objectRelation.getObjTo());
             excel.setType(type);
             excel.setCreateTime(objectRelation.getCreationTime().toString());
-            excel.setUpdateTime(objectRelation.getModifiedTime().toString());
+            excel.setUpdateTime(objectRelation.getModifiedTime() == null ? "" :objectRelation.getModifiedTime().toString());
             dataMigrationExcels.add(excel);
         }
         return dataMigrationExcels;

+ 45 - 0
adm-business/adm-server/pom.xml

@@ -34,5 +34,50 @@
             <groupId>com.persagy</groupId>
             <artifactId>dmp-file-starter</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>dmp-amqp-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.locationtech.jts</groupId>
+            <artifactId>jts-core</artifactId>
+            <version>1.16.1</version>
+        </dependency>
     </dependencies>
+
+
+<!--    <build>-->
+<!--        <plugins>-->
+<!--            <plugin>-->
+<!--                <groupId>org.mybatis.generator</groupId>-->
+<!--                <artifactId>mybatis-generator-maven-plugin</artifactId>-->
+<!--                <version>1.3.2</version>-->
+<!--                <configuration>-->
+<!--                    <configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile>-->
+<!--                    <verbose>true</verbose>-->
+<!--                    <overwrite>true</overwrite>-->
+<!--                </configuration>-->
+<!--                <executions>-->
+<!--                    <execution>-->
+<!--                        <id>Generate MyBatis Artifacts</id>-->
+<!--                        <goals>-->
+<!--                            <goal>generate</goal>-->
+<!--                        </goals>-->
+<!--                    </execution>-->
+<!--                </executions>-->
+<!--                <dependencies>-->
+<!--                    <dependency>-->
+<!--                        <groupId>mysql</groupId>-->
+<!--                        <artifactId>mysql-connector-java</artifactId>-->
+<!--                        <version>8.0.15</version>-->
+<!--                    </dependency>-->
+<!--                    <dependency>-->
+<!--                        <groupId>org.mybatis.generator</groupId>-->
+<!--                        <artifactId>mybatis-generator-core</artifactId>-->
+<!--                        <version>1.3.2</version>-->
+<!--                    </dependency>-->
+<!--                </dependencies>-->
+<!--            </plugin>-->
+<!--        </plugins>-->
+<!--    </build>-->
 </project>

+ 30 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/aop/ExceptionAspect.java

@@ -0,0 +1,30 @@
+package com.persagy.bdtp.adm.aop;
+
+import com.persagy.bdtp.adm.service.CallException;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+
+@Component
+@Aspect
+@Slf4j
+public class ExceptionAspect {
+
+    @Pointcut("execution(public * com.persagy.bdtp.adm.controller.AppController.*(..))")
+    public void handle(){
+
+    }
+
+    @Around("handle()")
+    public Object aroundInvoke(ProceedingJoinPoint point) throws Throwable {
+        try{
+            return point.proceed();
+        } catch (CallException e) {
+            return e.getErrorResult();
+        }
+    }
+
+}

+ 35 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/client/DicClient.java

@@ -0,0 +1,35 @@
+package com.persagy.bdtp.adm.client;
+
+import com.persagy.dmp.basic.config.DigitalFeignConfig;
+import com.persagy.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.common.model.response.CommonResult;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+import java.util.Map;
+
+@FeignClient(name = "dmp-dic", configuration = DigitalFeignConfig.class,
+		url = "${persagy.bdtp.dic.service:}")
+public interface DicClient {
+
+	/**
+	 * 查询类型定义
+	 * @param groupCode 集团编码
+	 * @param projectId 项目ID
+	 * @param appId 应用ID
+	 * @param userId 用户ID
+	 * @param criteria 查询条件
+	 * @return 类型定义
+	 */
+	@PostMapping("/dic/dt/data/query")
+	CommonResult<List<Map<String, Object>>> dataQuery(
+			@RequestParam("groupCode") String groupCode,
+			@RequestParam("projectId") String projectId,
+			@RequestParam("appId") String appId,
+			@RequestParam("userId") String userId,
+			@RequestBody QueryCriteria criteria);
+
+}

+ 17 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/client/ImageServiceClient.java

@@ -0,0 +1,17 @@
+package com.persagy.bdtp.adm.client;
+
+import com.persagy.dmp.basic.config.DigitalFeignConfig;
+import feign.Response;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient(name = "image-service", configuration = DigitalFeignConfig.class,
+		url = "http://api.sagacloud.cn/dp-auxiliary/image-service")
+public interface ImageServiceClient {
+
+	@GetMapping(value = "/common/file_get", consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE)
+	Response fileGet(@RequestParam String key, @RequestParam String systemId);
+
+}

+ 60 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/client/OldAdmClient.java

@@ -0,0 +1,60 @@
+package com.persagy.bdtp.adm.client;
+
+import com.persagy.bdtp.adm.entity.oldadm.*;
+import com.persagy.dmp.basic.config.DigitalFeignConfig;
+import feign.Response;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@FeignClient(name = "amd-old", configuration = DigitalFeignConfig.class,
+		url = "${persagy.adm.oldPlatformUrl}")
+public interface OldAdmClient {
+
+	@PostMapping("/persagy-sso-server/users/login")
+	Map<String, Object> login(
+			@RequestBody Map<String, Object> params);
+
+	@PostMapping("/datacenter/object/project/query")
+	OldAdmResult<List<OProject>> queryProject(
+			@RequestHeader("groupCode") String groupCode,
+			@RequestHeader("projectId") String projectId,
+			@RequestHeader("appId") String appId,
+			@RequestHeader("userId") String userId,
+			@RequestHeader("token") String token,
+			@RequestBody Map<String, Object> params);
+
+	@PostMapping("/datacenter/object/building/query")
+	OldAdmResult<List<OBuilding>> queryBuilding(
+			@RequestHeader("groupCode") String groupCode,
+			@RequestHeader("projectId") String projectId,
+			@RequestHeader("appId") String appId,
+			@RequestHeader("userId") String userId,
+			@RequestHeader("token") String token,
+			@RequestBody Map<String, Object> params);
+
+	@PostMapping("/datacenter/object/zone/query")
+	OldAdmResult<List<OSpace>> querySpace(
+			@RequestHeader("groupCode") String groupCode,
+			@RequestHeader("projectId") String projectId,
+			@RequestHeader("appId") String appId,
+			@RequestHeader("userId") String userId,
+			@RequestHeader("token") String token,
+			@RequestBody Map<String, Object> params);
+
+	@PostMapping("/datacenter/object/equip/query")
+	OldAdmResult<List<OEquip>> queryEquip(
+			@RequestHeader("groupCode") String groupCode,
+			@RequestHeader("projectId") String projectId,
+			@RequestHeader("appId") String appId,
+			@RequestHeader("userId") String userId,
+			@RequestHeader("token") String token,
+			@RequestBody Map<String, Object> params);
+
+	@GetMapping(value = "/image-service/common/file_get",consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE)
+	Response getFloorMap(@RequestParam String key, @RequestParam String systemId);
+
+}

+ 79 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/client/RwdClient.java

@@ -0,0 +1,79 @@
+package com.persagy.bdtp.adm.client;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.bdtp.adm.entity.InfoDef;
+import com.persagy.bdtp.adm.entity.TypeDef;
+import com.persagy.dmp.basic.config.DigitalFeignConfig;
+import com.persagy.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.define.entity.GraphDefine;
+import com.persagy.dmp.define.entity.RelationDefine;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+@FeignClient(name = "dmp-rwd", configuration = DigitalFeignConfig.class,
+		url = "${persagy.bdtp.rwd.service:}")
+public interface RwdClient {
+
+	/**
+	 * 查询类型定义
+	 * @param groupCode 集团编码
+	 * @param projectId 项目ID
+	 * @param appId 应用ID
+	 * @param userId 用户ID
+	 * @param criteria 查询条件
+	 * @return 类型定义
+	 */
+	@PostMapping("/rwd/def/class")
+	CommonResult<List<TypeDef>> queryObjectType(
+			@RequestParam("groupCode") String groupCode,
+			@RequestParam("projectId") String projectId,
+			@RequestParam("appId") String appId,
+			@RequestParam("userId") String userId,
+			@RequestBody QueryCriteria criteria);
+
+	@PostMapping("/rwd/def/funcid")
+	CommonResult<List<InfoDef>> queryFunc(
+			@RequestParam("groupCode") String groupCode,
+			@RequestParam("projectId") String projectId,
+			@RequestParam("appId") String appId,
+			@RequestParam("userId") String userId,
+			@RequestBody QueryCriteria criteria);
+
+	/**
+	 * 查询边类型
+	 * @param groupCode: 集团编码
+	 * @param projectId: 项目ID
+	 * @param appId: 应用ID
+	 * @param userId: 用户ID
+	 * @param criteria: 查询条件
+	 * @return 边类型数组
+	 */
+	@PostMapping("/rwd/def/rel/query")
+	CommonResult<List<RelationDefine>> queryRelDef(@RequestParam("groupCode") String groupCode,
+											 @RequestParam("projectId") String projectId,
+											 @RequestParam("appId") String appId,
+											 @RequestParam("userId") String userId,
+											 @RequestBody QueryCriteria criteria);
+
+	@PostMapping("/rwd/def/graph/query")
+	CommonResult<List<GraphDefine>> queryGraphDef(@RequestParam("groupCode") String groupCode,
+														 @RequestParam("projectId") String projectId,
+														 @RequestParam("appId") String appId,
+														 @RequestParam("userId") String userId,
+														 @RequestBody QueryCriteria criteria);
+
+	/**
+	 * 查询关系
+	 */
+	@PostMapping({"/rwd/instance/relation/query"})
+	CommonResult<List<ObjectNode>> queryRelation(@RequestParam("groupCode") String groupCode,
+										 @RequestParam("projectId") String projectId,
+										 @RequestParam("appId") String appId,
+										 @RequestParam("userId") String userId,
+										 @RequestBody QueryCriteria criteria);
+}

+ 61 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/common/AdmConst.java

@@ -0,0 +1,61 @@
+package com.persagy.bdtp.adm.common;
+
+public interface AdmConst {
+
+	String APP_ID = "adm";
+
+	int JOB_STATE_TODO = 0;
+
+	int JOB_STATE_PROCESSING = 1;
+
+	int JOB_STATE_FINISHED = 2;
+
+
+	String OBJ_TYPE_PROJECT = "project";
+
+	String OBJ_TYPE_BUILDING = "building";
+
+	String OBJ_TYPE_FLOOR = "floor";
+
+	String OBJ_TYPE_SPACE = "space";
+
+	String OBJ_TYPE_SHAFT = "shaft";
+
+	String OBJ_TYPE_SYSTEM = "system";
+
+	String OBJ_TYPE_EQUIPMENT = "equipment";
+
+
+	/** 数据创建者,数据同步服务 */
+	String CREATOR_SYNC = APP_ID + "_sync";
+
+	/** 数据创建者,手机app */
+	String CREATOR_APP = APP_ID + "_app";
+
+	/** 数据创建者,web端管理 */
+	String CREATOR_WEB = APP_ID + "_web";
+
+	/** 数据创建者,系统自动计算 */
+	String CREATOR_AUTO = APP_ID + "_auto";
+
+	/** 数据创建者,模型服务(Revit解析) */
+	String CREATOR_M2D_INIT = APP_ID + "_m2d_init";
+
+	/** 数据创建者,模型服务 */
+	String CREATOR_M2D = APP_ID + "_m2d";
+
+
+	String UPLOAD_PROCESSING = "processing";
+
+	String UPLOAD_FINISHED = "finished";
+
+	String UPLOAD_ERROR = "error";
+
+
+	int PIPE_DIRECTION_NONE = 0;
+
+	int PIPE_DIRECTION_FORWARD = 1;
+
+	int PIPE_DIRECTION_BACK = -1;
+
+}

+ 25 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/common/AdmMessageConst.java

@@ -0,0 +1,25 @@
+package com.persagy.bdtp.adm.common;
+
+public interface AdmMessageConst {
+
+    /** 消息-exchange */
+    String ADM_EXCHANGE = "bdtp.adm.topic";
+
+    /** 消息-路由Key 数据->模型 */
+    String ADM_D2M_ROUTING = "bdtp.adm.d2m.routing";
+    /** 队列 数据->模型 */
+    String ADM_D2M_QUEUE = "bdtp.adm.d2m.queue";
+
+
+    /** 消息-路由Key 模型->数据 */
+    String M2D_ROUTING = "bdtp.adm.m2d.routing";
+    /** 队列 模型->数据 */
+    String M2D_QUEUE = "bdtp.adm.m2d.queue";
+
+    String OPERATOR_ADD = "add";
+
+    String OPERATOR_MODIFY = "modify";
+
+    String OPERATOR_REMOVE = "remove";
+
+}

+ 37 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/common/AdmRequest.java

@@ -0,0 +1,37 @@
+package com.persagy.bdtp.adm.common;
+
+import com.persagy.bdtp.adm.entity.UploadData;
+import lombok.Data;
+
+@Data
+public class AdmRequest {
+
+	private String userId;
+
+	private String clientId;
+
+	private String groupCode;
+
+	private String projectId;
+
+
+	private String buildingId;
+
+	private String floorId;
+
+
+	private Long bdtpDownloadTs;
+
+	private Long admDownloadTs;
+
+
+	private UploadData uploadData;
+
+
+	/** 待废弃 */
+	private String lastDownloadTime;
+
+	/** 待废弃 */
+	private String uploadFlag;
+
+}

+ 36 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/common/AdmResult.java

@@ -0,0 +1,36 @@
+package com.persagy.bdtp.adm.common;
+
+import com.persagy.dmp.common.constant.ResponseCode;
+import com.persagy.dmp.common.model.response.CommonResult;
+import lombok.Data;
+
+@Data
+public class AdmResult<T> {
+
+	private String code;
+
+	private String message;
+
+	private T data;
+
+	public AdmResult(String code, String message) {
+		this(code, message, null);
+	}
+
+	public AdmResult(String code, String message, T data) {
+		this.code = code;
+		this.message = message;
+		this.data = data;
+	}
+
+	public AdmResult(CommonResult<T> commonResult) {
+		this.code = commonResult.getResult();
+		this.message = commonResult.getMessage();
+		this.data = commonResult.getData();
+	}
+
+	public static <T> AdmResult<T> success(T data){
+		return new AdmResult<>(ResponseCode.A00000.getCode(), null, data);
+	}
+
+}

+ 23 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/config/AdmCommonConfig.java

@@ -0,0 +1,23 @@
+package com.persagy.bdtp.adm.config;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class AdmCommonConfig {
+
+	/**
+	 *	ObjectMapper默认不输出null值字段
+	 */
+//	@Bean(name = "objectMapper")
+//	public ObjectMapper getObjectMapper(){
+//		ObjectMapper mapper = new ObjectMapper();
+//		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+//		mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+//		return mapper;
+//	}
+
+}

+ 46 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/config/AdmRabbitConfig.java

@@ -0,0 +1,46 @@
+package com.persagy.bdtp.adm.config;
+
+import com.persagy.bdtp.adm.common.AdmMessageConst;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.core.TopicExchange;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Slf4j
+@Configuration
+public class AdmRabbitConfig {
+
+    @Bean
+    public TopicExchange m2dExchange() {
+        return new TopicExchange(AdmMessageConst.ADM_EXCHANGE);
+    }
+
+    @Bean
+    public Queue m2dQueue(){
+        return new Queue(AdmMessageConst.M2D_QUEUE);
+    }
+
+    @Bean
+    public Binding m2dBinding() {
+        return BindingBuilder.bind(m2dQueue()).to(m2dExchange()).with(AdmMessageConst.M2D_ROUTING);
+    }
+
+    @Bean
+    public TopicExchange admExchange() {
+        return new TopicExchange(AdmMessageConst.ADM_EXCHANGE);
+    }
+
+    @Bean
+    public Queue admD2mQueue(){
+        return new Queue(AdmMessageConst.ADM_D2M_QUEUE);
+    }
+
+    @Bean
+    public Binding admD2mBinding() {
+        return BindingBuilder.bind(admD2mQueue()).to(admExchange()).with(AdmMessageConst.ADM_D2M_ROUTING);
+    }
+
+}

+ 27 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/config/TestConfig.java

@@ -0,0 +1,27 @@
+package com.persagy.bdtp.adm.config;
+
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+import java.util.Map;
+
+@Configuration
+@AutoConfigureAfter({DataSourceAutoConfiguration.class})
+public class TestConfig {
+
+	@Bean
+	public String test(ApplicationContext ctx){
+		try {
+			Map map = ctx.getBeansOfType(DataSource.class);
+			System.out.println(map);
+		} catch (Exception var4) {
+
+		}
+		return "";
+	}
+
+}

+ 67 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/controller/AdmFileController.java

@@ -0,0 +1,67 @@
+package com.persagy.bdtp.adm.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.persagy.bdtp.adm.common.AdmResult;
+import com.persagy.bdtp.adm.dao.AdmFileMapper;
+import com.persagy.bdtp.adm.entity.CadFileQueryParam;
+import com.persagy.bdtp.adm.entity.db.AdmFile;
+import com.persagy.bdtp.adm.service.IAdmFileService;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 文件附件 前端控制器
+ * </p>
+ *
+ * @author yanguofeng
+ * @since 2022-01-10
+ */
+@RestController
+@RequestMapping("/adm/adm-file")
+public class AdmFileController {
+
+    @Autowired
+    IAdmFileService iAdmFileService;
+    @Autowired
+    AdmFileMapper admFileMapper;
+
+    /**
+     * CAD文件查询接口
+     */
+
+    @PostMapping("/queryCadFiles")
+    public AdmResult<List<AdmFile>> queryCadFiles(@RequestBody CadFileQueryParam queryParam){
+        Wrapper<AdmFile> eq = new LambdaQueryWrapper<AdmFile>()
+                .eq(StringUtils.isNotBlank(queryParam.getProjectId()), AdmFile::getProjectId, queryParam.getProjectId())
+                .eq(StringUtils.isNotBlank(queryParam.getBuildingId()),AdmFile::getBuildingId,queryParam.getBuildingId())
+                .eq(StringUtils.isNotBlank(queryParam.getFloorId()),AdmFile::getFloorId,queryParam.getFloorId())
+                .eq(StringUtils.isNotBlank(queryParam.getFileId()),AdmFile::getFileId,queryParam.getFileId())
+                .eq(StringUtils.isNotBlank(queryParam.getBizType()),AdmFile::getBizType,queryParam.getBizType());
+        return AdmResult.success(iAdmFileService.list(eq));
+    }
+
+    /**
+     * 保存CAD文件信息
+     */
+    @PostMapping("/saveCadFileInfo")
+    public AdmResult<Void> saveCadFileInfo(@RequestBody List<AdmFile> admFiles){
+        iAdmFileService.saveOrUpdateBatch(admFiles);
+        return AdmResult.success(null);
+    }
+
+    /**
+     * 删除CAD文件信息
+     * @param id 文件信息表主键ID
+     */
+    @PostMapping("/delete")
+    public AdmResult<Void> delete(@RequestParam("id") String id){
+        iAdmFileService.removeById(id);
+        return AdmResult.success(null);
+    }
+}

+ 161 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/controller/AppController.java

@@ -0,0 +1,161 @@
+package com.persagy.bdtp.adm.controller;
+
+import cn.hutool.core.util.StrUtil;
+import com.persagy.bdtp.adm.client.ImageServiceClient;
+import com.persagy.bdtp.adm.client.OldAdmClient;
+import com.persagy.bdtp.adm.common.AdmRequest;
+import com.persagy.bdtp.adm.common.AdmResult;
+import com.persagy.bdtp.adm.datatx.DataTxHandler;
+import com.persagy.bdtp.adm.entity.Dict;
+import com.persagy.bdtp.adm.entity.DownLoadData;
+import com.persagy.bdtp.adm.entity.UploadRtn;
+import com.persagy.bdtp.adm.service.ISyncApp;
+import com.persagy.bdtp.adm.service.ServiceUtil;
+import feign.Response;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/adm")
+public class AppController {
+
+	@Autowired
+	private ImageServiceClient imageServiceClient;
+
+	@Autowired
+	private OldAdmClient admClient;
+
+	@Autowired
+	@Qualifier(ServiceUtil.SYNC_APP_IMPL)
+	private ISyncApp syncApp;
+
+	@Autowired
+	private DataTxHandler dataTxHandler;
+
+	@RequestMapping("/clientId")
+	public AdmResult<Map<String, Object>> clientId(@RequestBody AdmRequest req){
+		HashMap<String, Object> rtn = new HashMap<>();
+		rtn.put("clientId", syncApp.getClientId(req.getUserId()));
+		return AdmResult.success(rtn);
+	}
+
+	@RequestMapping("/dict")
+	public AdmResult<Dict> dict(@RequestBody AdmRequest req){
+		return AdmResult.success(syncApp.downloadDict(req.getGroupCode(), req.getProjectId(), req.getUserId()));
+	}
+
+	@RequestMapping("/config")
+	public AdmResult<Map<String, Object>> config(@RequestBody AdmRequest req){
+		return AdmResult.success(syncApp.downloadConfig(req.getGroupCode(), req.getProjectId(), req.getUserId()));
+	}
+
+	@RequestMapping("/frame")
+	public AdmResult<Map<String, Object>> frame(@RequestBody AdmRequest req){
+//		ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+//
+//		List<ObjectNode> prjList = ServiceUtil.call(() -> objClient.query(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), getQueryCriteria("project", objectMapper)));
+//
+//		//建筑和楼层,暂时从dbtp获取
+//		List<ObjectNode> bdList = ServiceUtil.call(() -> objClient.query(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), getQueryCriteria("building", objectMapper)));
+//
+//		QueryCriteria flCriteria = getQueryCriteria("floor", objectMapper);
+//		flCriteria.getCriteria().putObject("relationTo").put("graphCode", "ArchSubset").put("relCode", "Bd2Fl");
+//		List<ObjectNode> flList = ServiceUtil.call(() -> objClient.query(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), flCriteria));
+//
+//		QueryCriteria relCriteria = getQueryCriteria(null, objectMapper);
+//		relCriteria.getCriteria().put("graphCode", "ArchSubset").put("relCode", "Bd2Fl");
+//		List<ObjectRelation> relList = ServiceUtil.call(() -> relationClient.query(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), relCriteria));
+//
+//		//为楼层数据设置buildingId
+//		for(ObjectNode n : flList){
+//			String flId = n.get("id").asText();
+//			for(ObjectRelation r : relList){
+//				if(r.getObjTo().equals(flId)){
+//					n.put("buildingId", r.getObjFrom());
+//					relList.remove(r);
+//					break;
+//				}
+//			}
+//		}
+//
+//		HashMap<String, Object> data = new HashMap<>();
+//		data.put("projects", prjList);
+//		data.put("buildings", bdList);
+//		data.put("floors", flList);
+//		return AdmResult.success(data);
+
+		return AdmResult.success(syncApp.downloadFrameData(req.getGroupCode(), req.getProjectId(), req.getUserId()));
+	}
+
+	@RequestMapping("/download")
+	public AdmResult<DownLoadData> download(@RequestBody AdmRequest req){
+		DownLoadData data;
+		if(StrUtil.isNotBlank(req.getBuildingId())) {
+			if(ServiceUtil.SYNC_APP_IMPL.equals("syncAppImpl")) //临时兼容
+				data = syncApp.downloadBuildingData(req.getGroupCode(), req.getProjectId(), req.getUserId(), req.getClientId(), req.getBuildingId(), req.getBdtpDownloadTs(), req.getAdmDownloadTs());
+			else
+				data = syncApp.downloadBuildingData(req.getProjectId(), req.getBuildingId(), req.getUploadFlag(), req.getLastDownloadTime());
+		} else
+			data = syncApp.downloadProjectData(req.getGroupCode(), req.getProjectId(), req.getUserId(), req.getClientId(), req.getBdtpDownloadTs(), req.getAdmDownloadTs());
+		return AdmResult.success(data);
+	}
+
+//	@RequestMapping("/downloadFl")
+//	public AdmResult<Map<String, Object>> downloadFl(@RequestBody AdmRequest req){
+//		return AdmResult.success(syncApp.downloadFloorData(req.getProjectId(), req.getFloorId(), req.getUploadFlag(), req.getLastDownloadTime()));
+//	}
+
+	@RequestMapping("/downloadMap")
+	public void downloadMap(HttpServletRequest request, HttpServletResponse response, @RequestParam String key){
+		InputStream inputStream = null;
+		try {
+			Response serviceResponse;
+			if(ServiceUtil.SYNC_APP_IMPL.equals("syncAppImpl")) //临时兼容
+				serviceResponse = imageServiceClient.fileGet(key, "revit");
+			else
+				serviceResponse = admClient.getFloorMap(key, "revit");
+
+			Response.Body body = serviceResponse.body();
+
+			inputStream = body.asInputStream();
+			BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
+			Object o = serviceResponse.headers().get("Content-Disposition");
+			String contentDisposition = o != null ? o.toString().replace("[","").replace("]","") : "attachment;filename=map.jsonz";
+			response.setHeader("Content-Disposition", contentDisposition);
+			BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
+			int length = 0;
+			byte[] temp = new byte[1024 * 10];
+			while ((length = bufferedInputStream.read(temp)) != -1) {
+				bufferedOutputStream.write(temp, 0, length);
+			}
+			bufferedOutputStream.flush();
+			bufferedOutputStream.close();
+			bufferedInputStream.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	@RequestMapping("/upload")
+	public AdmResult<UploadRtn> upload(HttpServletRequest request){
+		AdmRequest admRequest = dataTxHandler.handleRequest(request);
+		return AdmResult.success(syncApp.uploadData(admRequest.getUploadData(), admRequest.getGroupCode(), admRequest.getProjectId(), admRequest.getUserId(), admRequest.getClientId()));
+	}
+
+	@PostMapping("/uploadFile")
+	public AdmResult uploadFile(){
+		//TODO
+		return null;
+	}
+
+}

+ 43 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/controller/ManageController.java

@@ -0,0 +1,43 @@
+package com.persagy.bdtp.adm.controller;
+
+import com.persagy.bdtp.adm.common.AdmRequest;
+import com.persagy.bdtp.adm.common.AdmResult;
+import com.persagy.bdtp.adm.service.ISyncOldAdm;
+import com.persagy.bdtp.adm.service.ISyncSpace;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@CrossOrigin
+@RestController
+@RequestMapping("/manage")
+public class ManageController {
+
+	@Autowired
+	private ISyncOldAdm syncOldAdm;
+
+	@Autowired
+	private ISyncSpace syncSpace;
+
+	@RequestMapping("/syncOldAdm")
+	public AdmResult<Object> syncOldAdm(@RequestBody AdmRequest req){
+		String groupCode = req.getGroupCode();
+		String projectId = req.getProjectId();
+
+		Map<String, Object> syncResult = syncOldAdm.syncData(groupCode, projectId);
+		syncOldAdm.handleJobSpace(projectId);
+		syncOldAdm.uploadFloorMap(groupCode, projectId);
+		return AdmResult.success(syncResult);
+	}
+
+	@RequestMapping("/syncSpace")
+	public AdmResult<Object> syncSpace(@RequestBody AdmRequest req){
+		Map<String, Object> syncResult = syncSpace.sync(req.getGroupCode(), req.getProjectId(), req.getUserId(), req.getFloorId(), "GeneralZone");
+		return AdmResult.success(syncResult);
+	}
+
+}

+ 359 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/controller/ToolController.java

@@ -0,0 +1,359 @@
+package com.persagy.bdtp.adm.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.bdtp.adm.client.RwdClient;
+import com.persagy.bdtp.adm.common.AdmConst;
+import com.persagy.bdtp.adm.common.AdmRequest;
+import com.persagy.bdtp.adm.common.AdmResult;
+import com.persagy.bdtp.adm.dao.*;
+import com.persagy.bdtp.adm.entity.*;
+import com.persagy.bdtp.adm.entity.db.*;
+import com.persagy.bdtp.adm.service.IConfigService;
+import com.persagy.bdtp.adm.service.ISyncApp;
+import com.persagy.bdtp.adm.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.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 AdmResult<Integer> hello(){
+		return AdmResult.success(configService.queryCommonConfig(null).size());
+	}
+
+	@RequestMapping("/dict")
+	public AdmResult<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 AdmResult.success(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 AdmResult<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 AdmResult.success(data);
+	}
+
+	@RequestMapping("/typeInfos")
+	public AdmResult<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 AdmResult.success(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 AdmResult<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 AdmResult.success(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 AdmResult<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 AdmResult.success(newId);
+	}
+
+	@PostMapping("/updateM2d")
+	public AdmResult<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 AdmResult.success(null);
+	}
+
+	@PostMapping("/bdAndFls")
+	public AdmResult<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 AdmResult.success(bds);
+	}
+
+}

+ 10 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmClientFlagMapper.java

@@ -0,0 +1,10 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmClientFlag;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AdmClientFlagMapper extends BaseMapper<AdmClientFlag> {
+
+}

+ 10 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmComponentMapper.java

@@ -0,0 +1,10 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmComponent;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AdmComponentMapper extends BaseMapper<AdmComponent> {
+
+}

+ 8 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmConfigMapper.java

@@ -0,0 +1,8 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmConfig;
+
+public interface AdmConfigMapper extends BaseMapper<AdmConfig> {
+
+}

+ 10 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmContainerConfigMapper.java

@@ -0,0 +1,10 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmContainerConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AdmContainerConfigMapper extends BaseMapper<AdmContainerConfig> {
+
+}

+ 7 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmDefineProblemTypeMapper.java

@@ -0,0 +1,7 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmDefineProblemType;
+
+public interface AdmDefineProblemTypeMapper extends BaseMapper<AdmDefineProblemType> {
+}

+ 16 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmFileMapper.java

@@ -0,0 +1,16 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmFile;
+
+/**
+ * <p>
+ * 文件附件 Mapper 接口
+ * </p>
+ *
+ * @author yanguofeng
+ * @since 2022-01-10
+ */
+public interface AdmFileMapper extends BaseMapper<AdmFile> {
+
+}

+ 10 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmInfosConfigMapper.java

@@ -0,0 +1,10 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmInfosConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AdmInfosConfigMapper extends BaseMapper<AdmInfosConfig> {
+
+}

+ 8 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmJobSpaceMapper.java

@@ -0,0 +1,8 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmJobSpace;
+
+public interface AdmJobSpaceMapper extends BaseMapper<AdmJobSpace> {
+
+}

+ 8 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmM2dEquipMapper.java

@@ -0,0 +1,8 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmM2dEquip;
+
+public interface AdmM2dEquipMapper extends BaseMapper<AdmM2dEquip> {
+
+}

+ 11 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmMessagePMapper.java

@@ -0,0 +1,11 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmJobSpace;
+import com.persagy.bdtp.adm.entity.db.AdmMessageP;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AdmMessagePMapper extends BaseMapper<AdmMessageP> {
+
+}

+ 10 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmObjectMapper.java

@@ -0,0 +1,10 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmObject;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AdmObjectMapper extends BaseMapper<AdmObject> {
+
+}

+ 10 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmPipeConfigMapper.java

@@ -0,0 +1,10 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmPipeConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AdmPipeConfigMapper extends BaseMapper<AdmPipeConfig> {
+
+}

+ 10 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmPipeMapper.java

@@ -0,0 +1,10 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmPipe;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AdmPipeMapper extends BaseMapper<AdmPipe> {
+
+}

+ 8 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmProblemArchMapper.java

@@ -0,0 +1,8 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmProblemArch;
+
+public interface AdmProblemArchMapper extends BaseMapper<AdmProblemArch> {
+
+}

+ 8 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmProblemEquipMapper.java

@@ -0,0 +1,8 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmProblemEquip;
+
+public interface AdmProblemEquipMapper extends BaseMapper<AdmProblemEquip> {
+
+}

+ 16 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmProblemMapper.java

@@ -0,0 +1,16 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.persagy.bdtp.adm.entity.AdmProblem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 核查问题表 Mapper 接口
+ * </p>
+ *
+ * @author yanguofeng
+ * @since 2022-01-10
+ */
+public interface AdmProblemMapper extends BaseMapper<AdmProblem> {
+
+}

+ 8 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmQrCodeMapper.java

@@ -0,0 +1,8 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmQrCode;
+
+public interface AdmQrCodeMapper extends BaseMapper<AdmQrCode> {
+
+}

+ 8 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmRelationMapper.java

@@ -0,0 +1,8 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmRelation;
+
+public interface AdmRelationMapper extends BaseMapper<AdmRelation> {
+
+}

+ 10 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmRelsConfigMapper.java

@@ -0,0 +1,10 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmRelsConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AdmRelsConfigMapper extends BaseMapper<AdmRelsConfig> {
+
+}

+ 8 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmServeAreaMapper.java

@@ -0,0 +1,8 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmServeArea;
+
+public interface AdmServeAreaMapper extends BaseMapper<AdmServeArea> {
+
+}

+ 10 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmUploadJobMapper.java

@@ -0,0 +1,10 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmUploadJob;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AdmUploadJobMapper extends BaseMapper<AdmUploadJob> {
+
+}

+ 14 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmUploadLogMapper.java

@@ -0,0 +1,14 @@
+package com.persagy.bdtp.adm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.bdtp.adm.entity.db.AdmUploadLog;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AdmUploadLogMapper extends BaseMapper<AdmUploadLog> {
+
+//	@Override
+//	@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
+//	int insert(AdmUploadLog entity);
+
+}

+ 53 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/datatx/DataTxHandler.java

@@ -0,0 +1,53 @@
+package com.persagy.bdtp.adm.datatx;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.persagy.bdtp.adm.common.AdmRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.GZIPInputStream;
+
+/**
+ * 数据传输帮助类
+ */
+@Component
+public class DataTxHandler {
+
+	private final ObjectMapper objectMapper;
+
+	@Autowired
+	public DataTxHandler(ObjectMapper objectMapper) {
+		this.objectMapper = objectMapper;
+	}
+
+	/**
+	 * 处理上传请求的gzip压缩数据
+	 */
+	public AdmRequest handleRequest(HttpServletRequest req) {
+		try {
+			InputStream in = req.getInputStream();
+			String contentEncoding = req.getHeader("Content-Encoding");
+			if (contentEncoding != null && contentEncoding.indexOf("gzip") >= 0) {
+				GZIPInputStream gzipInputStream = new GZIPInputStream(in);
+				in = gzipInputStream;
+			}
+
+			ByteArrayOutputStream out = new ByteArrayOutputStream();
+			byte[] buffer = new byte[1024];
+			int n;
+			while ((n = in.read(buffer)) >= 0) {
+				out.write(buffer, 0, n);
+			}
+
+			String json = new String(out.toByteArray(), "UTF-8");
+			return objectMapper.readValue(json, AdmRequest.class);
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+}

+ 8 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/datatx/ObjectForTx.java

@@ -0,0 +1,8 @@
+package com.persagy.bdtp.adm.datatx;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@JsonIgnoreProperties({"grouping", "groupCode", "projectId", "buildingId", "uploadFlag", "clientDevice", "clientId", "d2mState", "deliveryState"})
+public interface ObjectForTx {
+
+}

+ 55 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/datatx/ObjectMapper4Tx.java

@@ -0,0 +1,55 @@
+package com.persagy.bdtp.adm.datatx;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.persagy.bdtp.adm.entity.db.AdmObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 针对数据传输的ObjectMapper,过滤字段
+ */
+@Component
+public class ObjectMapper4Tx {
+
+	private final ObjectMapper objectMapper;
+
+	private ObjectMapper mapper;
+
+	@Autowired
+	public ObjectMapper4Tx(ObjectMapper objectMapper) {
+		this.objectMapper = objectMapper;
+		configCommonMapper();
+
+		this.mapper = new ObjectMapper();
+		configMapper();
+	}
+
+	private void configCommonMapper(){
+		objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+		objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+	}
+
+	private void configMapper(){
+		mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
+
+		//设置实体的传输字段
+		mapper.addMixIn(AdmObject.class, ObjectForTx.class);
+
+	}
+
+	public ObjectMapper mapper() {
+		return mapper;
+	}
+
+	public String toJson(Object obj){
+		try{
+			return mapper.writeValueAsString(obj);
+		}catch (JsonProcessingException e){
+			throw new RuntimeException(e);
+		}
+	}
+
+}

+ 101 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/AdmProblem.java

@@ -0,0 +1,101 @@
+package com.persagy.bdtp.adm.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import com.persagy.bdtp.adm.entity.db.BaseAdmDataEntity;
+import com.persagy.bdtp.adm.entity.db.BaseAdmEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 核查问题表
+ * </p>
+ *
+ * @author yanguofeng
+ * @since 2022-01-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class AdmProblem extends BaseAdmDataEntity implements Serializable {
+
+    /**
+     * 项目id
+     */
+    @TableField("project_id")
+    private String projectId;
+
+    /**
+     * 建筑id
+     */
+    @TableField("building_id")
+    private String buildingId;
+
+    /**
+     * 问题所在楼层id
+     */
+    @TableField("floor_id")
+    private String floorId;
+
+    /**
+     * 核查对应的文件ID
+     */
+    @TableField("file_id")
+    private String fileId;
+
+    /**
+     * 1 空间 2对象
+     */
+    @TableField("check_type")
+    private String checkType;
+
+    /**
+     * 问题对象类型
+     */
+    @TableField("obj_type_code")
+    private String objTypeCode;
+
+    /**
+     * 问题对象类型名称
+     */
+    @TableField("obj_type_name")
+    private String objTypeName;
+
+    /**
+     * 问题对象id
+     */
+    @TableField("obj_id")
+    private String objId;
+
+    /**
+     * 问题对象名称
+     */
+    @TableField("obj_name")
+    private String objName;
+
+    /**
+     * 问题类型编码
+     */
+    @TableField("type_code")
+    private String typeCode;
+
+    /**
+     * 问题类型名称
+     */
+    @TableField("type_name")
+    private String typeName;
+
+    /**
+     * 问题描述
+     */
+    private String info;
+
+    /**
+     * 建筑结构核查任务状态(1:有效;2:已解决)
+     */
+    private Integer status;
+
+
+}

+ 51 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/BuildingData.java

@@ -0,0 +1,51 @@
+package com.persagy.bdtp.adm.entity;
+
+import cn.hutool.core.collection.CollUtil;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.bdtp.adm.entity.db.*;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.digital.entity.ObjectRelation;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 按建筑下载的数据结构
+ */
+@Data
+public class BuildingData extends DownLoadData {
+
+	private String buildingId;
+
+	private List objects;
+
+	/** 按建筑筛选关系比较困难,待定 */
+	private List relations;
+
+	private List<AdmPipe> pipes;
+
+	private List<AdmJobSpace> jobSpace;
+
+	private List<AdmFile> file;
+
+	private List<AdmQrCode> qrCode;
+
+	private List<AdmServeArea> serveArea;
+
+	// 核查问题数据
+	private List<AdmProblem> problems;
+
+	/** 待废弃 */
+	private String timestamp;
+
+	@Override
+	public void buildDownloadTs() {
+		long ts = getMaxTs(objects, relations);
+		if(ts > 0)
+			bdtpDownloadTs = ts;
+		ts = getMaxTs(pipes, jobSpace, file, qrCode, serveArea);
+		if(ts > 0)
+			admDownloadTs = ts;
+	}
+
+}

+ 16 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/CadFileInfo.java

@@ -0,0 +1,16 @@
+package com.persagy.bdtp.adm.entity;
+
+import lombok.Data;
+
+@Data
+public class CadFileInfo {
+    private String id;
+    private String fileId;
+    private String projectId;
+    private String buildingId;
+    private String floorId;
+    private String bizType;
+    private String fileType;
+    private String remark;
+    private int orderNum;
+}

+ 18 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/CadFileQueryParam.java

@@ -0,0 +1,18 @@
+package com.persagy.bdtp.adm.entity;
+
+import lombok.Data;
+
+/**
+ * Cad图纸查询接口
+ */
+@Data
+public class CadFileQueryParam {
+    private String projectId;
+    private String buildingId;
+    private String floorId;
+    private String fileId;
+    /**
+     * 土建精装-CF,空调-AC,给排水-WS,消防-FF
+     */
+    private String bizType;
+}

+ 58 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/D2mMessage.java

@@ -0,0 +1,58 @@
+package com.persagy.bdtp.adm.entity;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.IdUtil;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class D2mMessage {
+
+	private String groupCode;
+
+	private String projectId;
+
+	private String id;
+
+	private String itemType; //object|relation|pipe
+
+	private List<Object> addItems;
+
+	private List<Object> modifyItems;
+
+	private List<Object> removeItems;
+
+	public D2mMessage(String itemType, String groupCode, String projectId) {
+		this.id = IdUtil.simpleUUID();
+		this.itemType = itemType;
+		this.groupCode = groupCode;
+		this.projectId = projectId;
+	}
+
+	public void appendAddItem(Object item){
+		if (addItems == null)
+			addItems = new ArrayList<>();
+		addItems.add(item);
+	}
+
+	public void appendModifyItem(Object item){
+		if (modifyItems == null)
+			modifyItems = new ArrayList<>();
+		modifyItems.add(item);
+	}
+
+	public void appendRemoveItem(Object item){
+		if (removeItems == null)
+			removeItems = new ArrayList<>();
+		removeItems.add(item);
+	}
+
+	@JsonIgnore
+	public boolean isNotEmpty(){
+		return CollUtil.isNotEmpty(addItems) || CollUtil.isNotEmpty(modifyItems) || CollUtil.isNotEmpty(removeItems);
+	}
+
+}

+ 25 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/Dict.java

@@ -0,0 +1,25 @@
+package com.persagy.bdtp.adm.entity;
+
+import com.persagy.dmp.define.entity.RelationDefine;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 下载数据字典
+ */
+@Data
+public class Dict {
+
+	private List<Map<String, Object>> major;
+
+	private List<TypeDef> system;
+
+	private List<TypeDef> equipment;
+
+	private List<? extends Object> relation;
+
+	private List<InfoDef> infos;
+
+}

+ 55 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/DownLoadData.java

@@ -0,0 +1,55 @@
+package com.persagy.bdtp.adm.entity;
+
+import cn.hutool.core.collection.CollUtil;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.bdtp.adm.entity.db.BaseAdmDataEntity;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.digital.entity.ObjectRelation;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 下载数据结构基类
+ */
+@Data
+abstract public class DownLoadData {
+
+	/** bdtp数据库下载同步时间戳 */
+	protected Long bdtpDownloadTs;
+
+	/** adm数据库下载同步时间戳 */
+	protected Long admDownloadTs;
+
+	abstract public void buildDownloadTs();
+
+	private long max(List<?> list, long maxTs) {
+		if(CollUtil.isNotEmpty(list)) {
+			for (Object data : list) {
+				long ts = -1;
+				if(data instanceof BaseAdmDataEntity) {
+					if(((BaseAdmDataEntity) data).getTs() != null )
+						ts = ((BaseAdmDataEntity) data).getTs().getTime();
+				} else if(data instanceof ObjectNode){
+					if(((ObjectNode) data).get("ts") != null)
+						ts = ((ObjectNode) data).get("ts").asLong();
+				} else if(data instanceof BaseEntity) {
+					if(((ObjectRelation) data).getTs() != null)
+						ts = ((ObjectRelation) data).getTs().getTime();
+				}
+				if(ts > maxTs)
+					maxTs = ts;
+			}
+		}
+		return maxTs;
+	}
+
+	protected long getMaxTs(List<?>... lists) {
+		long maxTs = -1;
+		for(List<?> list : lists) {
+			maxTs = max(list, maxTs);
+		}
+		return maxTs;
+	}
+
+}

+ 43 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/InfoDef.java

@@ -0,0 +1,43 @@
+package com.persagy.bdtp.adm.entity;
+
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import lombok.Data;
+
+@Data
+public class InfoDef {
+
+	private String groupCode;
+
+	private String projectId;
+
+	private String code;
+
+	private String name;
+
+	private String aliasCode;
+
+//	private String aliasName;
+
+	private String classCode;
+
+	private String firstTag;
+
+	private String secondTag;
+
+//	private String inputMode;
+
+	private String unit;
+
+	private String dataType;
+
+//	private Boolean isMultiple = false;
+
+//	private Boolean isRegion = false;
+
+	private ArrayNode dataSource;
+
+	private Long showOrder;
+
+	private String version;
+
+}

+ 31 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/Pagination.java

@@ -0,0 +1,31 @@
+package com.persagy.bdtp.adm.entity;
+
+import lombok.Data;
+
+/**
+ * 调用服务时记录分页信息
+ */
+@Data
+public class Pagination {
+
+	private int pageNum = 1;
+
+	private int pageSize;
+
+	private int total = -1;
+
+	private boolean hasNext = true;
+
+	public Pagination(int pageSize) {
+		this.pageSize = pageSize;
+	}
+
+	public void next() {
+		pageNum++;
+		if ((pageNum - 1) * pageSize >= total)
+			hasNext = false;
+		else
+			hasNext = true;
+	}
+
+}

+ 22 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/ProjectData.java

@@ -0,0 +1,22 @@
+package com.persagy.bdtp.adm.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 按项目下载的数据结构
+ */
+@Data
+public class ProjectData extends DownLoadData {
+
+	/** 项目下的关系数据 */
+	private List<?> relations;
+
+	public void buildDownloadTs() {
+		long ts = getMaxTs(relations);
+		if(ts > 0)
+			bdtpDownloadTs = ts;
+	}
+
+}

+ 30 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/TypeDef.java

@@ -0,0 +1,30 @@
+package com.persagy.bdtp.adm.entity;
+
+import com.persagy.dmp.define.entity.ObjectTypeDefine;
+import lombok.Data;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * 类型定义,封装children操作,支持树形结构
+ */
+@Data
+public class TypeDef extends ObjectTypeDefine {
+
+	/** 正向交付设备类标注 */
+	private boolean m2d;
+
+	private List<TypeDef> children;
+
+	public void addChild(TypeDef child){
+		if(children == null)
+			children = new LinkedList<>();
+		children.add(child);
+	}
+
+	public List<? extends TypeDef> getChildren() {
+		return children;
+	}
+
+}

+ 51 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/UploadData.java

@@ -0,0 +1,51 @@
+package com.persagy.bdtp.adm.entity;
+
+import cn.hutool.core.collection.CollUtil;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.bdtp.adm.entity.db.*;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 上传的数据结构
+ */
+@Data
+public class UploadData {
+
+	/** 上传任务id */
+	private String uploadJobId;
+
+	private List<ObjectNode> objects;
+
+	private List<ObjectNode> relations;
+
+	private List<AdmPipe> pipes;
+
+	private List<AdmJobSpace> jobSpace;
+
+	private List<AdmFile> file;
+
+	private List<AdmQrCode> qrCode;
+
+	// 核查问题数据
+	private List<AdmProblem> problems;
+
+
+	/** 待废弃 */
+	private List<AdmServeArea> serveArea;
+
+	/** 待废弃 */
+	private String buildingId;
+
+
+	public boolean notEmpty() {
+		return CollUtil.isNotEmpty(objects) || CollUtil.isNotEmpty(relations)
+				|| CollUtil.isNotEmpty(pipes)
+				|| CollUtil.isNotEmpty(jobSpace)
+				|| CollUtil.isNotEmpty(problems)
+				|| CollUtil.isNotEmpty(file) || CollUtil.isNotEmpty(qrCode)
+				|| CollUtil.isNotEmpty(serveArea);
+	}
+
+}

+ 42 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/UploadRtn.java

@@ -0,0 +1,42 @@
+package com.persagy.bdtp.adm.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UploadRtn {
+
+	private List<String> expiredObjectIds;
+
+	private List<String> expiredRelationIds;
+
+	private List<String> expiredPipeIds;
+
+	private List<String> expiredJobSpaceIds;
+
+	private List<String> expiredProblemArchIds;
+
+	private List<String> expiredProblemEquipIds;
+
+	private List<String> expiredFileIds;
+
+	private List<String> expiredQrCodeIds;
+
+	private List<String> expiredServeAreaIds;
+
+	private String timestamp;
+
+	private String buildingId;
+
+	private String status;
+
+	public UploadRtn() {
+
+	}
+
+	public UploadRtn(String status) {
+		this.status = status;
+	}
+
+}

+ 21 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmClientFlag.java

@@ -0,0 +1,21 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.sql.Timestamp;
+
+@Data
+@TableName(value = "adm_client_flag", autoResultMap = true)
+public class AdmClientFlag {
+
+	@TableId(type = IdType.AUTO)
+	private Integer id;
+
+	private String userId;
+
+	private Timestamp ts;
+
+}

+ 18 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmComponent.java

@@ -0,0 +1,18 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName(value = "adm_component",autoResultMap = true)
+public class AdmComponent extends BaseAdmEntity {
+
+	private String compCode;
+
+	private String compName;
+
+	private String systemCode;
+
+	private String classCode;
+
+}

+ 59 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmConfig.java

@@ -0,0 +1,59 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.persagy.dmp.common.helper.SpringHelper;
+import lombok.Data;
+
+import java.io.IOException;
+
+@Data
+@TableName(value = "adm_config",autoResultMap = true)
+public class AdmConfig extends BaseAdmEntity {
+
+	private String name;
+
+	private String code;
+
+	@TableField(
+			typeHandler = JacksonTypeHandler.class
+	)
+	private JsonNode data;
+
+	@TableField(
+			exist = false
+	)
+	private String strData;
+
+	@Override
+	public void serializeJsonProp() {
+		if(data != null) {
+			ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+			try {
+				strData = objectMapper.writeValueAsString(data);
+			} catch (JsonProcessingException e) {
+
+			}
+			//data = null;
+		}
+	}
+
+	@Override
+	public void deserializeJsonProp() {
+		if(StrUtil.isNotBlank(strData)) {
+			ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+			try {
+				data = objectMapper.readValue(strData, JsonNode.class);
+			} catch (IOException e) {
+
+			}
+			strData = null;
+		}
+	}
+
+}

+ 14 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmContainerConfig.java

@@ -0,0 +1,14 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName(value = "adm_container_config", autoResultMap = true)
+public class AdmContainerConfig extends BaseAdmEntity {
+
+	private String containerCode;
+
+	private String widgetCode;
+
+}

+ 18 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmDefineProblemType.java

@@ -0,0 +1,18 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+@Data
+@TableName(value = "adm_define_problem_type", autoResultMap = true)
+public class AdmDefineProblemType extends AuditableEntity {
+
+    private String objTypeCode;
+
+    private String objTypeName;
+
+    private String problemTypeCode;
+
+    private String problemTypeName;
+
+}

+ 97 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmFile.java

@@ -0,0 +1,97 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+@Data
+@TableName("adm_file")
+public class AdmFile extends BaseAdmDataEntity{
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 文件类型(photo|video|file|...)
+     */
+    private String fileType;
+
+    /**
+     * 业务类型(object:对象附件|problem_arch:空间问题附件|problem_equip:设备问题附件)
+     */
+    private String bizType;
+
+    /**
+     * 文件存储路径(id)
+     */
+    private String filePath;
+
+    /**
+     * app端文件存储路径
+     */
+    private String clientPath;
+
+    /**
+     * 关联的对象id
+     */
+    private String refObjId;
+
+    /**
+     * 关联的对象信息点code
+     */
+    private String refInfoCode;
+
+    /**
+     * 描述
+     */
+    private String remark;
+
+    /**
+     * 文件附件(照片)的排序序号
+     */
+    private Integer orderNum;
+
+    /**
+     * 项目id
+     */
+    private String projectId;
+
+    /**
+     * 楼层id
+     */
+    private String floorId;
+
+    /**
+     * 建筑id
+     */
+    private String buildingId;
+
+
+    /**
+     * 文件服务中的存储id
+     */
+    private String fileId;
+
+
+    @Override
+    public String toString() {
+        return "AdmFile{" +
+                "id=" + id +
+                ", fileType=" + fileType +
+                ", bizType=" + bizType +
+                ", filePath=" + filePath +
+                ", clientPath=" + clientPath +
+                ", refObjId=" + refObjId +
+                ", refInfoCode=" + refInfoCode +
+                ", remark=" + remark +
+                ", orderNum=" + orderNum +
+                ", projectId=" + projectId +
+                ", floorId=" + floorId +
+                ", buildingId=" + buildingId +
+                ", creator=" + creator +
+                ", creationTime=" + creationTime +
+                ", modifier=" + modifier +
+                ", modifiedTime=" + modifiedTime +
+                ", valid=" + valid +
+                ", fileId=" + fileId +
+                ", ts=" + ts +
+                "}";
+    }
+}

+ 67 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmInfosConfig.java

@@ -0,0 +1,67 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.persagy.dmp.common.helper.SpringHelper;
+import lombok.Data;
+
+import java.io.IOException;
+import java.util.List;
+
+@Data
+@TableName(value = "adm_infos_config",autoResultMap = true)
+public class AdmInfosConfig extends BaseAdmEntity {
+
+    private String objType;
+
+    private String name;
+
+    private String classCode;
+
+    private String majorCode;
+
+    private String systemCode;
+
+    @TableField(
+            typeHandler = JacksonTypeHandler.class
+    )
+    private List<Object> infos;
+
+    private String flag;
+
+    @TableField(
+            exist = false
+    )
+    private String strInfos;
+
+    @Override
+    public void serializeJsonProp() {
+        if(infos != null) {
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            try {
+                strInfos = objectMapper.writeValueAsString(infos);
+            } catch (JsonProcessingException e) {
+
+            }
+            //infos = null;
+        }
+    }
+
+    @Override
+    public void deserializeJsonProp() {
+        if(StrUtil.isNotBlank(strInfos)) {
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            try {
+                infos = objectMapper.readValue(strInfos, List.class);
+            } catch (IOException e) {
+
+            }
+            strInfos = null;
+        }
+    }
+
+}

+ 71 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmJobSpace.java

@@ -0,0 +1,71 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import cn.hutool.core.util.StrUtil;
+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.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.persagy.dmp.common.helper.SpringHelper;
+import lombok.Data;
+
+import java.io.IOException;
+
+@Data
+@TableName(value = "adm_job_space",autoResultMap = true)
+public class AdmJobSpace extends BaseAdmDataEntity {
+
+    private String workId;
+
+    private String spaceId;
+
+//    private String bimId; 业务空间没有bimId
+
+    private String spaceType;
+
+    private String parentSpaceId;
+
+    private Integer archState;
+
+    private Integer equipState;
+
+    @JsonIgnore
+    @TableField(
+            typeHandler = JacksonTypeHandler.class
+    )
+    private ArrayNode outline;
+
+    @TableField(
+            exist = false
+    )
+    private String strOutline;
+
+    @Override
+    public void serializeJsonProp() {
+        if(outline != null) {
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            try {
+                strOutline = objectMapper.writeValueAsString(outline);
+            } catch (JsonProcessingException e) {
+
+            }
+            //outline = null;
+        }
+    }
+
+    @Override
+    public void deserializeJsonProp() {
+        if(StrUtil.isNotBlank(strOutline)) {
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            try {
+                outline = objectMapper.readValue(strOutline, ArrayNode.class);
+            } catch (IOException e) {
+
+            }
+            strOutline = null;
+        }
+    }
+
+}

+ 18 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmM2dEquip.java

@@ -0,0 +1,18 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName(value = "adm_m2d_equip",autoResultMap = true)
+public class AdmM2dEquip extends BaseAdmEntity {
+
+    private String name;
+
+    private String majorCode;
+
+    private String systemCode;
+
+    private String classCode;
+
+}

+ 35 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmMessageP.java

@@ -0,0 +1,35 @@
+package com.persagy.bdtp.adm.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.JsonNode;
+import lombok.Data;
+
+import java.sql.Timestamp;
+
+@Data
+@TableName(value = "adm_message_p", autoResultMap = true)
+public class AdmMessageP extends BaseAdmEntity {
+
+	private String triggerType;
+
+	private String sender;
+
+	private String status;
+
+	private Timestamp sendTime;
+
+	private Timestamp returnTime;
+
+	@TableField(
+			typeHandler = JacksonTypeHandler.class
+	)
+	private Object content;
+
+	@TableField(
+			typeHandler = JacksonTypeHandler.class
+	)
+	private Object returnContent;
+
+}

+ 90 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmObject.java

@@ -0,0 +1,90 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.helper.SpringHelper;
+import lombok.Data;
+
+import java.io.IOException;
+import java.util.List;
+
+@Data
+@TableName(value = "adm_object",autoResultMap = true)
+public class AdmObject extends BaseDeliveryEntity {
+
+	private String name;
+
+	private String localId;
+
+	private String localName;
+
+	private String objType;
+
+	private String classCode;
+
+	private String groupCode;
+
+	@TableField("`grouping`")
+	private Integer grouping;
+
+	@TableField(
+			typeHandler = JacksonTypeHandler.class
+	)
+	private List<String> virtualCodes;
+
+	private String createApp;
+
+	private String updateApp;
+
+	private String containerId;
+
+	@TableField(
+			typeHandler = JacksonTypeHandler.class
+	)
+	private ObjectNode infos;
+
+	@TableField(
+			exist = false
+	)
+	private String strInfos;
+
+	public JsonNode getInfo(String infoCode){
+		ObjectNode node = infos;
+		if(node != null)
+			return node.get(infoCode);
+		return null;
+	}
+
+	@Override
+	public void serializeJsonProp() {
+		if(infos != null) {
+			ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+			try {
+				strInfos = objectMapper.writeValueAsString(infos);
+			} catch (JsonProcessingException e) {
+
+			}
+			//infos = null;
+		}
+	}
+
+	@Override
+	public void deserializeJsonProp() {
+		if(StrUtil.isNotBlank(strInfos)) {
+			ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+			try {
+				infos = objectMapper.readValue(strInfos, ObjectNode.class);
+			} catch (IOException e) {
+
+			}
+			strInfos = null;
+		}
+	}
+
+}

+ 98 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmPipe.java

@@ -0,0 +1,98 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.helper.SpringHelper;
+import lombok.Data;
+
+import java.io.IOException;
+import java.util.List;
+
+@Data
+@TableName(value = "adm_pipe",autoResultMap = true)
+public class AdmPipe extends BaseAdmDataEntity {
+
+    private String objFrom;
+
+    private String typeFrom;
+
+    private String objTo;
+
+    private String typeTo;
+
+    private Integer direction;
+
+    private String pipeType;
+
+    private String pipeSubType;
+
+    @TableField(
+            typeHandler = JacksonTypeHandler.class
+    )
+    private List<Object> route;
+
+    @TableField(
+            typeHandler = JacksonTypeHandler.class
+    )
+    private ObjectNode infos;
+
+    @TableField(
+            exist = false
+    )
+    private String strRoute;
+
+    @TableField(
+            exist = false
+    )
+    private String strInfos;
+
+    @Override
+    public void serializeJsonProp() {
+        if(route != null) {
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            try {
+                strRoute = objectMapper.writeValueAsString(route);
+            } catch (JsonProcessingException e) {
+
+            }
+            //route = null;
+        }
+        if(infos != null) {
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            try {
+                strInfos = objectMapper.writeValueAsString(infos);
+            } catch (JsonProcessingException e) {
+
+            }
+            //infos = null;
+        }
+    }
+
+    @Override
+    public void deserializeJsonProp() {
+        if(StrUtil.isNotBlank(strRoute)) {
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            try {
+                route = objectMapper.readValue(strRoute, List.class);
+            } catch (IOException e) {
+
+            }
+            strRoute = null;
+        }
+        if(StrUtil.isNotBlank(strInfos)) {
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            try {
+                infos = objectMapper.readValue(strInfos, ObjectNode.class);
+            } catch (IOException e) {
+
+            }
+            strInfos = null;
+        }
+    }
+
+}

+ 24 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmPipeConfig.java

@@ -0,0 +1,24 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName(value = "adm_pipe_config",autoResultMap = true)
+public class AdmPipeConfig extends BaseAdmEntity {
+
+    private String classCodeFrom;
+
+    private String pipeType;
+
+    private String pipeSubType;
+
+    private Integer pipeDirection;
+
+    private String pipeDescription;
+
+    private String classCodeTo;
+
+    private String flag;
+
+}

+ 67 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmProblemArch.java

@@ -0,0 +1,67 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.helper.SpringHelper;
+import lombok.Data;
+
+import java.io.IOException;
+import java.util.List;
+
+@Data
+@TableName(value = "adm_problem_arch",autoResultMap = true)
+public class AdmProblemArch extends BaseAdmDataEntity {
+
+    private String workId;
+
+    private String geomType;
+
+    @TableField(
+            typeHandler = JacksonTypeHandler.class
+    )
+    private List<ObjectNode> geom;
+
+    private String problemType;
+
+    private String message;
+
+    private Integer problemState;
+
+    @TableField(
+            exist = false
+    )
+    private String strGeom;
+
+    @Override
+    public void serializeJsonProp() {
+        if(geom != null) {
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            try {
+                strGeom = objectMapper.writeValueAsString(geom);
+            } catch (JsonProcessingException e) {
+
+            }
+            //geom = null;
+        }
+    }
+
+    @Override
+    public void deserializeJsonProp() {
+        if(StrUtil.isNotBlank(strGeom)) {
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            try {
+                geom = objectMapper.readValue(strGeom, new TypeReference<List<ObjectNode>>(){});
+            } catch (IOException e) {
+
+            }
+            strGeom = null;
+        }
+    }
+
+}

+ 20 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmProblemEquip.java

@@ -0,0 +1,20 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName(value = "adm_problem_equip",autoResultMap = true)
+public class AdmProblemEquip extends BaseAdmDataEntity {
+
+    private String workId;
+
+    private String equipId;
+
+    private String problemType;
+
+    private String message;
+
+    private Integer problemState;
+
+}

+ 61 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmQrCode.java

@@ -0,0 +1,61 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.helper.SpringHelper;
+import lombok.Data;
+
+import java.io.IOException;
+
+@Data
+@TableName(value = "adm_qr_code",autoResultMap = true)
+public class AdmQrCode extends BaseAdmDataEntity {
+
+    private String qrCode;
+
+    private String objId;
+
+    @TableField(
+            typeHandler = JacksonTypeHandler.class
+    )
+    private ObjectNode location;
+
+    private String remark;
+
+    @TableField(
+            exist = false
+    )
+    private String strLocation;
+
+    @Override
+    public void serializeJsonProp() {
+        if(location != null) {
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            try {
+                strLocation = objectMapper.writeValueAsString(location);
+            } catch (JsonProcessingException e) {
+
+            }
+            //location = null;
+        }
+    }
+
+    @Override
+    public void deserializeJsonProp() {
+        if(StrUtil.isNotBlank(strLocation)) {
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            try {
+                location = objectMapper.readValue(strLocation, ObjectNode.class);
+            } catch (IOException e) {
+
+            }
+            strLocation = null;
+        }
+    }
+
+}

+ 28 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmRelation.java

@@ -0,0 +1,28 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName(value = "adm_relation",autoResultMap = true)
+public class AdmRelation extends BaseDeliveryEntity {
+
+    private String groupCode;
+
+    private String graphId;
+
+    private String graphCode;
+
+    private String relCode;
+
+    private String relValue;
+
+    private String objFrom;
+
+    private String objTo;
+
+    private String createApp;
+
+    private String updateApp;
+
+}

+ 0 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmRelsConfig.java


Неке датотеке нису приказане због велике количине промена