Pārlūkot izejas kodu

恒邦单交核保500异常

wangguoqiang 3 mēneši atpakaļ
vecāks
revīzija
be678cc552

+ 79 - 65
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/AuditVerificationAspect.java

@@ -16,6 +16,7 @@ import com.jzg.quotation.commons.client.OrgClient;
 import com.jzg.quotation.summary.aop.FactorMatch;
 import com.jzg.quotation.summary.client.PtlNewAgreementClient;
 import com.jzg.quotation.summary.service.*;
+import feign.FeignException;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.JoinPoint;
@@ -65,77 +66,90 @@ public class AuditVerificationAspect {
     public void doBefore(JoinPoint point) {
         Object[] args = point.getArgs();
         for (Object arg : args) {
-            String orderNo = "";
-            if (arg instanceof UnderwritingVo){
-                UnderwritingVo underwritingVo = JSONObject.parseObject(JSONObject.toJSONString(arg), UnderwritingVo.class);
-                orderNo = underwritingVo.getOrder().getOrdersNo();
-            }
+            try {
+                String orderNo = "";
+                if (arg instanceof UnderwritingVo){
+                    UnderwritingVo underwritingVo = JSONObject.parseObject(JSONObject.toJSONString(arg), UnderwritingVo.class);
+                    orderNo = underwritingVo.getOrder().getOrdersNo();
+                }
 
-            InsOrders insOrders = insOrdersService.getById(orderNo);
-            AssertionUtils.isFail(Objects.isNull(insOrders),"订单不存在");
-            //查找费用 找不到则抛出异常
-            InsFeeOrders insFeeOrders = insFeeOrdersService.getById(orderNo);
-            AssertionUtils.isFail(Objects.isNull(insFeeOrders),"费用信息不匹配");
-
-
-            // 获取订单车辆信息
-            InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoService.getById(insOrders.getId());
-            // 获取订单险种信息
-            List<InsOrdersRisk> insOrdersRisks = insOrdersRiskService.list(new LambdaQueryWrapper<InsOrdersRisk>().eq(InsOrdersRisk::getOrderNo, insOrders.getId()));
-            // 获取订单车主、投被保人信息
-            List<InsOrdersCarUserInfo> insOrdersCarUserInfos = insOrdersCarUserInfoService.list(new LambdaQueryWrapper<InsOrdersCarUserInfo>().eq(InsOrdersCarUserInfo::getOrderNo, insOrders.getId()));
-            // 获取订单费用信息
-            InsOrdersCosts insOrdersCosts = insOrdersCostsService.getById(insOrders.getId());
-            // 获取订单险种信息
-            List<InsOrdersKind> kindList = insOrdersKindService.list(new LambdaQueryWrapper<InsOrdersKind>().eq(InsOrdersKind::getOrderNo, insOrders.getId()));
-            // 获取订单驾意险信息
-            InsOrdersAccidentalDriving insOrdersAccidentalDriving = insOrdersAccidentalDrivingService.getById(insOrders.getId());
-            // 获取订单其他信息
-            InsOrdersOther insOrdersOther = insOrdersOtherService.getById(insOrders.getId());
-
-            // 通过费用id 查找规则id
-            String costId = insFeeOrders.getCostId();
-            HttpResult httpResult = orgClient.queryCostById(costId);
-            AssertionUtils.isFail(httpResult.getCode() == 500,"费用查找失败");
-            PtlAgreementCost ptlAgreementCost = JSONObject.parseObject(JSONObject.toJSONString(httpResult.getData()),PtlAgreementCost.class);
-            AssertionUtils.isFail(Objects.isNull(ptlAgreementCost),"费用查找失败");
-            String coverRuleId = ptlAgreementCost.getCoverRuleId();
-
-            // 查询承保规则实体,判断是否有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()));
+                InsOrders insOrders = insOrdersService.getById(orderNo);
+                AssertionUtils.isFail(Objects.isNull(insOrders),"订单不存在");
+                //查找费用 找不到则抛出异常
+                InsFeeOrders insFeeOrders = insFeeOrdersService.getById(orderNo);
+                AssertionUtils.isFail(Objects.isNull(insFeeOrders),"费用信息不匹配");
+
+
+                // 获取订单车辆信息
+                InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoService.getById(insOrders.getId());
+                // 获取订单险种信息
+                List<InsOrdersRisk> insOrdersRisks = insOrdersRiskService.list(new LambdaQueryWrapper<InsOrdersRisk>().eq(InsOrdersRisk::getOrderNo, insOrders.getId()));
+                // 获取订单车主、投被保人信息
+                List<InsOrdersCarUserInfo> insOrdersCarUserInfos = insOrdersCarUserInfoService.list(new LambdaQueryWrapper<InsOrdersCarUserInfo>().eq(InsOrdersCarUserInfo::getOrderNo, insOrders.getId()));
+                // 获取订单费用信息
+                InsOrdersCosts insOrdersCosts = insOrdersCostsService.getById(insOrders.getId());
+                // 获取订单险种信息
+                List<InsOrdersKind> kindList = insOrdersKindService.list(new LambdaQueryWrapper<InsOrdersKind>().eq(InsOrdersKind::getOrderNo, insOrders.getId()));
+                // 获取订单驾意险信息
+                InsOrdersAccidentalDriving insOrdersAccidentalDriving = insOrdersAccidentalDrivingService.getById(insOrders.getId());
+                // 获取订单其他信息
+                InsOrdersOther insOrdersOther = insOrdersOtherService.getById(insOrders.getId());
+
+                // 通过费用id 查找规则id
+                String costId = insFeeOrders.getCostId();
+                HttpResult httpResult = orgClient.queryCostById(costId);
+                AssertionUtils.isFail(httpResult.getCode() == 500,"费用查找失败");
+                PtlAgreementCost ptlAgreementCost = JSONObject.parseObject(JSONObject.toJSONString(httpResult.getData()),PtlAgreementCost.class);
+                AssertionUtils.isFail(Objects.isNull(ptlAgreementCost),"费用查找失败");
+                String coverRuleId = ptlAgreementCost.getCoverRuleId();
+
+                // 查询承保规则实体,判断是否有parentId
+                HttpResult ruleResult = orgClient.rulesGet(coverRuleId);
+                AssertionUtils.isFail(ruleResult.getCode() == 500, "承保规则查找失败");
+                PtlAgreementUndwrtRules ruleEntity = JSONObject.parseObject(JSONObject.toJSONString(ruleResult.getData()), PtlAgreementUndwrtRules.class);
+                if (ruleEntity == null) {
+                    log.info("承保规则不存在, coverRuleId={}, 订单号={}, 跳过承保规则校验", coverRuleId, orderNo);
+                    continue;
                 }
-            } 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);
+                List<String> ruleIds = new ArrayList<>();
+                if (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);
                 }
-            }
 
-            StringBuilder logs = new StringBuilder();
+                // 收集所有规则的属性关联(按规则分组)
+                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);
+                    }
+                }
 
-            //先进行承保规则判断
-            verificationRules(ruleGroups,logs, insOrdersOther, insOrdersCarInfo, insOrdersRisks,
-                    insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, insOrders);
+                StringBuilder logs = new StringBuilder();
+
+                //先进行承保规则判断
+                verificationRules(ruleGroups,logs, insOrdersOther, insOrdersCarInfo, insOrdersRisks,
+                        insOrdersCarUserInfos, kindList, insOrdersCosts, insOrdersAccidentalDriving, insOrders);
+            } catch (FeignException e) {
+                log.error("承保规则校验调用远程服务[jzg-organization]异常, url={}, status={}, body={}",
+                        e.request() != null ? e.request().url() : "unknown",
+                        e.status(),
+                        e.contentUTF8(),
+                        e);
+                throw new SystemException("承保规则校验服务暂时不可用,请稍后重试");
+            }
         }
     }
 

+ 4 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesServiceImpl.java

@@ -350,6 +350,10 @@ public class PtlAgreementUndwrtRulesServiceImpl extends ServiceImpl<PtlAgreement
     @Override
     public AgreementRulesVo rulesGet(String ruleId) {
         PtlAgreementUndwrtRules rules = baseMapper.selectById(ruleId);
+        if (rules == null) {
+            log.info("承保规则不存在, ruleId={}", ruleId);
+            return null;
+        }
         PtlAgreement agreement = ptlAgreementService.getById(rules.getAgreementId());
         AgreementRulesVo rulesVo = new AgreementRulesVo();
         BeanUtils.copyProperties(rules, rulesVo);