Browse Source

调整calculatingObjRelation接口,第二种计算器增加面-面的计算

lijie 3 years ago
parent
commit
ebe0420c9f
24 changed files with 401 additions and 233 deletions
  1. 28 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/constant/ComputationalStateEnum.java
  2. 26 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/utils/GeoToolsUtil.java
  3. 12 12
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/RelationProjectCalController.java
  4. 0 15
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/dao/RelationCalSignMapper.java
  5. 2 2
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/dao/RelationProjectCalMapper.java
  6. 0 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/IObjectDigitalService.java
  7. 0 11
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/RelationCalSignService.java
  8. 2 2
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/RelationProjectCalService.java
  9. 50 48
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/CoordinateCalculateServiceImpl.java
  10. 0 2
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ObjectDigitalServiceImpl.java
  11. 40 46
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelationCalServiceImpl.java
  12. 0 20
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelationCalSignServiceImpl.java
  13. 2 2
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelationProjectCalServiceImpl.java
  14. 36 0
      dmp-business/dmp-rwd/src/main/resources/db/init/schema.sql
  15. 1 1
      dmp-business/dmp-rwd/src/main/resources/mapper/ObjectRelationMapper.xml
  16. 0 20
      dmp-business/dmp-rwd/src/main/resources/mapper/RelationCalSignMapper.xml
  17. 3 1
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/dto/CoordinateCalInfo.java
  18. 8 5
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/RelationDefine.java
  19. 15 0
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalRelationCaclClient.java
  20. 17 2
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalRelationCaclFacade.java
  21. 9 9
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalRelationProjectCalClient.java
  22. 133 0
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalRelationProjectCalFacade.java
  23. 17 5
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/entity/RelationProjectCal.java
  24. 0 29
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/entity/RelationCalSign.java

+ 28 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/constant/ComputationalStateEnum.java

@@ -0,0 +1,28 @@
+package com.persagy.dmp.rwd.basic.constant;
+
+import lombok.Getter;
+
+/***
+ * Description: 计算状态枚举类1初始状态 2需要计算 3计算中 4等待中 5计算失败(如果处于计算中状态,则不再次调用)
+ * @author : lijie
+ * @date :2021/9/11 22:55
+ * Update By lijie 2021/9/11 22:55
+ */
+@Getter
+public enum ComputationalStateEnum {
+
+    INIT(1,"初始状态"),
+    NEED_COMPUTE(2,"需要计算"),
+    COMPUTING(3,"计算中"),
+    WAITING(4,"等待中"),
+    FAIL(5,"计算失败");
+
+    ComputationalStateEnum(Integer state, String beanName) {
+        this.state = state;
+        this.beanName = beanName;
+    }
+
+    private Integer state;
+    private String beanName;
+
+}

+ 26 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/utils/GeoToolsUtil.java

@@ -1,5 +1,6 @@
 package com.persagy.dmp.rwd.basic.utils;
 
+import cn.hutool.core.collection.CollUtil;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.locationtech.jts.geom.*;
@@ -68,6 +69,9 @@ public class GeoToolsUtil {
      * @return
      */
    public static Boolean isPointInPoly(ObjectNode pointLocal, List<LinkedHashMap<String,Object>> outLines) {
+       if (null==pointLocal || CollUtil.isEmpty(outLines)){
+           return false;
+       }
        //创建点
        Point point = createPoint(pointLocal);
        //创建面
@@ -75,5 +79,27 @@ public class GeoToolsUtil {
        //判断点面包含关系
        return polygon.contains(point);
    }
+    /**
+     * 点面包含关系判断
+     * 用途:判断一个面是否包含一个点,即一个点是否在一个面内
+     * @param fromOutLines: 轮廓坐标
+     * @param toOutLines: 轮廓坐标
+     * @return
+     */
+   public static Boolean isPolyInPoly(List<LinkedHashMap<String,Object>> fromOutLines,
+                                       List<LinkedHashMap<String,Object>> toOutLines) {
+       if (CollUtil.isEmpty(fromOutLines) || CollUtil.isEmpty(toOutLines)){
+           return false;
+       }
+       //创建点
+       Polygon fromPolygon = createPolygon(fromOutLines);
+       //创建面
+       Polygon toPolygon = createPolygon(toOutLines);
+       //判断面-面包含关系
+       return fromPolygon.contains(toPolygon)
+               || fromPolygon.equalsTopo(toPolygon)
+               || fromPolygon.overlaps(toPolygon)
+               || toPolygon.contains(fromPolygon);
+   }
 
 }

+ 12 - 12
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/RelationProjectCalController.java

@@ -13,7 +13,7 @@ import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ParamCheckUtil;
 import com.persagy.dmp.common.utils.ResultHelper;
-import com.persagy.dmp.digital.entity.RelationProjectCal;
+import com.persagy.dmp.digital.entity.ObjectRelationProjectCal;
 import com.persagy.dmp.mybatis.utils.ConditionUtil;
 import com.persagy.dmp.rwd.digital.service.RelationProjectCalService;
 import lombok.RequiredArgsConstructor;
@@ -40,18 +40,18 @@ public class RelationProjectCalController {
     private final RelationProjectCalService service;
 
     @PostMapping("query")
-    public CommonResult<List<RelationProjectCal>> query(@RequestBody QueryCriteria criteria) {
+    public CommonResult<List<ObjectRelationProjectCal>> query(@RequestBody QueryCriteria criteria) {
         if(criteria == null) {
             throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
         }
         //基础参数校验
         ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
 
-        QueryWrapper<RelationProjectCal> wrapper = new QueryWrapper<>();
+        QueryWrapper<ObjectRelationProjectCal> wrapper = new QueryWrapper<>();
         // 添加所属项目条件
         ConditionUtil.ensureProjectCriteriaDirectly(wrapper);
         // 转换查询条件
-        QueryCriteriaHelper.toWrapper(wrapper, criteria, RelationProjectCal.class);
+        QueryCriteriaHelper.toWrapper(wrapper, criteria, ObjectRelationProjectCal.class);
         Page page = QueryCriteriaHelper.toPage(criteria);
         if(criteria.isOnlyCount()) {
             int total = service.count(wrapper);
@@ -63,10 +63,10 @@ public class RelationProjectCalController {
     }
 
     @PostMapping("/createOne")
-    public CommonResult<RelationProjectCal> create(@Valid @RequestBody RelationProjectCal vo){
+    public CommonResult<ObjectRelationProjectCal> create(@Valid @RequestBody ObjectRelationProjectCal vo){
         //基础参数校验
         ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
-        List<RelationProjectCal> voList = CollUtil.newArrayList(vo);
+        List<ObjectRelationProjectCal> voList = CollUtil.newArrayList(vo);
         //创建默认条件
         createDefaultValue(voList);
         //新增对象关系
@@ -75,7 +75,7 @@ public class RelationProjectCalController {
     }
 
     @PostMapping("/create")
-    public CommonResult<List<RelationProjectCal>> createBatch(@Valid @RequestBody List<RelationProjectCal> voList){
+    public CommonResult<List<ObjectRelationProjectCal>> createBatch(@Valid @RequestBody List<ObjectRelationProjectCal> voList){
         //基础参数校验
         ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
         //创建默认条件
@@ -86,10 +86,10 @@ public class RelationProjectCalController {
     }
 
     @PostMapping("/updateOne")
-    public CommonResult<RelationProjectCal> update(@Valid @RequestBody RelationProjectCal vo){
+    public CommonResult<ObjectRelationProjectCal> update(@Valid @RequestBody ObjectRelationProjectCal vo){
         //基础参数校验
         ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
-        List<RelationProjectCal> voList = CollUtil.newArrayList(vo);
+        List<ObjectRelationProjectCal> voList = CollUtil.newArrayList(vo);
         //修改默认条件
         createDefaultValue(voList);
         //修改对象关系
@@ -98,7 +98,7 @@ public class RelationProjectCalController {
     }
 
     @PostMapping("/update")
-    public CommonResult<List<RelationProjectCal>> updateBatch(@Valid @RequestBody List<RelationProjectCal> voList){
+    public CommonResult<List<ObjectRelationProjectCal>> updateBatch(@Valid @RequestBody List<ObjectRelationProjectCal> voList){
         //基础参数校验
         ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
         //修改默认条件
@@ -132,7 +132,7 @@ public class RelationProjectCalController {
      * 创建默认条件
      * @param voList
      */
-    private void createDefaultValue(List<RelationProjectCal> voList){
+    private void createDefaultValue(List<ObjectRelationProjectCal> voList){
         String groupCode = AppContext.getContext().getGroupCode();
         if(StringUtils.isEmpty(groupCode)){
             //默认集团
@@ -143,7 +143,7 @@ public class RelationProjectCalController {
             //默认项目
             projectId = CommonConstant.DEFAULT_ID;
         }
-        for (RelationProjectCal vo : voList) {
+        for (ObjectRelationProjectCal vo : voList) {
             vo.setProjectId(projectId);
             if(vo.getValid() == null) {
                 vo.setValid(ValidEnum.TRUE.getType());

+ 0 - 15
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/dao/RelationCalSignMapper.java

@@ -1,15 +0,0 @@
-package com.persagy.dmp.rwd.digital.dao;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.persagy.dmp.digital.entity.RelationCalSign;
-
-/**
- * @Entity generator.domain.RelationCalSign
- */
-public interface RelationCalSignMapper extends BaseMapper<RelationCalSign> {
-
-}
-
-
-
-

+ 2 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/dao/RelationProjectCalMapper.java

@@ -1,12 +1,12 @@
 package com.persagy.dmp.rwd.digital.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.persagy.dmp.digital.entity.RelationProjectCal;
+import com.persagy.dmp.digital.entity.ObjectRelationProjectCal;
 
 /**
  * @Entity generator.domain.RelationProjectCal
  */
-public interface RelationProjectCalMapper extends BaseMapper<RelationProjectCal> {
+public interface RelationProjectCalMapper extends BaseMapper<ObjectRelationProjectCal> {
 
 }
 

+ 0 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/IObjectDigitalService.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.digital.entity.ObjectDigital;
-import com.persagy.dmp.digital.entity.RelationCalSign;
 
 import java.io.IOException;
 import java.util.List;

+ 0 - 11
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/RelationCalSignService.java

@@ -1,11 +0,0 @@
-package com.persagy.dmp.rwd.digital.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.persagy.dmp.digital.entity.RelationCalSign;
-
-/**
- *
- */
-public interface RelationCalSignService extends IService<RelationCalSign> {
-
-}

+ 2 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/RelationProjectCalService.java

@@ -1,11 +1,11 @@
 package com.persagy.dmp.rwd.digital.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.persagy.dmp.digital.entity.RelationProjectCal;
+import com.persagy.dmp.digital.entity.ObjectRelationProjectCal;
 
 /**
  *
  */
-public interface RelationProjectCalService extends IService<RelationProjectCal> {
+public interface RelationProjectCalService extends IService<ObjectRelationProjectCal> {
 
 }

+ 50 - 48
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/CoordinateCalculateServiceImpl.java

@@ -69,24 +69,20 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
             return;
         }
         // 2.查询from侧的对象
-        if (graphCalInfo.getFromIsPointFlag()){
-            // 左侧为点,则对左侧点做分页操作
-            calculateRelationInternal(graphCalInfo,calculatingDTO,
-                    calculatingDTO.getFilterRelFlag()?calculatingDTO.getFromIds():new HashSet<>(),
-                    relationDefine.getFromObjType(),graphCalInfo.getFromInfoCode(),
-                    calculatingDTO.getFilterRelFlag()?calculatingDTO.getToIds():new HashSet<>(),
-                    relationDefine.getToObjType(),graphCalInfo.getToInfoCode());
+        // 两侧都是点的则不进行计算
+        if (graphCalInfo.getFromIsPointFlag() && graphCalInfo.getToIsPointFlag()){
             return;
         }
-        // 右侧为
+        // 点-面,面-面的计算
         calculateRelationInternal(graphCalInfo,calculatingDTO,
-                calculatingDTO.getFilterRelFlag()?calculatingDTO.getToIds():new HashSet<>(),
-                relationDefine.getToObjType(),graphCalInfo.getToInfoCode(),
                 calculatingDTO.getFilterRelFlag()?calculatingDTO.getFromIds():new HashSet<>(),
-                relationDefine.getFromObjType(),graphCalInfo.getFromInfoCode());
+                relationDefine.getFromObjType(),graphCalInfo.getFromInfoCode(),
+                calculatingDTO.getFilterRelFlag()?calculatingDTO.getToIds():new HashSet<>(),
+                relationDefine.getToObjType(),graphCalInfo.getToInfoCode());
     }
+
     /***
-     * Description: 内部的计算关系
+     * Description: 内部的计算关系(点-面计算逻辑)
      * @param graphCalInfo : 坐标计算信息对象
      * @param calculatingDTO : 请求参数
      * @param fromIds : 来源id集合
@@ -107,12 +103,22 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
             return;
         }
         // 1.查询来源对象
-        List<ObjectDigital> fromObjectDigitals = queryFromData(fromIds,fromObjType,fromInfoCode,calculatingDTO);
+        List<ObjectDigital> fromObjectDigitals;
+        if (graphCalInfo.getFromIsPointFlag()){
+            fromObjectDigitals = queryPointData(fromIds,fromObjType,fromInfoCode,calculatingDTO);
+        }else {
+            fromObjectDigitals = queryPlaneData(fromIds,fromObjType,fromInfoCode,calculatingDTO);
+        }
         if (CollUtil.isEmpty(fromObjectDigitals)){
             return;
         }
         // 2.查询去向对象
-        List<ObjectDigital> toObjectDigitals = queryToData(toIds,toObjType,toInfoCode,calculatingDTO);
+        List<ObjectDigital> toObjectDigitals;
+        if (graphCalInfo.getToIsPointFlag()){
+            toObjectDigitals = queryPointData(toIds,toObjType,toInfoCode,calculatingDTO);
+        }else {
+            toObjectDigitals = queryPlaneData(toIds,toObjType,toInfoCode,calculatingDTO);
+        }
         if (CollUtil.isEmpty(toObjectDigitals)){
             return;
         }
@@ -120,14 +126,17 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
         List<ObjectRelation> resultList = new ArrayList<>();
         for (ObjectDigital fromObjectDigital : fromObjectDigitals) {
             for (ObjectDigital toObjectDigital : toObjectDigitals) {
-                if (CollUtil.isEmpty(toObjectDigital.getOutLines())){
-                    continue;
+                boolean pointInPoly;
+                if (graphCalInfo.getFromIsPointFlag()){
+                    pointInPoly = GeoToolsUtil
+                            .isPointInPoly(fromObjectDigital.getBimLocation(), toObjectDigital.getOutLines());
+                }else if (graphCalInfo.getToIsPointFlag()){
+                    pointInPoly = GeoToolsUtil
+                            .isPointInPoly(toObjectDigital.getBimLocation(), fromObjectDigital.getOutLines());
+                }else {
+                    pointInPoly = GeoToolsUtil
+                            .isPolyInPoly(fromObjectDigital.getOutLines(), toObjectDigital.getOutLines());
                 }
-                if (null==fromObjectDigital.getBimLocation()){
-                    continue;
-                }
-                Boolean pointInPoly = GeoToolsUtil
-                        .isPointInPoly(fromObjectDigital.getBimLocation(), toObjectDigital.getOutLines());
                 if (!pointInPoly){
                     continue;
                 }
@@ -137,8 +146,8 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
                 objectRelation.setGraphId(DigitalCommonUtils.getDefaultGraphIdByGraphCode(calculatingDTO.getGraphCode()));
                 objectRelation.setGraphCode(calculatingDTO.getGraphCode());
                 objectRelation.setRelCode(calculatingDTO.getRelCode());
-                objectRelation.setObjFrom(graphCalInfo.getFromIsPointFlag()?fromObjectDigital.getId():toObjectDigital.getId());
-                objectRelation.setObjTo(graphCalInfo.getFromIsPointFlag()?toObjectDigital.getId():fromObjectDigital.getId());
+                objectRelation.setObjFrom(fromObjectDigital.getId());
+                objectRelation.setObjTo(toObjectDigital.getId());
                 objectRelation.setRelValue(calculatingDTO.getRelValue());
                 objectRelation.setCreateApp(calculatingDTO.getAppId());
                 objectRelation.setUpdateApp(calculatingDTO.getAppId());
@@ -168,17 +177,7 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
      */
     private void deleteRelDataByCondition(CalculatingDTO calculatingDTO, Set<String> fromIds, Set<String> toIds) {
         fromIds.addAll(toIds);
-        QueryWrapper<ObjectRelation> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(ObjectDigital.PROP_VALID,Boolean.TRUE);
-        if (CollUtil.isNotEmpty(fromIds)){
-            queryWrapper.in(ObjectDigital.PROP_ID,fromIds);
-        }
-        if (StrUtil.isNotBlank(calculatingDTO.getGroupCode())){
-            queryWrapper.eq(StrUtil.toUnderlineCase(CommonConstant.QUERY_GROUPCODE),calculatingDTO.getGroupCode());
-        }
-        if (StrUtil.isNotBlank(calculatingDTO.getProjectId())){
-            queryWrapper.eq(StrUtil.toUnderlineCase(CommonConstant.QUERY_PROJECTID),calculatingDTO.getProjectId());
-        }
+        QueryWrapper<ObjectRelation> queryWrapper = createCommonQueryWrapper(fromIds,calculatingDTO);
         queryWrapper.eq(StrUtil.toUnderlineCase(ObjectRelation.GRAPH_CODE_HUM),calculatingDTO.getGraphCode());
         queryWrapper.eq(StrUtil.toUnderlineCase(ObjectRelation.REL_CODE_HUM),calculatingDTO.getRelCode());
         if (StrUtil.isNotBlank(calculatingDTO.getRelValue())){
@@ -190,7 +189,7 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
     /***
      * Description: 查询去向数据
      * @param toIds : 去向id集合
-     * @param toObjType : 去向对象类型
+     * @param objType : 去向对象类型
      * @param toInfoCode : 去向对象信息点
      * @param calculatingDTO : 请求参数
      * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>
@@ -198,8 +197,11 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
      * @date :2021/9/11 15:36
      * Update By lijie 2021/9/11 15:36
      */
-    private List<ObjectDigital> queryToData(Set<String> toIds, String toObjType, String toInfoCode, CalculatingDTO calculatingDTO) {
-        QueryWrapper<ObjectDigital> queryWrapper = createCommonQueryWrapper(toIds,toObjType,calculatingDTO);
+    private List<ObjectDigital> queryPlaneData(Set<String> toIds, String objType, String toInfoCode, CalculatingDTO calculatingDTO) {
+        QueryWrapper<ObjectDigital> queryWrapper = createCommonQueryWrapper(toIds,calculatingDTO);
+        if (StrUtil.isNotBlank(objType)){
+            queryWrapper.eq(ObjectDigital.OBJ_TYPE,objType);
+        }
         queryWrapper.select(ObjectDigital.PROP_ID,
                 StrUtil.toUnderlineCase(CommonConstant.QUERY_GROUPCODE),
                 StrUtil.toUnderlineCase(CommonConstant.QUERY_PROJECTID),
@@ -208,20 +210,20 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
                         "IF(JSON_DEPTH(JSON_UNQUOTE(JSON_EXTRACT(infos,'$.{}')))=4,'$[0][*]','$[0][0][*]')))) AS outLines",
                         toInfoCode,toInfoCode,toInfoCode),
                 ObjectDigital.CLASS_CODE,ObjectDigital.OBJ_TYPE);
-        return objectDigitalMapper.queryToData(toIds,toObjType,toInfoCode,calculatingDTO);
+        return objectDigitalMapper.queryToData(toIds,objType,toInfoCode,calculatingDTO);
     }
+
     /***
      * Description: 创建通用查询条件对象
      * @param ids : 对象id数组
-     * @param objType : 对象分类
      * @param calculatingDTO : 请求参数
      * @return : com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<com.persagy.dmp.digital.entity.ObjectDigital>
      * @author : lijie
      * @date :2021/9/11 15:41
      * Update By lijie 2021/9/11 15:41
      */
-    private QueryWrapper<ObjectDigital> createCommonQueryWrapper(Set<String> ids, String objType, CalculatingDTO calculatingDTO) {
-        QueryWrapper<ObjectDigital> queryWrapper = new QueryWrapper<>();
+    private <T> QueryWrapper<T> createCommonQueryWrapper(Set<String> ids, CalculatingDTO calculatingDTO) {
+        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(ObjectDigital.PROP_VALID,Boolean.TRUE);
         if (CollUtil.isNotEmpty(ids)){
             queryWrapper.in(ObjectDigital.PROP_ID,ids);
@@ -232,16 +234,13 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
         if (StrUtil.isNotBlank(calculatingDTO.getProjectId())){
             queryWrapper.eq(StrUtil.toUnderlineCase(CommonConstant.QUERY_PROJECTID),calculatingDTO.getProjectId());
         }
-        if (StrUtil.isNotBlank(objType)){
-            queryWrapper.eq(ObjectDigital.OBJ_TYPE,objType);
-        }
         return queryWrapper;
     }
 
     /***
      * Description: 查询来源数据
      * @param fromIds : 来源id集合
-     * @param fromObjType : 对象分类
+     * @param objType : 对象分类
      * @param fromInfoCode : 来源信息点
      * @param calculatingDTO : 请求参数
      * @return : void
@@ -249,8 +248,11 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
      * @date :2021/9/11 15:32
      * Update By lijie 2021/9/11 15:32
      */
-    private List<ObjectDigital> queryFromData(Set<String> fromIds, String fromObjType, String fromInfoCode, CalculatingDTO calculatingDTO) {
-        QueryWrapper<ObjectDigital> queryWrapper = createCommonQueryWrapper(fromIds, fromObjType, calculatingDTO);
+    private List<ObjectDigital> queryPointData(Set<String> fromIds, String objType, String fromInfoCode, CalculatingDTO calculatingDTO) {
+        QueryWrapper<ObjectDigital> queryWrapper = createCommonQueryWrapper(fromIds, calculatingDTO);
+        if (StrUtil.isNotBlank(objType)){
+            queryWrapper.eq(ObjectDigital.OBJ_TYPE,objType);
+        }
         queryWrapper.select(ObjectDigital.PROP_ID,
                 StrUtil.toUnderlineCase(CommonConstant.QUERY_GROUPCODE),
                 StrUtil.toUnderlineCase(CommonConstant.QUERY_PROJECTID),
@@ -261,6 +263,6 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
                                 "FROM 2 FOR LENGTH(JSON_EXTRACT(infos, '$.{}'))-2),']')), '$[1]')) AS bimLocation",
                         fromInfoCode,fromInfoCode,fromInfoCode,fromInfoCode),
                 ObjectDigital.CLASS_CODE,ObjectDigital.OBJ_TYPE);
-        return objectDigitalMapper.queryFromData(fromIds,fromObjType,fromInfoCode,calculatingDTO);
+        return objectDigitalMapper.queryFromData(fromIds,objType,fromInfoCode,calculatingDTO);
     }
 }

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

@@ -27,7 +27,6 @@ import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.define.entity.ObjectInfoDefine;
 import com.persagy.dmp.digital.entity.ObjectDigital;
-import com.persagy.dmp.digital.entity.RelationCalSign;
 import com.persagy.dmp.rwd.basic.constant.DigitalMessageConstant;
 import com.persagy.dmp.rwd.basic.constant.DigitalObjectType;
 import com.persagy.dmp.rwd.basic.constant.DigitalRelCode;
@@ -37,7 +36,6 @@ import com.persagy.dmp.rwd.define.service.IObjectInfoService;
 import com.persagy.dmp.rwd.define.service.IObjectTypeService;
 import com.persagy.dmp.rwd.digital.dao.ObjectDigitalMapper;
 import com.persagy.dmp.rwd.digital.dao.ObjectRelationMapper;
-import com.persagy.dmp.rwd.digital.dao.RelationCalSignMapper;
 import com.persagy.dmp.rwd.digital.service.IObjectDigitalService;
 import com.persagy.dmp.rwd.parser.service.InfoDataFactory;
 import lombok.RequiredArgsConstructor;

+ 40 - 46
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelationCalServiceImpl.java

@@ -21,10 +21,10 @@ import com.persagy.dmp.common.utils.ResultHelper;
 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.RelationCalSign;
-import com.persagy.dmp.digital.entity.RelationProjectCal;
+import com.persagy.dmp.digital.entity.ObjectRelationProjectCal;
 import com.persagy.dmp.rwd.basic.constant.BusinessErrorRwdCode;
 import com.persagy.dmp.rwd.basic.constant.CalRuleTypeEnum;
+import com.persagy.dmp.rwd.basic.constant.ComputationalStateEnum;
 import com.persagy.dmp.rwd.basic.utils.DigitalCommonUtils;
 import com.persagy.dmp.rwd.define.service.IRelationDefineService;
 import com.persagy.dmp.rwd.digital.dao.ObjectDigitalMapper;
@@ -46,7 +46,6 @@ public class RelationCalServiceImpl implements RelationCalService {
 
     private final ObjectDigitalMapper objectDigitalMapper;
     private final IObjectRelationService objectRelationService;
-    private final RelationCalSignService relationCalSignService;
     private final RelationProjectCalService relationProjectCalService;
     private final IRelationDefineService relationDefineService;
 
@@ -63,7 +62,7 @@ public class RelationCalServiceImpl implements RelationCalService {
     @Transactional
     public CommonResult<List<ObjectRelation>> createObjRelationsByKeywordAndObjType(@RequestBody RequestData requestData) {
         // 0.更新计算时间,根据项目id和图类型编码及关系类型编码
-        updateComputeTimeByProjectAndGraphCodeAndRelCode(requestData.getGraphCode(),requestData.getRelCode());
+        updateComputeTimeByProjectAndGraphCodeAndRelCode(requestData.getGraphCode(),requestData.getRelCode(),null);
         // 根据对象信息点和对象内容(主/副)查询对象,然后添加关系及计算标记
         requestData.setProjectId(AppContext.getContext().getProjectId());
         requestData.setGroupCode(AppContext.getContext().getGroupCode());
@@ -102,7 +101,7 @@ public class RelationCalServiceImpl implements RelationCalService {
         // 4.3 创建关系
         List<ObjectRelation> addRelations = new ArrayList<>();
         List<ObjectRelation> updateRelations = new ArrayList<>();
-        List<RelationCalSign> relationCalSigns = new ArrayList<>();
+        //List<RelationCalSign> relationCalSigns = new ArrayList<>();
         boolean flag = StrUtil.isNotBlank(requestData.getSign()) && NumberUtil.isInteger(requestData.getSign());
         for (ObjectDigital slaveObjectDigital : slaveObjectDigitals) {
             // 当已经存在关系,仅更新一下操作记录
@@ -120,15 +119,15 @@ public class RelationCalServiceImpl implements RelationCalService {
                     objectRelation.setRelValue(masterObjectDigital.getClassCode());
                 }
                 updateRelations.add(objectRelation);
-                if (flag){
-                    // 因为lombok的SuperBuilder注解还处于实验性,所以暂时不用
-                    RelationCalSign relationCalSign = RelationCalSign
-                            .builder()
-                            .sign(NumberUtil.parseInt(requestData.getSign()))
-                            .build();
-                    relationCalSign.setId(objectRelation.getId());
-                    relationCalSigns.add(relationCalSign);
-                }
+//                if (flag){
+//                    // 因为lombok的SuperBuilder注解还处于实验性,所以暂时不用
+//                    RelationCalSign relationCalSign = RelationCalSign
+//                            .builder()
+//                            .sign(NumberUtil.parseInt(requestData.getSign()))
+//                            .build();
+//                    relationCalSign.setId(objectRelation.getId());
+//                    relationCalSigns.add(relationCalSign);
+//                }
                 continue;
             }
             // 生成插入关系
@@ -150,14 +149,14 @@ public class RelationCalServiceImpl implements RelationCalService {
             objectRelation.setModifier(AppContext.getContext().getAccountId());
             objectRelation.setValid(1);
             addRelations.add(objectRelation);
-            if (flag){
-                RelationCalSign relationCalSign = RelationCalSign
-                        .builder()
-                        .sign(NumberUtil.parseInt(requestData.getSign()))
-                        .build();
-                relationCalSign.setId(objectRelation.getId());
-                relationCalSigns.add(relationCalSign);
-            }
+//            if (flag){
+//                RelationCalSign relationCalSign = RelationCalSign
+//                        .builder()
+//                        .sign(NumberUtil.parseInt(requestData.getSign()))
+//                        .build();
+//                relationCalSign.setId(objectRelation.getId());
+//                relationCalSigns.add(relationCalSign);
+//            }
         }
         if (CollUtil.isNotEmpty(updateRelations)){
             objectRelationService.updateBatchById(updateRelations);
@@ -166,9 +165,9 @@ public class RelationCalServiceImpl implements RelationCalService {
             objectRelationService.saveBatch(addRelations);
         }
         // 5.处理sign:计算标记 1 为手动 2为自动
-        if (CollUtil.isNotEmpty(relationCalSigns)){
-            relationCalSignService.saveOrUpdateBatch(relationCalSigns);
-        }
+//        if (CollUtil.isNotEmpty(relationCalSigns)){
+//            relationCalSignService.saveOrUpdateBatch(relationCalSigns);
+//        }
         addRelations.addAll(updateRelations);
         return ResultHelper.multi(addRelations,addRelations.size());
     }
@@ -196,7 +195,7 @@ public class RelationCalServiceImpl implements RelationCalService {
             throw new BusinessException(BusinessErrorRwdCode.A7201.getCode(),BusinessErrorRwdCode.A7201.getDesc());
         }
         // 2.先更新计算时间
-        updateComputeTimeByProjectAndGraphCodeAndRelCode(objectRelation.getGraphCode(),objectRelation.getRelCode());
+        updateComputeTimeByProjectAndGraphCodeAndRelCode(objectRelation.getGraphCode(),objectRelation.getRelCode(),null);
         // 3.删除关系
         for (ObjectRelation relation : objectRelations) {
             relation.setValid(0);
@@ -217,6 +216,8 @@ public class RelationCalServiceImpl implements RelationCalService {
     @Override
     @Transactional
     public CommonResult<List<ObjectRelation>> calculatingObjRelation(RequestData requestData) {
+        // 更新计算时间
+        updateComputeTimeByProjectAndGraphCodeAndRelCode(requestData.getGraphCode(),requestData.getRelCode(),ComputationalStateEnum.COMPUTING.getState());
         // 拷贝参数到计算对象中
         CalculatingDTO calculatingDTO = copyRequestDataToDTO(requestData);
         // 1.应用fast-fail机制,先校验一下数据正确性,如果不正确拒绝计算
@@ -261,6 +262,8 @@ public class RelationCalServiceImpl implements RelationCalService {
                 .getBean(calRuleTypeMap.get(calRuleType), CalculateService.class);
         // 根据计算规则和参数计算关系
         calculateService.calculateRelation(currentRelationDefine.getCalRules(), calculatingDTO);
+        // 更新计算时间
+        updateComputeTimeByProjectAndGraphCodeAndRelCode(requestData.getGraphCode(),requestData.getRelCode(), ComputationalStateEnum.INIT.getState());
         return ResultHelper.multi(new ArrayList<>(),0L);
     }
     /***
@@ -287,20 +290,6 @@ public class RelationCalServiceImpl implements RelationCalService {
     }
 
     /***
-     * Description: 计算关系前先校验一下数据(fast-fail)
-     * @param requestData : 请求参数
-     * @return : com.persagy.dmp.rwd.digital.domain.CalculatingDTO
-     * @author : lijie
-     * @date :2021/9/8 11:44
-     * Update By lijie 2021/9/8 11:44
-     */
-    private void calculationRelationDatas(RequestData requestData) {
-
-
-
-    }
-
-    /***
      * Description: 计算前置关系
      * @param currentRelationDefine : 当前关系定义
      * @param calculatingDTO : 请求参数
@@ -346,8 +335,10 @@ public class RelationCalServiceImpl implements RelationCalService {
             // 获取策略类的bean
             CalculateService calculateService = SpringHelper
                     .getBean(calRuleTypeMap.get(calRules.getCalRuleType()), CalculateService.class);
+            updateComputeTimeByProjectAndGraphCodeAndRelCode(relationCalDTO.getGraphCode(),relationCalDTO.getRelCode(),ComputationalStateEnum.COMPUTING.getState());
             // 根据计算规则和参数计算关系
             calculateService.calculateRelation(calRules, preCalculatingDTO);
+            updateComputeTimeByProjectAndGraphCodeAndRelCode(relationCalDTO.getGraphCode(),relationCalDTO.getRelCode(),ComputationalStateEnum.INIT.getState());
         }
     }
 
@@ -360,13 +351,16 @@ public class RelationCalServiceImpl implements RelationCalService {
      * @date :2021/9/4 23:14
      * Update By lijie 2021/9/4 23:14
      */
-    private void updateComputeTimeByProjectAndGraphCodeAndRelCode(String graphCode,String relCode) {
-        LambdaUpdateWrapper<RelationProjectCal> updateWrapper = new LambdaUpdateWrapper<>();
-        updateWrapper.eq(RelationProjectCal::getProjectId,AppContext.getContext().getProjectId());
-        updateWrapper.eq(RelationProjectCal::getGraphCode,graphCode);
-        updateWrapper.eq(RelationProjectCal::getRelCode,relCode);
-        RelationProjectCal relationProjectCal = new RelationProjectCal();
+    private void updateComputeTimeByProjectAndGraphCodeAndRelCode(String graphCode,String relCode,Integer computationalState) {
+        LambdaUpdateWrapper<ObjectRelationProjectCal> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(ObjectRelationProjectCal::getProjectId,AppContext.getContext().getProjectId());
+        updateWrapper.eq(ObjectRelationProjectCal::getGraphCode,graphCode);
+        updateWrapper.eq(ObjectRelationProjectCal::getRelCode,relCode);
+        ObjectRelationProjectCal relationProjectCal = new ObjectRelationProjectCal();
         relationProjectCal.setComputingTime(DateUtil.format(new Date(),"yyyyMMddHHmmss"));
+        if (null!=computationalState){
+            relationProjectCal.setComputationalState(computationalState);
+        }
         relationProjectCalService.update(relationProjectCal,updateWrapper);
     }
 

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

@@ -1,20 +0,0 @@
-package com.persagy.dmp.rwd.digital.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.persagy.dmp.digital.entity.RelationCalSign;
-import com.persagy.dmp.rwd.digital.dao.RelationCalSignMapper;
-import com.persagy.dmp.rwd.digital.service.RelationCalSignService;
-import org.springframework.stereotype.Service;
-
-/**
- *
- */
-@Service
-public class RelationCalSignServiceImpl extends ServiceImpl<RelationCalSignMapper, RelationCalSign>
-implements RelationCalSignService {
-
-}
-
-
-
-

+ 2 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelationProjectCalServiceImpl.java

@@ -1,7 +1,7 @@
 package com.persagy.dmp.rwd.digital.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.persagy.dmp.digital.entity.RelationProjectCal;
+import com.persagy.dmp.digital.entity.ObjectRelationProjectCal;
 import com.persagy.dmp.rwd.digital.dao.RelationProjectCalMapper;
 import com.persagy.dmp.rwd.digital.service.RelationProjectCalService;
 import org.springframework.stereotype.Service;
@@ -10,7 +10,7 @@ import org.springframework.stereotype.Service;
  *
  */
 @Service
-public class RelationProjectCalServiceImpl extends ServiceImpl<RelationProjectCalMapper, RelationProjectCal>
+public class RelationProjectCalServiceImpl extends ServiceImpl<RelationProjectCalMapper, ObjectRelationProjectCal>
 implements RelationProjectCalService {
 
 }

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

@@ -88,6 +88,11 @@ CREATE TABLE IF NOT EXISTS `dt_define_rel` (
   `attribute` varchar(255) DEFAULT NULL COMMENT '边属性',
   `target_objs` varchar(255) DEFAULT NULL COMMENT '主要连接对象',
   `remark` varchar(45) DEFAULT NULL,
+  `before_cal_rel` json NULL COMMENT '计算关系之前需要计算的关系',
+  `cal_rule` json NULL COMMENT '计算器,就是计算规则',
+  `from_obj_type` varchar(50) NULL DEFAULT NULL COMMENT '边关系左侧的对象分类',
+  `to_obj_type` varchar(50) NULL DEFAULT NULL COMMENT '关系右侧的对象分类',
+  `automatic_flag` tinyint DEFAULT NULL COMMENT '0-手动计算,1-自动计算',
   `creator` varchar(32) DEFAULT NULL COMMENT '创建人',
   `creation_time` char(14) NULL DEFAULT NULL COMMENT '创建时间',
   `modifier` varchar(32) DEFAULT NULL COMMENT '最后修改人',
@@ -98,6 +103,11 @@ CREATE TABLE IF NOT EXISTS `dt_define_rel` (
   KEY `idx_code` (`code`) USING BTREE,
   KEY `idx_graph_code` (`graph_code`,`code`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='边类型表';
+ALTER TABLE dt_define_rel ADD COLUMN `before_cal_rel` json NULL COMMENT '计算关系之前需要计算的关系';
+ALTER TABLE dt_define_rel ADD COLUMN `cal_rule` json NULL COMMENT '计算器,就是计算规则';
+ALTER TABLE dt_define_rel ADD COLUMN `from_obj_type` varchar(50) NULL DEFAULT NULL COMMENT '边关系左侧的对象分类';
+ALTER TABLE dt_define_rel ADD COLUMN `to_obj_type` varchar(50) NULL DEFAULT NULL COMMENT '关系右侧的对象分类';
+ALTER TABLE dt_define_rel ADD COLUMN `automatic_flag` tinyint DEFAULT NULL COMMENT '0-手动计算,1-自动计算';
 
 CREATE TABLE IF NOT EXISTS `dt_object` (
   `id` varchar(100) NOT NULL,
@@ -154,3 +164,29 @@ CREATE TABLE IF NOT EXISTS `dt_relation` (
   KEY `idx_5` (`obj_from`) USING BTREE,
   KEY `idx_6` (`obj_to`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='关系实例表';
+
+-- ----------------------------
+-- Table structure for relation_project_cal
+-- ----------------------------
+CREATE TABLE  IF NOT EXISTS `relation_project_cal`  (
+`id` varchar(200) NOT NULL COMMENT '主键,32位UUID',
+`graph_code` varchar(100) NULL DEFAULT NULL COMMENT '图类型',
+`rel_code` varchar(100) NULL DEFAULT NULL COMMENT '关系类型编码',
+`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手动维护',
+`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计算失败(如果处于计算中状态,则不再次调用)',
+`zone_type` varchar(50) NULL DEFAULT NULL COMMENT '业务分区类型',
+`system_type` tinyint(0) NULL DEFAULT NULL COMMENT '风系统1,水系统0',
+`rel_manual_type` varchar(200) NULL DEFAULT NULL COMMENT '手动计算关系类型',
+`compute_version` tinyint(0) NULL DEFAULT NULL COMMENT '计算版本',
+`creator` varchar(32) NULL DEFAULT NULL COMMENT '创建人',
+`creation_time` char(14) NULL DEFAULT NULL COMMENT '创建时间',
+`modifier` varchar(32) NULL DEFAULT NULL COMMENT '最后修改人',
+`modified_time` char(14) NULL DEFAULT NULL COMMENT '最后修改时间',
+`valid` tinyint(0) NULL DEFAULT NULL COMMENT '合法标识',
+`ts` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP  ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '乐观锁',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT = Dynamic COMMENT='项目关系记录表';

+ 1 - 1
dmp-business/dmp-rwd/src/main/resources/mapper/ObjectRelationMapper.xml

@@ -134,7 +134,7 @@
                     ) AS dtr${index}
                 </when>
                 <when test="index==param.chain.size()-1">
-                    INNER JOIN (SELECT if(#{rule.currentRelDirection},obj_to,obj_from) AS obj_to,if(true,obj_from,obj_to) AS obj_from FROM dt_relation WHERE
+                    INNER JOIN (SELECT if(#{rule.currentRelDirection},obj_to,obj_from) AS obj_to,if(#{rule.currentRelDirection},obj_from,obj_to) AS obj_from FROM dt_relation WHERE
                     (
                     1=1
                     <if test="null!=rule.graphCode and rule.graphCode.length>0">

+ 0 - 20
dmp-business/dmp-rwd/src/main/resources/mapper/RelationCalSignMapper.xml

@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.persagy.dmp.rwd.digital.dao.RelationCalSignMapper">
-
-    <resultMap id="BaseResultMap" type="com.persagy.dmp.digital.entity.RelationCalSign">
-            <id property="id" column="id" jdbcType="VARCHAR"/>
-            <result property="sign" column="sign" jdbcType="TINYINT"/>
-            <result property="creationTime" column="creation_time" jdbcType="CHAR"/>
-            <result property="modifiedTime" column="modified_time" jdbcType="CHAR"/>
-            <result property="valid" column="valid" jdbcType="TINYINT"/>
-            <result property="ts" column="ts" jdbcType="TIMESTAMP"/>
-    </resultMap>
-
-    <sql id="Base_Column_List">
-        id,sign,creation_time,
-        modified_time,valid,ts
-    </sql>
-</mapper>

+ 3 - 1
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/dto/CoordinateCalInfo.java

@@ -16,8 +16,10 @@ public class CoordinateCalInfo {
     private String toInfoCode;
     /**是否从文件key查询对应业务id作为关系侧id,有种计算器是先根据model_id关联的业务id作为楼层*/
     private Boolean calRelFromFileRelFlag;
-    /**关系左侧为点的标识,true-关系左侧是点,false-关系右侧是点*/
+    /**关系左侧为点的标识,true-关系左侧是点,false-关系左侧是面*/
     private Boolean fromIsPointFlag;
+    /**关系右侧为点的标识,true-关系右侧是点,false-关系右侧是面*/
+    private Boolean toIsPointFlag;
 
 
 

+ 8 - 5
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/RelationDefine.java

@@ -42,15 +42,18 @@ public class RelationDefine extends AuditableEntity {
     /** 备注 */
     private String remark;
     /** 计算关系之前需要计算的关系 */
-    @TableField(exist = false)
+    @TableField(value = "before_cal_rel")
     private List<RelationCalDTO> beforeCalRels;
-    /** 计算关系之前需要计算的关系 */
-    @TableField(exist = false)
+    /** 计算器,就是计算规则 */
+    @TableField(value = "cal_rule")
     private RelationCalRuleDTO calRules;
     /** 关系左侧的对象分类 */
-    @TableField(exist = false)
+    @TableField(value = "from_obj_type")
     private String fromObjType;
     /** 关系右侧的对象分类 */
-    @TableField(exist = false)
+    @TableField(value = "to_obj_type")
     private String toObjType;
+    /** 关系右侧的对象分类 */
+    @TableField(value = "automatic_flag")
+    private Integer automaticFlag;
 }

+ 15 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalRelationCaclClient.java

@@ -51,4 +51,19 @@ public interface DigitalRelationCaclClient {
                                                                  @RequestParam("appId") String appId,
                                                                  @RequestParam("userId") String userId,
                                                                  @RequestBody ObjectRelation objectRelation);
+    /**
+     * 关系计算接口
+     * @param groupCode: 集团编码
+     * @param projectId: 项目id
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param requestData: 请求参数
+     * @return
+     */
+    @PostMapping("calculatingObjRelation")
+    CommonResult<List<ObjectRelation>> calculatingObjRelation(@RequestParam("groupCode") String groupCode,
+                                                                 @RequestParam("projectId") String projectId,
+                                                                 @RequestParam("appId") String appId,
+                                                                 @RequestParam("userId") String userId,
+                                                                 @RequestBody RequestData requestData);
 }

+ 17 - 2
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalRelationCaclFacade.java

@@ -28,7 +28,7 @@ public class DigitalRelationCaclFacade {
      * @return
      */
     @PostMapping("createObjRelationsByKeywordAndObjType")
-    public List<ObjectRelation> createObjRelationsByKeywordAndObjType(String groupCode, String projectId,
+    public static List<ObjectRelation> createObjRelationsByKeywordAndObjType(String groupCode, String projectId,
                                                                       String appId, String userId,
                                                                       RequestData requestData){
         CommonResult<List<ObjectRelation>> relations =
@@ -45,11 +45,26 @@ public class DigitalRelationCaclFacade {
      * @return
      */
     @PostMapping("deleteObjRelationsByRelId")
-    public List<ObjectRelation> deleteObjRelationsByRelId(String groupCode, String projectId,
+    public static List<ObjectRelation> deleteObjRelationsByRelId(String groupCode, String projectId,
                                                           String appId, String userId,
                                                           ObjectRelation objectRelation){
         CommonResult<List<ObjectRelation>> relations =
                 client.deleteObjRelationsByRelId(groupCode, projectId, appId, userId, objectRelation);
         return relations.getData();
     }
+    /**
+     * 关系计算
+     * @param groupCode: 集团编码
+     * @param projectId: 项目id
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param requestData: 请求参数
+     * @return
+     */
+    @PostMapping("calculatingObjRelation")
+    public static CommonResult<List<ObjectRelation>> calculatingObjRelationPrototype(String groupCode, String projectId,
+                                                          String appId, String userId,
+                                                          RequestData requestData){
+        return client.calculatingObjRelation(groupCode, projectId, appId, userId, requestData);
+    }
 }

+ 9 - 9
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalRelationProjectCalClient.java

@@ -2,10 +2,10 @@ package com.persagy.dmp.digital.client;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.config.DigitalFeignConfig;
-import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.digital.entity.ObjectDigital;
+import com.persagy.dmp.digital.entity.ObjectRelationProjectCal;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -49,11 +49,11 @@ public interface DigitalRelationProjectCalClient {
      * @return 项目计算关系
      */
     @PostMapping("createOne")
-    CommonResult<ObjectDigital> createOne(@RequestParam("groupCode") String groupCode,
-                                          @RequestParam("projectId") String projectId,
-                                          @RequestParam("appId") String appId,
-                                          @RequestParam("userId") String userId,
-                                          @RequestBody ObjectNode node);
+    CommonResult<ObjectRelationProjectCal> createOne(@RequestParam("groupCode") String groupCode,
+                                                     @RequestParam("projectId") String projectId,
+                                                     @RequestParam("appId") String appId,
+                                                     @RequestParam("userId") String userId,
+                                                     @RequestBody ObjectNode node);
     /**
      * 新增项目计算关系-批量新增
      * @param groupCode: 集团编码
@@ -64,7 +64,7 @@ public interface DigitalRelationProjectCalClient {
      * @return 项目计算关系数组
      */
     @PostMapping("create")
-    CommonResult<List<ObjectDigital>> create(@RequestParam("groupCode") String groupCode,
+    CommonResult<List<ObjectRelationProjectCal>> create(@RequestParam("groupCode") String groupCode,
                                              @RequestParam("projectId") String projectId,
                                              @RequestParam("appId") String appId,
                                              @RequestParam("userId") String userId,
@@ -79,7 +79,7 @@ public interface DigitalRelationProjectCalClient {
      * @return 项目计算关系
      */
     @PostMapping("updateOne")
-    CommonResult<ObjectDigital> updateOne(@RequestParam("groupCode") String groupCode,
+    CommonResult<ObjectRelationProjectCal> updateOne(@RequestParam("groupCode") String groupCode,
                                           @RequestParam("projectId") String projectId,
                                           @RequestParam("appId") String appId,
                                           @RequestParam("userId") String userId,
@@ -94,7 +94,7 @@ public interface DigitalRelationProjectCalClient {
      * @return 项目计算关系数组
      */
     @PostMapping("update")
-    CommonResult<List<ObjectDigital>> update(@RequestParam("groupCode") String groupCode,
+    CommonResult<List<ObjectRelationProjectCal>> update(@RequestParam("groupCode") String groupCode,
                                              @RequestParam("projectId") String projectId,
                                              @RequestParam("appId") String appId,
                                              @RequestParam("userId") String userId,

+ 133 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalRelationProjectCalFacade.java

@@ -0,0 +1,133 @@
+package com.persagy.dmp.digital.client;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.basic.dto.RequestData;
+import com.persagy.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.utils.ResultHelper;
+import com.persagy.dmp.digital.entity.ObjectDigital;
+import com.persagy.dmp.digital.entity.ObjectRelationProjectCal;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 项目关系记录门面
+ * @author Charlie Yu
+ * @date 2021-05-15
+ */
+public class DigitalRelationProjectCalFacade {
+
+    private static DigitalRelationProjectCalClient client = SpringUtil.getBean(DigitalRelationProjectCalClient.class);
+
+    /**
+     * 查询项目关系记录
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param criteria: 请求参数
+     * @return 项目关系记录数组
+     */
+    public static List<ObjectNode> query(String groupCode, String projectId, String appId,
+                                         String userId, QueryCriteria criteria) {
+        CommonResult<List<ObjectNode>> result = client.query(groupCode, projectId, appId, userId, criteria);
+        return ResultHelper.getContent(result);
+    }
+    /**
+     * 查询项目关系记录
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param criteria: 请求参数
+     * @return 原样查询结果
+     */
+    public static CommonResult<List<ObjectNode>> queryPrototype(String groupCode, String projectId, String appId,
+                                                       String userId, QueryCriteria criteria) {
+        return client.query(groupCode, projectId, appId, userId, criteria);
+    }
+    /**
+     * 新增项目关系记录-单个新增
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param node: 新增项目关系记录对象
+     * @return 项目关系记录对象
+     */
+    public static ObjectRelationProjectCal createOne(String groupCode, String projectId, String appId,
+                                                             String userId, ObjectNode node) {
+        CommonResult<ObjectRelationProjectCal> result = client.createOne(groupCode, projectId, appId, userId, node);
+        return ResultHelper.getContent(result);
+    }
+    /**
+     * 新增项目关系记录-批量新增
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param nodes: 新增项目关系记录对象集合
+     * @return 项目关系记录对象数组
+     */
+    public static List<ObjectRelationProjectCal> create(String groupCode, String projectId, String appId,
+                                                             String userId, List<ObjectNode> nodes) {
+        CommonResult<List<ObjectRelationProjectCal>> result = client.create(groupCode, projectId, appId, userId, nodes);
+        return ResultHelper.getContent(result);
+    }
+    /**
+     * 更新项目关系记录-单个更新
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param node: 更新项目关系记录对象
+     * @return 项目关系记录对象
+     */
+    public static ObjectRelationProjectCal updateOne(String groupCode, String projectId, String appId,
+                                                             String userId, ObjectNode node) {
+        CommonResult<ObjectRelationProjectCal> result = client.updateOne(groupCode, projectId, appId, userId, node);
+        return ResultHelper.getContent(result);
+    }
+    /**
+     * 更新项目关系记录-批量更新
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param nodes: 更新项目关系记录对象集合
+     * @return 项目关系记录对象数组
+     */
+    public static List<ObjectRelationProjectCal> update(String groupCode, String projectId, String appId,
+                                                             String userId, List<ObjectNode> nodes) {
+        CommonResult<List<ObjectRelationProjectCal>> result = client.update(groupCode, projectId, appId, userId, nodes);
+        return ResultHelper.getContent(result);
+    }
+    /**
+     * 删除项目关系记录-单个删除
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param id: 项目关系记录对象id
+     * @return 项目关系记录对象
+     */
+    public static void deleteOne(String groupCode, String projectId, String appId,
+                                                             String userId, String id) {
+        client.deleteOne(groupCode, projectId, appId, userId, id);
+    }
+    /**
+     * 删除项目关系记录-批量删除
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param ids: 项目关系记录对象id数组
+     * return 项目关系记录对象数组
+     */
+    public static void delete(String groupCode, String projectId, String appId,
+                                                             String userId, List<String> ids) {
+        client.delete(groupCode, projectId, appId, userId, ids);
+    }
+}

+ 17 - 5
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/entity/RelationProjectCal.java

@@ -15,7 +15,7 @@ import lombok.*;
 @NoArgsConstructor
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class RelationProjectCal extends AuditableEntity {
+public class ObjectRelationProjectCal extends AuditableEntity {
 
     /**
      * 图类型
@@ -33,13 +33,13 @@ public class RelationProjectCal extends AuditableEntity {
      * 是否需要配置源末端
      */
     @TableField(value = "source_flag")
-    private Byte sourceFlag;
+    private Integer sourceFlag;
 
     /**
      * 是否自动计算类型
      */
     @TableField(value = "automatic_flag")
-    private Byte automaticFlag;
+    private Integer automaticFlag;
 
     /**
      * 手动计算类型 1 禁用  2提示引导 3手动维护
@@ -63,7 +63,7 @@ public class RelationProjectCal extends AuditableEntity {
      * 计算状态 1初始状态 2需要计算 3计算中 4等待中 5计算失败(如果处于计算中状态,则不再次调用)
      */
     @TableField(value = "computational_state")
-    private Byte computationalState;
+    private Integer computationalState;
 
     /**
      * 业务分区类型
@@ -72,10 +72,22 @@ public class RelationProjectCal extends AuditableEntity {
     private String zoneType;
 
     /**
+     * 风系统1,水系统0
+     */
+    @TableField(value = "system_type")
+    private String systemType;
+
+    /**
+     * 手动计算关系类型
+     */
+    @TableField(value = "rel_manual_type")
+    private String relManualType;
+
+    /**
      * 计算版本
      */
     @TableField(value = "compute_version")
-    private Byte computeVersion;
+    private Integer computeVersion;
 
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;

+ 0 - 29
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/entity/RelationCalSign.java

@@ -1,29 +0,0 @@
-package com.persagy.dmp.digital.entity;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.persagy.dmp.common.model.entity.AuditableEntity;
-import lombok.*;
-
-/**
- * 记录关系的计算标记表,与dt_relation表为一对一关系
- * @TableName dt_relation_cal_sign
- */
-@TableName(value ="dt_relation_cal_sign")
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper=true)
-@ToString(callSuper = true)
-public class RelationCalSign extends AuditableEntity {
-
-    /**
-     * 计算标记 1 为手动 2为自动
-     */
-    @TableField(value = "sign")
-    private Integer sign;
-
-    @TableField(exist = false)
-    private static final long serialVersionUID = 1L;
-}