|
@@ -24,8 +24,10 @@ import org.aspectj.lang.annotation.Before;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@Slf4j
|
|
@Slf4j
|
|
|
@Aspect
|
|
@Aspect
|
|
@@ -98,20 +100,47 @@ public class AuditVerificationAspect {
|
|
|
PtlAgreementCost ptlAgreementCost = JSONObject.parseObject(JSONObject.toJSONString(httpResult.getData()),PtlAgreementCost.class);
|
|
PtlAgreementCost ptlAgreementCost = JSONObject.parseObject(JSONObject.toJSONString(httpResult.getData()),PtlAgreementCost.class);
|
|
|
AssertionUtils.isFail(Objects.isNull(ptlAgreementCost),"费用查找失败");
|
|
AssertionUtils.isFail(Objects.isNull(ptlAgreementCost),"费用查找失败");
|
|
|
String coverRuleId = ptlAgreementCost.getCoverRuleId();
|
|
String coverRuleId = ptlAgreementCost.getCoverRuleId();
|
|
|
- httpResult = orgClient.getRuleInfo(coverRuleId);
|
|
|
|
|
- AssertionUtils.isFail(httpResult.getCode() == 500,"承保规则查找失败");
|
|
|
|
|
- List<PtlAgreementUndwrtRulesAttrLink> attrLinks = JSONArray.parseArray(JSONObject.toJSONString(httpResult.getData()),PtlAgreementUndwrtRulesAttrLink.class);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 查询承保规则实体,判断是否有parentId
|
|
|
|
|
+ HttpResult ruleResult = orgClient.rulesGet(coverRuleId);
|
|
|
|
|
+ AssertionUtils.isFail(ruleResult.getCode() == 500, "承保规则查找失败");
|
|
|
|
|
+ PtlAgreementUndwrtRules ruleEntity = JSONObject.parseObject(JSONObject.toJSONString(ruleResult.getData()), PtlAgreementUndwrtRules.class);
|
|
|
|
|
+
|
|
|
|
|
+ List<String> ruleIds = new ArrayList<>();
|
|
|
|
|
+ if (ruleEntity != null && ruleEntity.getParentId() != null && !ruleEntity.getParentId().isEmpty()) {
|
|
|
|
|
+ // 有parentId → 根据parentId查询所有子规则(多条)
|
|
|
|
|
+ HttpResult childRulesResult = orgClient.rulesListByParentId(ruleEntity.getParentId());
|
|
|
|
|
+ AssertionUtils.isFail(childRulesResult.getCode() == 500, "子规则查找失败");
|
|
|
|
|
+ List<PtlAgreementUndwrtRules> childRules = JSONArray.parseArray(JSONObject.toJSONString(childRulesResult.getData()), PtlAgreementUndwrtRules.class);
|
|
|
|
|
+ if (childRules != null) {
|
|
|
|
|
+ ruleIds.addAll(childRules.stream().map(PtlAgreementUndwrtRules::getId).collect(Collectors.toList()));
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 无parentId → 使用当前规则
|
|
|
|
|
+ ruleIds.add(coverRuleId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 收集所有规则的属性关联(按规则分组)
|
|
|
|
|
+ List<List<PtlAgreementUndwrtRulesAttrLink>> ruleGroups = new ArrayList<>();
|
|
|
|
|
+ for (String ruleId : ruleIds) {
|
|
|
|
|
+ httpResult = orgClient.getRuleInfo(ruleId);
|
|
|
|
|
+ AssertionUtils.isFail(httpResult.getCode() == 500, "承保规则详情查找失败");
|
|
|
|
|
+ List<PtlAgreementUndwrtRulesAttrLink> ruleAttrLinks = JSONArray.parseArray(JSONObject.toJSONString(httpResult.getData()), PtlAgreementUndwrtRulesAttrLink.class);
|
|
|
|
|
+ if (ruleAttrLinks != null && !ruleAttrLinks.isEmpty()) {
|
|
|
|
|
+ ruleGroups.add(ruleAttrLinks);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
StringBuilder logs = new StringBuilder();
|
|
StringBuilder logs = new StringBuilder();
|
|
|
|
|
|
|
|
//先进行承保规则判断
|
|
//先进行承保规则判断
|
|
|
- verificationRules(attrLinks,logs, insOrdersOther, insOrdersCarInfo, insOrdersRisks,
|
|
|
|
|
|
|
+ verificationRules(ruleGroups,logs, insOrdersOther, insOrdersCarInfo, insOrdersRisks,
|
|
|
insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, insOrders);
|
|
insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, insOrders);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- private void verificationRules(List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesNews, StringBuilder logs,
|
|
|
|
|
|
|
+ private void verificationRules(List<List<PtlAgreementUndwrtRulesAttrLink>> ruleGroups, StringBuilder logs,
|
|
|
InsOrdersOther insOrdersOther, InsOrdersCarInfo insOrdersCarInfo,
|
|
InsOrdersOther insOrdersOther, InsOrdersCarInfo insOrdersCarInfo,
|
|
|
List<InsOrdersRisk> riskList, List<InsOrdersCarUserInfo> insOrdersCarUserInfos,
|
|
List<InsOrdersRisk> riskList, List<InsOrdersCarUserInfo> insOrdersCarUserInfos,
|
|
|
List<InsOrdersKind> kindList, InsOrdersCosts insOrdersCosts,
|
|
List<InsOrdersKind> kindList, InsOrdersCosts insOrdersCosts,
|
|
@@ -129,15 +158,38 @@ public class AuditVerificationAspect {
|
|
|
riskList, insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, isNewCar);
|
|
riskList, insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, isNewCar);
|
|
|
|
|
|
|
|
List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList = ptlNewAgreementClient.getUndwrtRulesDictList();
|
|
List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList = ptlNewAgreementClient.getUndwrtRulesDictList();
|
|
|
- for (int i = 0; i < ruleAttrMappingVoList.size(); i++) {
|
|
|
|
|
-// logs.append("触发承保规则:" + ruleAttrMappingVoList.get(i).getAttrCode() + "\n");
|
|
|
|
|
- //判断是否匹配
|
|
|
|
|
- if (!FactorMatch.judgementsUnderwrite(ptlAgreementUndwrtRulesNews, ruleAttrMappingVoList, undwrtRulesAttrList, logs, undwrtRulesDictList)) {
|
|
|
|
|
- throw new SystemException(logs.toString());
|
|
|
|
|
- }else{
|
|
|
|
|
- //如果没有出现异常则清空匹配消息
|
|
|
|
|
- logs.delete(0,logs.length());
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 多条规则间为OR关系:只要任一条规则匹配即通过
|
|
|
|
|
+ StringBuilder allErrorLogs = new StringBuilder();
|
|
|
|
|
+ boolean anyRuleMatched = false;
|
|
|
|
|
+
|
|
|
|
|
+ for (List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesNews : ruleGroups) {
|
|
|
|
|
+ if (ptlAgreementUndwrtRulesNews == null || ptlAgreementUndwrtRulesNews.isEmpty()) {
|
|
|
|
|
+ continue;
|
|
|
}
|
|
}
|
|
|
|
|
+ boolean ruleMatched = true;
|
|
|
|
|
+ StringBuilder ruleLogs = new StringBuilder();
|
|
|
|
|
+
|
|
|
|
|
+ for (int i = 0; i < ruleAttrMappingVoList.size(); i++) {
|
|
|
|
|
+ //判断是否匹配
|
|
|
|
|
+ if (!FactorMatch.judgementsUnderwrite(ptlAgreementUndwrtRulesNews, ruleAttrMappingVoList, undwrtRulesAttrList, ruleLogs, undwrtRulesDictList)) {
|
|
|
|
|
+ ruleMatched = false;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }else{
|
|
|
|
|
+ //如果没有出现异常则清空匹配消息
|
|
|
|
|
+ ruleLogs.delete(0,ruleLogs.length());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (ruleMatched) {
|
|
|
|
|
+ anyRuleMatched = true;
|
|
|
|
|
+ break; // OR关系:任一条规则通过即可
|
|
|
|
|
+ }
|
|
|
|
|
+ allErrorLogs.append(ruleLogs);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!anyRuleMatched) {
|
|
|
|
|
+ throw new SystemException(allErrorLogs.toString());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|