Explorar el Código

查询设备设施-暖通系统-全局-3D原理图相关的设备/阀门

linhuili hace 3 años
padre
commit
8ea7b76fe3

+ 3 - 3
pom.xml

@@ -55,10 +55,10 @@
             <groupId>com.persagy</groupId>
             <artifactId>dmp-server</artifactId>
         </dependency>
-        <!--<dependency>
+        <dependency>
             <groupId>com.persagy</groupId>
-            <artifactId>dmp-comp</artifactId>
-        </dependency>-->
+            <artifactId>dmp-mybatis</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>

+ 30 - 0
src/main/java/com/persagy/dmp/middleware/ServerApplication.java

@@ -0,0 +1,30 @@
+package com.persagy.dmp.middleware;
+
+import cn.hutool.extra.spring.EnableSpringUtil;
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
+import org.springframework.boot.Banner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * springboot服务器
+ * 同时启动Eureka
+ * @author Charlie Yu
+ * @version 1.0 2021-03-02
+ */
+@EnableCaching(proxyTargetClass = true)
+@EnableDiscoveryClient
+@Configuration
+@EnableSpringUtil
+@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
+public class ServerApplication {
+
+    public static void main(String[] args) {
+        SpringApplication application = new SpringApplication(ServerApplication.class);
+        application.setBannerMode(Banner.Mode.OFF);
+        application.run(args);
+    }
+}

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

@@ -14,4 +14,20 @@ public class CommonConsant {
 
     /** 楼层租赁面积 */
     public final static String FLOOR_LEASE_AREA = "leaseArea";
+
+    /** 类型编码 */
+    public final static String CLASS_CODE = "classCode";
+
+    /** BIM构建编码 */
+    public final static String BIM_TYPE_ID = "bimTypeId";
+
+    /** 冷却塔bimTypeID */
+    public final static String ACCCOT_BIMTYPEID= "20.30.20.10";
+
+    /** 制冷机房bimTypeID */
+    public final static String ACCCOT_SPACE_BIMTYPEID= "3.2.1.1";
+
+    /** 万达暖通系统编码 */
+    public final static String WD_HAVC_SYSTEM_CODE= "ntxt";
+
 }

+ 36 - 0
src/main/java/com/persagy/dmp/middleware/constant/enums/ClassCodeEnum.java

@@ -0,0 +1,36 @@
+package com.persagy.dmp.middleware.constant.enums;
+/**
+ * @ClassName ClassCodeEnum
+ * @Description: 类型编码
+ * @Author linhuili
+ * @Date 2021/9/10 09:37
+ * @Version V1.0
+ **/
+public enum ClassCodeEnum {
+
+    CFPKPS("CFPKPS", "停车位");
+
+    private String value;
+    private String desc;
+
+    ClassCodeEnum(String value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+}

+ 10 - 1
src/main/java/com/persagy/dmp/middleware/constant/enums/RelationTypeEnum.java

@@ -12,7 +12,15 @@ import lombok.Getter;
 @Getter
 public enum RelationTypeEnum {
 
-    ARCHSUBSET_BD2FL("ArchSubset","Bd2Fl","楼层所在建筑");
+    ARCHSUBSET_BD2FL("ArchSubset","Bd2Fl","楼层所在建筑"),
+
+    ARCHSUBSET_FL2SP("ArchSubset","Fl2Sp","楼层下的业务空间"),
+
+    MECHINARCH_EQ2FL("MechInArch","Eq2Fl","设备设施所在楼层"),
+
+    MECHINARCH_EQ2BD("MechInArch","Eq2Bd","设备设施所在楼层"),
+
+    MECHINARCH_EQ2SP("MechInArch","Eq2Sp","设备设施所在空间");
 
     /**图类型编码*/
     private String graphCode;
@@ -20,6 +28,7 @@ public enum RelationTypeEnum {
     private String relCode;
     /**描述*/
     private String desc;
+
     /**
      * 构造函数
      * @param graphCode

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

@@ -49,4 +49,25 @@ public class EquipController {
         return  response;
     }
 
+    /**
+     *  查询设备设施- 暖通系统-全局-3D原理图相关的设备/阀门
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/havcSystem/query")
+    public CommonResult queryHavcSystem(@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.queryHavcSystem(context,request);
+        return  response;
+    }
+
 }

+ 9 - 4
src/main/java/com/persagy/dmp/middleware/controller/FloorController.java

@@ -1,6 +1,5 @@
 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;
@@ -10,6 +9,7 @@ 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.service.ISpaceService;
 import com.persagy.dmp.middleware.utils.EntityTransferUtil;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,6 +37,9 @@ public class FloorController {
     @Autowired
     private IBaseService baseService;
 
+    @Autowired
+    private ISpaceService spaceService;
+
     /**
      * 查询建筑下的楼层列表
      * @param projectId
@@ -54,7 +57,9 @@ public class FloorController {
             throw new Exception("建筑ID不能为空");
         }
         // 条件转换
-        QueryCriteria queryCriteria = EntityTransferUtil.transDmpRelationCriteria(RelationTypeEnum.ARCHSUBSET_BD2FL.getGraphCode(), RelationTypeEnum.ARCHSUBSET_BD2FL.getRelCode(), request.getBuildId(), 0);
+        ObjectNode criteria = JsonNodeFactory.instance.objectNode();
+        QueryCriteria queryCriteria = EntityTransferUtil.transDmpRelationCriteria(criteria,RelationTypeEnum.ARCHSUBSET_BD2FL.getGraphCode(),
+                RelationTypeEnum.ARCHSUBSET_BD2FL.getRelCode(), request.getBuildId(), 0);
         // 查询建筑下的楼层列表
         CommonResult response = baseService.doQuery(context,queryCriteria ,null);
         return  response;
@@ -74,8 +79,8 @@ public class FloorController {
         // 组装上下文条件
         InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, null);
         // 非空校验
-        if(StringUtils.isEmpty(request.getBuildId())){
-            throw new Exception("建筑ID不能为空");
+        if(StringUtils.isEmpty(request.getFloorId())){
+            throw new Exception("楼层ID不能为空");
         }
         // 统计楼层下各信息
         CommonResult response = floorService.count(context,request);

+ 26 - 3
src/main/java/com/persagy/dmp/middleware/controller/SpaceController.java

@@ -44,12 +44,12 @@ public class SpaceController {
      * @throws Exception
      */
     @PostMapping("/query")
-    public CommonResult count(@QueryParam("groupCode") String groupCode, @QueryParam("projectId") String projectId,
+    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.getFloorId())){
+        if(StringUtils.isEmpty(request.getId())){
             throw new Exception("空间ID不能为空");
         }
         //封装中台查询条件
@@ -60,16 +60,39 @@ public class SpaceController {
     }
 
     /**
+     * 查询空间内的设备/阀门
+     * @param projectId
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/rel/query")
+    public CommonResult relQuery(@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.getSpaceId())){
+            throw new Exception("空间ID不能为空");
+        }
+        //查询空间内的设备/阀门
+        CommonResult response = spaceService.relQuery(context,request);
+        return  response;
+    }
+
+    /**
      * 封装中台查询条件
      * @param requestDTO
      * @return
      */
     private QueryCriteria commbineDmpCriteria(CommonRequestDTO requestDTO){
         ObjectNode jsonNodes = JsonNodeFactory.instance.objectNode();
-        jsonNodes.put("id",requestDTO.getSpaceId());
+        jsonNodes.put("id",requestDTO.getId());
         QueryCriteria criteria = new QueryCriteria();
         criteria.setCriteria(jsonNodes);
         return criteria;
     }
+
+
     
 }

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

@@ -16,4 +16,11 @@ public class CommonRequestDTO {
 
     /** 空间id */
     private String spaceId;
+
+    /** 系统编码 */
+    private String systemCode;
+
+    /** 通用对象id */
+    private String id;
+
 }

+ 16 - 9
src/main/java/com/persagy/dmp/middleware/entity/vo/DefineTypeRel.java

@@ -1,6 +1,8 @@
 package com.persagy.dmp.middleware.entity.vo;
 
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
  * @ClassName DefineTypeRel
@@ -10,25 +12,30 @@ import lombok.Data;
  * @Version V1.0
  **/
 @Data
+@TableName(value = "wd_define_type_rel", autoResultMap = true)
+@EqualsAndHashCode()
 public class DefineTypeRel {
 
     /** id */
     private Integer id;
 
-    /** 模块编码 */
-    private String modelCode;
+    /** 万达模块编码 */
+    private String wdModelCode;
 
-    /** 系统编码 */
-    private String systemCode;
+    /** 万达系统编码 */
+    private String wdSystemCode;
 
-    /** 系统名称 */
-    private String systemName;
+    /** 万达系统名称 */
+    private String wdSystemName;
 
-    /** BIM构建编码 */
+    /** 博锐BIM构建编码 */
     private String bimTypeId;
 
-    /** 类型名称 */
-    private String className;
+    /** 万达类型编码 */
+    private String wdClassCode;
+
+    /** 万达类型名称 */
+    private String wdClassName;
 
     /** 分类:space, equipment,materia */
     private String objType;

+ 66 - 1
src/main/java/com/persagy/dmp/middleware/service/IEquipService.java

@@ -1,8 +1,12 @@
 package com.persagy.dmp.middleware.service;
 
+import com.alibaba.fastjson.JSONObject;
 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 java.util.List;
 
 /**
  * @ClassName ObjectInstanceService
@@ -13,5 +17,66 @@ import com.persagy.dmp.middleware.entity.response.CommonResult;
  **/
 public interface IEquipService {
 
-    CommonResult query(InstanceUrlParam context, CommonRequestDTO requestDTO);
+    /**
+     * 查询设备基本信息
+     * @param context
+     * @param request
+     * @return
+     */
+    CommonResult query(InstanceUrlParam context, CommonRequestDTO request);
+
+
+    /**
+     * 查询设备设施- 暖通系统-全局-3D原理图相关的设备/阀门
+     * @param context
+     * @param request
+     * @return
+     */
+    CommonResult queryHavcSystem(InstanceUrlParam context, CommonRequestDTO request);
+
+
+    /**
+     * 查询广联达设备类型
+     * @return
+     */
+    List<DefineTypeRel> queryGldEquipTypeRel();
+
+
+    /**
+     * 根据广联达设备类型查询设备信息
+     * @param context
+     * @param defineTypeRels
+     * @param request
+     * @return
+     */
+    List<JSONObject> queryEquipByGldTypeRel(InstanceUrlParam context, List<DefineTypeRel> defineTypeRels, CommonRequestDTO request);
+
+
+    /**
+     * 查询广联达阀门类型
+     * @return
+     */
+    List<DefineTypeRel> queryGldMateriaTypeRel();
+
+
+    /**
+     * 根据广联达设备类型查询阀门信息
+     * @param context
+     * @param defineTypeRels
+     * @param request
+     * @return
+     */
+    List<JSONObject> queryMateriaByGldTypeRel(InstanceUrlParam context, List<DefineTypeRel> defineTypeRels, CommonRequestDTO request);
+
+
+    /**
+     * 根据信息点查询对象信息
+     * @param context
+     * @param defineTypeRels
+     * @param request
+     * @param infoCode
+     * @return
+     */
+    List<JSONObject> queryEquipObjectByInfoCode(InstanceUrlParam context,List<DefineTypeRel> defineTypeRels,CommonRequestDTO request,String infoCode);
+
 }

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

@@ -19,7 +19,7 @@ public interface IFloorService{
      * @param requestDTO
      * @return
      */
-    CommonResult count(InstanceUrlParam context, CommonRequestDTO requestDTO);
+    CommonResult count(InstanceUrlParam context, CommonRequestDTO requestDTO) throws Exception;
 
     /**
      * 查询楼层下的设备空间阀门信息

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

@@ -1,8 +1,12 @@
 package com.persagy.dmp.middleware.service;
 
+import com.alibaba.fastjson.JSONObject;
 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 java.util.List;
 
 /**
  * @ClassName ObjectInstanceService
@@ -13,5 +17,35 @@ import com.persagy.dmp.middleware.entity.response.CommonResult;
  **/
 public interface ISpaceService {
 
+    /**
+     * 查询空间基本信息
+     * @param context
+     * @param requestDTO
+     * @return
+     */
     CommonResult query(InstanceUrlParam context, CommonRequestDTO requestDTO);
+
+    /**
+     * 查询广联达空间类型
+     * @return
+     */
+    List<DefineTypeRel> queryGldSpaceTypeRel();
+
+
+    /**
+     * 根据广联达空间类型查询空间信息
+     * @param context
+     * @param defineTypeRels
+     * @param request
+     * @return
+     */
+    List<JSONObject> querySpaceByGldTypeRel(InstanceUrlParam context, List<DefineTypeRel> defineTypeRels, CommonRequestDTO request);
+
+    /**
+     * 查询空间内的设备/阀门
+     * @param context
+     * @param request
+     * @return
+     */
+    CommonResult relQuery(InstanceUrlParam context, CommonRequestDTO request) throws Exception;
 }

+ 262 - 2
src/main/java/com/persagy/dmp/middleware/service/impl/EquipServiceImpl.java

@@ -1,11 +1,31 @@
 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.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.IEquipService;
+import com.persagy.dmp.middleware.service.ISpaceService;
+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.util.*;
+import java.util.stream.Collectors;
+
 /**
  * @ClassName ObjectInstanceServiceImpl
  * @Description: 广联达:查询设备,空间,阀门
@@ -16,16 +36,256 @@ import org.springframework.stereotype.Service;
 @Service
 public class EquipServiceImpl implements IEquipService {
 
+    @Autowired
+    private DefineTypeRelMapper defineTypeRelMapper;
+
+    @Autowired
+    private IBaseService baseService;
+
+    @Autowired
+    private IEquipService equipService;
+
     /**
      * 查询设备设施模块下的设备/阀门
      * @param context
-     * @param requestDTO
+     * @param request
      * @return
      */
     @Override
-    public CommonResult query(InstanceUrlParam context, CommonRequestDTO requestDTO) {
+    public CommonResult query(InstanceUrlParam context, CommonRequestDTO request) {
+
+        List<JSONObject> result = new ArrayList<>();
+
+        //查询系统下的设备
+        List<JSONObject> equipList = querySystemEquipList(context, request);
+        if(CollUtil.isNotEmpty(equipList)){
+            result.addAll(equipList);
+        }
+
+        //查询系统下的阀门
+        List<JSONObject> materiaList = querySystemMateriaList(context, request);
+        if(CollUtil.isNotEmpty(materiaList)){
+            result.addAll(materiaList);
+        }
+
+        return CommonResult.success(result);
+    }
+
+
+    /**
+     * 查询设备设施-暖通系统-全局-3D原理图相关的设备/阀门
+     * @param context
+     * @param request
+     * @return
+     */
+    @Override
+    public CommonResult queryHavcSystem(InstanceUrlParam context, CommonRequestDTO request) {
+        // 查询冷却塔设备类下的设备,制冷机房空间下的设备/阀门信息
+
+        //1.查询冷却塔设备类下的设备/阀门
+        List<DefineTypeRel> coolTowerDefineTypeRels = queryGldHavcTypeRel(CommonConsant.ACCCOT_BIMTYPEID,CommonConsant.WD_HAVC_SYSTEM_CODE);
+        List<JSONObject> coolTowerObjects = queryEquipObjectByInfoCode(context, coolTowerDefineTypeRels, request, CommonConsant.BIM_TYPE_ID);
+
+        //2.查询制冷机房空间下的设备/阀门
         return null;
     }
 
+    /**
+     * 获取系统下的设备
+     * @param context
+     * @param request
+     */
+    private List<JSONObject>  querySystemEquipList(InstanceUrlParam context, CommonRequestDTO request){
+        //查询广联达设备类型
+        List<DefineTypeRel> defineTypeRels = equipService.queryGldEquipTypeRel();
+        //根据系统过滤
+        if(StringUtils.isNotEmpty(request.getSystemCode())){
+            String systemCode = request.getSystemCode();
+            defineTypeRels = defineTypeRels.stream().filter(k->!systemCode.equals(k.getWdSystemCode())).collect(Collectors.toList());
+        }
+        //根据广联达设备类型查询设备信息
+        List<JSONObject> equipList = equipService.queryEquipByGldTypeRel(context, defineTypeRels, request);
+        return equipList;
+    }
+
+    /**
+     * 获取系统下的阀门
+     * @param context
+     * @param request
+     */
+    private List<JSONObject>  querySystemMateriaList(InstanceUrlParam context, CommonRequestDTO request){
+        //查询广联达设备类型
+        List<DefineTypeRel> defineTypeRels = equipService.queryGldMateriaTypeRel();
+        //根据系统过滤
+        if(StringUtils.isNotEmpty(request.getSystemCode())){
+            String systemCode = request.getSystemCode();
+            defineTypeRels = defineTypeRels.stream().filter(k->!systemCode.equals(k.getWdSystemCode())).collect(Collectors.toList());
+        }
+        //根据广联达设备类型查询设备信息
+        List<JSONObject> equipList = equipService.queryMateriaByGldTypeRel(context, defineTypeRels, request);
+        return equipList;
+    }
+
+    /**
+     * 查询万达映射表中的设备类型
+     */
+    @Override
+    public List<DefineTypeRel> queryGldEquipTypeRel(){
+        QueryWrapper<DefineTypeRel> wrapper = new QueryWrapper<>();
+        wrapper.eq("obj_type","equipment");
+        List<DefineTypeRel> defineTypeRels = defineTypeRelMapper.selectList(wrapper);
+        return defineTypeRels;
+    }
+
+
+    /**
+     * 根据广联达设备类型查询设备信息
+     * @param context
+     * @param defineTypeRels
+     * @param request
+     */
+    @Override
+    public List<JSONObject> queryEquipByGldTypeRel(InstanceUrlParam context, List<DefineTypeRel> defineTypeRels, CommonRequestDTO request){
+        // 根据bimTypeId查询楼层下的设备
+        List<JSONObject> bimTypeSpace = queryEquipObjectByInfoCode(context, defineTypeRels, request, "bimTypeId");
+        // 数据组装:根据bimTypeId查询楼层下的设备结果
+        List<JSONObject> result = combineQueryEquipResultData(defineTypeRels, bimTypeSpace, "bimTypeId");
+        return result;
+    }
+
+    /**
+     * 根据信息点查询楼层下的设备对象信息
+     * @param context
+     * @param defineTypeRels
+     * @param request
+     * @return
+     */
+    @Override
+    public List<JSONObject> queryEquipObjectByInfoCode(InstanceUrlParam context,List<DefineTypeRel> defineTypeRels,CommonRequestDTO request,String infoCode){
+        //1. 根据bimTypeId查询楼层下的设备
+        Set<String> bimTypeIdSets = defineTypeRels.stream().filter(k-> StringUtils.isNotEmpty(k.getBimTypeId())).map(k->k.getBimTypeId()).collect(Collectors.toSet());
+        ObjectNode criteria = JsonNodeFactory.instance.objectNode();
+        ArrayNode bimTypeIds = criteria.withArray(infoCode);
+        bimTypeIdSets.forEach(item->{bimTypeIds.add(item);});
+
+        QueryCriteria queryCriteria = new QueryCriteria();
+        //根据建筑/楼层id关系查询
+        if(StringUtils.isNotEmpty(request.getFloorId())){
+            queryCriteria = EntityTransferUtil.transDmpRelationCriteria(criteria, RelationTypeEnum.MECHINARCH_EQ2FL.getGraphCode(),
+                            RelationTypeEnum.MECHINARCH_EQ2FL.getRelCode(), request.getFloorId(), 1);
+        }else{
+            queryCriteria = EntityTransferUtil.transDmpRelationCriteria(criteria, RelationTypeEnum.MECHINARCH_EQ2BD.getGraphCode(),
+                            RelationTypeEnum.MECHINARCH_EQ2BD.getRelCode(), request.getBuildId(), 1);
+        }
+
+        CommonResult commonResult = baseService.doQuery(context, queryCriteria, JsonNode.class);
+        return (List<JSONObject>)commonResult.getContent();
+    }
+
+    /**
+     * 查询万达映射表中的阀门类型
+     */
+    @Override
+    public List<DefineTypeRel> queryGldMateriaTypeRel(){
+        QueryWrapper<DefineTypeRel> wrapper = new QueryWrapper<>();
+        wrapper.eq("obj_type","material");
+        List<DefineTypeRel> defineTypeRels = defineTypeRelMapper.selectList(wrapper);
+        return defineTypeRels;
+    }
+
+    /**
+     * 根据广联达阀门类型查询阀门信息
+     * @param context
+     * @param defineTypeRels
+     * @param request
+     */
+    @Override
+    public List<JSONObject> queryMateriaByGldTypeRel(InstanceUrlParam context, List<DefineTypeRel> defineTypeRels, CommonRequestDTO request){
+        // 根据bimTypeId查询楼层下的设备
+        List<JSONObject> bimTypeSpace = queryEquipObjectByInfoCode(context, defineTypeRels, request,"bimTypeId");
+        // 数据组装:根据bimTypeId查询楼层下的设备结果
+        List<JSONObject> result = combineQueryEquipResultData(defineTypeRels, bimTypeSpace, "bimTypeId");
+        return result;
+    }
+
+    /**
+     * 根据信息点查询楼层下的阀门对象信息
+     * @param context
+     * @param defineTypeRels
+     * @param request
+     * @return
+     */
+    /*private List<JSONObject> queryMateriaObjectByInfoCode(InstanceUrlParam context,List<DefineTypeRel> defineTypeRels,CommonRequestDTO request,String infoCode){
+        //获取所有的bimTypeId
+        Set<String> bimTypeIdSets = defineTypeRels.stream().filter(k-> StringUtils.isNotEmpty(k.getBimTypeId())).map(k->k.getBimTypeId()).collect(Collectors.toSet());
+        ObjectNode criteria = JsonNodeFactory.instance.objectNode();
+        ArrayNode bimTypeIds = criteria.withArray(infoCode);
+        bimTypeIdSets.forEach(item->{bimTypeIds.add(item);});
+
+        //获取万达的类型编码
+        *//*Set<String> wdClassCode = defineTypeRels.stream().filter(k-> StringUtils.isNotEmpty(k.getWdClassCode())).map(k->k.getWdClassCode()).collect(Collectors.toSet());
+        ArrayNode wdClassCodes = criteria.withArray("wdCode");
+        wdClassCode.forEach(item->{wdClassCodes.add(item);});*//*
+
+        QueryCriteria queryCriteria = new QueryCriteria();
+        //获取对应的关系查询条件
+        if(StringUtils.isNotEmpty(request.getFloorId())){
+            queryCriteria = EntityTransferUtil.transDmpRelationCriteria(criteria, RelationTypeEnum.MECHINARCH_Eq2Fl.getGraphCode(),
+                    RelationTypeEnum.MECHINARCH_Eq2Fl.getRelCode(), request.getFloorId(), 1);
+        }else{
+            queryCriteria = EntityTransferUtil.transDmpRelationCriteria(criteria, RelationTypeEnum.MECHINARCH_Eq2Bd.getGraphCode(),
+                    RelationTypeEnum.MECHINARCH_Eq2Bd.getRelCode(), request.getBuildId(), 1);
+        }
+
+        //查询阀门对象信息
+        CommonResult commonResult = baseService.doQuery(context, queryCriteria, JsonNode.class);
+        return (List<JSONObject>)commonResult.getContent();
+    }*/
+
+    /**
+     * 组装查询设备结果
+     * @param defineTypeRels
+     * @param spaceList
+     * @param infoCode
+     * @return
+     */
+    private List<JSONObject>  combineQueryEquipResultData(List<DefineTypeRel> defineTypeRels,List<JSONObject> spaceList,String infoCode){
+        if(CollUtil.isEmpty(defineTypeRels)){
+            return new ArrayList<>();
+        }
+
+        Map<String, List<JSONObject>> spaceMap = spaceList.stream().collect(Collectors.groupingBy(k->k.getString(infoCode)));
+
+        //数据组装
+        List<JSONObject> result = new ArrayList<>();
+        for (DefineTypeRel defineTypeRel : defineTypeRels) {
+            JSONObject data = new JSONObject();
+            data.put("bimTypeId",defineTypeRel.getBimTypeId());
+            data.put("className",defineTypeRel.getWdClassName());
+            data.put("systemCode",defineTypeRel.getWdSystemCode());
+
+            List<JSONObject> objects = new ArrayList<>();
+            if(CollUtil.isNotEmpty(spaceMap)){
+                spaceMap.get(defineTypeRel.getBimTypeId());
+            }
+            data.put("objects",objects);
+            data.put("count",objects.size());
+            result.add(data);
+        }
+        return result;
+
+    }
+
+    /**
+     * 查询暖通系统下制冷机房,冷却塔映射关系
+     */
+    public List<DefineTypeRel> queryGldHavcTypeRel(String bimTypeId,String systemCode){
+        QueryWrapper<DefineTypeRel> wrapper = new QueryWrapper<>();
+
+        wrapper.eq("bim_type_id",bimTypeId);
+        wrapper.eq("wd_system_code",systemCode);
+        List<DefineTypeRel> defineTypeRels = defineTypeRelMapper.selectList(wrapper);
+        return defineTypeRels;
+    }
 
 }

+ 110 - 61
src/main/java/com/persagy/dmp/middleware/service/impl/FloorServiceImpl.java

@@ -2,15 +2,12 @@ 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.ClassCodeEnum;
 import com.persagy.dmp.middleware.constant.enums.RelationTypeEnum;
 import com.persagy.dmp.middleware.dao.DefineTypeRelMapper;
 import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
@@ -18,15 +15,14 @@ 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.IEquipService;
 import com.persagy.dmp.middleware.service.IFloorService;
+import com.persagy.dmp.middleware.service.ISpaceService;
 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;
 
 /**
@@ -44,97 +40,150 @@ public class FloorServiceImpl implements IFloorService {
 
     @Autowired
     private DefineTypeRelMapper defineTypeRelMapper;
+    
+    @Autowired
+    private ISpaceService spaceService;
+
+    @Autowired
+    private IEquipService equipService;
 
     /**
      * 统计楼层下各信息
      * @param context
-     * @param requestDTO
+     * @param request
      * @return
      */
     @Override
-    public CommonResult count(InstanceUrlParam context, CommonRequestDTO requestDTO) {
+    public CommonResult count(InstanceUrlParam context, CommonRequestDTO request) throws Exception {
         ArrayNode result = JsonNodeFactory.instance.arrayNode();
 
         //查询楼层信息
-        List<JSONObject> floorList = queryFloorList(context, requestDTO);
+        List<JSONObject> floorList = queryFloorInfo(context, request);
         if(CollUtil.isEmpty(floorList)){
-            return CommonResult.success(result);
+            throw new Exception("楼层不存在:id"+request.getFloorId());
         }
-
-       // Map<String, JSONObject> floorMap = floorList.stream().collect(Collectors.toMap(entry -> entry.getString("id"),entry->entry, (k1, k2) -> k1));
+        JSONObject floor = floorList.get(0);
         ObjectNode content = JsonNodeFactory.instance.objectNode();
-        //统计各楼层面积
-        Long buildArea = getFloorArea(floorList, CommonConsant.FLOOR_AREA);
-        //统计各楼层租赁面积
-        Long leaseArea = getFloorArea(floorList, CommonConsant.FLOOR_LEASE_AREA);
+        //统计楼层面积
+        content.put("buildArea",floor.getDouble(CommonConsant.FLOOR_AREA));
+        //统计租赁面积
+        content.put("leaseArea",floor.getDouble(CommonConsant.FLOOR_LEASE_AREA));
+        //统计该楼层各商铺数量
+
+        //统计该楼层机动车位数量
+        Long parkingCar = countParkingCar(context, request);
+        content.put("countParkingCar",parkingCar);
 
-        content.put("buildArea",buildArea);
-        content.put("leaseArea",leaseArea);
         result.add(content);
         return CommonResult.success(content);
     }
 
     /**
-     * 查询楼层下的设备,空间,阀门
+     * 查询广联达楼层下的设备,空间,阀门
      * @param context
-     * @param requestDTO
+     * @param request
      * @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;
+    public CommonResult query(InstanceUrlParam context, CommonRequestDTO request) {
+
+        List<JSONObject> result = new ArrayList<>();
+
+        //查询楼层下的空间信息
+        List<JSONObject> spaceList = queryFloorSpaceList(context, request);
+        if(CollUtil.isNotEmpty(spaceList)){
+            result.addAll(spaceList);
+        }
+
+        //查询楼层下的设备
+        List<JSONObject> equipList = queryFloorEquipList(context, request);
+        if(CollUtil.isNotEmpty(equipList)){
+            result.addAll(equipList);
+        }
+
+        //查询楼层下的阀门
+        List<JSONObject> materiaList = queryFloorMateriaList(context, request);
+        if(CollUtil.isNotEmpty(materiaList)){
+            result.addAll(materiaList);
+        }
+
+        return CommonResult.success(result);
     }
 
     /**
-     * 查询楼层列表
+     * 获取楼层下的空间
      * @param context
-     * @param requestDTO
-     * @return
+     * @param request
      */
-    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();
+    private List<JSONObject>  queryFloorSpaceList(InstanceUrlParam context, CommonRequestDTO request){
+        //查询广联达空间类型
+        List<DefineTypeRel> defineTypeRels = spaceService.queryGldSpaceTypeRel();
+        //过滤不需要的类型,只需要楼层功能相关的空间
+        List<DefineTypeRel> floorDefineTypeRels = defineTypeRels.stream().filter(k->!"LC".equals(k.getWdModelCode())).collect(Collectors.toList());
+
+        //根据广联达空间类型查询空间信息
+        List<JSONObject> spaceList = spaceService.querySpaceByGldTypeRel(context, floorDefineTypeRels, request);
+        return spaceList;
     }
 
+
     /**
-     * 获取各楼层总面积
-     * @param floorList
-     * @param key
+     * 获取楼层下的设备
+     * @param context
+     * @param request
+     */
+    private List<JSONObject>  queryFloorEquipList(InstanceUrlParam context, CommonRequestDTO request){
+        //查询广联达设备类型
+        List<DefineTypeRel> defineTypeRels = equipService.queryGldEquipTypeRel();
+        //根据广联达设备类型查询设备信息
+        List<JSONObject> equipList = equipService.queryEquipByGldTypeRel(context, defineTypeRels, request);
+        return equipList;
+    }
+
+    /**
+     * 获取楼层下的设备
+     * @param context
+     * @param request
+     */
+    public List<JSONObject>  queryFloorMateriaList(InstanceUrlParam context, CommonRequestDTO request){
+        //查询广联达设备类型
+        List<DefineTypeRel> defineTypeRels = equipService.queryGldMateriaTypeRel();
+        //根据广联达设备类型查询阀门信息
+        List<JSONObject> materiaList = equipService.queryMateriaByGldTypeRel(context, defineTypeRels, request);
+        return materiaList;
+    }
+
+    /**
+     * 查询楼层信息
+     * @param context
+     * @param requestDTO
      * @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<JSONObject> queryFloorInfo(InstanceUrlParam context, CommonRequestDTO requestDTO){
+        ObjectNode jsonNodes = JsonNodeFactory.instance.objectNode();
+        jsonNodes.put("id",requestDTO.getFloorId());
+        QueryCriteria criteria = new QueryCriteria();
+        criteria.setCriteria(jsonNodes);
+
+        CommonResult response = baseService.doQuery(context, criteria, JSONObject.class);
+        return (List<JSONObject>)response.getContent();
     }
 
+
     /**
-     * 查询楼层模块下的空间/设备/阀门类型
+     * 统计该楼层机动车位数量
+     * @param context
+     * @param request
+     * @return
      */
-    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;
+    private Long countParkingCar(InstanceUrlParam context, CommonRequestDTO request){
+        ObjectNode criteria = JsonNodeFactory.instance.objectNode();
+        criteria.put(CommonConsant.CLASS_CODE, ClassCodeEnum.CFPKPS.getValue());
+        QueryCriteria queryCriteria = EntityTransferUtil.transDmpRelationCriteria(criteria,RelationTypeEnum.MECHINARCH_EQ2FL.getGraphCode(),
+                RelationTypeEnum.MECHINARCH_EQ2FL.getRelCode(), request.getFloorId(), 1);
+        CommonResult commonResult = baseService.doQuery(context, queryCriteria, JSONObject.class);
+       return commonResult.getCount();
     }
 
+
 }

+ 301 - 2
src/main/java/com/persagy/dmp/middleware/service/impl/SpaceServiceImpl.java

@@ -1,11 +1,36 @@
 package com.persagy.dmp.middleware.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+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.common.utils.JsonHelper;
+import com.persagy.dmp.middleware.client.DmpRwdClient;
+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.service.IEquipService;
+import com.persagy.dmp.middleware.entity.response.DmpResult;
+import com.persagy.dmp.middleware.entity.vo.DefineTypeRel;
+import com.persagy.dmp.middleware.service.IBaseService;
+import com.persagy.dmp.middleware.service.ISpaceService;
+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.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
 /**
  * @ClassName ObjectInstanceServiceImpl
  * @Description: 广联达:查询空间信息
@@ -14,7 +39,16 @@ import org.springframework.stereotype.Service;
  * @Version V1.0
  **/
 @Service
-public class SpaceServiceImpl implements IEquipService {
+public class SpaceServiceImpl implements ISpaceService {
+
+    @Autowired
+    private DefineTypeRelMapper defineTypeRelMapper;
+
+    @Autowired
+    private DmpRwdClient dmpRwdClient;
+
+    @Autowired
+    private IBaseService baseService;
 
     /**
      * 查询设备设施模块下的设备/阀门
@@ -28,4 +62,269 @@ public class SpaceServiceImpl implements IEquipService {
     }
 
 
+    /**
+     * 查询万达映射表中的空间类型
+     */
+    @Override
+    public List<DefineTypeRel> queryGldSpaceTypeRel(){
+        QueryWrapper<DefineTypeRel> wrapper = new QueryWrapper<>();
+        wrapper.eq("obj_type","space");
+        List<DefineTypeRel> defineTypeRels = defineTypeRelMapper.selectList(wrapper);
+        return defineTypeRels;
+    }
+
+    /**
+     * 根据广联达空间类型查询空间信息
+     * @param context
+     * @param defineTypeRels
+     * @param request
+     */
+    @Override
+    public List<JSONObject> querySpaceByGldTypeRel(InstanceUrlParam context,List<DefineTypeRel> defineTypeRels,CommonRequestDTO request){
+        //1. 筛选出bimTypeId为空间类型的数据:bimTypeId:FireZone
+        List<DefineTypeRel> spaceTypeRels = filterSpaceType(context, defineTypeRels);
+
+        //2. 根据bimTypeId查询楼层下的空间
+        List<JSONObject> bimTypeSpace = querySpaceObjectByInfoCode(context, defineTypeRels, request, "bimTypeId");
+        //3. 数据组装:根据bimTypeId查询楼层下的空间结果
+        List<JSONObject> bimTypeSpaceResult = combineQuerySpaceResultData(defineTypeRels, bimTypeSpace, "bimTypeId");
+
+        //4. 根据空间类型查询楼层下的空间
+        List<JSONObject> classCodeSpace = querySpaceObjectByInfoCode(context, spaceTypeRels, request, "classCode");
+        //5. 数据组装:根据空间类型查询楼层下的空间结果
+        List<JSONObject> classCodeSpaceResult = combineQuerySpaceResultData(spaceTypeRels, classCodeSpace, "classCode");
+
+        //6. 数据合并:根据bimTypeId查询的空间+根据空间类型查询到的空间
+        List<JSONObject> result = new ArrayList<>();
+        if(CollUtil.isNotEmpty(bimTypeSpaceResult)){
+            result.addAll(bimTypeSpaceResult);
+        }
+        if(CollUtil.isNotEmpty(classCodeSpaceResult)){
+            result.addAll(classCodeSpaceResult);
+        }
+        return result;
+    }
+
+    /**
+     * 查询空间内的设备/阀门
+     * @param context
+     * @param request
+     * @return
+     */
+    @Override
+    public CommonResult relQuery(InstanceUrlParam context, CommonRequestDTO request) throws Exception{
+        //查询空间信息
+        List<JSONObject> spaceList = querySpaceInfo(context, request);
+        if(CollUtil.isEmpty(spaceList)){
+            throw new Exception("空间不存在");
+        }
+        JSONObject space = spaceList.get(0);
+
+        //获取空间的BIM构建编码
+        String bimTypeId = space.getString(CommonConsant.BIM_TYPE_ID);
+
+        JSONArray baseSpaceTypes = getDmpBaseSpaceType(context);
+        if(baseSpaceTypes.contains(space.getString(CommonConsant.CLASS_CODE))){
+            bimTypeId = space.getString(CommonConsant.CLASS_CODE);
+        }
+        //查询指定空间类型下的设备
+        List<JSONObject> content = queryEquipInSpace(context, request, bimTypeId);
+        return CommonResult.success(content);
+    }
+
+
+    /**
+     * 查询指定空间下的设备
+     * @param context
+     * @param request
+     * @param bimTypeId
+     * @return
+     * @throws Exception
+     */
+    private List<JSONObject> queryEquipInSpace(InstanceUrlParam context, CommonRequestDTO request,String bimTypeId) throws Exception{
+
+        //根据空间的BimTypeId构建编码获取所在系统
+        List<DefineTypeRel> spaceTypeRelList = queryGldSpaceTypeRel();
+        Map<String, List<DefineTypeRel>> spaceTypeRelMap = spaceTypeRelList.stream().collect(Collectors.groupingBy(DefineTypeRel::getBimTypeId));
+        List<DefineTypeRel> defineTypeRels = spaceTypeRelMap.get(bimTypeId);
+        if(CollUtil.isEmpty(defineTypeRels)){
+            throw new Exception("空间所属系统不存在");
+        }
+        Set<String> wdSystemCodes = defineTypeRels.stream().filter(k-> StringUtils.isNotEmpty(k.getWdSystemCode())).map(k->k.getWdSystemCode()).collect(Collectors.toSet());
+
+        //获取万达系统类下的设备类/阀门
+        List<DefineTypeRel> equipByWdObjectType = getEquipByWdObjectType(wdSystemCodes);
+        List<JSONObject> objects = new ArrayList<>();
+        Set<String> bimTypeIds = new HashSet<>();
+        if(CollUtil.isNotEmpty(equipByWdObjectType)){
+            //查询空间下的设备/阀门
+            bimTypeIds = equipByWdObjectType.stream().filter(k-> StringUtils.isNotEmpty(k.getBimTypeId())).map(k->k.getBimTypeId()).collect(Collectors.toSet());
+            objects = queryDmpEquipInSpace(context, request, bimTypeIds);
+        }
+
+        //结果集封装
+        List<JSONObject> content = combineQuerySpaceResultData(equipByWdObjectType, objects, CommonConsant.BIM_TYPE_ID);
+        return objects;
+    }
+    /**
+     * 查询中台空间下的设备/阀门
+     * @param context
+     * @param request
+     * @param bimTypeIds
+     * @return
+     */
+    private List<JSONObject> queryDmpEquipInSpace(InstanceUrlParam context, CommonRequestDTO request,Set<String> bimTypeIds){
+        List<JSONObject> result = new ArrayList<>();
+
+        ObjectNode criteria = JsonNodeFactory.instance.objectNode();
+        ArrayNode arrayNode = criteria.withArray("bimTypeId");
+        bimTypeIds.forEach(item->arrayNode.add(item));
+
+        QueryCriteria queryCriteria = EntityTransferUtil.transDmpRelationCriteria(criteria,RelationTypeEnum.MECHINARCH_EQ2SP.getGraphCode(),
+                RelationTypeEnum.MECHINARCH_EQ2SP.getRelCode(), request.getSpaceId(), 0);
+        // 查询空间下的设备
+        CommonResult response = baseService.doQuery(context,queryCriteria ,null);
+        return (List<JSONObject>) response.getContent();
+    }
+
+    /**
+     * 根据万达对象类型查询设备/阀门信息
+     * @param wdSystemCodes
+     * @return
+     */
+    private List<DefineTypeRel> getEquipByWdObjectType(Set<String> wdSystemCodes){
+        List<JSONObject> result = new ArrayList<>();
+
+        QueryWrapper<DefineTypeRel> wrapper = new QueryWrapper<>();
+
+        Set<String> objTypes = new HashSet<>();
+        objTypes.add("equipment");
+        objTypes.add("material");
+
+        wrapper.in("obj_type",objTypes);
+        wrapper.in("wd_system_code",wdSystemCodes);
+        List<DefineTypeRel> defineTypeRels = defineTypeRelMapper.selectList(wrapper);
+        return defineTypeRels;
+    }
+
+
+    /**
+     * 组装查询空间结果
+     * @param defineTypeRels
+     * @param spaceList
+     * @param infoCode
+     * @return
+     */
+    private List<JSONObject>  combineQuerySpaceResultData(List<DefineTypeRel> defineTypeRels,List<JSONObject> spaceList,String infoCode){
+        if(CollUtil.isEmpty(defineTypeRels)){
+            return new ArrayList<>();
+        }
+
+        Map<String, List<JSONObject>> spaceMap = spaceList.stream().collect(Collectors.groupingBy(k->k.getString(infoCode)));
+
+        //数据组装
+        List<JSONObject> result = new ArrayList<>();
+        for (DefineTypeRel defineTypeRel : defineTypeRels) {
+            JSONObject data = new JSONObject();
+            data.put("bimTypeId",defineTypeRel.getBimTypeId());
+            data.put("className",defineTypeRel.getWdClassName());
+            data.put("systemCode",defineTypeRel.getWdSystemCode());
+
+            List<JSONObject> objects = new ArrayList<>();
+            if(CollUtil.isNotEmpty(spaceMap)){
+                spaceMap.get(defineTypeRel.getBimTypeId());
+            }
+            data.put("objects",objects);
+            data.put("count",objects.size());
+            result.add(data);
+        }
+        return result;
+
+    }
+
+    /**
+     * 根据信息点查询空间对象信息
+     * @param context
+     * @param defineTypeRels
+     * @param request
+     * @return
+     */
+    private List<JSONObject> querySpaceObjectByInfoCode(InstanceUrlParam context,List<DefineTypeRel> defineTypeRels,CommonRequestDTO request,String infoCode){
+        //1. 根据bimTypeId查询楼层下的空间
+        Set<String> bimTypeIdSets = defineTypeRels.stream().filter(k-> StringUtils.isNotEmpty(k.getBimTypeId())).map(k->k.getBimTypeId()).collect(Collectors.toSet());
+        ObjectNode criteria = JsonNodeFactory.instance.objectNode();
+        ArrayNode bimTypeIds = criteria.withArray(infoCode);
+        bimTypeIdSets.forEach(item->{bimTypeIds.add(item);});
+
+        QueryCriteria queryCriteria = EntityTransferUtil.transDmpRelationCriteria(criteria, RelationTypeEnum.ARCHSUBSET_FL2SP.getGraphCode(),
+                RelationTypeEnum.ARCHSUBSET_FL2SP.getRelCode(), request.getFloorId(), 1);
+        CommonResult commonResult = baseService.doQuery(context, queryCriteria, JsonNode.class);
+        return (List<JSONObject>)commonResult.getContent();
+    }
+
+
+    /**
+     * 获取所有的空间类型
+     * @param instanceUrlParam
+     * @return
+     * @throws IOException
+     */
+    private JSONArray getDmpBaseSpaceType(InstanceUrlParam instanceUrlParam){
+        //封装查询条件
+        QueryCriteria queryCriteria = new QueryCriteria();
+        ObjectNode criteria = JsonNodeFactory.instance.objectNode();
+        criteria.put("objType","space");
+        queryCriteria.setCriteria(criteria);
+
+        //查询空间类型
+        JSONObject object = null;
+        try {
+            object = JsonHelper.toJSONObject(queryCriteria);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        DmpResult<JSONArray> typeResult = dmpRwdClient.queryObjectType(instanceUrlParam, object);
+        return  typeResult.getData();
+    }
+
+
+    /**
+     * 筛选出bimTypeId为空间类型的数据:bimTypeId:FireZone
+     * @param instanceUrlParam
+     * @param defineTypeRels
+     * @return
+     */
+    private List<DefineTypeRel> filterSpaceType(InstanceUrlParam instanceUrlParam,List<DefineTypeRel> defineTypeRels){
+        if(CollUtil.isEmpty(defineTypeRels)){
+            return new ArrayList<>();
+        }
+        List<DefineTypeRel> spaceTypeRels = new ArrayList<>();
+        //获取中台基础空间类型
+        JSONArray dmpSpaceType = getDmpBaseSpaceType(instanceUrlParam);
+        for (DefineTypeRel defineTypeRel : defineTypeRels) {
+            if(dmpSpaceType.contains(defineTypeRel.getBimTypeId())){
+                defineTypeRels.remove(defineTypeRel);
+                spaceTypeRels.add(defineTypeRel);
+            }
+        }
+        return spaceTypeRels;
+    }
+
+
+    /**
+     * 查询空间信息
+     * @param context
+     * @param requestDTO
+     * @return
+     */
+    private List<JSONObject> querySpaceInfo(InstanceUrlParam context, CommonRequestDTO requestDTO){
+        ObjectNode jsonNodes = JsonNodeFactory.instance.objectNode();
+        jsonNodes.put("id",requestDTO.getSpaceId());
+        QueryCriteria criteria = new QueryCriteria();
+        criteria.setCriteria(jsonNodes);
+
+        CommonResult response = baseService.doQuery(context, criteria, JSONObject.class);
+        return (List<JSONObject>)response.getContent();
+    }
+
 }

+ 4 - 5
src/main/java/com/persagy/dmp/middleware/utils/EntityTransferUtil.java

@@ -167,9 +167,8 @@ public class EntityTransferUtil {
      * @param direct  0 正向 1反向
      * @return
      */
-    public static QueryCriteria transDmpRelationCriteria(String graphCode, String relCode, String id, Integer direct){
+    public static QueryCriteria transDmpRelationCriteria(ObjectNode objectNode,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);
@@ -177,13 +176,13 @@ public class EntityTransferUtil {
         if(direct == 0){
             //正向查询 objFrom->objTo
             object.put("objFrom", id);
-            relation.put("relationTo",object);
+            objectNode.put("relationTo",object);
         }else{
             //反向查询 objTo->objFrom
             object.put("objTo", id);
-            relation.put("relationFrom",object);
+            objectNode.put("relationFrom",object);
         }
-        queryCriteria.setCriteria(relation);
+        queryCriteria.setCriteria(objectNode);
         return queryCriteria;
     }