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