瀏覽代碼

增加计算关系相关代码

lijie 3 年之前
父節點
當前提交
66eadcd0e8

+ 3 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/constant/BusinessErrorRwdCode.java

@@ -19,7 +19,9 @@ public enum BusinessErrorRwdCode {
     A7303("A7303", ":不存在"),
     A7304("A7304", ":存在多个实例"),
     A7305("A7305", ":错误的类型参考:这里的传感器包含车库摄像头,车位检测器,办公摄像头,火灾探测器,燃气探测器,漏电探测器,消防设备电源传感器,监控摄像头,入侵报警探测器,以及传感器系统下所有设备类型"),
-    A7306("A7306", ":不符合主对象条件限制");
+    A7306("A7306", ":不符合主对象条件限制"),
+    A7307("A7307", "图类型编码或边类型编码不能为空"),
+    A7308("A7308", "错误的关系计算策略");
 
     private String code;
 

+ 16 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/RelationCaclController.java

@@ -68,6 +68,22 @@ public class RelationCaclController {
     public CommonResult<List<ObjectRelation>> deleteObjRelationsByRelId(@Validated @RequestBody ObjectRelation objectRelation){
         return relationCaclService.deleteObjRelationsByRelId(objectRelation);
     }
+    /***
+     * Description: 关系计算接口
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectRelation>>
+     * @author : lijie
+     * @date :2021/9/2 20:20
+     * Update By lijie 2021/9/2 20:20
+     */
+    @PostMapping("calculatingObjRelation")
+    public CommonResult<List<ObjectRelation>> calculatingObjRelation(@RequestBody RequestData requestData){
+        if (StrUtil.isBlank(requestData.getGraphCode())
+                || StrUtil.isBlank(requestData.getRelCode())){
+            throw new BusinessException(ResponseCode.A0400.getCode(),ResponseCode.A0400.getDesc());
+        }
+        return relationCaclService.calculatingObjRelation(requestData);
+    }
 
 
 

+ 19 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/domain/RelChainDTO.java

@@ -0,0 +1,19 @@
+package com.persagy.dmp.rwd.digital.domain;
+
+import lombok.Data;
+/***
+ * Description: 关系DTO
+ * @author : lijie
+ * @date :2021/9/7 16:35
+ * Update By lijie 2021/9/7 16:35
+ */
+@Data
+public class RelChainDTO {
+    /**图类型编码*/
+    private String graphCode;
+    /**关系编码*/
+    private String relCode;
+    /**空间类型编码*/
+    private String relValue;
+
+}

+ 9 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/RelationCaclService.java

@@ -31,4 +31,13 @@ public interface RelationCaclService {
      * Update By lijie 2021/9/2 20:20
      */
     CommonResult<List<ObjectRelation>> deleteObjRelationsByRelId(ObjectRelation objectRelation);
+    /***
+     * Description: 关系计算
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectRelation>>
+     * @author : lijie
+     * @date :2021/9/7 14:36
+     * Update By lijie 2021/9/7 14:36
+     */
+    CommonResult<List<ObjectRelation>> calculatingObjRelation(RequestData requestData);
 }

+ 19 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelationCaclServiceImpl.java

@@ -24,6 +24,8 @@ import com.persagy.dmp.rwd.digital.service.IObjectRelationService;
 import com.persagy.dmp.rwd.digital.service.RelationCaclService;
 import com.persagy.dmp.rwd.digital.service.RelationCalSignService;
 import com.persagy.dmp.rwd.digital.service.RelationProjectCalService;
+import com.persagy.dmp.rwd.digital.service.strategy.CalculatingRelationService;
+import com.persagy.dmp.rwd.digital.service.strategy.CalculationRelatingContext;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -42,6 +44,7 @@ public class RelationCaclServiceImpl implements RelationCaclService {
     private final IObjectRelationService objectRelationService;
     private final RelationCalSignService relationCalSignService;
     private final RelationProjectCalService relationProjectCalService;
+    private final CalculationRelatingContext calculatingRelationContext;
 
 
     /***
@@ -199,6 +202,22 @@ public class RelationCaclServiceImpl implements RelationCaclService {
         objectRelationService.updateBatchById(objectRelations);
         return ResultHelper.multi(objectRelations,objectRelations.size());
     }
+    /***
+     * Description: 关系计算
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectRelation>>
+     * @author : lijie
+     * @date :2021/9/7 14:36
+     * Update By lijie 2021/9/7 14:36
+     */
+    @Override
+    public CommonResult<List<ObjectRelation>> calculatingObjRelation(RequestData requestData) {
+        CalculatingRelationService relationService = calculatingRelationContext
+                .getCalculatingRelationService(requestData.getGraphCode(),
+                        requestData.getRelCode(), requestData.getRelValue());
+        relationService.handle(requestData);
+        return ResultHelper.multi(new ArrayList<>(),0L);
+    }
 
     /***
      * Description: 根据项目id和图类型编码及关系类型编码更新计算时间

+ 56 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/strategy/BuildingToSpaceCalImpl.java

@@ -0,0 +1,56 @@
+package com.persagy.dmp.rwd.digital.service.strategy;
+
+import cn.hutool.core.collection.CollUtil;
+import com.persagy.dmp.basic.dto.RequestData;
+import com.persagy.dmp.rwd.basic.constant.DigitalRelCode;
+import com.persagy.dmp.rwd.digital.domain.RelChainDTO;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.Set;
+
+@Component
+@Relation(graphCode = "ArchSubset",relCode="Bd2Sp")
+@RequiredArgsConstructor
+public class BuildingToSpaceCalImpl implements CalculatingRelationService {
+
+    private final CalculationRelatingContext calculationRelatingContext;
+
+
+    /***
+     * Description: 计算关系逻辑
+     * @param requestData : 请求参数
+     * @return : void
+     * @author : lijie
+     * @date :2021/9/7 16:28
+     * Update By lijie 2021/9/7 16:28
+     */
+    @Override
+    public void handle(RequestData requestData) {
+        // 1.处理依赖关系的计算
+        Set<RelChainDTO> dependentRelChain = gainDependentRelChain();
+        for (RelChainDTO relChain : dependentRelChain) {
+            calculationRelatingContext
+                    .getCalculatingRelationService(relChain.getGraphCode(),relChain.getRelCode(),relChain.getRelValue())
+                    .handle(RequestData.builder()
+                            .graphCode(relChain.getGraphCode())
+                            .relCode(relChain.getRelCode())
+                            .relValue(relChain.getRelValue()).build());
+        }
+        // 2.计算自身关系
+        // 2.1
+
+
+    }
+    /***
+     * Description:
+     * @return : java.util.Set<java.lang.String>
+     * @author : lijie
+     * @date :2021/9/7 16:33
+     * Update By lijie 2021/9/7 16:33
+     */
+    private Set<RelChainDTO> gainDependentRelChain(){
+        return CollUtil.newHashSet();
+    }
+
+}

+ 9 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/strategy/CalculatingRelationService.java

@@ -0,0 +1,9 @@
+package com.persagy.dmp.rwd.digital.service.strategy;
+
+import com.persagy.dmp.basic.dto.RequestData;
+
+public interface CalculatingRelationService {
+
+    void handle(RequestData requestData);
+
+}

+ 79 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/strategy/CalculationRelatingContext.java

@@ -0,0 +1,79 @@
+package com.persagy.dmp.rwd.digital.service.strategy;
+
+
+import cn.hutool.core.annotation.AnnotationUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.StrUtil;
+import com.persagy.dmp.common.exception.BusinessException;
+import com.persagy.dmp.common.helper.SpringHelper;
+import com.persagy.dmp.rwd.basic.constant.BusinessErrorRwdCode;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.lang.reflect.AnnotatedElement;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+@Component
+public class CalculationRelatingContext {
+
+    private Map<String,CalculatingRelationService> beanMap;
+
+    /***
+     * Description: 初始化关系计算策略类
+     * @return : void
+     * @author : lijie
+     * @date :2021/9/7 15:53
+     * Update By lijie 2021/9/7 15:53
+     */
+    @PostConstruct
+    private void initCalculatingRelationClass(){
+        beanMap=new HashMap<>();
+        // 初始化策略模式的映射
+        Map<String, CalculatingRelationService> serviceMap =
+                SpringHelper.getBeansOfType(CalculatingRelationService.class);
+        if (MapUtil.isEmpty(serviceMap)){
+            return;
+        }
+        // 将所有标准Relation注解并且图类型编码,边类型编码放入映射
+        Set<Map.Entry<String, CalculatingRelationService>> entries = serviceMap.entrySet();
+        for (Map.Entry<String, CalculatingRelationService> entry : entries) {
+            Relation relation = AnnotationUtil.getAnnotation(entry.getValue().getClass(), Relation.class);
+            if (StrUtil.isBlank(relation.graphCode())
+                    || StrUtil.isBlank(relation.relCode())){
+                continue;
+            }
+            if (StrUtil.isNotBlank(relation.relValue())){
+                beanMap.put(relation.graphCode()+StrUtil.UNDERLINE
+                        +relation.relCode()+StrUtil.UNDERLINE+relation.relValue(),entry.getValue());
+            }else {
+                beanMap.put(relation.graphCode()+StrUtil.UNDERLINE+relation.relCode(),entry.getValue());
+            }
+        }
+    }
+
+    /***
+     * Description:获取关系计算策略处理类
+     * @param graphCode : 图类型编码
+     * @param relCode : 关系编码
+     * @return : com.persagy.dmp.rwd.digital.service.strategy.CalculatingRelationService
+     * @author : lijie
+     * @date :2021/9/7 15:55
+     * Update By lijie 2021/9/7 15:55
+     */
+    public CalculatingRelationService getCalculatingRelationService(String graphCode,String relCode,String relValue){
+        if (StrUtil.isBlank(graphCode)
+                || StrUtil.isBlank(relCode)){
+            throw new BusinessException(BusinessErrorRwdCode.A7307.getCode(),BusinessErrorRwdCode.A7307.getDesc());
+        }
+        String key = graphCode+StrUtil.UNDERLINE+relCode;
+        if (StrUtil.isNotBlank(relValue)){
+            key=key+StrUtil.UNDERLINE+relValue;
+        }
+        if (!beanMap.containsKey(key)){
+            throw new BusinessException(BusinessErrorRwdCode.A7308.getCode(),BusinessErrorRwdCode.A7308.getDesc());
+        }
+        return beanMap.get(key);
+    }
+}

+ 15 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/strategy/Relation.java

@@ -0,0 +1,15 @@
+package com.persagy.dmp.rwd.digital.service.strategy;
+
+import java.lang.annotation.*;
+
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Relation {
+    /**图类型编码*/
+    String graphCode() default "";
+    /**关系类型编码*/
+    String relCode() default "";
+    /**空间功能类型*/
+    String relValue() default "";
+}

+ 5 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/dto/RequestData.java

@@ -297,4 +297,9 @@ public class RequestData {
     @JsonProperty("checkSensorCodes")
     @JSONField(name = "checkSensorCodes",alternateNames = {"checkSensorCodes","check_sensor_codes"})
     private Set<String> checkSensorCodes;
+    /** 过滤的计算标记,1-手动计算,2-自动计算 */
+    @JsonAlias({"filterSigns","filter_signs"})
+    @JsonProperty("filterSigns")
+    @JSONField(name = "filterSigns",alternateNames = {"filterSigns","filter_signs"})
+    private Set<String> filterSigns;
 }