|
@@ -1,5 +1,6 @@
|
|
|
package com.persagy.dmp.rwd.digital.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.NumberUtil;
|
|
@@ -246,10 +247,20 @@ public class RelationCalServiceImpl implements RelationCalService {
|
|
|
calculatingDTO.setRelationDefineMap(relationDefineMap);
|
|
|
// 2.1 前置关系是否存在,如果存在先处理前置关系
|
|
|
handlePreRelation(currentRelationDefine,calculatingDTO);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ // 2.2 计算自身关系
|
|
|
+ // 因为根据空间坐标计算关系需要知道关系两侧对应的对象分类,所以这里直接冗余存储一下关系定义对象
|
|
|
+ calculatingDTO.setRelationDefine(currentRelationDefine);
|
|
|
+ String calRuleType = currentRelationDefine.getCalRules().getCalRuleType();
|
|
|
+ // {规则索引值:对应的算法类名称},用枚举记录计算策略实体类名称
|
|
|
+ Map<String, String> calRuleTypeMap = CalRuleTypeEnum.getCalRuleTypeMap();
|
|
|
+ if (!calRuleTypeMap.containsKey(calRuleType)) {
|
|
|
+ throw new BusinessException(BusinessErrorRwdCode.A7308.getCode(), BusinessErrorRwdCode.A7308.getDesc());
|
|
|
+ }
|
|
|
+ // 获取策略类的bean
|
|
|
+ CalculateService calculateService = SpringHelper
|
|
|
+ .getBean(calRuleTypeMap.get(calRuleType), CalculateService.class);
|
|
|
+ // 根据计算规则和参数计算关系
|
|
|
+ calculateService.calculateRelation(currentRelationDefine.getCalRules(), calculatingDTO);
|
|
|
return ResultHelper.multi(new ArrayList<>(),0L);
|
|
|
}
|
|
|
/***
|
|
@@ -305,10 +316,12 @@ public class RelationCalServiceImpl implements RelationCalService {
|
|
|
if (!calculatingDTO.getCalBeforeRelFlag()){
|
|
|
return;
|
|
|
}
|
|
|
+ CalculatingDTO preCalculatingDTO = BeanUtil.toBean(calculatingDTO, CalculatingDTO.class);
|
|
|
+ preCalculatingDTO.setFilterRelFlag(false);
|
|
|
// 关系定义中的必须计算的前置关系
|
|
|
List<RelationCalDTO> beforeCalRels = currentRelationDefine.getBeforeCalRels();
|
|
|
// {图编码_关系编码:关系定义对象}
|
|
|
- Map<String, RelationDefine> relationDefineMap = calculatingDTO.getRelationDefineMap();
|
|
|
+ Map<String, RelationDefine> relationDefineMap = preCalculatingDTO.getRelationDefineMap();
|
|
|
// {规则索引值:对应的算法类名称},用枚举记录计算策略实体类名称
|
|
|
Map<String, String> calRuleTypeMap = CalRuleTypeEnum.getCalRuleTypeMap();
|
|
|
for (RelationCalDTO relationCalDTO : beforeCalRels) {
|
|
@@ -329,12 +342,12 @@ public class RelationCalServiceImpl implements RelationCalService {
|
|
|
throw new BusinessException(BusinessErrorRwdCode.A7308.getCode(), BusinessErrorRwdCode.A7308.getDesc());
|
|
|
}
|
|
|
// 因为根据空间坐标计算关系需要知道关系两侧对应的对象分类,所以这里直接冗余存储一下关系定义对象
|
|
|
- calculatingDTO.setRelationDefine(relationDefine);
|
|
|
+ preCalculatingDTO.setRelationDefine(relationDefine);
|
|
|
// 获取策略类的bean
|
|
|
CalculateService calculateService = SpringHelper
|
|
|
.getBean(calRuleTypeMap.get(calRules.getCalRuleType()), CalculateService.class);
|
|
|
// 根据计算规则和参数计算关系
|
|
|
- calculateService.calculateRelation(calRules, calculatingDTO);
|
|
|
+ calculateService.calculateRelation(calRules, preCalculatingDTO);
|
|
|
}
|
|
|
}
|
|
|
|