Kaynağa Gözat

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

lvxianyun 3 yıl önce
ebeveyn
işleme
6282703ed8
100 değiştirilmiş dosya ile 3802 ekleme ve 7 silme
  1. 37 1
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/DiagramController.java
  2. 160 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. 32 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. 49 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/entity/IconEntity.java
  8. 45 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/service/IconService.java
  9. 48 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. 18 0
      adm-business/adm-diagram/src/main/resources/db.init/schema.sql
  12. 41 0
      adm-business/adm-diagram/src/main/resources/mapper/DiagramIcon.xml
  13. 45 0
      adm-business/adm-server/pom.xml
  14. 30 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/aop/ExceptionAspect.java
  15. 35 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/client/DicClient.java
  16. 17 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/client/ImageServiceClient.java
  17. 60 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/client/OldAdmClient.java
  18. 79 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/client/RwdClient.java
  19. 61 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/common/AdmConst.java
  20. 25 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/common/AdmMessageConst.java
  21. 37 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/common/AdmRequest.java
  22. 36 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/common/AdmResult.java
  23. 23 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/config/AdmCommonConfig.java
  24. 46 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/config/AdmRabbitConfig.java
  25. 27 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/config/TestConfig.java
  26. 161 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/controller/AppController.java
  27. 43 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/controller/ManageController.java
  28. 359 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/controller/ToolController.java
  29. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmClientFlagMapper.java
  30. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmComponentMapper.java
  31. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmConfigMapper.java
  32. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmContainerConfigMapper.java
  33. 7 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmDefineProblemTypeMapper.java
  34. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmFileMapper.java
  35. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmInfosConfigMapper.java
  36. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmJobSpaceMapper.java
  37. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmM2dEquipMapper.java
  38. 11 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmMessagePMapper.java
  39. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmObjectMapper.java
  40. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmPipeConfigMapper.java
  41. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmPipeMapper.java
  42. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmProblemArchMapper.java
  43. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmProblemEquipMapper.java
  44. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmProblemMapper.java
  45. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmQrCodeMapper.java
  46. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmRelationMapper.java
  47. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmRelsConfigMapper.java
  48. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmServeAreaMapper.java
  49. 10 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmUploadJobMapper.java
  50. 14 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmUploadLogMapper.java
  51. 53 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/datatx/DataTxHandler.java
  52. 8 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/datatx/ObjectForTx.java
  53. 55 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/datatx/ObjectMapper4Tx.java
  54. 51 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/BuildingData.java
  55. 58 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/D2mMessage.java
  56. 25 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/Dict.java
  57. 55 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/DownLoadData.java
  58. 43 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/InfoDef.java
  59. 31 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/Pagination.java
  60. 22 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/ProjectData.java
  61. 30 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/TypeDef.java
  62. 51 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/UploadData.java
  63. 42 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/UploadRtn.java
  64. 21 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmClientFlag.java
  65. 18 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmComponent.java
  66. 59 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmConfig.java
  67. 14 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmContainerConfig.java
  68. 18 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmDefineProblemType.java
  69. 29 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmFile.java
  70. 67 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmInfosConfig.java
  71. 71 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmJobSpace.java
  72. 18 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmM2dEquip.java
  73. 35 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmMessageP.java
  74. 90 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmObject.java
  75. 98 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmPipe.java
  76. 24 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmPipeConfig.java
  77. 40 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmProblem.java
  78. 67 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmProblemArch.java
  79. 20 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmProblemEquip.java
  80. 61 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmQrCode.java
  81. 28 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmRelation.java
  82. 30 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmRelsConfig.java
  83. 26 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmServeArea.java
  84. 22 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmUploadJob.java
  85. 68 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/AdmUploadLog.java
  86. 50 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/BaseAdmDataEntity.java
  87. 23 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/BaseAdmEntity.java
  88. 23 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/db/BaseDeliveryEntity.java
  89. 27 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/oldadm/OBase.java
  90. 19 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/oldadm/OBuilding.java
  91. 99 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/oldadm/OEquip.java
  92. 51 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/oldadm/OFloor.java
  93. 17 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/oldadm/OProject.java
  94. 79 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/oldadm/OSpace.java
  95. 20 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/oldadm/OldAdmResult.java
  96. 74 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/handler/M2DMessageHandler.java
  97. 17 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/service/CallException.java
  98. 13 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/service/IAdmLogService.java
  99. 53 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/service/IAdmObjectService.java
  100. 0 0
      adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/service/IConfigService.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));
+    }
 }

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

@@ -0,0 +1,160 @@
+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 skin     皮肤
+     * @return
+     */
+    @ApiOperation("上传图标")
+    @PostMapping("/uploadIcon")
+    public CommonResult<Object> uploadIcon(@RequestParam("file") MultipartFile file,
+                                           @RequestParam String legendId,
+                                           @RequestParam(required = false) String skin) {
+        String fileName = file.getOriginalFilename();
+        long size = file.getSize();
+
+        IconEntity entity = new IconEntity();
+        entity.setIconSkin(skin);
+        entity.setLegendId(legendId);
+        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(inputStream);
+        } 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);
+
+        entity.setIconFileId(fileId);
+
+        return ResultHelper.single(iconService.saveIcon(entity));
+
+    }
+
+    /**
+     * 图标预览
+     * TODO 目前这个接口不可用 文件服务器好像有问题
+     * @param request  请求体
+     * @param response 响应体
+     * @param iconId   图标数据id
+     */
+    @ApiOperation("图标预览")
+    @GetMapping("/showImage")
+    public void loadFile(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());
+        System.out.println(fileInfo);
+        // 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("/cons")
+    public CommonResult<List<IconEntity>> getIcons() {
+        return ResultHelper.multi(iconService.getIcons());
+    }
+}

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

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

@@ -0,0 +1,32 @@
+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();
+
+}

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

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

@@ -0,0 +1,49 @@
+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 iconSize;
+
+    /**
+     * 图标对应的文件id
+     */
+    private String iconFileId;
+
+    /**
+     * 图标皮肤
+     */
+    private String iconSkin;
+
+    /**
+     * 所属图例id
+     */
+    private String legendId;
+
+
+}

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

@@ -0,0 +1,45 @@
+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();
+}

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

@@ -0,0 +1,48 @@
+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();
+    }
+}

+ 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:

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

@@ -76,3 +76,21 @@ 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 '图标文件类型',
+  `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='图标表结构';

+ 41 - 0
adm-business/adm-diagram/src/main/resources/mapper/DiagramIcon.xml

@@ -0,0 +1,41 @@
+<?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="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,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>
+</mapper>
+
+

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

+ 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> {
+}

+ 8 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmFileMapper.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.AdmFile;
+
+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> {
+
+}

+ 8 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/dao/AdmProblemMapper.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.AdmProblem;
+
+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);
+		}
+	}
+
+}

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

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

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

@@ -0,0 +1,29 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName(value = "adm_file",autoResultMap = true)
+public class AdmFile extends BaseAdmDataEntity {
+
+    private String fileType;
+
+    private String bizType;
+
+    private String filePath;
+
+    private String clientPath;
+
+    private String refObjId;
+
+    private String refInfoCode;
+
+    private String remark;
+
+    private Integer orderNum;
+
+    /** 文件服务中对应的存储id */
+    private String fileId;
+
+}

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

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

@@ -0,0 +1,40 @@
+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.node.ObjectNode;
+import lombok.Data;
+@Data
+@TableName(value = "adm_problem", autoResultMap = true)
+public class AdmProblem extends BaseAdmDataEntity{
+    private String id;
+
+    private String projectId;
+
+    private String buildingId;
+
+    private String floorId;
+
+    private String fileId;
+
+    private String checkType;
+
+    private String objTypeCode;
+
+    private String objTypeName;
+
+    private String objId;
+
+    private String objName;
+
+    private String typeCode;
+
+    private String typeName;
+
+    private Byte status;
+
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode info;
+
+}

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

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

@@ -0,0 +1,30 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName(value = "adm_rels_config",autoResultMap = true)
+public class AdmRelsConfig extends BaseAdmEntity {
+
+    private String objTypeFrom;
+
+    private String classCodeFrom;
+
+    private String graphCode;
+
+    private String graphName;
+
+    private String relCode;
+
+    private String relName;
+
+    private String objTypeTo;
+
+    private String classCodeTo;
+
+    private String direction;
+
+    private String flag;
+
+}

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

@@ -0,0 +1,26 @@
+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;
+
+@Data
+@TableName(value = "adm_serve_area",autoResultMap = true)
+public class AdmServeArea extends BaseAdmDataEntity {
+
+    private String objId;
+
+    private String geomType;
+
+    @TableField(
+            typeHandler = JacksonTypeHandler.class
+    )
+    private JsonNode geom;
+
+    private String serveType;
+
+    private String remark;
+
+}

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

@@ -0,0 +1,22 @@
+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_upload_job", autoResultMap = true)
+public class AdmUploadJob extends BaseAdmEntity {
+
+	private String operator;
+
+	private String status;
+
+	private Timestamp startTime;
+
+	private Timestamp finishTime;
+
+}

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

@@ -0,0 +1,68 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import lombok.Data;
+
+import java.sql.Timestamp;
+
+@Data
+@TableName(value = "adm_upload_log",autoResultMap = true)
+public class AdmUploadLog {
+
+	public static final String ADD = "add";
+
+	public static final String MODIFY = "modify";
+
+	public static final String REMOVE = "remove";
+
+	private String operator;
+
+	private String jobId;
+
+	private String entityType;
+
+	private String operation;
+
+	private String data; //数据库中json类型
+
+	private Timestamp ts;
+
+	public AdmUploadLog() {
+
+	}
+
+	public AdmUploadLog(String jobId, String operator, String operation) {
+		this.jobId = jobId;
+		this.operator = operator;
+		this.operation = operation;
+	}
+
+	public void setData(Object data, ObjectMapper objectMapper){
+		this.entityType = getLogEntityType(data);
+		try {
+			this.data = objectMapper.writeValueAsString(data);
+		} catch (Exception e) {
+
+		}
+	}
+
+	private String getLogEntityType(Object o){
+		if (o instanceof ObjectNode) {
+			JsonNode ot = ((ObjectNode) o).get("objType");
+			if(ot != null)
+				return ot.asText();
+			if(((ObjectNode) o).get("relCode") != null)
+				return "relation";
+		}
+		return o.getClass().getSimpleName();
+	}
+
+}

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

@@ -0,0 +1,50 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.Data;
+
+import java.io.IOException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * 数据实体基类
+ */
+@Data
+abstract public class BaseAdmDataEntity extends BaseAdmEntity {
+
+	protected String buildingId;
+
+	protected String floorId;
+
+	protected String creator;
+
+	protected String creationTime;
+
+	protected String modifier;
+
+	protected String modifiedTime;
+
+	protected Integer valid;
+
+	@JsonSerialize(using = DateToLongSerializer.class)
+	protected Timestamp ts;
+
+	/** APP端上传的数据状态,可以判断是否为新增数据 */
+	@TableField(exist = false)
+	protected Integer state;
+
+}
+
+class DateToLongSerializer extends JsonSerializer<Date> {
+
+	@Override
+	public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+		jsonGenerator.writeNumber(date.getTime());
+	}
+
+}

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

@@ -0,0 +1,23 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import lombok.Data;
+
+/**
+ * 实体基类
+ */
+@Data
+abstract public class BaseAdmEntity {
+
+	protected String id;
+
+	protected String projectId;
+
+	public void serializeJsonProp() {
+
+	}
+
+	public void deserializeJsonProp() {
+
+	}
+
+}

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

@@ -0,0 +1,23 @@
+package com.persagy.bdtp.adm.entity.db;
+
+import lombok.Data;
+
+/**
+ * 需要交付给BDTP的实体基类
+ */
+@Data
+abstract public class BaseDeliveryEntity extends BaseAdmDataEntity {
+
+	/** 创建对象的本地设备(移动端) */
+	protected String clientDevice;
+
+	/** 由本地设备生成的对象id */
+	protected String clientId;
+
+	/**  数模同步状态:0未同步, 1已同步 */
+	protected Integer d2mState;
+
+	/** 交付BDTP状态:1已交付,0待交付 */
+	protected Integer deliveryState;
+
+}

+ 27 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/oldadm/OBase.java

@@ -0,0 +1,27 @@
+package com.persagy.bdtp.adm.entity.oldadm;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.Map;
+
+@Data
+abstract public class OBase {
+
+	private String id;
+
+	private String name;
+
+	private String localId;
+
+	private String localName;
+
+	private String objectType;
+
+	private Map<String, Object> infos;
+
+	private String createTime;
+
+	private String lastUpdate;
+
+}

+ 19 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/oldadm/OBuilding.java

@@ -0,0 +1,19 @@
+package com.persagy.bdtp.adm.entity.oldadm;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OBuilding extends OBase {
+
+	/** 项目ID */
+	private String projectId;
+	/** 平台默认二维码 */
+	private String defaultQRCode;
+	/** 建筑二维码图片 */
+	private String buildQRCode;
+
+	private List<OFloor> floor;
+
+}

+ 99 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/oldadm/OEquip.java

@@ -0,0 +1,99 @@
+package com.persagy.bdtp.adm.entity.oldadm;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class OEquip extends OBase {
+
+	/** 二维码内容 */
+	private String defaultQRCode;
+	/** 设计图纸中编码 */
+	private String cadId;
+	/** RFID标识 */
+	private String rfId;
+
+
+	/** BIM模型中编码 */
+	private String bimId;
+	/** BIM构建编码 */
+	private String bimTypeId;
+	/** BIM模型中坐标 */
+	private String bimLocation;
+	/** 坐标对象数据 */
+	@JsonProperty("location")
+	@JsonAlias("locationJson")
+	private Map<String, Double> location;
+	/** 现场发现人员 */
+	private String findPeople;
+
+	/** 项目ID */
+	private String projectId;
+	/** 设备类型code */
+	private String classCode;
+	/** 设备所在建筑ID */
+	private String buildingId;
+	/** 设备所在楼层id */
+	private String floorId;
+	/** 设备关联的资产id */
+	private String propertyId;
+
+	/** 参见 EquipmentProSy **/
+	/** 品牌型号id */
+	private String dpManufacturerId;
+
+	/** 供应商信息id */
+	private String dpSupplierId;
+
+	/** 维修商信息id */
+	private String dpMaintainerId;
+
+	/** 保险公司信息id */
+	private String dpInsurerId;
+
+	/** 设备型号id */
+	private String dpSpecificationId;
+
+	/** 品牌id */
+	private String dpBrandId;
+
+	/** Revit族 */
+	private String bimFamilyName;
+	/** Revit族类型 */
+	private String bimFamilySymbol;
+	/** 设备序号 */
+	private Double equipSerial;
+
+	/** 部件关联设备的id */
+	private String parentId;
+	/** 系统id集合 */
+	private List<String> systemList;
+	/** 项目自定义类型 */
+	private String customCategory;
+	/** 任务状态 */
+	private Integer taskState;
+	/** 模型id */
+	private String modelId;
+	/** 贴码状态 */
+	private Integer codeType;
+	/** 备注 */
+	private String note;
+
+	/** 客户端id */
+	private String appId;
+	/** 方案id */
+	private String schemeId;
+
+	/** 系统编码 */
+	private String systemCode;
+	/** 系统名称 */
+	private String systemName;
+	/** 二维码图片 */
+	private String qrcodePic;
+
+}

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

@@ -0,0 +1,51 @@
+package com.persagy.bdtp.adm.entity.oldadm;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class OFloor extends OBase {
+
+	/** 平台默认二维码 */
+	private String defaultQRCode;
+	/** 项目ID */
+	private String projectId;
+	/** 建筑ID */
+	private String buildingId;
+	/** 坐标 */
+	private String bimLocation;
+	/** BIM模型中编码 */
+	private String bimId;
+	/** BIMID前缀 */
+	private String bimIdPre;
+	/** 楼层顺序号 */
+	private Integer floorSequenceID;
+	/** 楼层常驻人数 */
+	private Integer permanentPeopleNum;
+	/** 楼层编码 */
+	private String floorIdentity;
+
+	/** 模型文件id */
+	private String modelId;
+
+	/** 楼层选定区域轮廓线 */
+	private List<ObjectNode> outline;
+
+	/** 数量 */
+	private String count;
+
+	/** 自定义信息点 */
+	private Map<String, Object> properties;
+
+	/** 二维码图片 */
+	private String qrcodePic;
+
+	public String getFloorMap(){
+		Map<String, Object> infos = getInfos();
+		return infos != null ? (String) infos.get("floorMap") : null;
+	}
+
+}

+ 17 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/oldadm/OProject.java

@@ -0,0 +1,17 @@
+package com.persagy.bdtp.adm.entity.oldadm;
+
+import lombok.Data;
+
+@Data
+public class OProject extends OBase {
+
+	/** 项目介绍 */
+	private String introduction;
+	/** 集团编码 */
+	private String groupCode;
+	/** 商业层数 */
+	private String businessFloorNum;
+	/** 办公层数 */
+	private String officeFloorNum;
+
+}

+ 79 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/entity/oldadm/OSpace.java

@@ -0,0 +1,79 @@
+package com.persagy.bdtp.adm.entity.oldadm;
+
+import cn.hutool.core.map.CaseInsensitiveMap;
+import lombok.Data;
+
+import java.util.ArrayList;
+
+@Data
+public class OSpace extends OBase {
+
+	/** 项目ID */
+	private String projectId;
+	/** 建筑ID */
+	private String buildingId;
+	/** 楼层ID */
+	private String floorId;
+	/** 平台二维码 */
+	private String defaultQRCode;
+	/** BIM模型中编码 */
+	private String bimId;
+
+	/** 楼层选定区域轮廓线 */
+	private ArrayList<ArrayList<ArrayList<CaseInsensitiveMap>>> outline;
+	/** 轮廓线2 未使用*/
+	private ArrayList<ArrayList<ArrayList<CaseInsensitiveMap>>> outline2;
+//	/** 图片 */
+//	private ArrayList<AdmTaskPic> pic;
+	/** 空间是否受影响 */
+	private String state;
+	/** 空间常驻人数 */
+	private Integer permanentPeopleNum;
+
+	/** 井深 */
+	private Float depth;
+	/** 面宽 */
+	private Float width;
+	/** 建筑面积 */
+	private Float buildArea;
+	/** 使用面积 */
+	private Float netArea;
+	/** 高 */
+	private Float height;
+	/** 备注文字 */
+	private String intro;
+	/** 设计供冷功率 */
+	private Float ratedCoolingp;
+	/** 设计供热功率 */
+	private Float ratedHeatingp;
+	/** 空调形式 */
+	private String acType;
+	/** 空间朝向 */
+	private String zoneOrientation;
+	/** 空间功能区类型 */
+	private String roomFuncType;
+
+	/** 空间序号 */
+	private Float roomSerial;
+	/** 项目空间功能区类型 */
+	private String projRoomFuncType;
+	/** 设计照明功率 */
+	private Float ratedLightp;
+	/** 内外区分类 */
+	private String zoneType;
+	/** 租赁业态类型 */
+	private Integer tenantType;
+	/** 所属租户 */
+	private String tenant;
+	/** 配电容量 */
+	private Float elecCap;
+	/** 污染等级 */
+	private String pollutionDegree;
+
+	/** 对象类型code */
+	private String classCode;
+
+	/** 二维码图片 */
+	private String qrcodePic;
+
+}

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

@@ -0,0 +1,20 @@
+package com.persagy.bdtp.adm.entity.oldadm;
+
+import lombok.Data;
+
+@Data
+public class OldAdmResult<T> {
+
+	private String result;
+
+	private String Message;
+
+	private T content;
+
+	private int pageNumber;
+
+	private int pageSize;
+
+	private int total;
+
+}

+ 74 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/handler/M2DMessageHandler.java

@@ -0,0 +1,74 @@
+package com.persagy.bdtp.adm.handler;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.persagy.bdtp.adm.common.AdmConst;
+import com.persagy.bdtp.adm.common.AdmMessageConst;
+import com.persagy.bdtp.adm.dao.AdmMessagePMapper;
+import com.persagy.bdtp.adm.entity.db.AdmMessageP;
+import com.persagy.dmp.amqp.handler.AbstractRabbitHandlerTemplate;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.Map;
+
+@Slf4j
+@Component
+@RabbitListener(queues = AdmMessageConst.M2D_QUEUE)
+public class M2DMessageHandler extends AbstractRabbitHandlerTemplate {
+
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    @Autowired
+    private AdmMessagePMapper messageMapper;
+
+    /**
+     * 消费
+     * @param message 消息体字符串
+     * @param channel 通道对象
+     * @param vo     消息对象
+     */
+    @Override
+    protected void handler(String message, Channel channel, Message vo) {
+        Map<String, Object> msg = null;
+        try {
+            msg = objectMapper.readValue(message, Map.class);
+        }catch (IOException e){
+            throw new RuntimeException(e);
+        }
+
+        if(msg != null)
+            handleD2mReply(msg);
+    }
+
+    private void handleD2mReply(Map<String, Object> reply){
+        String id = (String) reply.get("id");
+        String result = (String) reply.get("result");
+        Object content = reply.get("content");
+
+        AdmMessageP message = messageMapper.selectById(id);
+        if (message != null) {
+            boolean flag = "success".equals(result);
+
+            message.setStatus(flag ? AdmConst.UPLOAD_FINISHED : AdmConst.UPLOAD_ERROR);
+            message.setReturnContent(content);
+            message.setReturnTime(new Timestamp(new Date().getTime()));
+            messageMapper.updateById(message);
+
+            if(!flag)
+                handleD2mError();
+        }
+    }
+
+    private void handleD2mError(){
+        //TODO
+    }
+
+}

+ 17 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/service/CallException.java

@@ -0,0 +1,17 @@
+package com.persagy.bdtp.adm.service;
+
+import com.persagy.bdtp.adm.common.AdmResult;
+
+public class CallException extends RuntimeException {
+
+	private AdmResult<Object> errorResult;
+
+	public CallException(AdmResult<Object> errorResult) {
+		this.errorResult = errorResult;
+	}
+
+	public AdmResult<Object> getErrorResult() {
+		return errorResult;
+	}
+
+}

+ 13 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/service/IAdmLogService.java

@@ -0,0 +1,13 @@
+package com.persagy.bdtp.adm.service;
+
+import com.persagy.bdtp.adm.entity.db.AdmUploadLog;
+
+import java.util.List;
+
+public interface IAdmLogService {
+
+	void saveUploadLog(List<AdmUploadLog> logs);
+
+	void saveUploadLog(AdmUploadLog log);
+
+}

+ 53 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/service/IAdmObjectService.java

@@ -0,0 +1,53 @@
+package com.persagy.bdtp.adm.service;
+
+import com.persagy.bdtp.adm.entity.db.AdmObject;
+
+import java.util.List;
+
+/**
+ * 操作对象实体的服务
+ */
+public interface IAdmObjectService {
+
+	/**
+	 * 批量新增对象
+	 */
+	List<AdmObject> insert(List<AdmObject> voList);
+
+	/**
+	 * 批量更新对象
+	 */
+	List<AdmObject> update(List<AdmObject> voList);
+
+	/**
+	 * 查询建筑和楼层数据
+	 * @param projectIds 项目id
+	 * @return
+	 */
+	List<AdmObject> queryBdAndFl(String... projectIds);
+
+//	/**
+//	 * 查询楼层下的数据(空间、设备)
+//	 * @param projectId 项目id
+//	 * @param floorId 楼层id
+//	 * @return
+//	 */
+//	List<AdmObject> queryByFloor(String projectId, String floorId);
+//
+//	/**
+//	 * 查询建筑下的数据(空间、设备)
+//	 * @param projectId 项目id
+//	 * @param buildingId 楼层id
+//	 * @return
+//	 */
+//	List<AdmObject> queryByBuilding(String projectId, String buildingId);
+
+	/**
+	 * 按类型查询正向交付的实体对象
+	 * @param projectId 项目id
+	 * @param objType 对象类型
+	 * @return
+	 */
+	List<AdmObject> queryM2dByObjType(String projectId, String objType);
+
+}

+ 0 - 0
adm-business/adm-server/src/main/java/com/persagy/bdtp/adm/service/IConfigService.java


Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor