Browse Source

代码拷贝

yucheng 3 years ago
parent
commit
728d32f79d
74 changed files with 4645 additions and 0 deletions
  1. 46 0
      pom.xml
  2. 11 0
      src/main/java/com/persagy/proxy/adm/constant/AdmCommonConstant.java
  3. 129 0
      src/main/java/com/persagy/proxy/adm/controller/AdmBuildingController.java
  4. 114 0
      src/main/java/com/persagy/proxy/adm/controller/AdmComponentController.java
  5. 185 0
      src/main/java/com/persagy/proxy/adm/controller/AdmEquipmentController.java
  6. 146 0
      src/main/java/com/persagy/proxy/adm/controller/AdmFloorController.java
  7. 115 0
      src/main/java/com/persagy/proxy/adm/controller/AdmISpaceController.java
  8. 61 0
      src/main/java/com/persagy/proxy/adm/controller/AdmProjectController.java
  9. 119 0
      src/main/java/com/persagy/proxy/adm/controller/AdmPropertyController.java
  10. 226 0
      src/main/java/com/persagy/proxy/adm/controller/AdmShaftController.java
  11. 233 0
      src/main/java/com/persagy/proxy/adm/controller/AdmSpaceController.java
  12. 273 0
      src/main/java/com/persagy/proxy/adm/controller/AdmSystemController.java
  13. 134 0
      src/main/java/com/persagy/proxy/adm/controller/AdmTenantController.java
  14. 137 0
      src/main/java/com/persagy/proxy/adm/controller/RelationEqInSpController.java
  15. 20 0
      src/main/java/com/persagy/proxy/adm/model/AdmBIMLocation.java
  16. 45 0
      src/main/java/com/persagy/proxy/adm/model/AdmBuilding.java
  17. 23 0
      src/main/java/com/persagy/proxy/adm/model/AdmBuildingFloorInfo.java
  18. 119 0
      src/main/java/com/persagy/proxy/adm/model/AdmComponent.java
  19. 119 0
      src/main/java/com/persagy/proxy/adm/model/AdmEquipment.java
  20. 80 0
      src/main/java/com/persagy/proxy/adm/model/AdmFloor.java
  21. 130 0
      src/main/java/com/persagy/proxy/adm/model/AdmISpace.java
  22. 20 0
      src/main/java/com/persagy/proxy/adm/model/AdmPointPosition.java
  23. 41 0
      src/main/java/com/persagy/proxy/adm/model/AdmProject.java
  24. 102 0
      src/main/java/com/persagy/proxy/adm/model/AdmProperty.java
  25. 68 0
      src/main/java/com/persagy/proxy/adm/model/AdmShaft.java
  26. 130 0
      src/main/java/com/persagy/proxy/adm/model/AdmSpace.java
  27. 70 0
      src/main/java/com/persagy/proxy/adm/model/AdmSystem.java
  28. 20 0
      src/main/java/com/persagy/proxy/adm/model/AdmSystemCategory.java
  29. 28 0
      src/main/java/com/persagy/proxy/adm/model/AdmTaskPic.java
  30. 44 0
      src/main/java/com/persagy/proxy/adm/model/AdmTenant.java
  31. 20 0
      src/main/java/com/persagy/proxy/adm/request/AdmCreateRequest.java
  32. 37 0
      src/main/java/com/persagy/proxy/adm/request/AdmQueryCriteria.java
  33. 28 0
      src/main/java/com/persagy/proxy/adm/request/AdmQueryGroup.java
  34. 67 0
      src/main/java/com/persagy/proxy/adm/request/AdmResponse.java
  35. 16 0
      src/main/java/com/persagy/proxy/adm/request/OrderItem.java
  36. 59 0
      src/main/java/com/persagy/proxy/adm/request/QueryCriteria.java
  37. 49 0
      src/main/java/com/persagy/proxy/adm/service/IAdmBaseService.java
  38. 11 0
      src/main/java/com/persagy/proxy/adm/service/IAdmBuildingService.java
  39. 11 0
      src/main/java/com/persagy/proxy/adm/service/IAdmComponentService.java
  40. 11 0
      src/main/java/com/persagy/proxy/adm/service/IAdmEquipmentService.java
  41. 11 0
      src/main/java/com/persagy/proxy/adm/service/IAdmFloorService.java
  42. 11 0
      src/main/java/com/persagy/proxy/adm/service/IAdmISpaceService.java
  43. 12 0
      src/main/java/com/persagy/proxy/adm/service/IAdmProjectService.java
  44. 11 0
      src/main/java/com/persagy/proxy/adm/service/IAdmPropertyService.java
  45. 29 0
      src/main/java/com/persagy/proxy/adm/service/IAdmRelationService.java
  46. 11 0
      src/main/java/com/persagy/proxy/adm/service/IAdmShaftService.java
  47. 11 0
      src/main/java/com/persagy/proxy/adm/service/IAdmSpaceService.java
  48. 11 0
      src/main/java/com/persagy/proxy/adm/service/IAdmSystemService.java
  49. 11 0
      src/main/java/com/persagy/proxy/adm/service/IAdmTenantService.java
  50. 134 0
      src/main/java/com/persagy/proxy/adm/service/impl/AbstractAdmBaseServiceImpl.java
  51. 15 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmBuildingServiceImpl.java
  52. 14 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmComponentServiceImpl.java
  53. 14 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmEquipmentServiceImpl.java
  54. 14 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmFloorServiceImpl.java
  55. 14 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmISpaceServiceImpl.java
  56. 15 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmProjectServiceImpl.java
  57. 14 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmPropertyServiceImpl.java
  58. 57 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmRelationServiceImpl.java
  59. 14 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmShaftServiceImpl.java
  60. 14 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmSpaceServiceImpl.java
  61. 14 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmSystemServiceImpl.java
  62. 14 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmTenantServiceImpl.java
  63. 118 0
      src/main/java/com/persagy/proxy/adm/utils/AdmEntityTransferUtil.java
  64. 315 0
      src/main/java/com/persagy/proxy/adm/utils/AdmQueryCriteriaHelper.java
  65. 87 0
      src/main/java/com/persagy/proxy/common/client/DmpRwdClient.java
  66. 103 0
      src/main/java/com/persagy/proxy/common/constant/DmpUrlConstant.java
  67. 80 0
      src/main/java/com/persagy/proxy/common/entity/DmpResult.java
  68. 42 0
      src/main/java/com/persagy/proxy/common/entity/InstanceUrlParam.java
  69. 37 0
      src/main/java/com/persagy/proxy/common/entity/ObjRelationDTO.java
  70. 55 0
      src/main/java/com/persagy/proxy/common/entity/RelationDTO.java
  71. 11 0
      src/main/resources/bootstrap.yml
  72. 6 0
      src/script/start.sh
  73. 5 0
      src/script/stop.sh
  74. 24 0
      src/script/zip.xml

+ 46 - 0
pom.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+        <artifactId>dmp-package</artifactId>
+        <groupId>com.persagy</groupId>
+        <version>1.0.0</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+	<groupId>com.persagy</groupId>
+	<artifactId>adm-middleware</artifactId>
+    <packaging>jar</packaging>
+	<version>1.0.0</version>
+	<name>adm-middleware</name>
+	<description>数据中心中间件</description>
+	<properties>
+		<java.version>1.8</java.version>
+		<fastjson.version>1.2.47</fastjson.version>
+	</properties>
+	<dependencies>
+		<!-- 配置中心(包含注册中心) -->
+		<dependency>
+			<groupId>com.persagy</groupId>
+			<artifactId>integrated-config-client</artifactId>
+		</dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>dmp-digital-starter</artifactId>
+        </dependency>
+		<dependency>
+			<groupId>com.persagy</groupId>
+			<artifactId>dmp-server</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>fastjson</artifactId>
+			<version>${fastjson.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>javax.ws.rs</groupId>
+			<artifactId>jsr311-api</artifactId>
+			<version>1.1.1</version>
+		</dependency>
+    </dependencies>
+</project>

+ 11 - 0
src/main/java/com/persagy/proxy/adm/constant/AdmCommonConstant.java

@@ -0,0 +1,11 @@
+package com.persagy.proxy.adm.constant;
+
+/**
+ * ADM 通用常量
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+public interface AdmCommonConstant {
+    /** appId */
+    String APP_ID = "ADM";
+}

+ 129 - 0
src/main/java/com/persagy/proxy/adm/controller/AdmBuildingController.java

@@ -0,0 +1,129 @@
+package com.persagy.proxy.adm.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.model.AdmBuilding;
+import com.persagy.proxy.adm.request.AdmCreateRequest;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.adm.service.IAdmBuildingService;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.ws.rs.QueryParam;
+import java.util.List;
+
+/**
+ * ADM 建筑 API
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@RestController
+@RequestMapping("/object/building")
+public class AdmBuildingController {
+
+    @Autowired
+    private IAdmBuildingService service;
+    @Value("${middleware.group.code}")
+    private String groupCode;
+
+    /**
+     * 创建
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/create")
+    public AdmResponse create(@RequestBody AdmCreateRequest<AdmBuilding> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmBuilding> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doInsert(context, AdmBuilding.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 根据ID删除
+     * @param vos
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/delete")
+    public AdmResponse delete(@RequestBody List<AdmBuilding> vos) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, null, AdmCommonConstant.APP_ID);
+        service.doDelete(context, vos);
+        return AdmResponse.success();
+    }
+
+    /**
+     * 根据ID删除 - 单条删除
+     * @param vos
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/single/delete")
+    public AdmResponse deleteSingle(@RequestBody List<AdmBuilding> vos) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, null, AdmCommonConstant.APP_ID);
+        service.doDelete(context, vos);
+        return AdmResponse.success();
+    }
+
+    /**
+     * 更新
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update")
+    public AdmResponse update(@RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, null, AdmCommonConstant.APP_ID);
+        List<AdmBuilding> vos = CollUtil.newArrayList();
+        vos = service.doUpdate(context, AdmBuilding.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 查询
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public AdmResponse query(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("building");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmBuilding.class);
+    }
+
+    /**
+     * 统计
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/count")
+    public AdmResponse count(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("building");
+        request.setOnlyCount(true);
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmBuilding.class);
+    }
+}

+ 114 - 0
src/main/java/com/persagy/proxy/adm/controller/AdmComponentController.java

@@ -0,0 +1,114 @@
+package com.persagy.proxy.adm.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.model.AdmEquipment;
+import com.persagy.proxy.adm.request.AdmCreateRequest;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.adm.service.IAdmEquipmentService;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.ws.rs.QueryParam;
+import java.util.List;
+
+/**
+ * Adm 部件 API
+ * @author lvxy
+ * @date 2021/8/16
+ */
+
+@RestController
+@RequestMapping("/object/component")
+public class AdmComponentController {
+    @Autowired
+    private IAdmEquipmentService service;
+    @Value("${middleware.group.code}")
+    private String groupCode;
+
+    /**
+     * 统计
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/count")
+    public AdmResponse count(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("component");
+        request.setOnlyCount(true);
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmEquipment.class);
+    }
+    /**
+     * 创建
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/create")
+    public AdmResponse create(@RequestBody AdmCreateRequest<AdmEquipment> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmEquipment> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doInsert(context, AdmEquipment.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 根据ID删除
+     * @param vos
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/delete")
+    public AdmResponse delete(@QueryParam("projectId") String projectId, @RequestBody List<AdmEquipment> vos) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        service.doDelete(context, vos);
+        return AdmResponse.success();
+    }
+
+    /**
+     * 更新
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update")
+    public AdmResponse update(@RequestBody AdmCreateRequest<AdmEquipment> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmEquipment> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doUpdate(context, AdmEquipment.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 查询
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public AdmResponse query(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("component");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmEquipment.class);
+    }
+}

+ 185 - 0
src/main/java/com/persagy/proxy/adm/controller/AdmEquipmentController.java

@@ -0,0 +1,185 @@
+package com.persagy.proxy.adm.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.model.AdmEquipment;
+import com.persagy.proxy.adm.request.AdmCreateRequest;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.adm.service.IAdmEquipmentService;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import javax.ws.rs.QueryParam;
+import java.util.List;
+
+/**
+ * Adm 楼层 API
+ * @author lvxy
+ * @date 2021/8/16
+ */
+
+@RestController
+@RequestMapping("/object/equip")
+public class AdmEquipmentController {
+    @Autowired
+    private IAdmEquipmentService service;
+    @Value("${middleware.group.code}")
+    private String groupCode;
+
+    /**
+     * 统计
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/count")
+    public AdmResponse count(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("equipment");
+        request.setOnlyCount(true);
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmEquipment.class);
+    }
+
+    /**
+     * 创建
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/create")
+    public AdmResponse create(@RequestBody AdmCreateRequest<AdmEquipment> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmEquipment> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doInsert(context, AdmEquipment.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 根据ID删除
+     * @param vos
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/delete")
+    public AdmResponse delete(@QueryParam("projectId") String projectId, @RequestBody List<AdmEquipment> vos) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        service.doDelete(context, vos);
+        return AdmResponse.success();
+    }
+
+
+    /**
+     * 更新
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update")
+    public AdmResponse update(@RequestBody AdmCreateRequest<AdmEquipment> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmEquipment> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doUpdate(context, AdmEquipment.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 查询
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public AdmResponse query(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("equipment");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmEquipment.class);
+    }
+
+    /**
+     * 设备绑定的动态信息点或静态信息点
+     * @param admEquipment
+     * @return
+     * @throws Exception
+     */
+    @GetMapping("/export")
+    public AdmResponse exportInfos(@RequestBody AdmCreateRequest<AdmEquipment> admEquipment, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmEquipment> vos = CollUtil.newArrayList(admEquipment.getContent());
+        vos = service.doUpdate(context, AdmEquipment.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+
+    /**
+     * 设备上传excel识别静态信息点
+     * @param admEquipment
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/import")
+    public AdmResponse importInfos(@RequestBody AdmCreateRequest<AdmEquipment> admEquipment, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmEquipment> vos = CollUtil.newArrayList(admEquipment.getContent());
+        vos = service.doUpdate(context, AdmEquipment.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 根据项目id查询所有的设备和部件
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @GetMapping("/query-equip")
+    public AdmResponse queryEquip(@QueryParam("projectId") String projectId,
+                                  @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        //request.setName("equipment");
+        if(StringUtils.isNotEmpty(request.getFilters())){
+            request.setFilters(String.join(";",request.getFilters(),"objType in ['equipment','component']"));
+        }else{
+            request.setFilters("objType in ['equipment','component']");
+        }
+
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmEquipment.class);
+    }
+
+    /**
+     * 批量创建设备同时创建资产、创建设备和系统的关系
+     * @param admEquipment
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/create-equip-pro")
+    public AdmResponse createExt(@RequestBody AdmCreateRequest<AdmEquipment> admEquipment, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmEquipment> vos = CollUtil.newArrayList(admEquipment.getContent());
+        vos = service.doInsert(context, AdmEquipment.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+
+}

+ 146 - 0
src/main/java/com/persagy/proxy/adm/controller/AdmFloorController.java

@@ -0,0 +1,146 @@
+package com.persagy.proxy.adm.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.model.AdmFloor;
+import com.persagy.proxy.adm.request.AdmCreateRequest;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.adm.service.IAdmFloorService;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.ws.rs.QueryParam;
+import java.util.List;
+
+/**
+ * Adm 楼层 API
+ * @author lvxy
+ * @date 2021/8/16
+ */
+
+@RestController
+@RequestMapping("/object/floor")
+public class AdmFloorController {
+    @Autowired
+    private IAdmFloorService service;
+    @Value("${middleware.group.code}")
+    private String groupCode;
+
+    /**
+     * 创建
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/create")
+    public AdmResponse create(@RequestBody AdmCreateRequest<AdmFloor> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmFloor> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doInsert(context, AdmFloor.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 根据ID删除
+     * @param vos
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/delete")
+    public AdmResponse delete(@QueryParam("projectId") String projectId, @RequestBody List<AdmFloor> vos) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        service.doDelete(context, vos);
+        return AdmResponse.success();
+    }
+
+    /**
+     * 根据ID删除 - 单条删除
+     * @param vos
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/single/delete")
+    public AdmResponse deleteSingle(@QueryParam("projectId") String projectId, @RequestBody List<AdmFloor> vos) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        service.doDelete(context, vos);
+        return AdmResponse.success();
+    }
+
+    /**
+     * 更新
+     * @param admFloor
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update")
+    public AdmResponse update(@RequestBody AdmCreateRequest<AdmFloor> admFloor, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmFloor> vos = CollUtil.newArrayList(admFloor.getContent());
+        vos = service.doUpdate(context, AdmFloor.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 更新 outline
+     * @param admFloor
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update-outline")
+    public AdmResponse updateOutline(@RequestBody AdmCreateRequest<AdmFloor> admFloor, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, null, AdmCommonConstant.APP_ID);
+        List<AdmFloor> vos = CollUtil.newArrayList();
+        vos = service.doUpdate(context, AdmFloor.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+
+    /**
+     * 查询
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public AdmResponse query(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("floor");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmFloor.class);
+    }
+
+
+    /**
+     * 查询
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query-outline")
+    public AdmResponse queryOutline(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("floor");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmFloor.class);
+    }
+
+}

+ 115 - 0
src/main/java/com/persagy/proxy/adm/controller/AdmISpaceController.java

@@ -0,0 +1,115 @@
+package com.persagy.proxy.adm.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.model.AdmISpace;
+import com.persagy.proxy.adm.request.AdmCreateRequest;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.adm.service.IAdmISpaceService;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.ws.rs.QueryParam;
+import java.util.List;
+
+/**
+ * Adm 模型空间 API
+ * @author lvxy
+ * @date 2021/8/16
+ */
+
+@RestController
+@RequestMapping("/object/ispace")
+public class AdmISpaceController {
+    @Autowired
+    private IAdmISpaceService service;
+    @Value("${middleware.group.code}")
+    private String groupCode;
+
+    /**
+     * 统计
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/count")
+    public AdmResponse count(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("space");
+        request.setOnlyCount(true);
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmISpace.class);
+    }
+    /**
+     * 创建
+     * @param AdmISpace
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/create")
+    public AdmResponse create(@RequestBody AdmCreateRequest<AdmISpace> AdmISpace, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmISpace> vos = CollUtil.newArrayList(AdmISpace.getContent());
+        vos = service.doInsert(context, AdmISpace.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 根据ID删除
+     * @param vos
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/delete")
+    public AdmResponse delete(@QueryParam("projectId") String projectId, @RequestBody List<AdmISpace> vos) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        service.doDelete(context, vos);
+        return AdmResponse.success();
+    }
+
+    /**
+     * 更新分区对象信息
+     * @param AdmISpace
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update")
+    public AdmResponse update(@RequestBody AdmCreateRequest<AdmISpace> AdmISpace, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmISpace> vos = CollUtil.newArrayList(AdmISpace.getContent());
+        vos = service.doUpdate(context, AdmISpace.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 查询
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public AdmResponse query(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("space");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmISpace.class);
+    }
+
+}

+ 61 - 0
src/main/java/com/persagy/proxy/adm/controller/AdmProjectController.java

@@ -0,0 +1,61 @@
+package com.persagy.proxy.adm.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.model.AdmProject;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.adm.service.IAdmProjectService;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.ws.rs.QueryParam;
+
+/**
+ * ADM 项目 API
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@RestController
+@RequestMapping("/object/project")
+public class AdmProjectController {
+
+    @Autowired
+    private IAdmProjectService service;
+    @Value("${middleware.group.code}")
+    private String groupCode;
+
+    /**
+     * 查询项目信息
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public AdmResponse query(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("project");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmProject.class);
+    }
+
+    /**
+     * 查询项目信息-全部或指定id
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query/obj")
+    public AdmResponse queryObj(@RequestBody AdmQueryCriteria request) throws Exception {
+        return query(null, request);
+    }
+}

+ 119 - 0
src/main/java/com/persagy/proxy/adm/controller/AdmPropertyController.java

@@ -0,0 +1,119 @@
+package com.persagy.proxy.adm.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.model.AdmEquipment;
+import com.persagy.proxy.adm.model.AdmProperty;
+import com.persagy.proxy.adm.request.AdmCreateRequest;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.adm.service.IAdmPropertyService;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.ws.rs.QueryParam;
+import java.util.List;
+
+/**
+ * Adm 资产 API
+ * @author lvxy
+ * @date 2021/8/16
+ */
+
+@RestController
+@RequestMapping("/object/property")
+public class AdmPropertyController {
+    @Autowired
+    private IAdmPropertyService service;
+    @Value("${middleware.group.code}")
+    private String groupCode;
+
+    /**
+     * 创建
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/create")
+    public AdmResponse create(@RequestBody AdmCreateRequest<AdmProperty> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmProperty> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doInsert(context, AdmProperty.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 根据ID删除
+     * @param vos
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/delete")
+    public AdmResponse delete(@QueryParam("projectId") String projectId, @RequestBody List<AdmProperty> vos) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        service.doDelete(context, vos);
+        return AdmResponse.success();
+    }
+
+
+    /**
+     * 更新
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update")
+    public AdmResponse update(@RequestBody AdmCreateRequest<AdmProperty> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmProperty> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doUpdate(context, AdmProperty.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+
+    /**
+     * 查询
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public AdmResponse query(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("equipment");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmProperty.class);
+    }
+
+
+    /**
+     * 统计 已经关联岗位的资产数量("Filters": " not EquipId isNull"),未关联岗位的资产数量("Filters": " EquipId isNull")
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/count")
+    public AdmResponse count(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("equipment");
+        request.setOnlyCount(true);
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmEquipment.class);
+    }
+}

+ 226 - 0
src/main/java/com/persagy/proxy/adm/controller/AdmShaftController.java

@@ -0,0 +1,226 @@
+package com.persagy.proxy.adm.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.model.AdmShaft;
+import com.persagy.proxy.adm.request.AdmCreateRequest;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.adm.service.IAdmShaftService;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.ws.rs.QueryParam;
+import java.util.List;
+
+/**
+ * Adm 竖井 API
+ * @author lvxy
+ * @date 2021/8/16
+ */
+
+@RestController
+@RequestMapping("/object/shaft")
+public class AdmShaftController {
+    @Autowired
+    private IAdmShaftService service;
+    @Value("${middleware.group.code}")
+    private String groupCode;
+
+
+    /**
+     * 统计
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/count")
+    public AdmResponse count(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("shaft");
+        request.setOnlyCount(true);
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmShaft.class);
+    }
+
+    /**
+     * 创建
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/create")
+    public AdmResponse create(@RequestBody AdmCreateRequest<AdmShaft> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmShaft> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doInsert(context, AdmShaft.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 根据ID删除
+     * @param vos
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/delete")
+    public AdmResponse delete(@QueryParam("projectId") String projectId, @RequestBody List<AdmShaft> vos) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        service.doDelete(context, vos);
+        return AdmResponse.success();
+    }
+
+    /**
+     * 更新
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update")
+    public AdmResponse update(@RequestBody AdmCreateRequest<AdmShaft> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmShaft> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doUpdate(context, AdmShaft.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 查询
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public AdmResponse query(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("shaft");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmShaft.class);
+    }
+
+    /**
+     * 查询项目下已有的竖井类型
+     * 此方法可能会弃用
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query-shaft-functype")
+    public AdmResponse queryShFuncType(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("shaft");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmShaft.class);
+    }
+
+    /**
+     * 查询竖井信息-包含统计信息
+     * 此方法可能会弃用
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query-with-count")
+    public AdmResponse queryWithCount(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("shaft");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmShaft.class);
+    }
+
+    /**
+     * 查询关联元空间
+     * 可能移至关系
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/relate-space")
+    public AdmResponse queryRelateSp(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("shaft");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmShaft.class);
+    }
+
+    /**
+     * 查询和当前竖井有关联的业务空间
+     * shaftId 为竖井id
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/shaft-zoneSpaceBaseTable")
+    public AdmResponse queryZoneSp(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("shaft");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmShaft.class);
+    }
+
+    /**
+     * 查询和当前竖井有关联的业务空间所在建筑及楼层信息
+     * shaftId 为竖井id
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/shaft-zoneSpaceBaseTable-building")
+    public AdmResponse queryZoneSpBd(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("shaft");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmShaft.class);
+    }
+
+    /**
+     * 查询和当前竖井没有关联的业务空间
+     * shaftId 为竖井id
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/un-shaft-zoneSpaceBaseTable")
+    public AdmResponse queryUnZoneSp(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("shaft");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmShaft.class);
+    }
+
+
+}

+ 233 - 0
src/main/java/com/persagy/proxy/adm/controller/AdmSpaceController.java

@@ -0,0 +1,233 @@
+package com.persagy.proxy.adm.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.model.AdmSpace;
+import com.persagy.proxy.adm.request.AdmCreateRequest;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.adm.service.IAdmSpaceService;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.ws.rs.QueryParam;
+import java.util.List;
+
+/**
+ * Adm 空间 API
+ * @author lvxy
+ * @date 2021/8/16
+ */
+
+@RestController
+@RequestMapping("/object/zone")
+public class AdmSpaceController {
+    @Autowired
+    private IAdmSpaceService service;
+    @Value("${middleware.group.code}")
+    private String groupCode;
+
+    /**
+     * 统计
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/count")
+    public AdmResponse count(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("space");
+        request.setOnlyCount(true);
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSpace.class);
+    }
+    /**
+     * 创建
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/create")
+    public AdmResponse create(@RequestBody AdmCreateRequest<AdmSpace> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmSpace> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doInsert(context, AdmSpace.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 根据ID删除
+     * @param vos
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/delete")
+    public AdmResponse delete(@QueryParam("projectId") String projectId, @RequestBody List<AdmSpace> vos) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        service.doDelete(context, vos);
+        return AdmResponse.success();
+    }
+
+    /**
+     * 更新分区对象信息
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update")
+    public AdmResponse update(@RequestBody AdmCreateRequest<AdmSpace> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmSpace> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doUpdate(context, AdmSpace.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 查询
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public AdmResponse query(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("space");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSpace.class);
+    }
+
+    /**
+     * 查询业务空间的建筑楼层,包含受影响的空间数量
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/building-floor")
+    public AdmResponse queryFloor(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("space");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSpace.class);
+    }
+
+    /**
+     * 修改业务空间对象和建筑楼层的关系
+     * spaceId 业务空间id,id 楼层或建筑id,type 业务空间的类型
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update-fl-bd")
+    public AdmResponse updateFlBd(@RequestBody AdmCreateRequest<AdmSpace> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmSpace> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doUpdate(context, AdmSpace.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 更新分区对象信息-Outline
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update-outline")
+    public AdmResponse updateOutLine(@RequestBody AdmCreateRequest<AdmSpace> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmSpace> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doUpdate(context, AdmSpace.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 查询空间信息-outline 级联查询:建筑(building),楼层(floor),空间类型(objectType)
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query-outline")
+    public AdmResponse queryOutline(@QueryParam("projectId") String projectId,
+                                      @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("space");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSpace.class);
+    }
+
+
+    /**
+     * 获取项目下已有的空间类型
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/space-type")
+    public AdmResponse querySpaceType(@QueryParam("projectId") String projectId,
+                                 @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("space");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSpace.class);
+    }
+
+    /**
+     * 查询业务空间所有类型
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/type")
+    public AdmResponse queryType(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("space");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSpace.class);
+    }
+
+
+    /**
+     * 上传EXCEL 识别镜头信息点
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/import")
+    public AdmResponse importExcel(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("space");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSpace.class);
+    }
+
+}

+ 273 - 0
src/main/java/com/persagy/proxy/adm/controller/AdmSystemController.java

@@ -0,0 +1,273 @@
+package com.persagy.proxy.adm.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.model.AdmSystem;
+import com.persagy.proxy.adm.request.AdmCreateRequest;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.adm.service.IAdmSystemService;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotNull;
+import javax.ws.rs.QueryParam;
+import java.util.List;
+
+/**
+ * Adm 系统 API
+ * @author lvxy
+ * @date 2021/8/16
+ */
+
+@RestController
+@RequestMapping("/object/general-system")
+public class AdmSystemController {
+    @Autowired
+    private IAdmSystemService service;
+    @Value("${middleware.group.code}")
+    private String groupCode;
+
+    /**
+     * 统计
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/count")
+    public AdmResponse count(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("system");
+        request.setOnlyCount(true);
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSystem.class);
+    }
+
+    /**
+     * 创建
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/create")
+    public AdmResponse create(@RequestBody AdmCreateRequest<AdmSystem> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmSystem> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doInsert(context, AdmSystem.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 创建系统信息-处理建筑楼层
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/create-bd-fl")
+    public AdmResponse createBdFl(@RequestBody AdmCreateRequest<AdmSystem> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmSystem> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doInsert(context, AdmSystem.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 根据ID删除
+     * @param vos
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/delete")
+    public AdmResponse delete(@QueryParam("projectId") String projectId, @RequestBody List<AdmSystem> vos) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        service.doDelete(context, vos);
+        return AdmResponse.success();
+    }
+
+    /**
+     * 更新
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update")
+    public AdmResponse update(@RequestBody AdmCreateRequest<AdmSystem> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmSystem> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doUpdate(context, AdmSystem.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 系统绑定的动态信息点或静态信息点
+     * type: static(静态),iot (动态)
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @GetMapping("/export")
+    public AdmResponse exportInfos(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("system");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSystem.class);
+    }
+
+    /**
+     * 创建系统下的设备关系
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/link-equip")
+    public AdmResponse createRelateEquip(@RequestBody AdmCreateRequest<AdmSystem> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmSystem> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doInsert(context, AdmSystem.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 查询
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public AdmResponse query(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("system");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSystem.class);
+    }
+
+
+    /**
+     * 查询系统信息-系统建筑楼层一对多
+     * MajorName 专业名称 ,级联查询 系统分类名(categoryNames),系统下的设备(equipmentList),系统下的竖井(shaftList),业务空间(zoneSpaceBaseTableList)
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query-new")
+    public AdmResponse queryNew(@QueryParam("projectId") String projectId, @QueryParam("buildingId") String buildingId,
+                                @QueryParam("floorId") String floorId, @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("system");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSystem.class);
+    }
+
+
+    /**
+     * 查询系统信息-试图级联建筑楼层
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query-bdfl")
+    public AdmResponse queryUnBdFl(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("system");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSystem.class);
+    }
+
+    /**
+     * 查询没有和当前系统关联的设备
+     * id 为系统id
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/un-sys-equip")
+    public AdmResponse queryUnEquip(@QueryParam("projectId") String projectId, @NotNull  @QueryParam("sysId") String sysId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("system");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSystem.class);
+    }
+
+
+    /**
+     * 查询没有和当前系统关联的竖井
+     *  id 为系统id
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/un-sys-shaft")
+    public AdmResponse queryUnSh(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("system");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSystem.class);
+    }
+
+
+    /**
+     * 查询没有和当前系统关联的业务空间
+     * id 为系统id
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/un-sys-zoneSpaceBaseTable")
+    public AdmResponse queryUnZoneSp(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("system");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSystem.class);
+    }
+
+
+    /**
+     * 查询没有和当前空间绑定的系统
+     * 例如:prijectId=Pj4201050001,type=AirConditioningZone spaceId=Sp4201050001df2091cdf719443b80bb737aeabf0525 spaceId 为当前空间id type为当前空间类型
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/unspace-sys")
+    public AdmResponse queryUnSpSy(@QueryParam("projectId") String projectId,
+                                     @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("system");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmSystem.class);
+    }
+}

+ 134 - 0
src/main/java/com/persagy/proxy/adm/controller/AdmTenantController.java

@@ -0,0 +1,134 @@
+package com.persagy.proxy.adm.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.model.AdmTenant;
+import com.persagy.proxy.adm.request.AdmCreateRequest;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.adm.service.IAdmTenantService;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.ws.rs.QueryParam;
+import java.util.List;
+
+/**
+ * Adm 楼层 API
+ * @author lvxy
+ * @date 2021/8/16
+ */
+
+@RestController
+@RequestMapping("/object/tenant")
+public class AdmTenantController {
+    @Autowired
+    private IAdmTenantService service;
+    @Value("${middleware.group.code}")
+    private String groupCode;
+
+    /**
+     * 统计
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/count")
+    public AdmResponse count(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("tenant");
+        request.setOnlyCount(true);
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmTenant.class);
+    }
+
+    /**
+     * 创建
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/create")
+    public AdmResponse create(@RequestBody AdmCreateRequest<AdmTenant> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmTenant> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doInsert(context, AdmTenant.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 根据ID删除
+     * @param vos
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/delete")
+    public AdmResponse delete(@QueryParam("projectId") String projectId, @RequestBody List<AdmTenant> vos) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        service.doDelete(context, vos);
+        return AdmResponse.success();
+    }
+
+    /**
+     * 更新
+     * @param createRequest
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/update")
+    public AdmResponse update(@RequestBody AdmCreateRequest<AdmTenant> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        List<AdmTenant> vos = CollUtil.newArrayList(createRequest.getContent());
+        vos = service.doUpdate(context, AdmTenant.class, vos);
+        return AdmResponse.success(vos);
+    }
+
+    /**
+     * 查询
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public AdmResponse query(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("tenant");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmTenant.class);
+    }
+
+    /**
+     * 查询租户-包含统计信息
+     * 此方法可能会被废弃
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query-with-count")
+    public AdmResponse queryWithCount(@QueryParam("projectId") String projectId,
+                             @RequestBody AdmQueryCriteria request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        request.setName("tenant");
+        DmpResult<JSONArray> result = service.doQuery(context, request);
+        return AdmResponse.fromDmp(request, result, AdmTenant.class);
+    }
+
+}

+ 137 - 0
src/main/java/com/persagy/proxy/adm/controller/RelationEqInSpController.java

@@ -0,0 +1,137 @@
+package com.persagy.proxy.adm.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.adm.request.QueryCriteria;
+import com.persagy.proxy.adm.service.IAdmRelationService;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import com.persagy.proxy.common.entity.RelationDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * ADM 关系 EqInSp API
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@RestController
+@RequestMapping("/rel/eq-in-sp-base")
+public class RelationEqInSpController {
+
+    @Autowired
+    private IAdmRelationService service;
+    @Value("${middleware.group.code}")
+    private String groupCode;
+
+    /**
+     * 创建设备所在业务空间关系
+     * @param type
+     * @param param
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/link-list")
+    public AdmResponse create(@RequestParam("projectId") String projectId,
+                              @RequestParam(value = "type", required = false) String type,
+                              @RequestBody JSONObject param) throws Exception {
+        JSONArray content = param == null ? null : param.getJSONArray("content");
+        if(CollUtil.isEmpty(content)) {
+            return AdmResponse.success();
+        }
+        // 创建关系对象
+        List<RelationDTO> voList = new ArrayList<>();
+        for(int i = 0;i < content.size();i++) {
+            JSONObject para = content.getJSONObject(i);
+            String equipId = para.getString("equipId");
+            String spaceId = para.getString("spaceId");
+            if(StrUtil.isBlank(equipId) || StrUtil.isBlank(spaceId)) {
+                return AdmResponse.failure("必填项:EquipId(设备id)、SpaceId(业务空间id)");
+            }
+            // 创建关系对象 - 参考(datasyn中DataCenterSync.kt)
+            voList.add(new RelationDTO(null, "MechInArch", "Eq2Sp", type, equipId, spaceId));
+        }
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        service.doSave(context, voList);
+        return AdmResponse.success();
+    }
+
+    /**
+     * 创建设备所在业务空间关系
+     * @param type
+     * @param param
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/link-eq-sp")
+    public AdmResponse createEq(@RequestParam("projectId") String projectId,
+                                @RequestParam(value = "type", required = false) String type,
+                                @RequestBody JSONObject param) throws Exception {
+        String spaceId = param.getString("spaceId");
+        JSONArray equipIdList = param.getJSONArray("equipIdList");
+        if(StrUtil.isBlank(spaceId) || CollUtil.isEmpty(equipIdList)) {
+            return AdmResponse.failure("必填项:EquipId(设备id)、SpaceId(业务空间id)");
+        }
+        // 创建关系对象
+        List<RelationDTO> voList = new ArrayList<>();
+        for(int i = 0;i < equipIdList.size();i++) {
+            String equipId = equipIdList.getString(i);
+            if(StrUtil.isBlank(equipId)) {
+                continue;
+            }
+            // 创建关系对象 - 参考(datasyn中DataCenterSync.kt)
+            voList.add(new RelationDTO(null, "MechInArch", "Eq2Sp", type, equipId, spaceId));
+        }
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        service.doSave(context, voList);
+        return AdmResponse.success();
+    }
+
+    /**
+     * 根据对象删除设备所在业务空间关系
+     * @param type
+     * @param param
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/unlink-list")
+    public AdmResponse delete(@RequestParam String projectId,
+                              @RequestParam(value = "type", required = false) String type,
+                              @RequestBody JSONArray param) throws Exception {
+        if(CollUtil.isEmpty(param)) {
+            return AdmResponse.success();
+        }
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
+        // 组装条件
+        QueryCriteria criteria = new QueryCriteria();
+        for(int i = 0;i < param.size();i++) {
+            JSONObject para = param.getJSONObject(i);
+            String equipId = para.getString("equipId");
+            String spaceId = para.getString("spaceId");
+            if(StrUtil.isBlank(equipId) || StrUtil.isBlank(spaceId)) {
+                return AdmResponse.failure("必填项:EquipId(设备id)、SpaceId(业务空间id)");
+            }
+            ObjectNode node = JsonNodeFactory.instance.objectNode();
+            node.put("graphCode", "MechInArch");
+            node.put("relCode", "Eq2Sp");
+            node.put("relValue", type);
+            node.put("objFrom", equipId);
+            node.put("objTo", spaceId);
+            criteria.setCriteria(node);
+            service.doDelete(context, criteria);
+        }
+        return AdmResponse.success();
+    }
+}

+ 20 - 0
src/main/java/com/persagy/proxy/adm/model/AdmBIMLocation.java

@@ -0,0 +1,20 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+/**
+ * BIM模型中坐标json
+ * @author lvxy
+ * @date 2021/8/17
+ */
+@Data
+public class AdmBIMLocation {
+    /** 坐标x */
+    private Double x;
+
+    /** 坐标y */
+    private Double y;
+
+    /** 坐标z */
+    private Double z;
+}

+ 45 - 0
src/main/java/com/persagy/proxy/adm/model/AdmBuilding.java

@@ -0,0 +1,45 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ADM 建筑 实体
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@Data
+public class AdmBuilding {
+
+    /** ID */
+    private String id;
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** 项目ID */
+    private String projectId;
+    /** 平台默认二维码 */
+    private String defaultQRCode;
+    /** 建筑二维码图片 */
+    private String buildQRCode;
+    /** 对象类型 */
+    private String objectType = "building";
+    /** 信息点 */
+    private Map<String, Object> infos;
+    /** 创建时间 */
+    private Date createTime;
+    /** 最后更新日期 */
+    private Date lastUpdate;
+    /** 统计信息 */
+    private Map<String, Object> statistics;
+    /** 级联-项目 */
+    private AdmProject project;
+    /** 级联-楼层 */
+    private List<AdmProject> floor;
+}

+ 23 - 0
src/main/java/com/persagy/proxy/adm/model/AdmBuildingFloorInfo.java

@@ -0,0 +1,23 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+/**
+ *  建筑楼层信息
+ * @author lvxy
+ * @date 2021/8/17
+ */
+@Data
+public class AdmBuildingFloorInfo {
+    /** 建筑体ID */
+    private String buildID;
+
+    /** 建筑体名称 */
+    private String buildName;
+
+    /** 楼层ID */
+    private String floorID;
+
+    /** 楼层名称 */
+    private String floorName;
+}

+ 119 - 0
src/main/java/com/persagy/proxy/adm/model/AdmComponent.java

@@ -0,0 +1,119 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ADM 组件 实体 ==> Equipment
+ * @author lvxy
+ * @date 2021/8/17
+ */
+@Data
+public class AdmComponent {
+        /** 部件ID */
+        private String id;
+        /** 部件名称 */
+        private String name;
+        /** 本地编码 */
+        private String localId;
+        /** 本地名称 */
+        private String localName;
+        /** 二维码内容 */
+        private String defaultQRCode;
+        /** 设计图纸中编码 */
+        private String cadId;
+        /** RFID标识 */
+        private String rfId;
+
+
+        /** BIM模型中编码 */
+        private String bimId;
+        /** BIM构建编码 */
+        private String bimTypeId;
+        /** BIM模型中坐标 */
+        private String bimLocation;
+        /** 现场发现人员 */
+        private String findPeople;
+
+        /** 项目ID */
+        private String projectId;
+        /** 部件类型code */
+        private String classCode;
+        /** 部件所在建筑ID */
+        private String buildingId;
+        /** 部件所在楼层id */
+        private String floorId;
+        /** 部件关联的资产id */
+        private String propertyId;
+
+        /** 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;
+
+        /** 创建时间 */
+        private Date createTime;
+        /** 最后更新日期 */
+        private Date lastUpdate;
+        /** 对象类型 */
+        private String objectType = "equipment";
+
+        /** 信息点 */
+        private Map<String, Object> infos;
+        /** 统计信息 */
+        private Map<String, Object> statistics;
+        /** 资产信息实体类 */
+        private AdmProperty property;
+        /** 建筑信息实体类 */
+        private AdmBuilding building;
+        /** 楼层信息实体类 */
+        private AdmFloor floor;
+        /** 项目信息实体类 */
+        private AdmProject project;
+
+        /**BIM模型中坐标json,坐标x,y,z */
+        private AdmBIMLocation locationJson;
+        /** 级联-部件服务所在的空 */
+        private List<AdmSpace> zoneSpaceForBase;
+        /** 级联-部件服务所在的空 */
+        private List<AdmSpace> zoneSpaceInBase;
+        /** 级联-部件所在的竖井 */
+        private List<AdmShaft> shaftList;
+        /** 资产列表 */
+        private List<AdmProperty> propertyList;
+        /** 级联-部件 */
+        private List<AdmEquipment> component;
+        
+}

+ 119 - 0
src/main/java/com/persagy/proxy/adm/model/AdmEquipment.java

@@ -0,0 +1,119 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ADM 设备 实体
+ * @author lvxy
+ * @date 2021/8/17
+ */
+@Data
+public class AdmEquipment {
+    /** 设备ID */
+    private String id;
+    /** 设备名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** 二维码内容 */
+    private String defaultQRCode;
+    /** 设计图纸中编码 */
+    private String cadId;
+    /** RFID标识 */
+    private String rfId;
+
+
+    /** BIM模型中编码 */
+    private String bimId;
+    /** BIM构建编码 */
+    private String bimTypeId;
+    /** BIM模型中坐标 */
+    private String bimLocation;
+    /** 现场发现人员 */
+    private String findPeople;
+
+    /** 项目ID */
+    private String projectId;
+    /** 设备类型code */
+    private String classCode;
+    /** 设备所在建筑ID */
+    private String buildingId;
+    /** 设备所在楼层id */
+    private String floorId;
+    /** 设备关联的资产id */
+    private String propertyId;
+
+    /** 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;
+
+    /** 创建时间 */
+    private Date createTime;
+    /** 最后更新日期 */
+    private Date lastUpdate;
+    /** 对象类型 */
+    private String objectType = "equipment";
+
+    /** 信息点 */
+    private Map<String, Object> infos;
+    /** 统计信息 */
+    private Map<String, Object> statistics;
+    /** 资产信息实体类 */
+    private AdmProperty property;
+    /** 建筑信息实体类 */
+    private AdmBuilding building;
+    /** 楼层信息实体类 */
+    private AdmFloor floor;
+    /** 项目信息实体类 */
+    private AdmProject project;
+
+    /**BIM模型中坐标json,坐标x,y,z */
+    private AdmBIMLocation locationJson;
+    /** 级联-设备服务所在的空 */
+    private List<AdmSpace> zoneSpaceForBase;
+    /** 级联-设备服务所在的空 */
+    private List<AdmSpace> zoneSpaceInBase;
+    /** 级联-设备所在的竖井 */
+    private List<AdmShaft> shaftList;
+    /** 资产列表 */
+    private List<AdmProperty> propertyList;
+    /** 级联-部件 */
+    private List<AdmEquipment> component;
+
+}

+ 80 - 0
src/main/java/com/persagy/proxy/adm/model/AdmFloor.java

@@ -0,0 +1,80 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ADM 楼层 实体
+ * @author lvxy
+ * @date 2021/8/16
+ */
+@Data
+public class AdmFloor {
+    /** 楼层ID */
+    private String id;
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** 平台默认二维码 */
+    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;
+
+    /** 信息点 */
+    private Map<String, Object> infos;
+    /** 级联-建筑 */
+    private AdmBuilding building;
+    /** 级联-项目 */
+    private AdmProject project;
+
+    /** 级联-贯通关系 */
+    private List<AdmFloor> floorThroughList;
+
+    /** 模型文件id */
+    private String modelId;
+
+    /** 楼层选定区域轮廓线 */
+    private List<AdmPointPosition> outline;
+
+    /** 数量 */
+    private String count;
+
+    /** 自定义信息点 */
+    private Map<String, Object> properties;
+
+    /** 二维码图片 */
+    private String qrcodePic;
+
+    /** 创建时间 */
+    private Date createTime;
+    /** 最后更新日期 */
+    private Date lastUpdate;
+
+    /** 统计信息 */
+    private Map<String, Object> statistics;
+
+    /** 对象类型 */
+    private String objectType = "floor";
+    /** 楼层类型code */
+    private String classCode = "floor";
+}

+ 130 - 0
src/main/java/com/persagy/proxy/adm/model/AdmISpace.java

@@ -0,0 +1,130 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ADM 元空间 实体
+ * @author lvxy
+ * @date 2021/8/17
+ */
+@Data
+public class AdmISpace {
+
+    /** 空间ID */
+    private String id;
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+
+    /** 项目ID */
+    private String projectId;
+    /** 建筑ID */
+    private String buildingId;
+    /** 楼层ID */
+    private String floorId;
+    /** 平台二维码 */
+    private String defaultQRCode;
+    /** BIM模型中编码 */
+    private String bimId;
+
+    /** 楼层选定区域轮廓线 */
+    private ArrayList<ArrayList<ArrayList<AdmPointPosition>>> outline;
+    /** 轮廓线2 */
+    private ArrayList<ArrayList<ArrayList<AdmPointPosition>>> 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 = "ispace";
+
+    /** 二维码图片 */
+    private String qrcodePic;
+    /** 创建时间 */
+    private Date createTime;
+    /** 最后更新日期 */
+    private Date lastUpdate;
+
+    /** 信息点 */
+    private Map<String, Object> infos;
+    /** 统计信息 */
+    private Map<String, Object> statistics;
+
+    /** 级联-设备 */
+    private List<AdmEquipment> equipment;
+    /** 级联-元空间 */
+    //@SCascade(table="relationship.r_sp2si", idColumn="sp_id", childIdColumn="si_id")
+    //private List<AdmSpace> zoneIspace;
+    /** 级联-系统 */
+    private List<AdmSystem> generalSystem;
+    /** 级联-服务于空间的设备 */
+    private List<AdmEquipment> equipmentFor;
+    /** 建筑信息实体类 */
+    private AdmBuilding building;
+    /** 楼层信息实体类 */
+    private AdmFloor floor;
+    /** 级联-建筑 */
+    private List<AdmBuilding> buildingList;
+    /** 级联-楼层 */
+    private List<AdmFloor> floorList;
+    /** 资产列表 */
+    private List<AdmProperty> propertyList;
+    /** 级联-部件 */
+    private List<AdmEquipment> component;
+
+    /** 空间轮廓线 */
+    //private T spaceOutline;
+    /** 对象类型 */
+    private String objectType = "space";
+}

+ 20 - 0
src/main/java/com/persagy/proxy/adm/model/AdmPointPosition.java

@@ -0,0 +1,20 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+/**
+ * 点位X 、Y
+ * @author lvxy
+ * @date 2021/8/17
+ */
+@Data
+public class AdmPointPosition {
+    /** 坐标x */
+    private Double x;
+
+    /** 坐标y */
+    private Double y;
+
+    /** 坐标z */
+    private Double z;
+}

+ 41 - 0
src/main/java/com/persagy/proxy/adm/model/AdmProject.java

@@ -0,0 +1,41 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * ADM 项目 实体
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@Data
+public class AdmProject {
+    /** 项目ID */
+    private String id;
+    /** 项目名称 */
+    private String name;
+    /** 项目本地编码 */
+    private String localId;
+    /** 项目本地名称 */
+    private String localName;
+    /** 项目介绍 */
+    private String introduction;
+    /** 集团编码 */
+    private String groupCode;
+    /** 商业层数 */
+    private String businessFloorNum;
+    /** 办公层数 */
+    private String officeFloorNum;
+    /** 对象类型 */
+    private String objectType;
+    /** 信息点 */
+    private Map<String, Object> infos;
+    /** 创建时间 */
+    private Date createTime;
+    /** 最后更新日期 */
+    private Date lastUpdate;
+    /** 统计信息 */
+    private Map<String, Object> statistics;
+}

+ 102 - 0
src/main/java/com/persagy/proxy/adm/model/AdmProperty.java

@@ -0,0 +1,102 @@
+
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ADM 资产实体
+ *
+ * @author lvxy
+ * @date 2021/8/17
+ */
+
+@Data
+public class AdmProperty {
+
+    /** 资产id */
+    private String id;
+    /** 资产名称 */
+    private String name;
+    /** 资产本地编码 */
+    private String localId;
+    /** 资产本地名称 */
+    private String localName;
+    /** 资产二维码照片 */
+    private String qrCode;
+    /** 设计图纸中编码 */
+    private String cadId;
+    /** BIM模型中编码 */
+    private String bimId;
+    /** BIM模型中坐标 */
+    private String bimLocation;
+    /** BIM模型中坐标 */
+    private AdmBIMLocation locationJson;
+    /** 项目id */
+    private String projectId;
+    /** 资产类型code */
+    private String family;
+    /** 资产所在建筑id */
+    private String buildingId;
+    /** 资产所在楼层id */
+    private String floorId;
+    /** 资产关联设备id */
+    private String equipId;
+    /** 设备序号 */
+    private String equipSerial;
+    /** 任务状态 待验证1、已验证0、未找到-1  */
+    private Integer taskState;
+    /** 设备部件标志位,1设备,2部件 */
+    private String type;
+    /** 信息点 */
+    private Map<String, Object> infos;
+    /** 对象类型 */
+    private String objectType = "equipment";
+    /** 位置信息 */
+    private String position;
+    /** 贴码状态 */
+    private Long codeType;
+    /** 选择状态 */
+    private String checked;
+    /** 空间id */
+    private String spaceId;
+    /** 备注 */
+    private String note;
+    /** 点位id */
+    private String pointId;
+    /** 区分是哪里创建的资产 app  ,web */
+    private String source;
+    /** 模型文件id */
+    private String modelId;
+    /** 方案id */
+    private String schemeId;
+    /** 设备 */
+    private AdmEquipment equipment;
+    /** 建筑   table  对应关系表   idColumn 对应 本类的id    childIdColumn 级联对象的关系id */
+    private AdmBuilding building;
+    /** 级联-楼层   table  对应关系表   idColumn 对应 本类的id    childIdColumn 级联对象的关系id */
+    private AdmFloor floor;
+    /** 级联-项目 */
+    private AdmProject project;
+    /** 级联-资产设备族 */
+    private List<AdmProperty> equipFamilyList;
+    /** 级联-资产设备族名称 */
+    private AdmProperty familyName;
+    /** 级联-资产所在的空间的 */
+    private List<AdmSpace> zoneSpaceInBase;
+    /** 距离*/
+    private Double distance;
+
+    /** 统计信息 */
+    private Map<String, Object> statistics;
+    /** 创建时间 */
+    private Date createTime;
+    /** 最后更新日期 */
+    private Date lastUpdate;
+
+    /** 类型code */
+    private String classCode = "property";
+}

+ 68 - 0
src/main/java/com/persagy/proxy/adm/model/AdmShaft.java

@@ -0,0 +1,68 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ADM 竖井 实体
+ * @author lvxy
+ * @date 2021/8/17
+ */
+@Data
+public class AdmShaft {
+
+    /** 竖井id */
+    private String id;
+    /** 竖井名称 */
+    private String name;
+    /** 竖井本地编码 */
+    private String localId;
+    /** 竖井本地名称 */
+    private String localName;
+    /** BIM模型中编码 */
+    private String bimId;
+    /** 设计图纸中编码 */
+    private String cadId;
+    /** 二维码图片 */
+    private String qRCodePic;
+    /** 二维码内容 */
+    private String defaultQRCode;
+    /** 项目id */
+    private String projectId;
+    /** BIM模型中坐标 */
+    private String bimLocation;
+    /** 竖井顺序码 */
+    private Integer shaftSequenceId;
+    /** 功能类型 */
+    private String shaftfunctype;
+    /** 信息点 */
+    private Map<String, Object> infos;
+
+    /** BIM模型中轮廓坐标 */
+    private List<AdmPointPosition> outline;
+    /** 对象类型 */
+    private String objectType = "shaft";
+    /** 级联-竖井内的设备 */
+    private List<AdmEquipment> equipmentList;
+    /** 级联-竖井内的建筑 */
+    private List<AdmBuilding> buildingList;
+    /** 级联-竖井内的系统 */
+    private List<AdmSystem> systemList;
+    /** 贯通关系   self = true  同样的对象查询时 id可以互相调换查询   */
+    private List<AdmShaft> shaftThroughList;
+
+    /** 竖井内的业务空间  self = true  同样的对象查询时 id可以互相调换查询   */
+    private List<AdmSpace> spaceList;
+    /** 统计信息 */
+    private Map<String, Object> statistics;
+    /** 创建时间 */
+    private Date createTime;
+    /** 最后更新日期 */
+    private Date lastUpdate;
+
+    /** 对象类型code */
+    private String classCode;
+}

+ 130 - 0
src/main/java/com/persagy/proxy/adm/model/AdmSpace.java

@@ -0,0 +1,130 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ADM 空间 实体
+ * @author lvxy
+ * @date 2021/8/17
+ */
+@Data
+public class AdmSpace {
+
+    /** 空间ID */
+    private String id;
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+
+    /** 项目ID */
+    private String projectId;
+    /** 建筑ID */
+    private String buildingId;
+    /** 楼层ID */
+    private String floorId;
+    /** 平台二维码 */
+    private String defaultQRCode;
+    /** BIM模型中编码 */
+    private String bimId;
+
+    /** 楼层选定区域轮廓线 */
+    private ArrayList<ArrayList<ArrayList<AdmPointPosition>>> outline;
+    /** 轮廓线2 */
+    private ArrayList<ArrayList<ArrayList<AdmPointPosition>>> 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;
+    /** 创建时间 */
+    private Date createTime;
+    /** 最后更新日期 */
+    private Date lastUpdate;
+
+    /** 信息点 */
+    private Map<String, Object> infos;
+    /** 统计信息 */
+    private Map<String, Object> statistics;
+
+    /** 级联-设备 */
+    private List<AdmEquipment> equipment;
+    /** 级联-元空间 */
+    //@SCascade(table="relationship.r_sp2si", idColumn="sp_id", childIdColumn="si_id")
+    //private List<AdmSpace> zoneIspace;
+    /** 级联-系统 */
+    private List<AdmSystem> generalSystem;
+    /** 级联-服务于空间的设备 */
+    private List<AdmEquipment> equipmentFor;
+    /** 建筑信息实体类 */
+    private AdmBuilding building;
+    /** 楼层信息实体类 */
+    private AdmFloor floor;
+    /** 级联-建筑 */
+    private List<AdmBuilding> buildingList;
+    /** 级联-楼层 */
+    private List<AdmFloor> floorList;
+    /** 资产列表 */
+    private List<AdmProperty> propertyList;
+    /** 级联-部件 */
+    private List<AdmEquipment> component;
+
+    /** 空间轮廓线 */
+    //private T spaceOutline;
+    /** 对象类型 */
+    private String objectType = "space";
+}

+ 70 - 0
src/main/java/com/persagy/proxy/adm/model/AdmSystem.java

@@ -0,0 +1,70 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ADM 系统实体
+ * @author lvxy
+ * @date 2021/8/17
+ */
+@Data
+public class AdmSystem {
+
+    /** ID */
+    private String id;
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** 设计图纸中编码 */
+    private String cadId;
+    /** 系统分类 */
+    private String classCode;
+
+    /** BIM模型中编码 */
+    private String bimId;
+
+    /** 项目ID */
+    private String projectId;
+    /** 建筑ID */
+    private String buildingId;
+    /** 楼层ID */
+    private String floorId;
+    /** 设备数量 */
+    private String count;
+    /** 设备分类名 */
+    private String categoryName;
+    /** 设备分类名 */
+    private AdmSystemCategory categoryNames;
+
+    /** 对象类型 */
+    private String objectType = "system";
+    /** 创建时间 */
+    private Date createTime;
+    /** 最后更新日期 */
+    private Date lastUpdate;
+
+    /** 信息点 */
+    private Map<String, Object> infos;
+    /** 统计信息 */
+    private Map<String, Object> statistics;
+
+
+    /** 级联-设备 */
+    private List<AdmEquipment> equipmentList;
+    /** 级联-空间 */
+    private List<AdmSpace> zoneSpaceBaseTableList;
+       /** 级联-楼层 */
+    private List<AdmFloor> floorList;
+    /** 级联-建筑 */
+    private List<AdmBuilding> buildingList;
+
+    /** 建筑楼层 */
+    private List<AdmBuildingFloorInfo> buildingFloorInfoList;
+}

+ 20 - 0
src/main/java/com/persagy/proxy/adm/model/AdmSystemCategory.java

@@ -0,0 +1,20 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+/**
+ * 系统分类
+ * @author lvxy
+ * @date 2021/8/17
+ */
+@Data
+public class AdmSystemCategory {
+    /** 设备分类编码 */
+    private String code;
+
+    /** 设备分类名字*/
+    private String  categoryName;
+
+    /** 项目 id */
+    private String  projectI;
+}

+ 28 - 0
src/main/java/com/persagy/proxy/adm/model/AdmTaskPic.java

@@ -0,0 +1,28 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+/**
+ * @author lvxy
+ * @date 2021/8/17
+ */
+@Data
+public class AdmTaskPic {
+    /** id */
+    private String id;
+
+    /** 名称 */
+    private String name;
+
+    /** key */
+    private String key;
+
+    /** 类型 */
+    private String type;
+
+    /** 系统id */
+    private String systemId;
+
+    /** 创建时间 */
+    private String createTime;
+}

+ 44 - 0
src/main/java/com/persagy/proxy/adm/model/AdmTenant.java

@@ -0,0 +1,44 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ADM 租户 实体
+ * @author lvxy
+ * @date 2021/8/17
+ */
+@Data
+public class AdmTenant {
+    /** 租户id */
+    private String id;
+    /** 租户名称 */
+    private String name;
+    /** 租户本地编码 */
+    private String localId;
+    /** 租户本地名称 */
+    private String localName;
+    /** 租户本地编码2 */
+    private String localId2;
+    /** 租户本地名称2 */
+    private String localName2;
+    /** 项目id */
+    private String projectId;
+    /** 信息点 */
+    private Map<String, Object> infos;
+    /** 对象类型 */
+    private String objectType = "tenant";
+    /** 租户租赁的租户业务空间  self = true  同样的对象查询时 id可以互相调换查询   */
+    private List<AdmSpace> zoneTenantList;
+    /** 租户租赁的默认业务空间  self = true  同样的对象查询时 id可以互相调换查询   */
+    private List<AdmSpace> zoneGeneraltList;
+    /** 统计信息 */
+    private Map<String, Object> statistics;
+    /** 创建时间 */
+    private Date createTime;
+    /** 最后更新日期 */
+    private Date lastUpdate;
+}

+ 20 - 0
src/main/java/com/persagy/proxy/adm/request/AdmCreateRequest.java

@@ -0,0 +1,20 @@
+package com.persagy.proxy.adm.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * ADM通用新增参数
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@Data
+public class AdmCreateRequest<T> {
+    /** 如果对象在库中已存在,是否执行合并操作 */
+    private Boolean isMerge = false;
+    /** 更新内容 */
+    private List<T> content;
+    /** 级联对象列表 */
+    private List<Object> cascade;
+}

+ 37 - 0
src/main/java/com/persagy/proxy/adm/request/AdmQueryCriteria.java

@@ -0,0 +1,37 @@
+package com.persagy.proxy.adm.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * ADM通用查询条件
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@Data
+public class AdmQueryCriteria {
+
+    /** 可取得的最大记录数 */
+    private Integer maxRow = 1000;
+    /** 第几页(从1开始) */
+    private Integer pageNumber;
+    /** 每页记录数(0 < 记录数 < 1000) */
+    private Integer pageSize;
+    /** 查询条件 */
+    private String filters;
+    /** 排序条件 */
+    private String orders;
+    /** 去除重复记录 */
+    private Boolean distinct;
+    /** 级联对象属性名 - 为级联对象时有值 */
+    private String name;
+    /** 字段影射,空为查询所有字段 */
+    private List<String> projection;
+    /** 级联对象列表 */
+    private List<AdmQueryCriteria> cascade;
+    /** 分组统计 */
+    private AdmQueryGroup group;
+    /** 是否只统计总数 */
+    private boolean onlyCount = false;
+}

+ 28 - 0
src/main/java/com/persagy/proxy/adm/request/AdmQueryGroup.java

@@ -0,0 +1,28 @@
+package com.persagy.proxy.adm.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * ADM通用查询条件 - 分组条件
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@Data
+public class AdmQueryGroup {
+
+    /** 统计数量 */
+    private Boolean count;
+    /** 平均值 */
+    private List<String> avgList;
+    /** 最大值 */
+    private List<String> maxList;
+    /** 最小值 */
+    private List<String> minList;
+    /** 名称 */
+    private List<String> nameList;
+    /** 汇总值 */
+    private List<String> sumList;
+
+}

+ 67 - 0
src/main/java/com/persagy/proxy/adm/request/AdmResponse.java

@@ -0,0 +1,67 @@
+package com.persagy.proxy.adm.request;
+
+import com.alibaba.fastjson.JSONArray;
+import com.persagy.proxy.adm.utils.AdmEntityTransferUtil;
+import com.persagy.proxy.common.entity.DmpResult;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * ADM 通用返回结果
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class AdmResponse {
+    private final static String SUCCESS = "success";
+    private final static String FAILURE = "failure";
+    /** 结果 */
+    private String result;
+    /** 消息 */
+    private String message;
+    /** 符合条件的总记录数 */
+    private Long total;
+    /** 页码 */
+    private Integer pageNumber;
+    /** 每页条数 */
+    private Integer pageSize;
+    /** 查询到的数据列表 */
+    private List<?> content;
+
+    public static AdmResponse success() {
+        return new AdmResponse(SUCCESS, null, null, null, null, null);
+    }
+
+    public static AdmResponse failure(String message) {
+        return new AdmResponse(FAILURE, message, null, null, null, null);
+    }
+
+    public static AdmResponse success(List<?> content) {
+        return new AdmResponse(SUCCESS, null, null, null, null, content);
+    }
+
+    /**
+     * 从数据中台结果转换
+     * @param admRequest
+     * @param dmpResult
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> AdmResponse fromDmp(AdmQueryCriteria admRequest, DmpResult<JSONArray> dmpResult, Class<T> clazz) {
+        if(!DmpResult.SUCCESS.equals(dmpResult.getResult())) {
+            return failure("调用中台查询接口出错:" + dmpResult.getMessage());
+        }
+        // 转换为结果
+        List<T> admVOs = AdmEntityTransferUtil.toAdmMultiEntity(dmpResult.getData(), clazz);
+        Long total = dmpResult.getCount() == null ? null : dmpResult.getCount().longValue();
+        Integer pageNo = admRequest == null ? null : admRequest.getPageNumber();
+        Integer pageSize = admRequest == null ? null : admRequest.getPageSize();
+        return new AdmResponse(SUCCESS, null, total, pageNo, pageSize, admVOs);
+    }
+}

+ 16 - 0
src/main/java/com/persagy/proxy/adm/request/OrderItem.java

@@ -0,0 +1,16 @@
+package com.persagy.proxy.adm.request;
+
+import lombok.Data;
+
+/**
+ * 数据中台查询条件 - 排序条件
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@Data
+public class OrderItem {
+    /** 排序列 */
+    private String column;
+    /** 是否升序 */
+    private boolean asc = true;
+}

+ 59 - 0
src/main/java/com/persagy/proxy/adm/request/QueryCriteria.java

@@ -0,0 +1,59 @@
+package com.persagy.proxy.adm.request;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 通用查询参数 - 仅用于接收参数
+ * 兼容数据中台查询规则,将数据中台查询条件转换为MyBatisPlus查询条件
+ * <pre>
+ * {
+ *     "page": 1,
+ *     "size": 10,
+ *     "onlyCount": false,
+ *     "criteria": {
+ *         "name": "zhangsan",
+ *         "name": [ "zhangsan", "lisi" ],
+ *         "age": {
+ *             "$gt": 18,
+ *             "$lt": 35
+ *         },
+ *         "gender": {
+ *             "$null": false
+ *         }
+ *     },
+ *     "orders": [
+ *            {
+ *     		 	"column": "name",
+ *     		 	"asc": false
+ *            }
+ *     ],
+ *     "withColumns": [
+ *     		"name", "age"
+ *     ]
+ * }
+ * </pre>
+ * @author yaoll
+ * @date 2020-09-04
+ */
+@Data
+public class QueryCriteria {
+
+    /** 分页页码,从 1 开始 */
+    private Long page;
+    /** 每页行数 */
+    private Long size;
+    /** 是否只统计总数 */
+    private boolean onlyCount = false;
+    /** 是否不统计总数 */
+    private boolean withoutCount = false;
+    /** 查询条件 */
+    private ObjectNode criteria;
+    /** 排序条件 */
+    private List<OrderItem> orders;
+    /** 额外返回的扩展字段清单 */
+    private Set<String> withColumns;
+}

+ 49 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmBaseService.java

@@ -0,0 +1,49 @@
+package com.persagy.proxy.adm.service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+
+import java.util.List;
+
+/**
+ * ADM 通用接口
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+public interface IAdmBaseService<T> {
+
+    /**
+     * 查询
+     * @param request
+     * @return
+     */
+    DmpResult<JSONArray> doQuery(InstanceUrlParam context, AdmQueryCriteria request);
+
+    /**
+     * 新增
+     * @param context
+     * @param clazz
+     * @param voList
+     * @return
+     */
+    List<T> doInsert(InstanceUrlParam context, Class<T> clazz, List<T> voList);
+
+    /**
+     * 修改
+     * @param context
+     * @param clazz
+     * @param voList
+     * @return
+     */
+    List<T> doUpdate(InstanceUrlParam context, Class<T> clazz, List<T> voList);
+
+    /**
+     * 删除
+     * @param context
+     * @param voList
+     * @return
+     */
+    void doDelete(InstanceUrlParam context, List<T> voList);
+}

+ 11 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmBuildingService.java

@@ -0,0 +1,11 @@
+package com.persagy.proxy.adm.service;
+
+import com.persagy.proxy.adm.model.AdmBuilding;
+
+/**
+ * ADM 建筑 接口类
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+public interface IAdmBuildingService extends IAdmBaseService<AdmBuilding> {
+}

+ 11 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmComponentService.java

@@ -0,0 +1,11 @@
+package com.persagy.proxy.adm.service;
+
+import com.persagy.proxy.adm.model.AdmComponent;
+
+/**
+ * ADM 组件 接口
+ * @author lvxy
+ * @date 2021/8/19
+ */
+public interface IAdmComponentService extends IAdmBaseService<AdmComponent>{
+}

+ 11 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmEquipmentService.java

@@ -0,0 +1,11 @@
+package com.persagy.proxy.adm.service;
+
+import com.persagy.proxy.adm.model.AdmEquipment;
+
+/**
+ * ADM 设备接口
+ * @author lvxy
+ * @date 2021/8/18
+ */
+public interface IAdmEquipmentService extends IAdmBaseService<AdmEquipment>{
+}

+ 11 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmFloorService.java

@@ -0,0 +1,11 @@
+package com.persagy.proxy.adm.service;
+
+import com.persagy.proxy.adm.model.AdmFloor;
+
+/**
+ * ADM 楼层 接口类
+ * @author lvxy
+ * @date 2021/8/16
+ */
+public interface IAdmFloorService extends IAdmBaseService<AdmFloor>{
+}

+ 11 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmISpaceService.java

@@ -0,0 +1,11 @@
+package com.persagy.proxy.adm.service;
+
+import com.persagy.proxy.adm.model.AdmISpace;
+
+/**
+ * 模型空间接口
+ * @author lvxy
+ * @date 2021/8/24
+ */
+public interface IAdmISpaceService extends IAdmBaseService<AdmISpace>{
+}

+ 12 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmProjectService.java

@@ -0,0 +1,12 @@
+package com.persagy.proxy.adm.service;
+
+import com.persagy.proxy.adm.model.AdmProject;
+
+/**
+ * ADM 项目 接口类
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+public interface IAdmProjectService extends IAdmBaseService<AdmProject> {
+
+}

+ 11 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmPropertyService.java

@@ -0,0 +1,11 @@
+package com.persagy.proxy.adm.service;
+
+import com.persagy.proxy.adm.model.AdmProperty;
+
+/**
+ * ADM 资产 接口
+ * @author lvxy
+ * @date 2021/8/18
+ */
+public interface IAdmPropertyService extends IAdmBaseService<AdmProperty>{
+}

+ 29 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmRelationService.java

@@ -0,0 +1,29 @@
+package com.persagy.proxy.adm.service;
+
+import com.persagy.proxy.adm.request.QueryCriteria;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import com.persagy.proxy.common.entity.RelationDTO;
+
+import java.util.List;
+
+/**
+ * ADM 关系 通用 Service
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+public interface IAdmRelationService {
+
+    /**
+     * 保存
+     * @param param 上下文
+     * @param voList 关系对象数组 - 在Controller中直接构建好,参考(datasyn中DataCenterSync.kt)
+     */
+    void doSave(InstanceUrlParam param, List<RelationDTO> voList);
+
+    /**
+     * 删除
+     * @param param 上下文
+     * @param criteria
+     */
+    void doDelete(InstanceUrlParam param, QueryCriteria criteria);
+}

+ 11 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmShaftService.java

@@ -0,0 +1,11 @@
+package com.persagy.proxy.adm.service;
+
+import com.persagy.proxy.adm.model.AdmShaft;
+
+/**
+ * ADM 竖井接口
+ * @author lvxy
+ * @date 2021/8/18
+ */
+public interface IAdmShaftService extends IAdmBaseService<AdmShaft>{
+}

+ 11 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmSpaceService.java

@@ -0,0 +1,11 @@
+package com.persagy.proxy.adm.service;
+
+import com.persagy.proxy.adm.model.AdmSpace;
+
+/**
+ * ADM 空间 接口
+ * @author lvxy
+ * @date 2021/8/18
+ */
+public interface IAdmSpaceService extends IAdmBaseService<AdmSpace>{
+}

+ 11 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmSystemService.java

@@ -0,0 +1,11 @@
+package com.persagy.proxy.adm.service;
+
+import com.persagy.proxy.adm.model.AdmSystem;
+
+/**
+ * ADM 系统 接口
+ * @author lvxy
+ * @date 2021/8/18
+ */
+public interface IAdmSystemService extends IAdmBaseService<AdmSystem>{
+}

+ 11 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmTenantService.java

@@ -0,0 +1,11 @@
+package com.persagy.proxy.adm.service;
+
+import com.persagy.proxy.adm.model.AdmTenant;
+
+/**
+ * ADM 租户 接口
+ * @author lvxy
+ * @date 2021/8/18
+ */
+public interface IAdmTenantService extends IAdmBaseService<AdmTenant>{
+}

+ 134 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AbstractAdmBaseServiceImpl.java

@@ -0,0 +1,134 @@
+package com.persagy.proxy.adm.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.QueryCriteria;
+import com.persagy.proxy.adm.service.IAdmBaseService;
+import com.persagy.proxy.adm.utils.AdmEntityTransferUtil;
+import com.persagy.proxy.adm.utils.AdmQueryCriteriaHelper;
+import com.persagy.proxy.common.client.DmpRwdClient;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+/**
+ * ADM 抽象实现类
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@Slf4j
+public class AbstractAdmBaseServiceImpl<T> implements IAdmBaseService<T> {
+
+    @Autowired
+    private DmpRwdClient rwdClient;
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    /**
+     * 查询
+     * @param request
+     * @return
+     */
+    @Override
+    public DmpResult<JSONArray> doQuery(InstanceUrlParam context, AdmQueryCriteria request) {
+        // 转换为数据中台查询条件
+        QueryCriteria dmpRequest = AdmQueryCriteriaHelper.toDmpCriteria(request);
+        // 转换参数
+        JSONObject para = null;
+        try {
+            String paraStr = objectMapper.writeValueAsString(dmpRequest);
+            para = JSONObject.parseObject(paraStr);
+        } catch (JsonProcessingException e) {
+            log.error(e.getMessage(), e);
+            return null;
+        }
+        // 调用中台查询
+        return rwdClient.queryObject(context, para);
+    }
+
+    /**
+     * 拷贝属性
+     * @param dmpData 数据中台对象
+     * @param srcProp 数据中台属性名
+     * @param desProp 对应的数据中心属性名
+     */
+    private void copyProperty(JSONObject dmpData, String srcProp, String desProp) {
+        Object value = dmpData.get(srcProp);
+        if(value == null) {
+            return;
+        }
+        dmpData.put(desProp, value);
+        dmpData.remove(srcProp);
+    }
+
+    /**
+     * 新增
+     * @param context
+     * @param clazz
+     * @param voList
+     * @return
+     */
+    @Override
+    public List<T> doInsert(InstanceUrlParam context, Class<T> clazz, List<T> voList) {
+        if(CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        ArrayNode vos = AdmEntityTransferUtil.toDmpMultiEntity(voList);
+        // 调用中台新增
+        DmpResult<JSONArray> response = rwdClient.createObject(context, JSONArray.parseArray(vos.toString()));
+        if(!DmpResult.SUCCESS.equals(response.getResult())) {
+            throw new RuntimeException("调用中台查询接口出错:" + response.getMessage());
+        }
+        // 转换为结果
+        return AdmEntityTransferUtil.toAdmMultiEntity(response.getData(), clazz);
+    }
+
+    /**
+     * 修改
+     * @param context
+     * @param clazz
+     * @param voList
+     * @return
+     */
+    @Override
+    public List<T> doUpdate(InstanceUrlParam context, Class<T> clazz, List<T> voList) {
+        if(CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        ArrayNode vos = AdmEntityTransferUtil.toDmpMultiEntity(voList);
+        // 调用中台修改
+        DmpResult<cn.hutool.json.JSONArray> response = rwdClient.updateObject(context, JSONArray.parseArray(vos.toString()));
+        if(!DmpResult.SUCCESS.equals(response.getResult())) {
+            throw new RuntimeException("调用中台查询接口出错:" + response.getMessage());
+        }
+        // 转换为结果
+        return AdmEntityTransferUtil.toAdmMultiEntity(response.getData(), clazz);
+    }
+
+    /**
+     * 删除
+     * @param context
+     * @param voList
+     * @return
+     */
+    @Override
+    public void doDelete(InstanceUrlParam context, List<T> voList) {
+        if(CollUtil.isEmpty(voList)) {
+            return;
+        }
+        List<String> idList = CollUtil.getFieldValues(voList, "id", String.class);
+        // 调用中台修改
+        DmpResult response = rwdClient.deleteObject(context, idList);
+        if(!DmpResult.SUCCESS.equals(response.getResult())) {
+            throw new RuntimeException("调用中台查询接口出错:" + response.getMessage());
+        }
+    }
+}

+ 15 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmBuildingServiceImpl.java

@@ -0,0 +1,15 @@
+package com.persagy.proxy.adm.service.impl;
+
+import com.persagy.proxy.adm.model.AdmBuilding;
+import com.persagy.proxy.adm.service.IAdmBuildingService;
+import org.springframework.stereotype.Service;
+
+/**
+ * ADM 建筑 实现类
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@Service
+public class AdmBuildingServiceImpl extends AbstractAdmBaseServiceImpl<AdmBuilding> implements IAdmBuildingService {
+
+}

+ 14 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmComponentServiceImpl.java

@@ -0,0 +1,14 @@
+package com.persagy.proxy.adm.service.impl;
+
+import com.persagy.proxy.adm.model.AdmComponent;
+import com.persagy.proxy.adm.service.IAdmComponentService;
+import org.springframework.stereotype.Service;
+
+/**
+ * ADM 组件 服务
+ * @author lvxy
+ * @date 2021/8/19
+ */
+@Service
+public class AdmComponentServiceImpl extends AbstractAdmBaseServiceImpl<AdmComponent> implements IAdmComponentService {
+}

+ 14 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmEquipmentServiceImpl.java

@@ -0,0 +1,14 @@
+package com.persagy.proxy.adm.service.impl;
+
+import com.persagy.proxy.adm.model.AdmEquipment;
+import com.persagy.proxy.adm.service.IAdmEquipmentService;
+import org.springframework.stereotype.Service;
+
+/**
+ * ADM 设备 实现
+ * @author lvxy
+ * @date 2021/8/18
+ */
+@Service
+public class AdmEquipmentServiceImpl extends AbstractAdmBaseServiceImpl<AdmEquipment> implements IAdmEquipmentService {
+}

+ 14 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmFloorServiceImpl.java

@@ -0,0 +1,14 @@
+package com.persagy.proxy.adm.service.impl;
+
+import com.persagy.proxy.adm.model.AdmFloor;
+import com.persagy.proxy.adm.service.IAdmFloorService;
+import org.springframework.stereotype.Service;
+
+/**
+ * ADM 楼层 实现类
+ * @author lvxy
+ * @date 2021/8/16
+ */
+@Service
+public class AdmFloorServiceImpl extends AbstractAdmBaseServiceImpl<AdmFloor> implements IAdmFloorService {
+}

+ 14 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmISpaceServiceImpl.java

@@ -0,0 +1,14 @@
+package com.persagy.proxy.adm.service.impl;
+
+import com.persagy.proxy.adm.model.AdmISpace;
+import com.persagy.proxy.adm.service.IAdmISpaceService;
+import org.springframework.stereotype.Service;
+
+/**
+ * ADM 模型空间 实现类
+ * @author lvxy
+ * @date 2021/8/18
+ */
+@Service
+public class AdmISpaceServiceImpl extends AbstractAdmBaseServiceImpl<AdmISpace> implements IAdmISpaceService {
+}

+ 15 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmProjectServiceImpl.java

@@ -0,0 +1,15 @@
+package com.persagy.proxy.adm.service.impl;
+
+import com.persagy.proxy.adm.model.AdmProject;
+import com.persagy.proxy.adm.service.IAdmProjectService;
+import org.springframework.stereotype.Service;
+
+/**
+ * ADM 项目 实现类
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@Service
+public class AdmProjectServiceImpl extends AbstractAdmBaseServiceImpl<AdmProject> implements IAdmProjectService {
+
+}

+ 14 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmPropertyServiceImpl.java

@@ -0,0 +1,14 @@
+package com.persagy.proxy.adm.service.impl;
+
+import com.persagy.proxy.adm.model.AdmProperty;
+import com.persagy.proxy.adm.service.IAdmPropertyService;
+import org.springframework.stereotype.Service;
+
+/**
+ * ADM 资产 实现类
+ * @author lvxy
+ * @date 2021/8/18
+ */
+@Service
+public class AdmPropertyServiceImpl extends AbstractAdmBaseServiceImpl<AdmProperty> implements IAdmPropertyService {
+}

+ 57 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmRelationServiceImpl.java

@@ -0,0 +1,57 @@
+package com.persagy.proxy.adm.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.persagy.proxy.adm.request.QueryCriteria;
+import com.persagy.proxy.adm.service.IAdmRelationService;
+import com.persagy.proxy.common.client.DmpRwdClient;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import com.persagy.proxy.common.entity.RelationDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * ADM 关系 通用 Service
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@Slf4j
+@Service
+public class AdmRelationServiceImpl implements IAdmRelationService {
+
+    @Autowired
+    private DmpRwdClient rwdClient;
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    @Override
+    public void doSave(InstanceUrlParam param, List<RelationDTO> voList) {
+        if(CollUtil.isEmpty(voList)) {
+            return;
+        }
+        rwdClient.createRelation(param, voList);
+    }
+
+    @Override
+    public void doDelete(InstanceUrlParam param, QueryCriteria criteria) {
+        if(criteria == null) {
+            return;
+        }
+        JSONObject cond = null;
+        try {
+            String json = objectMapper.writeValueAsString(criteria);
+            cond = JSONObject.parseObject(json);
+        } catch (JsonProcessingException e) {
+            log.error(e.getMessage(), e);
+        }
+        if(cond == null) {
+            return;
+        }
+        rwdClient.deleteRelation(param, cond);
+    }
+}

+ 14 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmShaftServiceImpl.java

@@ -0,0 +1,14 @@
+package com.persagy.proxy.adm.service.impl;
+
+import com.persagy.proxy.adm.model.AdmShaft;
+import com.persagy.proxy.adm.service.IAdmShaftService;
+import org.springframework.stereotype.Service;
+
+/**
+ * ADM 竖井 实现类
+ * @author lvxy
+ * @date 2021/8/18
+ */
+@Service
+public class AdmShaftServiceImpl extends AbstractAdmBaseServiceImpl<AdmShaft> implements IAdmShaftService {
+}

+ 14 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmSpaceServiceImpl.java

@@ -0,0 +1,14 @@
+package com.persagy.proxy.adm.service.impl;
+
+import com.persagy.proxy.adm.model.AdmSpace;
+import com.persagy.proxy.adm.service.IAdmSpaceService;
+import org.springframework.stereotype.Service;
+
+/**
+ * ADM 空间 实现类
+ * @author lvxy
+ * @date 2021/8/18
+ */
+@Service
+public class AdmSpaceServiceImpl extends AbstractAdmBaseServiceImpl<AdmSpace> implements IAdmSpaceService {
+}

+ 14 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmSystemServiceImpl.java

@@ -0,0 +1,14 @@
+package com.persagy.proxy.adm.service.impl;
+
+import com.persagy.proxy.adm.model.AdmSystem;
+import com.persagy.proxy.adm.service.IAdmSystemService;
+import org.springframework.stereotype.Service;
+
+/**
+ * ADM 系统 实现类
+ * @author lvxy
+ * @date 2021/8/18
+ */
+@Service
+public class AdmSystemServiceImpl extends AbstractAdmBaseServiceImpl<AdmSystem> implements IAdmSystemService {
+}

+ 14 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmTenantServiceImpl.java

@@ -0,0 +1,14 @@
+package com.persagy.proxy.adm.service.impl;
+
+import com.persagy.proxy.adm.model.AdmTenant;
+import com.persagy.proxy.adm.service.IAdmTenantService;
+import org.springframework.stereotype.Service;
+
+/**
+ * ADM 租户 实现类
+ * @author lvxy
+ * @date 2021/8/18
+ */
+@Service
+public class AdmTenantServiceImpl extends AbstractAdmBaseServiceImpl<AdmTenant> implements IAdmTenantService {
+}

+ 118 - 0
src/main/java/com/persagy/proxy/adm/utils/AdmEntityTransferUtil.java

@@ -0,0 +1,118 @@
+package com.persagy.proxy.adm.utils;
+
+import cn.hutool.core.util.ArrayUtil;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.basic.utils.JsonNodeUtils;
+
+import java.util.List;
+
+/**
+ * ADM通用查询条件
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+public class AdmEntityTransferUtil {
+
+    /**
+     * 转换为数据中台对象
+     * @param objList
+     * @return
+     */
+    public static ArrayNode toDmpMultiEntity(List objList) {
+        return JsonNodeUtils.toArrayNode(objList, "infos", null);
+    }
+
+    /**
+     * 转换为数据中台对象
+     * @param obj
+     * @return
+     */
+    public static JsonNode toDmpSingleEntity(Object obj) {
+        return JsonNodeUtils.toObjectNode(obj, "infos", null);
+    }
+
+    /**
+     * 转换为数据中心对象
+     * @param array 数据中台对象
+     * @param clazz 数据中心对象class
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> toAdmMultiEntity(List<Object> array, Class<T> clazz) {
+        ArrayNode dataNode = JsonNodeUtils.toArrayNode(array, null, null);
+        return toAdmMultiEntity(dataNode, clazz);
+    }
+
+    /**
+     * 转换为数据中心对象
+     * @param array
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> toAdmMultiEntity(ArrayNode array, Class<T> clazz) {
+        if(ArrayUtil.isEmpty(array)) {
+            return null;
+        }
+        // 转换属性名 TODO 目前只有创建时间和修改时间需要转换,后续有其他时通过建立映射在此转换即可
+        for(int i = 0, j = array.size();i < j;i++) {
+            JsonNode node = array.get(i);
+            if(node != null && node.isObject()) {
+                copyProperty((ObjectNode) node, "creationTime", "createTime");
+                copyProperty((ObjectNode) node, "modifiedTime", "lastUpdate");
+                copyProperty((ObjectNode) node, "objType", "objectType");
+                removeProperty((ObjectNode)node);
+            }
+        }
+        return JsonNodeUtils.toEntity(array, clazz, "infos");
+    }
+
+    /**
+     * 转换为数据中心对象
+     * @param node
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> T toAdmSingleEntity(ObjectNode node, Class<T> clazz) {
+        // 转换属性名 TODO 目前只有创建时间和修改时间需要转换,后续有其他时通过建立映射在此转换即可
+        copyProperty(node, "creationTime", "createTime");
+        copyProperty(node, "modifiedTime", "lastUpdate");
+        copyProperty(node, "objectType", "objType");
+        removeProperty(node);
+        return JsonNodeUtils.toEntity(node, clazz, "infos");
+    }
+
+    /**
+     * 拷贝属性
+     * @param dmpData 数据中台对象
+     * @param srcProp 数据中台属性名
+     * @param desProp 对应的数据中心属性名
+     */
+    private static void copyProperty(ObjectNode dmpData, String srcProp, String desProp) {
+        if(dmpData == null) {
+            return;
+        }
+        JsonNode value = dmpData.get(srcProp);
+        if(value == null || value.isNull()) {
+            return;
+        }
+        dmpData.set(desProp, value);
+        dmpData.remove(srcProp);
+    }
+
+    /**
+     * 删除掉数据中心不需要的属性
+     * @param dmpData
+     */
+    private static void removeProperty(ObjectNode dmpData){
+        dmpData.remove( "creator");
+        dmpData.remove( "groupCode");
+        dmpData.remove( "valid");
+        dmpData.remove( "createApp");
+        dmpData.remove( "virtualCodes");
+        dmpData.remove( "updateApp");
+    }
+}

+ 315 - 0
src/main/java/com/persagy/proxy/adm/utils/AdmQueryCriteriaHelper.java

@@ -0,0 +1,315 @@
+package com.persagy.proxy.adm.utils;
+
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.proxy.adm.request.AdmQueryCriteria;
+import com.persagy.proxy.adm.request.OrderItem;
+import com.persagy.proxy.adm.request.QueryCriteria;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ADM通用查询条件
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+public class AdmQueryCriteriaHelper {
+
+    /** 条件匹配字符串 */
+    private static final String[] COND_STR = {" = "," != "," > "," >= "," < "," <= "," in "," isnull "," contain "," startwith "," endwith "};
+    /** 需要替换的字段对照 Map<AdmQueryCriteria.name, Map<AdmFieldName, DmpFieldName> */
+    private static Map<String, Map<String, String>> RENAME_MAP = new HashMap<>(16);
+    /** 与数据中台的操作参数对照 */
+    private static Map<String, String> OPERATOR_MAP = new HashMap<>();
+
+    static {
+        OPERATOR_MAP.put("!=", "$ne");
+        OPERATOR_MAP.put(">", "$gt");
+        OPERATOR_MAP.put(">=", "$gte");
+        OPERATOR_MAP.put("<", "$lt");
+        OPERATOR_MAP.put("<=", "$lte");
+        OPERATOR_MAP.put("in", "$in");
+        OPERATOR_MAP.put("contain", "$like");
+        OPERATOR_MAP.put("startwith", "$likeLeft");
+        OPERATOR_MAP.put("endwith", "$likeRight");
+    }
+
+    /**
+     * 将ADM的查询条件转换为DMP的
+     * 调用前注意:
+     * - 调用前将name赋值,才会将条件中adm的属性替换为dmp的属性
+     * - 统计查询时将isOnlyCount设置为true
+     * 调用后注意(需要调用者自行处理的):
+     * - 不处理级联,级联应在调用者里处理级联调用转换后查询赋值
+     * - 不处理projection,查询后自行根据projection筛选返回属性。(dmp只能指定扩展属性,而adm的是针对所有属性的)
+     * @param admCriteria
+     * @return
+     */
+    public static QueryCriteria toDmpCriteria(AdmQueryCriteria admCriteria) {
+        QueryCriteria dmpCriteria = new QueryCriteria();
+        // 拷贝分页
+        copyPageInfo(admCriteria, dmpCriteria);
+        // 处理filters
+        dmpCriteria.setCriteria(toCriteria(admCriteria.getName(), admCriteria.getFilters()));
+        if(StringUtils.isNotEmpty(admCriteria.getName())){
+            // 处理name
+            dmpCriteria.getCriteria().put("objType", admCriteria.getName());
+        }
+        // 处理排序
+        dmpCriteria.setOrders(toOrderItem(admCriteria.getOrders()));
+        // 处理统计
+        dmpCriteria.setOnlyCount(admCriteria.isOnlyCount());
+        return dmpCriteria;
+    }
+
+    /**
+     * 处理分页信息
+     * @param admCriteria
+     * @param dmpCriteria
+     */
+    private static void copyPageInfo(AdmQueryCriteria admCriteria, QueryCriteria dmpCriteria) {
+        // 页码
+        Integer pageNumber = admCriteria.getPageNumber();
+        if(pageNumber == null || pageNumber < 1) {
+            pageNumber = 1;
+        }
+        dmpCriteria.setPage(pageNumber.longValue());
+        // 条数
+        Integer pageSize = admCriteria.getPageSize();
+        if(pageSize == null || pageSize > admCriteria.getMaxRow()) {
+            pageSize = admCriteria.getMaxRow();
+        }
+        dmpCriteria.setSize(pageSize.longValue());
+    }
+
+    /**
+     * 排序字符串转换为对象
+     * @param orderStr
+     */
+    private static List<OrderItem> toOrderItem(String orderStr) {
+        if(StrUtil.isBlank(orderStr)) {
+            return null;
+        }
+        // 按,分隔
+        String[] orders = StrUtil.split(orderStr, ",");
+        List<OrderItem> orderList = new ArrayList<>();
+        for(String order:orders) {
+            // 按空格分隔
+            String[] items = StrUtil.split(order, " ");
+            // 去除空串
+            items = ArrayUtil.removeEmpty(items);
+            if(ArrayUtil.isEmpty(items)) {
+                continue;
+            }
+            OrderItem orderItem = new OrderItem();
+            // 第一位为排序字段
+            orderItem.setColumn(items[0].trim());
+            // 只有一位 或 第二位不是desc  表示为升序
+            orderItem.setAsc(items.length <= 1 || !"desc".equalsIgnoreCase(items[1]));
+            orderList.add(orderItem);
+        }
+        return orderList;
+    }
+
+    /**
+     * 将ADM过滤条件转换为DMP查询
+     * 由于数据中台不支持or条件,因此不能转换为中台的KV条件形式,只能转换为sql
+     * @param filters
+     * @return
+     */
+    private static ObjectNode toCriteria(String name, String filters) {
+        ObjectNode criteria = JsonNodeFactory.instance.objectNode();
+        // filters格式参考:http://doc.sagacloud.cn/doc/service/dev/lib/web/filters.html#%E8%BF%87%E6%BB%A4%E6%9D%A1%E4%BB%B6
+        if(StrUtil.isBlank(filters)) {
+            return criteria;
+        }
+        // 替换逻辑运算符: &&  ||  ;
+        filters = StrUtil.replace(filters, "&&", " and ");
+        filters = StrUtil.replace(filters, "||", " or ");
+        filters = StrUtil.replace(filters, ";", " and ");
+        // 处理[]
+        filters = StrUtil.replace(filters, "[", " ( ");
+        filters = StrUtil.replace(filters, "]", " ) ");
+        // 查找下一个 连接点[and or为连接点]
+        ensureOrCondition(name, criteria, filters);
+        return criteria;
+    }
+
+    /**
+     * 从or条件中截取表达式
+     * @param criteria
+     * @param filters
+     */
+    private static void ensureOrCondition(String name, ObjectNode criteria, String filters) {
+        int orIndex = StrUtil.indexOfIgnoreCase(filters, " or ", 0);
+        String orLeft = orIndex < 0 ? filters : StrUtil.subPre(filters, orIndex);
+        ensureAndCondition(name, criteria, orLeft);
+        // 有or条件
+        if(orIndex >= 0) {
+            String orRight = StrUtil.subSuf(filters, orIndex + 4);
+            ObjectNode node = criteria.putObject("$or");
+            // 右侧字符串继续递归处理
+            ensureOrCondition(name, node, orRight);
+        }
+    }
+
+    /**
+     * 从and条件中截取表达式
+     * @param criteria
+     * @param filters
+     */
+    private static void ensureAndCondition(String name, ObjectNode criteria, String filters) {
+        int andIndex = StrUtil.indexOfIgnoreCase(filters, " and ", 0);
+        String andLeft = andIndex < 0 ? filters : StrUtil.subPre(filters, andIndex);
+        // 处理左侧条件
+        ensureAndExpress(name, criteria, andLeft);
+        // 处理右侧条件
+        if(andIndex >= 0) {
+            String andRight = StrUtil.subSuf(filters, andIndex+5);
+            // 递归处理and
+            ensureAndCondition(name, criteria, andRight);
+        }
+    }
+
+    /**
+     * 处理表达式
+     * @param criteria
+     * @param express
+     */
+    private static void ensureAndExpress(String name, ObjectNode criteria, String express) {
+
+        String cond = StrUtil.getContainsStr(express, COND_STR);
+        if(StrUtil.isBlank(cond)) {
+            return;
+        }
+        int condIndex = StrUtil.indexOfIgnoreCase(express, cond, 0);
+        String condLeft = StrUtil.subPre(express, condIndex).trim();
+        String condRight = StrUtil.subSuf(express, condIndex+cond.length()).trim();
+        addCondition(name, criteria, condLeft, cond.trim(), condRight);
+    }
+
+    /**
+     * 拼接条件
+     * @param criteria
+     * @param column
+     * @param operator
+     * @param value
+     */
+    private static void addCondition(String name, ObjectNode criteria, String column, String operator, String value) {
+        // 替换列名
+        column = replaceColumns(name, column);
+        if("=".equals(operator)) {
+            criteria.set(column, getJsonNode(criteria, value));
+        } else if("in".equals(operator)) {
+            // 按,分隔
+            String[] splits = StrUtil.split(value, ",");
+            if(ArrayUtil.isEmpty(splits)) {
+                return;
+            }
+            ArrayNode node = criteria.putArray(column);
+            for(String split:splits) {
+                // 去掉所有的() 即为值
+                split = StrUtil.removeAll(split, '(',')');
+                node.add(getJsonNode(criteria, split.trim()));
+            }
+        } else if("isnull".equals(operator)) {
+            ObjectNode node = criteria.putObject(column);
+            node.put("$null", true);
+        } else {
+            ObjectNode node = criteria.putObject(column);
+            node.set(OPERATOR_MAP.get(operator), getJsonNode(node, value));
+        }
+    }
+
+    /**
+     * 取Json值对象
+     * @param criteria
+     * @param value
+     * @return
+     */
+    private static JsonNode getJsonNode(ObjectNode criteria, String value) {
+        if(StrUtil.isBlank(value)) {
+            return criteria.nullNode();
+        }
+        // 字符串
+        if(StrUtil.startWith(value, "'") && StrUtil.endWith(value, "'")) {
+            return criteria.textNode(StrUtil.sub(value, 1, value.length()-1));
+        }
+        // 数值
+        if (StrUtil.contains(value, ".")) {
+            try {
+                BigDecimal no = new BigDecimal(value);
+                return criteria.numberNode(no);
+            } catch (NumberFormatException e) {
+
+            }
+        }
+        // 整型
+        try {
+            Integer no = Integer.valueOf(value);
+            return criteria.numberNode(no);
+        } catch (NumberFormatException e) {
+
+        }
+        return criteria.nullNode();
+    }
+
+    /**
+     * 替换属性称名
+     * @param name
+     * @param column
+     * @return
+     */
+    private static String replaceColumns(String name, String column) {
+        Map<String, String> fieldMap = getRenameFields(name);
+        // 没有对照则使用原本的
+        if(MapUtil.isEmpty(fieldMap) || !fieldMap.containsKey(column)) {
+            return column;
+        }
+        return fieldMap.get(column);
+    }
+
+    /**
+     * 获取更名对照
+     * @param name
+     * @return
+     */
+    private static Map<String, String> getRenameFields(String name) {
+        // 获取通用对照
+        Map<String, String> commonMap = getRenameMap().get("COMMON");
+        // 获取此类型的对照
+        Map<String, String> nameMap = getRenameMap().get(name);
+        if(MapUtil.isEmpty(nameMap)) {
+            return commonMap;
+        }
+        Map<String, String> rsMap = new HashMap<>();
+        rsMap.putAll(commonMap);
+        rsMap.putAll(nameMap);
+        return rsMap;
+    }
+
+    /**
+     * 获取通用Map
+     * @return
+     */
+    private static Map<String, Map<String, String>> getRenameMap() {
+        if(MapUtil.isEmpty(RENAME_MAP)) {
+            // COMMON表示通用对照
+            Map<String, String> commonMap = new HashMap<>();
+            commonMap.put("createTime", "creationTime");
+            commonMap.put("lastUpdate", "modifiedTime");
+            RENAME_MAP.put("COMMON", commonMap);
+        }
+        return RENAME_MAP;
+    }
+}

+ 87 - 0
src/main/java/com/persagy/proxy/common/client/DmpRwdClient.java

@@ -0,0 +1,87 @@
+package com.persagy.proxy.common.client;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.dmp.basic.config.DigitalFeignConfig;
+import com.persagy.dmp.basic.model.QueryCriteria;
+import com.persagy.proxy.common.constant.DmpUrlConstant;
+import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.InstanceUrlParam;
+import com.persagy.proxy.common.entity.ObjRelationDTO;
+import com.persagy.proxy.common.entity.RelationDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.cloud.openfeign.SpringQueryMap;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ *@description:数据中台dmp-rwd 物理世界、数据字典、IOT 接口feign
+ *@author:lgy
+ *@data:2021/8/11 14:56
+ */
+@FeignClient(name = "dmp-rwd", configuration = DigitalFeignConfig.class)
+public interface DmpRwdClient {
+    /**
+     * @description: 查询关系
+     * @param: objectUrlParam
+     * @param: relationCriteriaList
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.RELATION_QUERY)
+    DmpResult<List<ObjRelationDTO>> queryRelation(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody QueryCriteria criteria);
+
+    /**
+     * @description: 查询对象列表
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.OBJECT_QUERY)
+    DmpResult<JSONArray> queryObject(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONObject criteria);
+
+    /**
+     * @description: 创建对象
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.OBJECT_CREATE)
+    DmpResult createObject(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 更新对象
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.OBJECT_UPDATE)
+    DmpResult updateObject(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 删除对象
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.OBJECT_DELETE)
+    DmpResult deleteObject(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody List<String> objectIdList);
+    /**
+     * @description: 删除关系
+     * @param: objectUrlParam
+     * @param: relationCriteriaList
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.RELATION_DELETE)
+    DmpResult deleteRelation(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONObject criteria);
+
+    /**
+     * @description: 创建关系
+     * @param: objectUrlParam
+     * @param: relationCriteriaList
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.RELATION_CREATE)
+    DmpResult createRelation(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody List<RelationDTO> createRelationList);
+}

+ 103 - 0
src/main/java/com/persagy/proxy/common/constant/DmpUrlConstant.java

@@ -0,0 +1,103 @@
+package com.persagy.proxy.common.constant;
+
+
+/**
+ *@description:dmp服务请求url常量
+ *@author:lgy
+ *@data:2021/8/11 15:00
+ */
+public class DmpUrlConstant {
+
+    /**
+     * 创建对象
+     */
+    public final static String OBJECT_CREATE = "/rwd/instance/object/create";
+
+    /**
+     * 更新对象
+     */
+    public final static String OBJECT_UPDATE = "/rwd/instance/object/update";
+
+    /**
+     * 删除对象
+     */
+    public final static String OBJECT_DELETE = "/rwd/instance/object/delete";
+
+    /**
+     * 查询对象
+     */
+    public final static String OBJECT_QUERY = "/rwd/instance/object/query";
+
+    /**
+     * 查询实时数据
+     */
+    public final static String OBJECT_CURRENT_DATA = "/rwd/iot/data/current";
+
+    /**
+     * 查询历史数据/分精度数据
+     */
+    public final static String OBJECT_HISTORY_DATA = "/rwd/iot/data/history";
+
+    /**
+     * 查询图实例
+     */
+    public final static String GRAPH_QUERY = "/rwd/graph/query";
+
+    /**
+     * 创建关系
+     */
+    public final static String RELATION_CREATE = "/rwd/instance/relation/create";
+
+    /**
+     * 删除关系
+     */
+    public final static String RELATION_DELETE = "/rwd/instance/relation/delete";
+
+    /**
+     * 查询关系
+     */
+    public final static String RELATION_QUERY = "/rwd/instance/relation/query";
+
+    /**
+     * 查询关系对象
+     */
+    public final static String RELATION_OBJECT_QUERY = "/rwd/instance/relation/object/query";
+
+
+
+    /**
+     * 查询信息点描述信息
+     */
+    public final static String DEF_FUNCID = "/rwd/def/funcid";
+
+    /**
+     * 创建信息点
+     */
+    public final static String DEF_FUNCID_CREATE = "/rwd/def/funcid/create";
+
+    /**
+     * 类型查询
+     */
+    public final static String DEF_CLASS = "/rwd/def/class";
+
+    // ==================中台组织结构=========================================================================
+
+    /**
+     * 中台人员组织权限服务--查询用户
+     */
+    public static final String ORG_USER_QUERY = "/org/user/query";
+
+    /**
+     * 集团查询
+     */
+    public static final String ORG_GROUP_QUERY = "/org/group/query";
+
+    /**
+     * 项目查询
+     */
+    public static final String ORG_PROJECT_QUERY = "/org/project/query";
+
+    /**批量查询项目接口URI*/
+    public static final  String OBJECT_BATCH_QUERY_PROJECT_BY_IDS = "/rwd/instance/object/batchQueryProjectByIds";
+
+}

+ 80 - 0
src/main/java/com/persagy/proxy/common/entity/DmpResult.java

@@ -0,0 +1,80 @@
+package com.persagy.proxy.common.entity;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.Serializable;
+import java.lang.reflect.*;
+
+/**
+ * @description: 数据中台返回值通用类
+ * @author: lgy
+ * @since: 2021/08/11 15:40
+ * @version: V1.0
+ */
+@Data
+@NoArgsConstructor
+@Slf4j
+public class DmpResult<T> implements Serializable {
+
+    /**
+     * 成功
+     */
+    public final static String SUCCESS = "success";
+    /**
+     * 失败
+     */
+    public final static String FAILURE = "failure";
+
+    private static final long serialVersionUID = 1L;
+
+    private String result;
+
+    private T data;
+
+    private Integer count;
+
+    private String message;
+
+    public T getData(Class<T> clazz) {
+        if (data == null) {
+            T t = null;
+            try {
+                t = clazz.newInstance();
+            } catch (Exception e) {
+                log.error(e.getMessage(),e);
+            }
+            return t;
+        }
+        return data;
+    }
+
+    public T getData(T t) {
+        if (data == null) {
+            return t;
+        }
+        return data;
+    }
+    // type不能直接实例化对象,通过type获取class的类型,然后实例化对象
+    public static Class<?> getRawType(Type type) {
+        if (type instanceof Class) {
+            return (Class) type;
+        } else if (type instanceof ParameterizedType) {
+            ParameterizedType parameterizedType = (ParameterizedType) type;
+            Type rawType = parameterizedType.getRawType();
+            return (Class) rawType;
+        } else if (type instanceof GenericArrayType) {
+            Type componentType = ((GenericArrayType) type).getGenericComponentType();
+            return Array.newInstance(getRawType(componentType), 0).getClass();
+        } else if (type instanceof TypeVariable) {
+            return Object.class;
+        } else if (type instanceof WildcardType) {
+            return getRawType(((WildcardType) type).getUpperBounds()[0]);
+        } else {
+            String className = type == null ? "null" : type.getClass().getName();
+            throw new IllegalArgumentException("Expected a Class, ParameterizedType, or GenericArrayType, but <" + type + "> is of type " + className);
+        }
+    }
+
+}

+ 42 - 0
src/main/java/com/persagy/proxy/common/entity/InstanceUrlParam.java

@@ -0,0 +1,42 @@
+package com.persagy.proxy.common.entity;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @description: 对象、关系请求url通用参数
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class InstanceUrlParam implements Serializable {
+
+    private static final long serialVersionUID = -994117732505752231L;
+
+    /**
+     * 集团编码
+     */
+    private String groupCode;
+
+    /**
+     * 方案id
+     */
+    private String schemeId;
+
+    /**
+     * 项目id
+     */
+    private String projectId;
+
+    /**
+     * 应用id
+     */
+    private String appId;
+}

+ 37 - 0
src/main/java/com/persagy/proxy/common/entity/ObjRelationDTO.java

@@ -0,0 +1,37 @@
+package com.persagy.proxy.common.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @description:对象间关系
+ * @author:lgy
+ * @data:2021/8/16 19:28
+ */
+@Data
+public class ObjRelationDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    //关系id
+    private String id;
+    //项目id
+    private String projectId;
+    //图实例id
+    private String graphId;
+    //图类型编码
+    private String graphCode;
+    //边类型编码
+    private String relCode;
+    //from对象id
+    private String objFrom;
+    //to对象id
+    private String objTo;
+    //状态
+    private Integer status;
+    //创建时间
+    private Long createTime;
+    //更新时间
+    private Long updateTime;
+}

+ 55 - 0
src/main/java/com/persagy/proxy/common/entity/RelationDTO.java

@@ -0,0 +1,55 @@
+package com.persagy.proxy.common.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author yuecaipu
+ * @version 1.0
+ * @description: 创建关系参数
+ * @date 2021/8/14 11:39
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class RelationDTO {
+
+    /**
+     * 图类型I
+     */
+    @JSONField(name = "graph_id")
+    private String graphId;
+
+    /**
+     * 图类型编码
+     */
+    @JSONField(name = "graph_code")
+    private String graphCode;
+
+    /**
+     * 边类型编码
+     */
+    @JSONField(name = "rel_code")
+    private String relCode;
+
+    /**
+     * 关系值
+     */
+    private String relValue;
+
+    /**
+     * from对象ID
+     */
+    @JSONField(name = "obj_from")
+    private String objFrom;
+
+    /**
+     * to对象ID
+     */
+    @JSONField(name = "obj_to")
+    private String objTo;
+}

+ 11 - 0
src/main/resources/bootstrap.yml

@@ -0,0 +1,11 @@
+server:
+  port: 8868
+spring:
+  application:
+    # 应用名称
+    name: adm-middleware
+
+config: 
+  file: 
+    absolute: 
+      path: ${CONFIG_FILE_PATH:D:\SpringCloud}

+ 6 - 0
src/script/start.sh

@@ -0,0 +1,6 @@
+#!/bin/sh
+# 根据情况使用内存限制 命令为:
+# nohup java -jar -Xms500m -Xmx1024m -Dfile.encoding=utf-8 coldstation.jar >/dev/null 2>&1 &
+nohup java -jar -Xms500m -Xmx2048m -Dfile.encoding=utf-8 -DCONFIG_FILE_PATH=/mnt/data/SpringCloud center-middleware.jar >/dev/null 2>&1 &
+sleep 2
+tail -f ../logs/center-middleware/log.log

+ 5 - 0
src/script/stop.sh

@@ -0,0 +1,5 @@
+ps aux|grep center-middleware|grep -v grep|cut -c 9-15|xargs kill -15
+
+sleep 2
+
+ps aux|grep center-middleware

+ 24 - 0
src/script/zip.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<assembly
+        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/3.1.1"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/3.1.1 http://maven.apache.org/xsd/assembly-3.1.1.xsd">
+    <id>dev</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <includeBaseDirectory>false</includeBaseDirectory>
+    <fileSets>
+        <fileSet>
+            <directory>${basedir}/target/</directory>
+            <includes>
+                <include>config/</include>
+                <include>*.jar</include>
+                <include>stop.sh</include>
+                <include>start.sh</include>
+                <include>version.txt</include>
+            </includes>
+            <outputDirectory>./${project.artifactId}</outputDirectory>
+        </fileSet>
+    </fileSets>
+</assembly>