Browse Source

兼容旧的/rwd/def/funcid查询逻辑,重新赋值通用信息点的classCode

lijie 3 years ago
parent
commit
84fe22d64d

+ 20 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/constant/EquipmentTypeEnum.java

@@ -0,0 +1,20 @@
+package com.persagy.dmp.rwd.basic.constant;
+
+import lombok.Getter;
+
+@Getter
+public enum EquipmentTypeEnum {
+    /**门的设备类型*/
+    CFBEDR,
+    /**窗的设备类型*/
+    CFBEWN,
+    /**虚拟墙的设备类型,目前标准字典不存在,暂时定义该code*/
+    CFBEXX,
+    /**气体管道的设备类型,信息点useType代表管段用途*/
+    OTAAPL,
+    /**液体管道的设备类型,信息点useType代表管段用途*/
+    OTLAPL;
+
+
+
+}

+ 12 - 6
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectInfoController.java

@@ -58,7 +58,7 @@ public class ObjectInfoController {
         }
         QueryWrapper<ObjectInfoDefine> wrapper = new QueryWrapper<>();
         // 处理classCode
-        ensureClassCode(criteria);
+        ObjectTypeDefine objectTypeDefine = ensureClassCode(criteria);
         // 添加所属项目条件
         ConditionUtil.ensureProjectCriteria(wrapper);
         // 转换查询条件
@@ -76,7 +76,12 @@ public class ObjectInfoController {
             // wrapper.select("/*+ SET_VAR(sort_buffer_size = 2M) */*");
             page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
         }
-        return ResultHelper.multi(page.getRecords(), page.getTotal());
+        // 20211013 兼容旧的逻辑,将通用信息点的classCode改为当前的classCode
+        List<ObjectInfoDefine> records = page.getRecords();
+        if (CollUtil.isNotEmpty(records) && null!=objectTypeDefine && StrUtil.isNotBlank(objectTypeDefine.getCode())){
+            records.forEach(record->record.setClassCode(objectTypeDefine.getCode()));
+        }
+        return ResultHelper.multi(records, page.getTotal());
     }
     /***
      * Description: 处理对象类型,如果父级id存在则加上父级id
@@ -86,14 +91,14 @@ public class ObjectInfoController {
      * @date :2021/9/9 18:25
      * Update By lijie 2021/9/9 18:25
      */
-    private void ensureClassCode(QueryCriteria criteria) {
+    private ObjectTypeDefine ensureClassCode(QueryCriteria criteria) {
         ObjectNode objectNode = criteria.getCriteria();
         if (!objectNode.has(ObjectDigital.CLASS_CODE_HUM)){
-            return;
+            return null;
         }
         JsonNode jsonNode = objectNode.get(ObjectDigital.CLASS_CODE_HUM);
         if (!jsonNode.isTextual()){
-            return;
+            return null;
         }
         String classCode = jsonNode.asText();
         LambdaQueryWrapper<ObjectTypeDefine> queryWrapper = new LambdaQueryWrapper<>();
@@ -101,7 +106,7 @@ public class ObjectInfoController {
         queryWrapper.eq(ObjectTypeDefine::getValid,true);
         List<ObjectTypeDefine> objectTypeDefines = objectTypeService.queryByCondition(queryWrapper);
         if (CollUtil.isEmpty(objectTypeDefines)){
-            return;
+            return null;
         }
         ObjectTypeDefine objectTypeDefine = objectTypeDefines.get(0);
         ArrayNode arrayNode = JsonHelper.objectMapper.createArrayNode();
@@ -110,6 +115,7 @@ public class ObjectInfoController {
             arrayNode.add(objectTypeDefine.getParentCode());
         }
         objectNode.set(ObjectDigital.CLASS_CODE_HUM,arrayNode);
+        return objectTypeDefine;
     }
 
     @PostMapping("/create")

+ 27 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/dao/ObjectDigitalMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.rwd.digital.domain.CalculatingDTO;
+import com.persagy.dmp.rwd.digital.domain.FloorCalDTO;
 import com.persagy.dmp.rwd.digital.domain.SpaceCalDTO;
 import org.apache.ibatis.annotations.Param;
 
@@ -138,5 +139,30 @@ public interface ObjectDigitalMapper extends BaseMapper<ObjectDigital> {
      * @date :2021/10/11 22:09
      * Update By lijie 2021/10/11 22:09
      */
-    List<SpaceCalDTO> queryIspacesByModelIds(Set<String> modelIds, CalculatingDTO calculatingDTO);
+    List<SpaceCalDTO> queryIspacesByModelIds(@Param("modelIds") Set<String> modelIds,
+                                             @Param("param") CalculatingDTO calculatingDTO);
+    /***
+     * Description: 根据项目id查询楼层
+     * @param calculatingDTO : 请求参数
+     * @return : java.util.List<com.persagy.dmp.rwd.digital.domain.FloorCalDTO>
+     * @author : lijie
+     * @date :2021/10/12 20:37
+     * Update By lijie 2021/10/12 20:37
+     */
+    List<FloorCalDTO> queryFloorsByProjectId(@Param("param") CalculatingDTO calculatingDTO);
+    /***
+     * Description: 查询管道
+     * @param groupCode : 集团编码
+     * @param projectId : 项目id
+     * @param modelId : 模型id
+     * @param useType : 管道用途类型
+     * @param classCode : 对象类型
+     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>
+     * @author : lijie
+     * @date :2021/10/12 20:59
+     * Update By lijie 2021/10/12 20:59
+     */
+    List<ObjectDigital> queryConnectors(@Param("groupCode") String groupCode,@Param("projectId") String projectId,
+                                        @Param("modelId") String modelId,@Param("useType") String useType,
+                                        @Param("classCode") String classCode);
 }

+ 31 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/domain/FloorCalDTO.java

@@ -0,0 +1,31 @@
+package com.persagy.dmp.rwd.digital.domain;
+
+import lombok.Data;
+
+@Data
+public class FloorCalDTO {
+    /** 楼层id */
+    private String floorId;
+    /** 楼层名称 */
+    private String floorName;
+    /** 楼层本地编码 */
+    private String floorLocalId;
+    /** 楼层本地名称 */
+    private String floorLocalName;
+    /** 楼层模型id */
+    private String modelId;
+    /** 集团编码 */
+    private String groupCode;
+    /** 项目id */
+    private String projectId;
+    /** 楼层顺序码 */
+    private Integer sequenceId;
+    /** 建筑id */
+    private String buildingId;
+    /** 对象类型 */
+    private String classCode;
+    /** 对象分类 */
+    private String objType;
+
+
+}

+ 4 - 3
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/calstrategy/SpaceConnectionRelCalculateServiceImpl.java

@@ -12,6 +12,7 @@ import com.persagy.dmp.basic.dto.RelationCalRuleDTO;
 import com.persagy.dmp.basic.dto.SpaceConnectionCalDTO;
 import com.persagy.dmp.common.helper.SpringHelper;
 import com.persagy.dmp.digital.entity.ObjectRelation;
+import com.persagy.dmp.rwd.basic.constant.EquipmentTypeEnum;
 import com.persagy.dmp.rwd.basic.utils.DigitalCommonUtils;
 import com.persagy.dmp.rwd.basic.utils.GeoToolsUtil;
 import com.persagy.dmp.rwd.digital.dao.ObjectDigitalMapper;
@@ -68,13 +69,13 @@ public class SpaceConnectionRelCalculateServiceImpl implements CalculateService
         // 存储的关系列表
         List<ObjectRelation> resultList = new ArrayList<>();
         // 2.门的计算
-        calculateRelationInternal(resultList,spaceCalDTOS,calculatingDTO,spaceMap,"CFBEDR",
+        calculateRelationInternal(resultList,spaceCalDTOS,calculatingDTO,spaceMap, EquipmentTypeEnum.CFBEDR.name(),
                 calRule.getSpaceConnectionCal().getDoorCalFlag());
         // 3.窗的计算
-        calculateRelationInternal(resultList,spaceCalDTOS,calculatingDTO,spaceMap,"CFBEWN",
+        calculateRelationInternal(resultList,spaceCalDTOS,calculatingDTO,spaceMap,EquipmentTypeEnum.CFBEWN.name(),
                 calRule.getSpaceConnectionCal().getWindowCalFlag());
         // 4.虚拟墙的计算(暂时没有虚拟墙的概念,先置为false)
-        calculateRelationInternal(resultList,spaceCalDTOS,calculatingDTO,spaceMap,"CFBEXX",
+        calculateRelationInternal(resultList,spaceCalDTOS,calculatingDTO,spaceMap,EquipmentTypeEnum.CFBEXX.name(),
                 calRule.getSpaceConnectionCal().getVirtualWindowCalFlag());
         // 5.元空间的计算
         ispaceCalculateRelationInternal(resultList,spaceCalDTOS,calculatingDTO,spaceMap,

+ 191 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/calstrategy/SysBlockCalculateServiceImpl.java

@@ -0,0 +1,191 @@
+package com.persagy.dmp.rwd.digital.service.calstrategy;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.persagy.dmp.basic.dto.RelationCalRuleDTO;
+import com.persagy.dmp.define.entity.RelationDefine;
+import com.persagy.dmp.digital.entity.ObjectDigital;
+import com.persagy.dmp.digital.entity.ObjectRelation;
+import com.persagy.dmp.digital.entity.ObjectRelationProjectCal;
+import com.persagy.dmp.rwd.basic.constant.EquipmentTypeEnum;
+import com.persagy.dmp.rwd.define.service.IRelationDefineService;
+import com.persagy.dmp.rwd.digital.dao.ObjectDigitalMapper;
+import com.persagy.dmp.rwd.digital.dao.ObjectRelationMapper;
+import com.persagy.dmp.rwd.digital.domain.CalculatingDTO;
+import com.persagy.dmp.rwd.digital.domain.FloorCalDTO;
+import com.persagy.dmp.rwd.digital.service.CalculateService;
+import com.persagy.dmp.rwd.digital.service.IObjectRelationService;
+import com.persagy.dmp.rwd.digital.service.RelationProjectCalService;
+import com.persagy.dmp.rwd.digital.utils.ObjectDigitalCriteriaHelper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/***
+ * Description: 管网系统设备分块关系计算
+ * @author : lijie
+ * @date :2021/10/9 16:26
+ * Update By lijie 2021/10/9 16:26
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class SysBlockCalculateServiceImpl implements CalculateService {
+
+    private final IObjectRelationService objectRelationService;
+    private final ObjectRelationMapper objectRelationMapper;
+    private final ObjectDigitalMapper objectDigitalMapper;
+    private final RelationProjectCalService relationProjectCalService;
+    private final IRelationDefineService relationDefineService;
+
+
+    /***
+     * Description: 空间连通关系计算
+     * @param calRule : 计算规则
+     * @param calculatingDTO : 请求参数
+     * @return : void
+     * @author : lijie
+     * @date :2021/10/9 16:26
+     * Update By lijie 2021/10/9 16:26
+     */
+    @Override
+    public void calculateRelation(RelationCalRuleDTO calRule, CalculatingDTO calculatingDTO) {
+        // 1.根据项目id和图类型查询对应的关系数据
+        ObjectRelationProjectCal objectRelationProjectCal = getRelationProjectCalByProjectIdAndRelCode(calculatingDTO);
+        if (null==objectRelationProjectCal
+                || CollUtil.isEmpty(objectRelationProjectCal.getMepSystemType())){
+            return;
+        }
+        RelationDefine relationDefine = getRelationCalByGraphCodeAndRelCode(calculatingDTO);
+        if (null==relationDefine){
+            return;
+        }
+        Set<String> mepSystemTypes = objectRelationProjectCal.getMepSystemType();
+        String defineName = relationDefine.getName();
+        // 2.分块
+        relCalculateBlock(calRule,calculatingDTO,mepSystemTypes,defineName);
+        // 3.设置源
+        // 4.计算流向
+
+
+
+    }
+    /***
+     * Description: 分块
+     * @param calRule : 计算规则
+     * @param calculatingDTO : 请求参数
+     * @param useTypes : 管道用途
+     * @param defineName :
+     * @return : void
+     * @author : lijie
+     * @date :2021/10/12 20:12
+     * Update By lijie 2021/10/12 20:12
+     */
+    private void relCalculateBlock(RelationCalRuleDTO calRule, CalculatingDTO calculatingDTO,
+                                   Set<String> useTypes, String defineName) {
+        for (String useType : useTypes) {
+            String classCode = getClassCodeByUseType(useType);
+            // 1.根据项目id查询楼层
+            List<FloorCalDTO> floors = queryFloorByProjectId(calculatingDTO);
+            if (CollUtil.isEmpty(floors)){
+                continue;
+            }
+            for (FloorCalDTO floor : floors) {
+                // 2.查询符合条件的管道构件
+                List<ObjectDigital> connectors = objectDigitalMapper.queryConnectors(calculatingDTO.getGroupCode(),
+                        calculatingDTO.getProjectId(),floor.getModelId(),useType,classCode);
+                if (CollUtil.isEmpty(connectors)){
+                    continue;
+                }
+
+
+
+            }
+
+        }
+
+    }
+    /***
+     * Description: 根据项目id查询楼层
+     * @param calculatingDTO : 请求参数
+     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>
+     * @author : lijie
+     * @date :2021/10/12 20:32
+     * Update By lijie 2021/10/12 20:32
+     */
+    private List<FloorCalDTO> queryFloorByProjectId(CalculatingDTO calculatingDTO) {
+        return objectDigitalMapper.queryFloorsByProjectId(calculatingDTO);
+    }
+
+    /***
+     * Description: 根据管道类型获得对应的对象类型code
+     * @param useType : 管道用途类型名称
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/10/12 15:40
+     * Update By lijie 2021/10/12 15:40
+     */
+    private String getClassCodeByUseType(String useType){
+        if (useType.equals("补风管") || useType.equals("空调送风风管") || useType.equals("空调排风风管")
+                || useType.equals("通风送风风管") || useType.equals("正压送风风管") || useType.equals("新风风管")
+                || useType.equals("排烟风管") || useType.equals("通风排风风管")
+                || useType.equals("送风兼消防补风风管") || useType.equals("排风兼排烟管") || useType.equals("排油烟管")
+                || useType.equals("回风风管")){
+            return EquipmentTypeEnum.OTAAPL.name();
+        }
+        return EquipmentTypeEnum.OTLAPL.name();
+    }
+
+    /***
+     * Description: 根据图类型与关系类型查询关系类型数据
+     * @param calculatingDTO : 请求参数
+     * @return : com.persagy.dmp.define.entity.RelationDefine
+     * @author : lijie
+     * @date :2021/10/12 15:10
+     * Update By lijie 2021/10/12 15:10
+     */
+    private RelationDefine getRelationCalByGraphCodeAndRelCode(CalculatingDTO calculatingDTO) {
+        LambdaQueryWrapper<RelationDefine> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(RelationDefine::getGraphCode,calculatingDTO.getGraphCode());
+        queryWrapper.eq(RelationDefine::getCode,calculatingDTO.getRelCode());
+        queryWrapper.eq(RelationDefine::getValid,true);
+        return relationDefineService.getOne(queryWrapper);
+    }
+
+    /***
+     * Description: 根据项目id和图类型查询关系数据
+     * @param calculatingDTO : 请求参数
+     * @return : com.persagy.dmp.digital.entity.ObjectRelationProjectCal
+     * @author : lijie
+     * @date :2021/10/12 14:56
+     * Update By lijie 2021/10/12 14:56
+     */
+    private ObjectRelationProjectCal getRelationProjectCalByProjectIdAndRelCode(CalculatingDTO calculatingDTO) {
+        LambdaQueryWrapper<ObjectRelationProjectCal> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ObjectRelationProjectCal::getGraphCode,calculatingDTO.getGraphCode());
+        queryWrapper.eq(ObjectRelationProjectCal::getProjectId,calculatingDTO.getProjectId());
+        queryWrapper.eq(ObjectRelationProjectCal::getValid,true);
+        queryWrapper.eq(ObjectRelationProjectCal::getRelCode,calculatingDTO.getRelCode());
+        queryWrapper.eq(ObjectRelationProjectCal::getGroupCode,calculatingDTO.getGroupCode());
+        return relationProjectCalService.getOne(queryWrapper);
+    }
+
+    /***
+     * Description: 根据请求参数和id集合删除关系
+     * @param calculatingDTO : 请求参数
+     * @return : void
+     * @author : lijie
+     * @date :2021/9/11 16:13
+     * Update By lijie 2021/9/11 16:13
+     */
+    private void deleteRelDataByCondition(CalculatingDTO calculatingDTO) {
+        QueryWrapper<ObjectRelation> queryWrapper = ObjectDigitalCriteriaHelper.createCommonQueryWrapper(null,calculatingDTO);
+        queryWrapper.eq(StrUtil.toUnderlineCase(ObjectRelation.GRAPH_CODE_HUM),calculatingDTO.getGraphCode());
+        queryWrapper.eq(StrUtil.toUnderlineCase(ObjectRelation.REL_CODE_HUM),calculatingDTO.getRelCode());
+        objectRelationService.remove(queryWrapper);
+    }
+}

+ 1 - 0
dmp-business/dmp-rwd/src/main/resources/db/init/schema.sql

@@ -170,6 +170,7 @@ CREATE TABLE  IF NOT EXISTS `relation_project_cal`  (
 `source_flag` tinyint(0) NULL DEFAULT NULL COMMENT '是否需要配置源末端',
 `automatic_flag` tinyint(0) NULL DEFAULT NULL COMMENT '是否自动计算类型',
 `manual` tinyint(0) NULL DEFAULT NULL COMMENT '手动计算类型 1 禁用  2提示引导 3手动维护',
+"group_code" varchar(40) DEFAULT NULL COMMENT '集团编码',
 `project_id` varchar(200) NULL DEFAULT NULL COMMENT '项目id',
 `computing_time` varchar(100) NULL DEFAULT NULL COMMENT '最后一次自动计算时间',
 `computational_state` tinyint(0) NULL DEFAULT NULL COMMENT '计算状态 1初始状态 2需要计算 3计算中 4等待中 5计算失败(如果处于计算中状态,则不再次调用)',

+ 64 - 0
dmp-business/dmp-rwd/src/main/resources/mapper/ObjectDigitalMapper.xml

@@ -641,5 +641,69 @@
         ;
     </select>
 
+    <resultMap id="FloorResultMap" type="com.persagy.dmp.rwd.digital.domain.FloorCalDTO">
+        <result property="floorId" column="floorId" jdbcType="VARCHAR"/>
+        <result property="floorName" column="floorName" jdbcType="VARCHAR"/>
+        <result property="floorLocalId" column="floorLocalId" jdbcType="VARCHAR"/>
+        <result property="floorLocalName" column="floorLocalName" jdbcType="VARCHAR"/>
+        <result property="modelId" column="modelId" jdbcType="VARCHAR"/>
+        <result property="groupCode" column="groupCode" jdbcType="VARCHAR"/>
+        <result property="projectId" column="projectId" jdbcType="VARCHAR"/>
+        <result property="sequenceId" column="sequenceId" jdbcType="VARCHAR"/>
+        <result property="buildingId" column="buildingId" jdbcType="VARCHAR"/>
+        <result property="classCode" column="classCode" jdbcType="VARCHAR"/>
+        <result property="objType" column="objType" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <select id="queryFloorsByProjectId" resultMap="FloorResultMap">
+        SELECT
+            dto.id AS floorId,
+            dto.name AS floorName,
+            dto.local_id AS floorLocalId,
+            dto.local_name AS floorLocalName,
+            JSON_UNQUOTE(JSON_EXTRACT(dto.infos, '$.modelId')) AS modelId,
+            dto.group_code AS groupCode,
+            dto.project_id AS projectId,
+            JSON_EXTRACT(dto.infos, '$.floorSequenceID') AS sequenceId,
+            dtr.obj_from AS buildingId,
+            dto.obj_type AS objType,
+            dto.class_code AS classCode
+        FROM
+            dt_object AS dto
+                LEFT JOIN dt_relation AS dtr ON(dto.id=dtr.obj_to AND dtr.graph_code='ArchSubset' AND dtr.rel_code='Bd2Fl')
+        WHERE
+            dto.class_code='floor'
+          AND JSON_UNQUOTE(JSON_EXTRACT(dto.infos, '$.modelId')) IS NOT NULL
+        <if test="null!=param.projectId and param.projectId.length>0">
+            AND dto.project_id = #{param.projectId}
+        </if>
+        <if test="null!=param.groupCode and param.groupCode.length>0">
+            AND dto.group_code = #{param.groupCode}
+        </if>
+        ORDER BY JSON_EXTRACT(dto.infos, '$.floorSequenceID') DESC
+    </select>
+    <select id="queryConnectors" resultMap="BaseResultMap">
+        SELECT
+            *
+        FROM
+            dt_object AS dto
+        WHERE dto.obj_type='equipment'
+        <if test="null!=modelId and modelId.length>0">
+            AND JSON_UNQUOTE(JSON_EXTRACT(dto.infos, '$.modelId')) = #{modelId}
+        </if>
+        <if test="null!=useType and useType.length>0">
+            AND JSON_UNQUOTE(JSON_EXTRACT(dto.infos, '$.useType')) = #{useType}
+        </if>
+        <if test="null!=classCode and classCode.length>0">
+            AND dto.class_code=#{classCode}
+        </if>
+        <if test="null!=projectId and projectId.length>0">
+            AND dto.project_id = #{projectId}
+        </if>
+        <if test="null!=groupCode and groupCode.length>0">
+            AND dto.group_code = #{groupCode}
+        </if>
+    </select>
+
 
 </mapper>

+ 14 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/entity/ObjectRelationProjectCal.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.persagy.dmp.common.model.entity.AuditableEntity;
 import lombok.*;
 
+import java.util.Set;
+
 /**
  * 
  * @TableName relation_project_cal
@@ -48,6 +50,12 @@ public class ObjectRelationProjectCal extends AuditableEntity {
     private Integer manual;
 
     /**
+     * 集团编码
+     */
+    @TableField(value = "group_code")
+    private String groupCode;
+
+    /**
      * 项目id
      */
     @TableField(value = "project_id")
@@ -89,6 +97,12 @@ public class ObjectRelationProjectCal extends AuditableEntity {
     @TableField(value = "compute_version")
     private Integer computeVersion;
 
+    /**
+     * 机电系统类型
+     */
+    @TableField(value = "mep_system_type")
+    private Set<String> mepSystemType;
+
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 }