linhuili пре 3 година
родитељ
комит
1ff52bd9d6
28 измењених фајлова са 2031 додато и 0 уклоњено
  1. 9 0
      pom.xml
  2. 188 0
      src/main/java/com/persagy/dmp/middleware/client/DmpRwdClient.java
  3. 17 0
      src/main/java/com/persagy/dmp/middleware/constant/CommonConsant.java
  4. 152 0
      src/main/java/com/persagy/dmp/middleware/constant/DmpUrlConstant.java
  5. 34 0
      src/main/java/com/persagy/dmp/middleware/constant/enums/RelationTypeEnum.java
  6. 52 0
      src/main/java/com/persagy/dmp/middleware/controller/EquipController.java
  7. 107 0
      src/main/java/com/persagy/dmp/middleware/controller/FloorController.java
  8. 75 0
      src/main/java/com/persagy/dmp/middleware/controller/SpaceController.java
  9. 14 0
      src/main/java/com/persagy/dmp/middleware/dao/DefineTypeRelMapper.java
  10. 19 0
      src/main/java/com/persagy/dmp/middleware/entity/dto/CommonRequestDTO.java
  11. 9 0
      src/main/java/com/persagy/dmp/middleware/entity/dto/FloorDTO.java
  12. 42 0
      src/main/java/com/persagy/dmp/middleware/entity/dto/InstanceUrlParam.java
  13. 37 0
      src/main/java/com/persagy/dmp/middleware/entity/dto/ObjRelationDTO.java
  14. 55 0
      src/main/java/com/persagy/dmp/middleware/entity/dto/RelationDTO.java
  15. 55 0
      src/main/java/com/persagy/dmp/middleware/entity/response/CommonResult.java
  16. 80 0
      src/main/java/com/persagy/dmp/middleware/entity/response/DmpResult.java
  17. 36 0
      src/main/java/com/persagy/dmp/middleware/entity/vo/DefineTypeRel.java
  18. 48 0
      src/main/java/com/persagy/dmp/middleware/service/IBaseService.java
  19. 17 0
      src/main/java/com/persagy/dmp/middleware/service/IEquipService.java
  20. 31 0
      src/main/java/com/persagy/dmp/middleware/service/IFloorService.java
  21. 17 0
      src/main/java/com/persagy/dmp/middleware/service/ISpaceService.java
  22. 271 0
      src/main/java/com/persagy/dmp/middleware/service/impl/AbstractBaseServiceImpl.java
  23. 31 0
      src/main/java/com/persagy/dmp/middleware/service/impl/EquipServiceImpl.java
  24. 140 0
      src/main/java/com/persagy/dmp/middleware/service/impl/FloorServiceImpl.java
  25. 31 0
      src/main/java/com/persagy/dmp/middleware/service/impl/SpaceServiceImpl.java
  26. 190 0
      src/main/java/com/persagy/dmp/middleware/utils/EntityTransferUtil.java
  27. 257 0
      src/main/resources/db.init/data.sql
  28. 17 0
      src/main/resources/db.init/schema.sql

+ 9 - 0
pom.xml

@@ -55,10 +55,19 @@
             <groupId>com.persagy</groupId>
             <artifactId>dmp-server</artifactId>
         </dependency>
+        <!--<dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>dmp-comp</artifactId>
+        </dependency>-->
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
         </dependency>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>jsr311-api</artifactId>
+            <version>1.1.1</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 188 - 0
src/main/java/com/persagy/dmp/middleware/client/DmpRwdClient.java

@@ -0,0 +1,188 @@
+package com.persagy.dmp.middleware.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.dmp.middleware.constant.DmpUrlConstant;
+import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
+import com.persagy.dmp.middleware.entity.dto.ObjRelationDTO;
+import com.persagy.dmp.middleware.entity.dto.RelationDTO;
+import com.persagy.dmp.middleware.entity.response.DmpResult;
+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.DEF_CLASS)
+    DmpResult<JSONArray> queryDefClass(@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);
+
+    /**
+     * @description: 查询对象类型
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.DEF_CLASS)
+    DmpResult<JSONArray> queryObjectType(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONObject criteria);
+
+    /**
+     * @description: 查询信息点
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.DEF_FUNCID)
+    DmpResult<JSONArray> queryObjectInfo(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONObject criteria);
+
+    /**
+     * @description: 批量修改信息点
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.DEF_FUNCID_UPDATE_BATCH)
+    DmpResult batchUpdateObjectInfo(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 批量删除信息点
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.DEF_FUNCID_DEL_BATCH)
+    DmpResult<JSONArray> batchDeleteObjectInfo(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody List<String> objectIdList);
+
+
+    /**
+     * @description: 创建关系 标记计算关系
+     * @param: objectUrlParam
+     * @param: objectArr
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.OBJECT_COMPATIBLE_CREATE)
+    DmpResult<List<ObjRelationDTO>> createObjRelations(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 删除关系 标记计算关系
+     * @param: objectUrlParam
+     * @param: objectArr
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.OBJECT_COMPATIBLE_CREATE)
+    DmpResult<List<ObjRelationDTO>> deleteObjRelations(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 创建关系 标记计算关系
+     * @param: objectUrlParam
+     * @param: objectArr
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.RELATION_PROJECT_CAL_CREATE)
+    DmpResult<JSONArray> createRelationProjectCal(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 删除关系 标记计算关系
+     * @param: objectUrlParam
+     * @param: objectArr
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.RELATION_PROJECT_CAL_DELETE)
+    DmpResult<JSONArray> deleteRelationProjectCal(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 更新关系 标记计算关系
+     * @param: objectUrlParam
+     * @param: objectArr
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.RELATION_PROJECT_CAL_UPDATE)
+    DmpResult<JSONArray> updateRelationProjectCal(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 删除关系 标记计算关系
+     * @param: objectUrlParam
+     * @param: objectArr
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.RELATION_PROJECT_CAL_QUERY)
+    DmpResult<JSONArray> queryRelationProjectCal(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+
+}

+ 17 - 0
src/main/java/com/persagy/dmp/middleware/constant/CommonConsant.java

@@ -0,0 +1,17 @@
+package com.persagy.dmp.middleware.constant;
+
+/**
+ * @ClassName CommonConsant
+ * @Description: 常量
+ * @Author linhuili
+ * @Date 2021/9/10 09:37
+ * @Version V1.0
+ **/
+public class CommonConsant {
+
+    /** 楼层面积 */
+    public final static String FLOOR_AREA = "area";
+
+    /** 楼层租赁面积 */
+    public final static String FLOOR_LEASE_AREA = "leaseArea";
+}

+ 152 - 0
src/main/java/com/persagy/dmp/middleware/constant/DmpUrlConstant.java

@@ -0,0 +1,152 @@
+package com.persagy.dmp.middleware.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_FUNCID_UPDATE_BATCH = "/rwd/def/funcid/updateBatch";
+
+
+    /**
+     * 批量删除信息点
+     */
+    public final static String DEF_FUNCID_DEL_BATCH = "/rwd/def/funcid/deleteBatch";
+
+    /**
+     * 类型查询
+     */
+    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";
+
+    // ==================中台知识库=========================================================================
+
+    /**
+     * 字典数据查询
+     */
+    public static final String DIC_DATA_QUERY = "/dic/dt/data/query";
+
+    // ==================中台关系计算入口=========================================================================
+    /**
+     * 关系计算创建
+     */
+    public static final String OBJECT_COMPATIBLE_CREATE = "rwd/instance/object/compatible/createObjRelationsByKeywordAndObjType";
+
+    /**
+     * 关系计算删除
+     */
+    public static final String OBJECT_COMPATIBLE_DELETE = "rwd/instance/object/compatible/deleteObjRelationsByRelId";
+
+
+    /**
+     * 查询
+     */
+    public static final String RELATION_PROJECT_CAL_QUERY = "/rwd/instance/relation/project/cal/query";
+    /**
+     * 字典数据查询
+     */
+    public static final String RELATION_PROJECT_CAL_CREATE = "/rwd/instance/relation/project/cal/create";
+    /**
+     * 更新
+     */
+    public static final String RELATION_PROJECT_CAL_UPDATE = "/rwd/instance/relation/project/cal/update";
+
+    /**
+     * 删除
+     */
+    public static final String RELATION_PROJECT_CAL_DELETE = "/rwd/instance/relation/project/cal/delete";
+
+
+}

+ 34 - 0
src/main/java/com/persagy/dmp/middleware/constant/enums/RelationTypeEnum.java

@@ -0,0 +1,34 @@
+package com.persagy.dmp.middleware.constant.enums;
+
+import lombok.Getter;
+
+/**
+ * @ClassName RelationTypeEnum
+ * @Description: 关系枚举
+ * @Author linhuili
+ * @Date 2021/9/10 09:37
+ * @Version V1.0
+ **/
+@Getter
+public enum RelationTypeEnum {
+
+    ARCHSUBSET_BD2FL("ArchSubset","Bd2Fl","楼层所在建筑");
+
+    /**图类型编码*/
+    private String graphCode;
+    /**边类型编码*/
+    private String relCode;
+    /**描述*/
+    private String desc;
+    /**
+     * 构造函数
+     * @param graphCode
+     * @param relCode
+     */
+    RelationTypeEnum(String graphCode,String relCode,String desc){
+        this.graphCode = graphCode;
+        this.relCode = relCode;
+        this.desc = desc;
+    }
+
+}

+ 52 - 0
src/main/java/com/persagy/dmp/middleware/controller/EquipController.java

@@ -0,0 +1,52 @@
+package com.persagy.dmp.middleware.controller;
+
+
+import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
+import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
+import com.persagy.dmp.middleware.entity.response.CommonResult;
+import com.persagy.dmp.middleware.service.IEquipService;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+/**
+ * @ClassName ObjectInstanceController
+ * @Description: 设备设施模块
+ * @Author linhuili
+ * @Date 2021/9/10 11:17
+ * @Version V1.0
+ **/
+@RestController
+@RequestMapping("equip")
+public class EquipController {
+
+    @Autowired
+    private IEquipService equipService;
+
+    /**
+     * 查询/统计设备设施下的设备/阀门
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public CommonResult count(@QueryParam("groupCode") String groupCode, @QueryParam("projectId") String projectId,
+                              @RequestBody CommonRequestDTO request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, null);
+        // 非空校验
+        if(StringUtils.isEmpty(request.getBuildId())){
+            throw new Exception("建筑ID不能为空");
+        }
+        //查询设备空间信息
+        CommonResult response = equipService.query(context,request);
+        return  response;
+    }
+
+}

+ 107 - 0
src/main/java/com/persagy/dmp/middleware/controller/FloorController.java

@@ -0,0 +1,107 @@
+package com.persagy.dmp.middleware.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.middleware.constant.enums.RelationTypeEnum;
+import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
+import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
+import com.persagy.dmp.middleware.entity.response.CommonResult;
+import com.persagy.dmp.middleware.service.IBaseService;
+import com.persagy.dmp.middleware.service.IFloorService;
+import com.persagy.dmp.middleware.utils.EntityTransferUtil;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+/**
+ * @ClassName FloorController
+ * @Description: 楼层
+ * @Author linhuili
+ * @Date 2021/9/9 10:24
+ * @Version V1.0
+ **/
+@RestController
+@RequestMapping("floor")
+public class FloorController {
+
+    @Autowired
+    private IFloorService floorService;
+
+    @Autowired
+    private IBaseService baseService;
+
+    /**
+     * 查询建筑下的楼层列表
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/queryList")
+    public CommonResult queryList(@QueryParam("groupCode") String groupCode,@QueryParam("projectId") String projectId,
+                              @RequestBody CommonRequestDTO request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, null);
+        // 非空校验
+        if(StringUtils.isEmpty(request.getBuildId())){
+            throw new Exception("建筑ID不能为空");
+        }
+        // 条件转换
+        QueryCriteria queryCriteria = EntityTransferUtil.transDmpRelationCriteria(RelationTypeEnum.ARCHSUBSET_BD2FL.getGraphCode(), RelationTypeEnum.ARCHSUBSET_BD2FL.getRelCode(), request.getBuildId(), 0);
+        // 查询建筑下的楼层列表
+        CommonResult response = baseService.doQuery(context,queryCriteria ,null);
+        return  response;
+    }
+
+
+    /**
+     * 统计楼层下各信息
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/count")
+    public CommonResult count(@QueryParam("groupCode") String groupCode,@QueryParam("projectId") String projectId,
+                              @RequestBody CommonRequestDTO request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, null);
+        // 非空校验
+        if(StringUtils.isEmpty(request.getBuildId())){
+            throw new Exception("建筑ID不能为空");
+        }
+        // 统计楼层下各信息
+        CommonResult response = floorService.count(context,request);
+        return  response;
+    }
+
+    /**
+     *  查询/统计楼层下的设备,空间,阀门
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public CommonResult query(@QueryParam("groupCode") String groupCode,@QueryParam("projectId") String projectId,
+                              @RequestBody CommonRequestDTO request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, null);
+        // 非空校验
+        if(StringUtils.isEmpty(request.getBuildId())){
+            throw new Exception("建筑ID不能为空");
+        }
+        //查询/统计楼层下的设备空间
+        CommonResult response = floorService.query(context,request);
+        return  response;
+    }
+
+
+}

+ 75 - 0
src/main/java/com/persagy/dmp/middleware/controller/SpaceController.java

@@ -0,0 +1,75 @@
+package com.persagy.dmp.middleware.controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
+import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
+import com.persagy.dmp.middleware.entity.response.CommonResult;
+import com.persagy.dmp.middleware.service.IBaseService;
+import com.persagy.dmp.middleware.service.ISpaceService;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+/**
+ * @ClassName ObjectInstanceController
+ * @Description: 空间模块
+ * @Author linhuili
+ * @Date 2021/9/10 11:17
+ * @Version V1.0
+ **/
+@RestController
+@RequestMapping("space")
+public class SpaceController {
+
+    @Autowired
+    private ISpaceService spaceService;
+
+    @Autowired
+    private IBaseService baseService;
+
+    /**
+     * 查询空间详情
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/query")
+    public CommonResult count(@QueryParam("groupCode") String groupCode, @QueryParam("projectId") String projectId,
+                              @RequestBody CommonRequestDTO request) throws Exception {
+        // 组装上下文条件
+        InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, null);
+        // 非空校验
+        if(StringUtils.isEmpty(request.getFloorId())){
+            throw new Exception("空间ID不能为空");
+        }
+        //封装中台查询条件
+        QueryCriteria queryCriteria = commbineDmpCriteria(request);
+        //查询空间信息
+        CommonResult response = baseService.doQuery(context,queryCriteria, JSONObject.class);
+        return  response;
+    }
+
+    /**
+     * 封装中台查询条件
+     * @param requestDTO
+     * @return
+     */
+    private QueryCriteria commbineDmpCriteria(CommonRequestDTO requestDTO){
+        ObjectNode jsonNodes = JsonNodeFactory.instance.objectNode();
+        jsonNodes.put("id",requestDTO.getSpaceId());
+        QueryCriteria criteria = new QueryCriteria();
+        criteria.setCriteria(jsonNodes);
+        return criteria;
+    }
+    
+}

+ 14 - 0
src/main/java/com/persagy/dmp/middleware/dao/DefineTypeRelMapper.java

@@ -0,0 +1,14 @@
+package com.persagy.dmp.middleware.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.middleware.entity.vo.DefineTypeRel;
+
+/**
+ * @ClassName DefineTypeRelMapper
+ * @Description: 关系映射dao
+ * @Author linhuili
+ * @Date 2021/9/9 10:24
+ * @Version V1.0
+ **/
+public interface DefineTypeRelMapper extends BaseMapper<DefineTypeRel> {
+}

+ 19 - 0
src/main/java/com/persagy/dmp/middleware/entity/dto/CommonRequestDTO.java

@@ -0,0 +1,19 @@
+package com.persagy.dmp.middleware.entity.dto;
+
+import lombok.Data;
+
+/**
+ * 通用请求参数
+ */
+@Data
+public class CommonRequestDTO {
+
+    /** 建筑id */
+    private String buildId;
+
+    /** 楼层id */
+    private String floorId;
+
+    /** 空间id */
+    private String spaceId;
+}

+ 9 - 0
src/main/java/com/persagy/dmp/middleware/entity/dto/FloorDTO.java

@@ -0,0 +1,9 @@
+package com.persagy.dmp.middleware.entity.dto;
+
+import lombok.Data;
+
+@Data
+public class FloorDTO {
+
+
+}

+ 42 - 0
src/main/java/com/persagy/dmp/middleware/entity/dto/InstanceUrlParam.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.middleware.entity.dto;
+
+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/dmp/middleware/entity/dto/ObjRelationDTO.java

@@ -0,0 +1,37 @@
+package com.persagy.dmp.middleware.entity.dto;
+
+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/dmp/middleware/entity/dto/RelationDTO.java

@@ -0,0 +1,55 @@
+package com.persagy.dmp.middleware.entity.dto;
+
+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;
+}

+ 55 - 0
src/main/java/com/persagy/dmp/middleware/entity/response/CommonResult.java

@@ -0,0 +1,55 @@
+package com.persagy.dmp.middleware.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.persagy.dmp.common.constant.ResponseCode;
+import lombok.Data;
+
+/**
+ * 服务调用消息结果
+ * @author Charlie Yu
+ * @date 2021-03-25
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class CommonResult<T> {
+
+    /** 不需要提示 */
+    public static final CommonResult SUCCESS = new CommonResult();
+
+    private String result;
+    private String message;
+    private T content;
+    private Long count;
+
+    /**
+     * 构造方法
+     */
+    public CommonResult(){
+        this(ResponseCode.A00000.getCode(), ResponseCode.A00000.getDesc());
+    }
+
+    /**
+     * 构造方法
+     * @param respCode 响应码
+     * @param respMsg 提示信息
+     */
+    public CommonResult(String respCode, String respMsg) {
+        this(respCode, respMsg,null);
+    }
+
+    /**
+     * 构造方法
+     * @param respCode 响应码
+     * @param respMsg 提示信息
+     * @param content 数据
+     */
+    public CommonResult(String respCode, String respMsg, T content){
+        this.result = respCode;
+        this.message = respMsg;
+        this.content = content;
+    }
+
+    public static <T> CommonResult<T> success(T t) {
+        return  new CommonResult<>(ResponseCode.A00000.getCode(), ResponseCode.A00000.getDesc(),t);
+    }
+}

+ 80 - 0
src/main/java/com/persagy/dmp/middleware/entity/response/DmpResult.java

@@ -0,0 +1,80 @@
+package com.persagy.dmp.middleware.entity.response;
+
+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);
+        }
+    }
+
+}

+ 36 - 0
src/main/java/com/persagy/dmp/middleware/entity/vo/DefineTypeRel.java

@@ -0,0 +1,36 @@
+package com.persagy.dmp.middleware.entity.vo;
+
+import lombok.Data;
+
+/**
+ * @ClassName DefineTypeRel
+ * @Description: 广联达关系映射
+ * @Author linhuili
+ * @Date 2021/9/9 10:23
+ * @Version V1.0
+ **/
+@Data
+public class DefineTypeRel {
+
+    /** id */
+    private Integer id;
+
+    /** 模块编码 */
+    private String modelCode;
+
+    /** 系统编码 */
+    private String systemCode;
+
+    /** 系统名称 */
+    private String systemName;
+
+    /** BIM构建编码 */
+    private String bimTypeId;
+
+    /** 类型名称 */
+    private String className;
+
+    /** 分类:space, equipment,materia */
+    private String objType;
+
+}

+ 48 - 0
src/main/java/com/persagy/dmp/middleware/service/IBaseService.java

@@ -0,0 +1,48 @@
+package com.persagy.dmp.middleware.service;
+
+import com.persagy.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
+import com.persagy.dmp.middleware.entity.response.CommonResult;
+
+import java.util.List;
+
+/**
+ * 通用接口
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+public interface IBaseService<T> {
+
+    /**
+     * 查询
+     * @param request
+     * @return
+     */
+    CommonResult doQuery(InstanceUrlParam context, QueryCriteria request, Class<T> clazz);
+
+    /**
+     * 新增
+     * @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);
+}

+ 17 - 0
src/main/java/com/persagy/dmp/middleware/service/IEquipService.java

@@ -0,0 +1,17 @@
+package com.persagy.dmp.middleware.service;
+
+import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
+import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
+import com.persagy.dmp.middleware.entity.response.CommonResult;
+
+/**
+ * @ClassName ObjectInstanceService
+ * @Description: 设备设施模块
+ * @Author linhuili
+ * @Date 2021/9/10 11:17
+ * @Version V1.0
+ **/
+public interface IEquipService {
+
+    CommonResult query(InstanceUrlParam context, CommonRequestDTO requestDTO);
+}

+ 31 - 0
src/main/java/com/persagy/dmp/middleware/service/IFloorService.java

@@ -0,0 +1,31 @@
+package com.persagy.dmp.middleware.service;
+
+import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
+import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
+import com.persagy.dmp.middleware.entity.response.CommonResult;
+
+/**
+ * @ClassName FloorService
+ * @Description: 楼层
+ * @Author linhuili
+ * @Date 2021/9/9 10:24
+ * @Version V1.0
+ **/
+public interface IFloorService{
+
+    /**
+     * 统计楼层基本信息
+     * @param context
+     * @param requestDTO
+     * @return
+     */
+    CommonResult count(InstanceUrlParam context, CommonRequestDTO requestDTO);
+
+    /**
+     * 查询楼层下的设备空间阀门信息
+     * @param context
+     * @param requestDTO
+     * @return
+     */
+    CommonResult query(InstanceUrlParam context, CommonRequestDTO requestDTO);
+}

+ 17 - 0
src/main/java/com/persagy/dmp/middleware/service/ISpaceService.java

@@ -0,0 +1,17 @@
+package com.persagy.dmp.middleware.service;
+
+import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
+import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
+import com.persagy.dmp.middleware.entity.response.CommonResult;
+
+/**
+ * @ClassName ObjectInstanceService
+ * @Description: 设备设施模块
+ * @Author linhuili
+ * @Date 2021/9/10 11:17
+ * @Version V1.0
+ **/
+public interface ISpaceService {
+
+    CommonResult query(InstanceUrlParam context, CommonRequestDTO requestDTO);
+}

+ 271 - 0
src/main/java/com/persagy/dmp/middleware/service/impl/AbstractBaseServiceImpl.java

@@ -0,0 +1,271 @@
+package com.persagy.dmp.middleware.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.ReflectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.basic.utils.JsonNodeUtils;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.common.utils.JsonHelper;
+import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
+import com.persagy.dmp.middleware.entity.response.CommonResult;
+import com.persagy.dmp.middleware.entity.response.DmpResult;
+import com.persagy.dmp.middleware.service.IBaseService;
+import com.persagy.dmp.middleware.utils.EntityTransferUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.persagy.dmp.middleware.client.DmpRwdClient;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.ParameterizedType;
+import java.util.*;
+
+/**
+ * ADM 抽象实现类
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+@Slf4j
+@Service
+public class AbstractBaseServiceImpl<T> implements IBaseService<T> {
+
+    @Autowired
+    private DmpRwdClient rwdClient;
+
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    /**
+     * 查询
+     * @param dmpRequest
+     * @return
+     */
+    @Override
+    public CommonResult doQuery(InstanceUrlParam context, QueryCriteria dmpRequest, Class<T> clazz) {
+        // 转换参数
+        JSONObject para = null;
+        try {
+            para = JsonHelper.toJSONObject(dmpRequest);
+        } catch (IOException e) {
+            log.error(e.getMessage(), e);
+            return null;
+        }
+        // 调用中台查询
+        DmpResult<JSONArray> dmpResult = rwdClient.queryObject(context, para);
+        JSONArray data = dmpResult.getData();
+        // 设置返回值
+        List<JSONObject> VOs = EntityTransferUtil.toMultiEntity(data);
+        CommonResult response = CommonResult.success(VOs);
+        Long total = dmpResult.getCount() == null ? null : dmpResult.getCount().longValue();
+        response.setCount(total);
+        return response;
+    }
+
+    /**
+     * 将集合转换为Map
+     * @param list 集合
+     * @param keyField key属性名
+     * @param valueField value属性名
+     * @return
+     */
+    private static Map<String, List<String>> groupMapList(List<?> list, String keyField, String valueField) {
+        if(CollUtil.isEmpty(list)) {
+            return null;
+        }
+        Map<String, List<String>> groupMap = new HashMap<>();
+        for(Object vo:list) {
+            String key = (String) ReflectUtil.getFieldValue(vo, keyField);
+            String value = (String) ReflectUtil.getFieldValue(vo, valueField);
+            if(!StrUtil.isAllNotBlank(key, value)) {
+                continue;
+            }
+            List<String> valueList = groupMap.get(key);
+            if(CollUtil.isEmpty(valueList)) {
+                valueList = new ArrayList<>();
+                groupMap.put(key, valueList);
+            }
+            valueList.add(value);
+        }
+        return groupMap;
+    }
+
+    /**
+     * 查询关系
+     * @param context
+     * @param idList
+     * @param anno
+     * @return
+     */
+  /*  private List<ObjectRelation> queryRelations(InstanceUrlParam context, Set<String>idList, CascadeColumn anno) {
+        // 如果没有任何配置,不处理
+        if(StrUtil.isBlank(anno.graphCode()) && StrUtil.isBlank(anno.relCode()) &&
+                StrUtil.isBlank(anno.relValue())) {
+            return null;
+        }
+        // 查询关系
+        QueryCriteria queryRequest = new QueryCriteria();
+        ObjectNode criteria = JsonNodeFactory.instance.objectNode();
+        queryRequest.setCriteria(criteria);
+        boolean isSelectTo = anno.selectToObj();
+        putString(criteria, "graphCode", anno.graphCode());
+        putString(criteria, "relCode", anno.relCode());
+        putString(criteria, "relValue", anno.relValue());
+        ArrayNode array = criteria.putObject(isSelectTo?"objFrom":"objTo").putArray("$in");
+        idList.forEach(id -> array.add(id));
+        return SpringHelper.getBean(IAdmRelationService.class).queryByCondition(context, queryRequest);
+    }*/
+
+    /**
+     * 添加字符串条件
+     * @param node
+     * @param key
+     * @param value
+     */
+    private void putString(ObjectNode node, String key, String value) {
+        if(StrUtil.isBlank(value)) {
+            return;
+        }
+        node.put(key, value);
+    }
+
+    /**
+     * 将子集写回到对象中
+     * @param voMap 原始对象Map
+     * @param idMap 主键映射<mainId, List<subId>>
+     * @param vos 子对象
+     * @param casField 子对象对应属性
+     */
+    private <V> void writeToVOs(Map<String, Object> voMap, Map<String, List<String>> idMap, List<V> vos, Field casField) {
+        if(CollUtil.isEmpty(vos) || MapUtil.isEmpty(idMap)) {
+            return;
+        }
+        // 转换为Map
+        Map<String, V> subVOMap = CollUtil.fieldValueMap(vos, BaseEntity.PROP_ID);
+        // 是否为集合
+        boolean isList = List.class.isAssignableFrom(casField.getType());
+        // 按对象循环
+        for(String id:voMap.keySet()) {
+            Object mainVO = voMap.get(id);
+            List<String> subIdList = idMap.get(id);
+            if(CollUtil.isEmpty(subIdList)) {
+                continue;
+            }
+            // 如果是集合
+            if(isList) {
+                // 取出对应的对象集合
+                Map<String, V> currVOMap = MapUtil.filter(subVOMap, subIdList.toArray(new String[0]));
+                List<V> voList = CollUtil.newArrayList(currVOMap.values());
+                ReflectUtil.setFieldValue(mainVO, casField, voList);
+            } else {
+                // 非集合取第一个即可
+                String subId = subIdList.get(0);
+                V vo = subVOMap.get(subId);
+                ReflectUtil.setFieldValue(mainVO, casField, vo);
+            }
+        }
+    }
+
+    /**
+     * 获取实际的Class
+     * @param casField
+     * @return
+     */
+    private Class getFieldRealClass(Field casField) {
+        // 取到Field
+        Class clazz = casField.getType();
+        // 如果是集合,则取实际的对象
+        if(List.class.isAssignableFrom(clazz)) {
+            clazz = (Class) ((ParameterizedType) casField.getGenericType()).getActualTypeArguments()[0];
+        }
+        return clazz;
+    }
+
+    /**
+     * 通过Class获取其对象类型
+     * @param clazz
+     * @return
+     */
+    private String getObjTypeByClass(Class clazz) {
+        // 获取关联对象的类型
+        String objectType = null;
+        try {
+            objectType = (String) ReflectUtil.getFieldValue(clazz.newInstance(), "objectType");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return objectType;
+    }
+
+    /**
+     * 新增
+     * @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 = EntityTransferUtil.toDmpMultiEntity(voList);
+        // 调用中台新增
+        DmpResult<JSONArray> response = rwdClient.createObject(context, JSONArray.parseArray(vos.toString()));
+        if(!DmpResult.SUCCESS.equals(response.getResult())) {
+            throw new RuntimeException("调用中台查询接口出错:" + response.getMessage());
+        }
+        // 转换为结果
+        return EntityTransferUtil.toAdmMultiEntity(response.getData(), null, 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 = EntityTransferUtil.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 EntityTransferUtil.toAdmMultiEntity(response.getData(),null, 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());
+        }
+    }
+}

+ 31 - 0
src/main/java/com/persagy/dmp/middleware/service/impl/EquipServiceImpl.java

@@ -0,0 +1,31 @@
+package com.persagy.dmp.middleware.service.impl;
+
+import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
+import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
+import com.persagy.dmp.middleware.entity.response.CommonResult;
+import com.persagy.dmp.middleware.service.IEquipService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ClassName ObjectInstanceServiceImpl
+ * @Description: 广联达:查询设备,空间,阀门
+ * @Author linhuili
+ * @Date 2021/9/10 11:17
+ * @Version V1.0
+ **/
+@Service
+public class EquipServiceImpl implements IEquipService {
+
+    /**
+     * 查询设备设施模块下的设备/阀门
+     * @param context
+     * @param requestDTO
+     * @return
+     */
+    @Override
+    public CommonResult query(InstanceUrlParam context, CommonRequestDTO requestDTO) {
+        return null;
+    }
+
+
+}

+ 140 - 0
src/main/java/com/persagy/dmp/middleware/service/impl/FloorServiceImpl.java

@@ -0,0 +1,140 @@
+package com.persagy.dmp.middleware.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.define.entity.ObjectInfoDefine;
+import com.persagy.dmp.digital.entity.ObjectDigital;
+import com.persagy.dmp.middleware.constant.CommonConsant;
+import com.persagy.dmp.middleware.constant.enums.RelationTypeEnum;
+import com.persagy.dmp.middleware.dao.DefineTypeRelMapper;
+import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
+import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
+import com.persagy.dmp.middleware.entity.response.CommonResult;
+import com.persagy.dmp.middleware.entity.vo.DefineTypeRel;
+import com.persagy.dmp.middleware.service.IBaseService;
+import com.persagy.dmp.middleware.service.IFloorService;
+import com.persagy.dmp.middleware.utils.EntityTransferUtil;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Wrapper;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName FloorServiceImpl
+ * @Description: 楼层
+ * @Author linhuili
+ * @Date 2021/9/9 10:24
+ * @Version V1.0
+ **/
+@Service
+public class FloorServiceImpl implements IFloorService {
+
+    @Autowired
+    private IBaseService baseService;
+
+    @Autowired
+    private DefineTypeRelMapper defineTypeRelMapper;
+
+    /**
+     * 统计楼层下各信息
+     * @param context
+     * @param requestDTO
+     * @return
+     */
+    @Override
+    public CommonResult count(InstanceUrlParam context, CommonRequestDTO requestDTO) {
+        ArrayNode result = JsonNodeFactory.instance.arrayNode();
+
+        //查询楼层信息
+        List<JSONObject> floorList = queryFloorList(context, requestDTO);
+        if(CollUtil.isEmpty(floorList)){
+            return CommonResult.success(result);
+        }
+
+       // Map<String, JSONObject> floorMap = floorList.stream().collect(Collectors.toMap(entry -> entry.getString("id"),entry->entry, (k1, k2) -> k1));
+        ObjectNode content = JsonNodeFactory.instance.objectNode();
+        //统计各楼层面积
+        Long buildArea = getFloorArea(floorList, CommonConsant.FLOOR_AREA);
+        //统计各楼层租赁面积
+        Long leaseArea = getFloorArea(floorList, CommonConsant.FLOOR_LEASE_AREA);
+
+        content.put("buildArea",buildArea);
+        content.put("leaseArea",leaseArea);
+        result.add(content);
+        return CommonResult.success(content);
+    }
+
+    /**
+     * 查询楼层下的设备,空间,阀门
+     * @param context
+     * @param requestDTO
+     * @return
+     */
+    @Override
+    public CommonResult query(InstanceUrlParam context, CommonRequestDTO requestDTO) {
+        List<DefineTypeRel> floorDefineTypeRel = getFloorDefineTypeRel();
+        Set<String> bimTypeIds = floorDefineTypeRel.stream().filter(k->StringUtils.isNotEmpty(k.getBimTypeId())).map(k->k.getBimTypeId()).collect(Collectors.toSet());
+        QueryCriteria queryCriteria = new QueryCriteria();
+        return null;
+    }
+
+    /**
+     * 查询楼层列表
+     * @param context
+     * @param requestDTO
+     * @return
+     */
+    private List<JSONObject> queryFloorList(InstanceUrlParam context, CommonRequestDTO requestDTO){
+        // 条件转换
+        QueryCriteria queryCriteria = EntityTransferUtil.transDmpRelationCriteria(RelationTypeEnum.ARCHSUBSET_BD2FL.getGraphCode(), RelationTypeEnum.ARCHSUBSET_BD2FL.getRelCode(), requestDTO.getBuildId(), 0);
+        // 查询建筑下的楼层列表
+        CommonResult response = baseService.doQuery(context,queryCriteria ,null);
+        return (List<JSONObject>)response.getContent();
+    }
+
+    /**
+     * 获取各楼层总面积
+     * @param floorList
+     * @param key
+     * @return
+     */
+    private Long getFloorArea(List<JSONObject> floorList,String key){
+        Set<Long> areas = floorList.stream().filter(k->k.getLong(key) !=null).map(k->k.getLong(key)).collect(Collectors.toSet());
+        if(CollUtil.isEmpty(areas)){
+            return 0L;
+        }
+        Long sum = areas.stream().reduce(0L, (current, number) -> current + number);
+        return sum;
+    }
+
+    /**
+     * 查询楼层模块下的空间/设备/阀门类型
+     */
+    private List<DefineTypeRel> getFloorDefineTypeRel(){
+        QueryWrapper<DefineTypeRel> wrapper = new QueryWrapper<>();
+        List<DefineTypeRel> defineTypeRels = defineTypeRelMapper.selectList(wrapper);
+        if(CollUtil.isEmpty(defineTypeRels)){
+            return new ArrayList<>();
+        }
+        //过滤楼层中不需要的类型
+        Iterator<DefineTypeRel> iterator = defineTypeRels.iterator();
+        while (iterator.hasNext()){
+            DefineTypeRel rel = iterator.next();
+            if(StringUtils.isNotEmpty(rel.getModelCode()) && !"LC".equals(rel.getModelCode())){
+                iterator.remove();
+            }
+        }
+        return defineTypeRels;
+    }
+
+}

+ 31 - 0
src/main/java/com/persagy/dmp/middleware/service/impl/SpaceServiceImpl.java

@@ -0,0 +1,31 @@
+package com.persagy.dmp.middleware.service.impl;
+
+import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
+import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
+import com.persagy.dmp.middleware.entity.response.CommonResult;
+import com.persagy.dmp.middleware.service.IEquipService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ClassName ObjectInstanceServiceImpl
+ * @Description: 广联达:查询空间信息
+ * @Author linhuili
+ * @Date 2021/9/10 11:17
+ * @Version V1.0
+ **/
+@Service
+public class SpaceServiceImpl implements IEquipService {
+
+    /**
+     * 查询设备设施模块下的设备/阀门
+     * @param context
+     * @param requestDTO
+     * @return
+     */
+    @Override
+    public CommonResult query(InstanceUrlParam context, CommonRequestDTO requestDTO) {
+        return null;
+    }
+
+
+}

+ 190 - 0
src/main/java/com/persagy/dmp/middleware/utils/EntityTransferUtil.java

@@ -0,0 +1,190 @@
+package com.persagy.dmp.middleware.utils;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ArrayUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+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.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.basic.utils.JsonNodeUtils;
+import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * ADM通用查询条件
+ * @author Charlie Yu
+ * @date 2021-08-16
+ */
+public class EntityTransferUtil {
+
+    /**
+     * 转换为数据中台对象
+     * @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 data
+     * @return
+     */
+    public static List<JSONObject> toMultiEntity(JSONArray data) {
+        List<JSONObject> result = new ArrayList<>();
+        for (Object datum : data) {
+            result.add(JSONObject.parseObject(JSON.toJSONString(datum)));
+        }
+        return result;
+    }
+
+
+    /**
+     * 转换为数据中心对象
+     * @param array 数据中台对象
+     * @param clazz 数据中心对象class
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> toAdmMultiEntity(List array, List<String> projection, Class<T> clazz) {
+        ArrayNode dataNode = JsonNodeUtils.toArrayNode(array, null, null);
+        return toAdmMultiEntity(dataNode, projection, clazz);
+    }
+
+    /**
+     * 转换为数据中心对象
+     * @param array
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> toAdmMultiEntity(ArrayNode array, List<String> projection, Class<T> clazz) {
+        if(ArrayUtil.isEmpty(array)) {
+            return null;
+        }
+        // 转换属性名
+        for(int i = 0, j = array.size();i < j;i++) {
+            JsonNode node = array.get(i);
+            if(node != null && node.isObject()) {
+                resetAdmProperty((ObjectNode) node, projection);
+            }
+        }
+        return JsonNodeUtils.toEntity(array, clazz, "infos");
+    }
+
+    /**
+     * 转换为数据中心对象
+     * @param node
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> T toAdmSingleEntity(ObjectNode node, List<String> projection, Class<T> clazz) {
+        resetAdmProperty(node, projection);
+        return JsonNodeUtils.toEntity(node, clazz, "infos");
+    }
+
+    /**
+     * 处理dmp转adm对象的属性名
+     * @param node
+     */
+    private static void resetAdmProperty(ObjectNode node, List<String> projection) {
+        // 转换属性名 TODO 目前只有创建时间和修改时间需要转换,后续有其他时通过建立映射在此转换即可
+        copyProperty(node, "creationTime", "createTime");
+        copyProperty(node, "modifiedTime", "lastUpdate");
+        copyProperty(node, "objType", "objectType");
+        removeProperty(node, projection);
+    }
+
+    /**
+     * 拷贝属性
+     * @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, List<String> projection){
+        if(CollUtil.isNotEmpty(projection)) {
+            // 转换为Set,提供遍历效率
+            Set<String> fieldSet = CollUtil.newHashSet(projection);
+            Iterator<String> fields =  dmpData.fieldNames();
+            while (fields.hasNext()) {
+                String field = fields.next();
+                // 返回结果中包含的不处理
+                if(fieldSet.contains(field)) {
+                    continue;
+                }
+                // 去掉不包含的属性
+                fields.remove();
+            }
+        } else {
+            // 返回全部时,去掉不需要属性
+            List<String> removeList = CollUtil.newArrayList("creator", "groupCode", "valid", "createApp", "virtualCodes", "updateApp", "grouping", "modifier");
+            for(String removeField:removeList) {
+                dmpData.remove(removeField);
+            }
+        }
+    }
+
+    /**
+     * 获取查询条件
+     * @param graphCode
+     * @param relCode
+     * @param id (fromID/targetID)
+     * @param direct  0 正向 1反向
+     * @return
+     */
+    public static QueryCriteria transDmpRelationCriteria(String graphCode, String relCode, String id, Integer direct){
+        QueryCriteria queryCriteria = new QueryCriteria();
+        ObjectNode relation = JsonNodeFactory.instance.objectNode();
+
+        ObjectNode object = JsonNodeFactory.instance.objectNode();
+        object.put("graphCode", graphCode);
+        object.put("relCode", relCode);
+        if(direct == 0){
+            //正向查询 objFrom->objTo
+            object.put("objFrom", id);
+            relation.put("relationTo",object);
+        }else{
+            //反向查询 objTo->objFrom
+            object.put("objTo", id);
+            relation.put("relationFrom",object);
+        }
+        queryCriteria.setCriteria(relation);
+        return queryCriteria;
+    }
+
+}

+ 257 - 0
src/main/resources/db.init/data.sql

@@ -0,0 +1,257 @@
+- ----------------------------
+-- Records of define_type_rel
+-- ----------------------------
+BEGIN;
+REPLACE INTO `define_type_rel` VALUES (1, 'LC', 'LC', '楼层功能', '1.3.2.0', '商铺', 'space');
+REPLACE INTO `define_type_rel` VALUES (2, 'LC', 'LC', '楼层功能', '1.3.2.0', '商铺', 'space');
+REPLACE INTO `define_type_rel` VALUES (3, 'LC', 'LC', '楼层功能', '2.5.1.0', '主出入口', 'space');
+REPLACE INTO `define_type_rel` VALUES (4, 'LC', 'ntxt', '楼层功能', '3.2.1.1', '主设备机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (5, 'LC', 'ntxt', '楼层功能', '3.2.1.2', '主设备机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (6, 'LC', 'gdxt', '楼层功能', '3.2.2.3', '主设备机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (7, 'LC', 'jpsxt', '楼层功能', '3.2.1.15', '主设备机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (8, 'LC', 'xfxt', '楼层功能', '3.2.1.27', '主设备机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (9, 'LC', 'xfxt', '楼层功能', '3.2.1.28', '主设备机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (10, 'LC', 'gdxt', '楼层功能', '3.2.2.1', '主设备机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (11, 'LC', 'gdxt', '楼层功能', '3.2.2.2', '主设备机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (12, 'LC', 'gdxt', '楼层功能', '3.2.2.6', '主设备机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (13, 'LC', 'rdxt', '楼层功能', '3.2.2.14', '主设备机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (14, 'LC', 'LC', '楼层功能', '3.2.5.6', '主设备机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (15, 'LC', 'xfxt', '楼层功能', 'FireZone', '防火分区', 'space');
+REPLACE INTO `define_type_rel` VALUES (16, 'LC', 'LC', '楼层功能', '3.1.1.0', '商管办公室', 'space');
+REPLACE INTO `define_type_rel` VALUES (17, 'LC', 'dtxt', '楼层功能', '2.7.1.5', '观光电梯', 'space');
+REPLACE INTO `define_type_rel` VALUES (18, 'LC', 'dtxt', '楼层功能', '2.7.1.0', '客梯', 'space');
+REPLACE INTO `define_type_rel` VALUES (19, 'LC', 'dtxt', '楼层功能', '2.7.2.0', '货梯', 'space');
+REPLACE INTO `define_type_rel` VALUES (20, 'LC', 'dtxt', '楼层功能', '2.7.1.4', '人行步道', 'space');
+REPLACE INTO `define_type_rel` VALUES (21, 'LC', 'dtxt', '楼层功能', '2.7.1.3', '自动扶梯', 'space');
+REPLACE INTO `define_type_rel` VALUES (22, 'LC', 'jpsxt', '楼层功能', '2.6.1.0', '卫生间', 'space');
+REPLACE INTO `define_type_rel` VALUES (23, 'LC', 'jpsxt', '楼层功能', '2.6.2.0', '卫生间', 'space');
+REPLACE INTO `define_type_rel` VALUES (24, 'LC', 'jpsxt', '楼层功能', '2.6.3.0', '卫生间', 'space');
+REPLACE INTO `define_type_rel` VALUES (25, 'LC', 'jpsxt', '楼层功能', '2.6.4.0', '卫生间', 'space');
+REPLACE INTO `define_type_rel` VALUES (26, 'LC', 'jpsxt', '楼层功能', '2.6.5.0', '卫生间', 'space');
+REPLACE INTO `define_type_rel` VALUES (27, 'LC', 'LC', '楼层功能', '2.5.5.0', '连通口', 'space');
+REPLACE INTO `define_type_rel` VALUES (28, 'LC', 'LC', '楼层功能', '2.7.3.1', '安全出口', 'space');
+REPLACE INTO `define_type_rel` VALUES (29, 'LC', 'LC', '楼层功能', '2.7.3.2', '安全出口', 'space');
+REPLACE INTO `define_type_rel` VALUES (30, 'LC', 'LC', '楼层功能', '2.7.3.3', '安全出口', 'space');
+REPLACE INTO `define_type_rel` VALUES (31, 'LC', 'LC', '楼层功能', '2.7.3.4', '安全出口', 'space');
+REPLACE INTO `define_type_rel` VALUES (32, 'LC', 'LC', '楼层功能', '2.6.6.0', '母婴室', 'space');
+REPLACE INTO `define_type_rel` VALUES (33, 'LC', 'LC', '楼层功能', '2.3.0.0', '疏散通道', 'space');
+REPLACE INTO `define_type_rel` VALUES (34, 'gdxt', 'gdxt', '供电系统', '3.2.2.2', '变电所', 'space');
+REPLACE INTO `define_type_rel` VALUES (35, 'gdxt', 'gdxt', '供电系统', '3.2.2.1', '开闭所', 'space');
+REPLACE INTO `define_type_rel` VALUES (36, 'gdxt', 'ntxt', '供电系统', '3.2.1.1', '制冷机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (37, 'gdxt', 'gdxt', '供电系统', '3.2.2.6', '配电间', 'space');
+REPLACE INTO `define_type_rel` VALUES (38, 'gdxt', 'gdxt', '供电系统', '3.2.9.3', '强电井', 'space');
+REPLACE INTO `define_type_rel` VALUES (39, 'ntxt', 'ntxt', '暖通系统', '3.2.1.1', '制冷机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (40, 'ntxt', 'ntxt', '暖通系统', '3.2.1.8', '排风机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (41, 'ntxt', 'ntxt', '暖通系统', '3.2.1.2', '热源机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (42, 'ntxt', 'ntxt', '暖通系统', '3.2.1.4', '空调机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (43, 'ntxt', 'ntxt', '暖通系统', '3.2.1.7', '送风机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (44, 'ntxt', 'ntxt', '暖通系统', '3.2.1.3', '制冷换热站', 'space');
+REPLACE INTO `define_type_rel` VALUES (45, 'ntxt', 'rqxt', '暖通系统', '3.2.1.38', '燃气调压站', 'space');
+REPLACE INTO `define_type_rel` VALUES (46, 'ntxt', 'ntxt', '暖通系统', '3.2.9.1', '水暖井', 'space');
+REPLACE INTO `define_type_rel` VALUES (47, 'xfxt', 'rdxt', '消防系统', '3.2.2.14', '慧云机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (48, 'xfxt', 'xfxt', '消防系统', '3.2.1.31', '报警阀室', 'space');
+REPLACE INTO `define_type_rel` VALUES (49, 'xfxt', 'xfxt', '消防系统', '3.2.1.27', '消防水泵房', 'space');
+REPLACE INTO `define_type_rel` VALUES (50, 'xfxt', 'xfxt', '消防系统', '3.2.9.1', '水暖井', 'space');
+REPLACE INTO `define_type_rel` VALUES (51, 'rdxt', 'rdxt', '弱电系统', '3.2.2.14', '慧云机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (53, 'rdxt', 'rdxt', '弱电系统', '3.2.9.4', '弱电井', 'space');
+REPLACE INTO `define_type_rel` VALUES (54, 'rdxt', '', '弱电系统', NULL, '弱电分区', 'space');
+REPLACE INTO `define_type_rel` VALUES (55, 'xfxt', 'xfxt', '消防系统', 'FireZone', '防火分区', 'space');
+REPLACE INTO `define_type_rel` VALUES (56, 'jpsxt', 'jpsxt', '给排水系统', '3.2.1.25', '隔油间', 'space');
+REPLACE INTO `define_type_rel` VALUES (57, 'jpsxt', 'jpsxt', '给排水系统', '3.2.1.26', '污水处理间', 'space');
+REPLACE INTO `define_type_rel` VALUES (58, 'jpsxt', 'jpsxt', '给排水系统', '3.2.1.15', '生活水泵房', 'space');
+REPLACE INTO `define_type_rel` VALUES (59, 'jpsxt', 'jpsxt', '给排水系统', '2.6.1.0', '卫生间', 'space');
+REPLACE INTO `define_type_rel` VALUES (60, 'jpsxt', 'jpsxt', '给排水系统', '2.6.2.0', '卫生间', 'space');
+REPLACE INTO `define_type_rel` VALUES (61, 'jpsxt', 'jpsxt', '给排水系统', '2.6.3.0', '卫生间', 'space');
+REPLACE INTO `define_type_rel` VALUES (62, 'jpsxt', 'jpsxt', '给排水系统', '2.6.4.0', '卫生间', 'space');
+REPLACE INTO `define_type_rel` VALUES (63, 'jpsxt', 'jpsxt', '给排水系统', '3.2.1.23', '污水坑', 'space');
+REPLACE INTO `define_type_rel` VALUES (64, 'jpsxt', 'ntxt', '给排水系统', '3.2.1.1', '制冷机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (65, 'jpsxt', 'xfxt', '给排水系统', '3.2.1.27', '主设备机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (66, 'jpsxt', 'ntxt', '给排水系统', '3.2.1.2', '热源机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (67, 'dtxt', 'dtxt', '电梯系统', '2.7.1.5', '观光电梯', 'space');
+REPLACE INTO `define_type_rel` VALUES (68, 'dtxt', 'dtxt', '电梯系统', '2.7.1.0', '客梯', 'space');
+REPLACE INTO `define_type_rel` VALUES (69, 'dtxt', 'dtxt', '电梯系统', '2.7.2.0', '货梯', 'space');
+REPLACE INTO `define_type_rel` VALUES (70, 'dtxt', 'dtxt', '电梯系统', '2.7.1.4', '人行步道', 'space');
+REPLACE INTO `define_type_rel` VALUES (71, 'dtxt', 'dtxt', '电梯系统', '2.7.1.3', '自动扶梯', 'space');
+REPLACE INTO `define_type_rel` VALUES (72, 'rqxt', 'rqxt', '燃气系统', '3.2.1.35', '燃气表间', 'space');
+REPLACE INTO `define_type_rel` VALUES (73, 'rqxt', 'rqxt', '燃气系统', '3.2.1.38', '燃气调压站', 'space');
+REPLACE INTO `define_type_rel` VALUES (74, 'rqxt', 'ntxt', '燃气系统', '3.2.1.2', '热源机房', 'space');
+REPLACE INTO `define_type_rel` VALUES (378, NULL, 'gdxt', '供电系统', '20.40.10.30.20.20', '高压互投箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (379, NULL, 'gdxt', '供电系统', '20.40.10.20.10.45', '高压联络柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (380, NULL, 'gdxt', '供电系统', '20.40.10.20.20.30', '高压联络柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (381, NULL, 'gdxt', '供电系统', '20.40.10.20.10.10', '高压进线柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (382, NULL, 'gdxt', '供电系统', '20.40.10.20.20.10', '高压进线柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (383, NULL, 'gdxt', '供电系统', '20.40.10.20.10.40', '高压计量柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (384, NULL, 'gdxt', '供电系统', '20.40.10.20.20.40', '高压计量柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (385, NULL, 'gdxt', '供电系统', '20.40.10.20.10.20', '高压出线柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (386, NULL, 'gdxt', '供电系统', '20.40.10.20.20.20', '高压出线柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (387, NULL, 'gdxt', '供电系统', '20.40.10.10.10', '变压器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (388, NULL, 'gdxt', '供电系统', '20.40.10.20.30.20.10', '直流屏', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (389, NULL, 'gdxt', '供电系统', '20.40.10.20.30.20.20', '直流屏', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (390, NULL, 'gdxt', '供电系统', '20.40.10.40.10.10', '柴油发电机组', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (391, NULL, 'gdxt', '供电系统', '20.40.10.30.10.20', '低压联络柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (392, NULL, 'gdxt', '供电系统', '20.40.10.30.10.10', '低压进线柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (393, NULL, 'gdxt', '供电系统', '20.40.10.30.10.40', '低压出线柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (394, NULL, 'gdxt', '供电系统', '20.40.10.30.10.50', '低压补偿柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (395, NULL, 'ntxt', '暖通系统', '20.30.10.25.10.10', '压缩式螺杆冷水机组', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (396, NULL, 'ntxt', '暖通系统', '20.30.10.25.10.20', '压缩式离心冷水机组', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (397, NULL, 'ntxt', '暖通系统', '20.30.10.25.10.40', '吸收式冷水机组', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (398, NULL, 'ntxt', '暖通系统', '20.30.20.10', '冷却塔', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (399, NULL, 'ntxt', '暖通系统', '20.30.20.10.10', '超市冷却塔', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (400, NULL, 'ntxt', '暖通系统', '20.30.20.20.20', '冷却水泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (401, NULL, 'ntxt', '暖通系统', '20.30.20.20.10', '冷冻水泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (402, NULL, 'ntxt', '暖通系统', '20.30.20.40.10', '分水器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (403, NULL, 'ntxt', '暖通系统', '20.30.20.40.20', '集水器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (404, NULL, 'ntxt', '暖通系统', '20.30.10.05.10.05', '锅炉', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (405, NULL, 'ntxt', '暖通系统', '20.30.10.05.10.10', '锅炉', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (406, NULL, 'ntxt', '暖通系统', '20.20.10.10.10', '稳压罐', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (407, NULL, 'ntxt', '暖通系统', '20.30.20.30.20', '水处理加药装置', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (408, NULL, 'ntxt', '暖通系统', '20.80.10.15.45', '冷&热量表', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (409, NULL, 'ntxt', '暖通系统', '20.10.10.10.30.20', '热力循环泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (410, NULL, 'ntxt', '暖通系统', '20.30.10.20.40', '换热器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (411, NULL, 'ntxt', '暖通系统', '20.30.10.20.30', '换热器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (412, NULL, 'ntxt', '暖通系统', '20.30.10.20.20', '换热器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (413, NULL, 'ntxt', '暖通系统', '20.30.10.45.20', '软化水装置-软水箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (414, NULL, 'ntxt', '暖通系统', '20.30.20.50.10', '膨胀水箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (415, NULL, 'ntxt', '暖通系统', '20.30.20.50.20', '膨胀水箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (416, NULL, 'ntxt', '暖通系统', '20.30.10.32.20', '换季循环泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (417, NULL, 'ntxt', '暖通系统', '20.30.20.20.40', '冷却水泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (418, NULL, 'ntxt', '暖通系统', '20.30.20.20.30', '冷冻水泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (419, NULL, 'ntxt', '暖通系统', '20.30.10.20.10', '换热器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (420, NULL, 'ntxt', '暖通系统', '20.20.10.10.20.10', '冷冻补水泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (421, NULL, 'ntxt', '暖通系统', '20.20.10.10.20.20', '冷却补水泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (422, NULL, 'ntxt', '暖通系统', '20.30.40.05.10', '组合式空调机组', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (423, NULL, 'ntxt', '暖通系统', '20.30.40.50.10', '新风机组', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (424, NULL, 'ntxt', '暖通系统', '20.30.40.50.20', '新风机组', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (425, NULL, 'ntxt', '暖通系统', '20.30.40.05.20', '吊顶风柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (426, NULL, 'ntxt', '暖通系统', '20.30.40.55.10', '分体式空调', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (427, NULL, 'ntxt', '暖通系统', '20.30.40.55.20', '分体式空调', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (428, NULL, 'ntxt', '暖通系统', '20.30.40.55.30', '分体式空调', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (429, NULL, 'ntxt', '暖通系统', '20.30.40.35', '变风量空调末端', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (430, NULL, 'ntxt', '暖通系统', '20.30.30.10.60.10', '空气幕', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (431, NULL, 'ntxt', '暖通系统', '20.30.30.10.60.20', '空气幕', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (432, NULL, 'ntxt', '暖通系统', '20.30.30.10.60.30', '空气幕', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (433, NULL, 'ntxt', '暖通系统', '20.30.30.10.60.40', '空气幕', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (434, NULL, 'ntxt', '暖通系统', '20.30.30.10.60.50', '空气幕', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (435, NULL, 'ntxt', '暖通系统', '20.30.30.10.60.60', '空气幕', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (436, NULL, 'ntxt', '暖通系统', '20.80.10.05.76.10', '过滤器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (437, NULL, 'xfxt', '消防系统', '20.30.30.10.45', '排油烟风机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (438, NULL, 'xfxt', '消防系统', '20.30.30.10.35', '消防排烟风机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (439, NULL, 'xfxt', '消防系统', '20.30.30.10.40', '消防正压风机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (440, NULL, 'xfxt', '消防系统', '20.80.10.05.80', '防火阀', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (441, NULL, 'xfxt', '消防系统', '20.60.40.20.40', '消火栓加压泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (442, NULL, 'xfxt', '消防系统', '20.60.40.20.30', '预作用加压泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (443, NULL, 'xfxt', '消防系统', '20.60.40.30.10', '喷淋稳压泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (444, NULL, 'xfxt', '消防系统', '20.60.40.30.20', '消火栓稳压泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (445, NULL, 'xfxt', '消防系统', '20.60.40.20.70', '水炮泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (446, NULL, 'xfxt', '消防系统', '20.60.40.20.20', '水喷雾加压泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (447, NULL, 'xfxt', '消防系统', '20.60.40.20.10', '喷淋加压泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (448, NULL, 'xfxt', '消防系统', '20.60.40.20.60', '加密喷淋泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (449, NULL, 'xfxt', '消防系统', '20.60.40.20.50', '窗玻璃喷淋泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (450, NULL, 'xfxt', '消防系统', '20.60.40.20.80', '消防补水泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (451, NULL, 'xfxt', '消防系统', '20.60.40.70', '消防水箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (452, NULL, 'xfxt', '消防系统', '20.60.40.60.10', '消火栓系统稳压气压罐', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (453, NULL, 'xfxt', '消防系统', '20.60.40.60.20', '自动喷水系统稳压气压罐', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (454, NULL, 'xfxt', '消防系统', '20.60.30.05', '泡沫液贮罐', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (455, NULL, 'xfxt', '消防系统', '20.60.50.35', '消防水炮', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (456, NULL, 'xfxt', '消防系统', '20.60.60.20.10', '消防广播主机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (457, NULL, 'xfxt', '消防系统', '20.60.60.20.50.05', '电话主机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (458, NULL, 'xfxt', '消防系统', '20.60.60.60.50', '疏散照明主机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (459, NULL, 'xfxt', '消防系统', '20.60.60.10.74', '消防水炮控制主机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (460, NULL, 'xfxt', '消防系统', '20.60.60.10.60', '区域控制箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (461, NULL, 'xfxt', '消防系统', '20.70.20.20.30.45', '燃气报警控制器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (462, NULL, 'xfxt', '消防系统', '20.60.20.80', '气体灭火控制盘', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (463, NULL, 'xfxt', '消防系统', '20.60.20.05.20', '气熔胶设备', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (464, NULL, 'xfxt', '消防系统', '20.60.20.05.10', '七氟丙烷', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (465, NULL, 'xfxt', '消防系统', '20.60.60.30.20.20', '消防控制柜', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (466, NULL, 'xfxt', '消防系统', '20.70.20.20.30.15', '消防主机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (467, NULL, 'xfxt', '消防系统', '20.60.60.10.05', '火灾显示盘', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (468, NULL, 'xfxt', '消防系统', '20.60.60.10.75', '火灾自动报警控制主机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (469, NULL, 'xfxt', '消防系统', '20.60.40.91', '厨房自动灭火设备', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (470, NULL, 'xfxt', '消防系统', '20.60.60.60.01', 'CRT工作站', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (471, NULL, 'xfxt', '消防系统', '20.40.10.20.30.10.64', '动火离人报警信号箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (472, NULL, 'xfxt', '消防系统', '20.60.50.15', '室内消火栓', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (473, NULL, 'xfxt', '消防系统', '20.60.10.50', '水流指示器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (474, NULL, 'xfxt', '消防系统', '20.60.10.60', '过滤器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (475, NULL, 'rdxt', '弱电系统', '20.70.20.50.70.10', '引导屏', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (476, NULL, 'rdxt', '弱电系统', '20.70.20.50.70.20', '引导屏', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (477, NULL, 'rdxt', '弱电系统', '20.70.20.50.70.30', '引导屏', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (478, NULL, 'rdxt', '弱电系统', '20.70.20.50.70.40', '引导屏', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (479, NULL, 'rdxt', '弱电系统', '20.70.20.50.75.20.10', '车位指示灯', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (480, NULL, 'rdxt', '弱电系统', '20.70.20.50.30.05', '车位指示灯', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (481, NULL, 'rdxt', '弱电系统', '20.70.20.30.20.55.30', '门禁控制器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (482, NULL, 'rdxt', '弱电系统', '20.70.20.30.20.55.40', '门禁控制器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (483, NULL, 'rdxt', '弱电系统', '20.70.20.30.20.55.50', '门禁控制器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (484, NULL, 'rdxt', '弱电系统', '20.70.20.30.20.46', '门禁读卡器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (485, NULL, 'rdxt', '弱电系统', '20.70.20.10.40.12', '球型摄像机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (486, NULL, 'rdxt', '弱电系统', '20.70.20.10.40.15', '枪型摄像机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (487, NULL, 'rdxt', '弱电系统', '20.70.20.10.40.10.40', '电梯半球摄像机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (488, NULL, 'rdxt', '弱电系统', '20.70.20.10.40.16', '半球型摄像机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (489, NULL, 'rdxt', '弱电系统', '20.70.20.10.50.10', '液晶拼接屏', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (490, NULL, 'rdxt', '弱电系统', '20.70.50.10', 'UPS电源', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (491, NULL, 'rdxt', '弱电系统', '20.70.10.40.50', '天花喇叭', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (492, NULL, 'rdxt', '弱电系统', '20.70.10.40.35.30', '室外音箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (493, NULL, 'rdxt', '弱电系统', '20.70.10.45.45', '广播系统主机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (494, NULL, 'rdxt', '弱电系统', '20.70.20.20.20.05', '报警按钮', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (495, NULL, 'rdxt', '弱电系统', '20.70.20.20.10.30.10', '红外报警探测器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (496, NULL, 'rdxt', '弱电系统', '20.70.20.20.10.30.20', '红外报警探测器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (497, NULL, 'rdxt', '弱电系统', '20.70.20.20.20.20.20', '玻璃破碎探测器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (498, NULL, 'rdxt', '弱电系统', '20.70.20.20.30.10.10', '防区报警主机', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (499, NULL, 'rdxt', '弱电系统', '20.60.60.10.40', '报警模块箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (500, NULL, 'rdxt', '弱电系统', '20.70.30.30.20.35', '液位传感器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (501, NULL, 'rdxt', '弱电系统', '20.70.30.30.20.20', '压力传感器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (502, NULL, 'rdxt', '弱电系统', '20.70.30.30.20.25', '压差传感器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (503, NULL, 'rdxt', '弱电系统', '20.70.30.30.20.45', '差压变送器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (504, NULL, 'rdxt', '弱电系统', '20.70.30.30.20.05.05', '温度探测器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (505, NULL, 'rdxt', '弱电系统', '20.70.30.30.20.05.10', '温度探测器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (506, NULL, 'rdxt', '弱电系统', '20.70.30.30.20.05.12', '温度探测器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (507, NULL, 'rdxt', '弱电系统', '20.70.30.30.20.05.15', '温度探测器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (508, NULL, 'rdxt', '弱电系统', '20.70.30.30.40.10', '水流开关', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (509, NULL, 'rdxt', '弱电系统', '20.70.30.30.20.55', '流量传感器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (510, NULL, 'rdxt', '弱电系统', '20.70.30.30.20.50', '光传感器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (511, NULL, 'rdxt', '弱电系统', '20.70.30.30.40.05', '防冻开关', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (512, NULL, 'rdxt', '弱电系统', '20.70.30.30.10.10', 'DDC控制箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (513, NULL, 'rdxt', '弱电系统', '20.60.60.60.28', 'CO探测器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (514, NULL, 'rdxt', '弱电系统', '20.60.60.60.27', 'CO2探测器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (515, NULL, 'jpsxt', '给排水系统', '20.10.10.30.40.70', '紫外线消毒器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (516, NULL, 'jpsxt', '给排水系统', '20.80.10.15.20', '', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (517, NULL, 'jpsxt', '给排水系统', '20.10.20.10.25', '稳压罐', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (518, NULL, 'jpsxt', '给排水系统', '20.10.20.10.45', '成品提升装置', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (519, NULL, 'jpsxt', '给排水系统', '20.10.10.20', '生活水箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (520, NULL, 'jpsxt', '给排水系统', '20.10.20.10.05', '排污泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (521, NULL, 'jpsxt', '给排水系统', '20.80.10.05.30', '', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (522, NULL, 'jpsxt', '给排水系统', '20.10.10.10.10.10', '立式变频水泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (523, NULL, 'jpsxt', '给排水系统', '20.10.10.10.10.20', '卧式变频水泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (524, NULL, 'jpsxt', '给排水系统', '20.10.10.10.10.40', '', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (525, NULL, 'jpsxt', '给排水系统', '20.10.10.10.10.50', '', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (526, NULL, 'jpsxt', '给排水系统', '20.10.10.10.20', '气压罐', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (527, NULL, 'jpsxt', '给排水系统', '20.10.10.30.20.10', '过滤器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (528, NULL, 'jpsxt', '给排水系统', '20.10.10.30.20.20', '过滤器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (529, NULL, 'jpsxt', '给排水系统', '20.10.10.30.20.30', '过滤器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (530, NULL, 'jpsxt', '给排水系统', '20.10.20.60.30.10', '中水泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (531, NULL, 'jpsxt', '给排水系统', '20.10.10.30.25', '过滤器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (532, NULL, 'jpsxt', '给排水系统', '20.10.20.60.30.20', '中水水箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (533, NULL, 'jpsxt', '给排水系统', '20.30.10.50.10', '集热器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (534, NULL, 'jpsxt', '给排水系统', '20.30.10.50.30', '保温水箱', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (535, NULL, 'jpsxt', '给排水系统', '20.10.10.10.10.30', '太阳能循环泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (536, NULL, 'jpsxt', '给排水系统', '20.10.30.30.30', '过滤装置', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (537, NULL, 'jpsxt', '给排水系统', '20.10.30.30.10', '雨水泵', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (538, NULL, 'jpsxt', '给排水系统', '20.10.30.30.50', '消毒装置', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (539, NULL, 'dtxt', '电梯系统', '20.50.10.20', '客梯', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (540, NULL, 'dtxt', '电梯系统', '20.50.10.10', '货梯', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (541, NULL, 'dtxt', '电梯系统', '20.50.10.30', '观光电梯', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (542, NULL, 'dtxt', '电梯系统', '20.50.50', '自动扶梯', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (543, NULL, 'dtxt', '电梯系统', '20.50.60', '自动人行道', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (544, NULL, 'rqxt', '燃气系统', '20.72.05.07', '过滤器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (545, NULL, 'rqxt', '燃气系统', '20.72.05.05', '调压器', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (546, NULL, 'rqxt', '燃气系统', '20.72.05.20', '安全装置', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (547, NULL, 'rqxt', '燃气系统', '20.72.05.10', '燃气计量仪表', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (548, NULL, 'scpz', '土建装饰', '20.10.20.30.10.10', '', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (549, NULL, 'scpz', '土建装饰', '20.10.20.30.20.20', '', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (550, NULL, 'scpz', '土建装饰', '10.10.40.30.33', '', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (551, NULL, 'scpz', '土建装饰', '10.10.20.12.20', '逃生窗', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (552, NULL, 'scpz', '土建装饰', '10.10.30.03.06.09.09.03', '玻化砖', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (553, NULL, 'scpz', '土建装饰', '10.10.80.05', '屋顶logo', 'equipment');
+REPLACE INTO `define_type_rel` VALUES (554, NULL, 'scpz', '土建装饰', '10.10.20.42.15.05.10.05', '玻璃护栏', 'equipment');
+COMMIT;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 17 - 0
src/main/resources/db.init/schema.sql

@@ -0,0 +1,17 @@
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for define_type_rel
+-- ----------------------------
+DROP TABLE IF EXISTS `define_type_rel`;
+CREATE TABLE `define_type_rel` (
+`id` int(40) NOT NULL AUTO_INCREMENT,
+`model_code` varchar(40) COLLATE utf8_bin DEFAULT NULL COMMENT '所属功能模块编码',
+`system_code` varchar(40) COLLATE utf8_bin NOT NULL COMMENT '系统编码',
+`system_name` varchar(40) COLLATE utf8_bin DEFAULT NULL COMMENT '系统名称',
+`bim_type_id` varchar(40) COLLATE utf8_bin DEFAULT NULL COMMENT 'BIM构建编码',
+`class_name` varchar(40) COLLATE utf8_bin NOT NULL COMMENT '类型名称',
+`obj_type` varchar(40) COLLATE utf8_bin DEFAULT NULL COMMENT '对象类型:space,equipment,materia',
+PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=555 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;