Просмотр исходного кода

Merge remote-tracking branch 'origin/dev_jzg_lipf_v20260518' into dev_jzg_lipf_v20260518

jiakai 3 месяцев назад
Родитель
Сommit
294193b4e9

+ 110 - 100
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java

@@ -429,108 +429,11 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
 
             //计算出口费用减去实际花费的权益金额
             try{
-
-                // 获取权益列表
-                List<InsOrderRights> rightsList = insOrderRightsMapper.queryByOrderNo(param.getOrderNo());
-                List<InsOrderRightsPackage> rightsPackageList = insOrderRightsPackageMapper.queryByOrderNo(param.getOrderNo());
-
-                if(CollUtil.isNotEmpty(rightsList) || CollUtil.isNotEmpty(rightsPackageList)){
-                    // 计算权益金额 = (出口费用总和) - (出口留点费用总和)
-                    BigDecimal jqExportTotal = Optional.ofNullable(feeOrders.getJqExportPremium()).orElse(BigDecimal.ZERO);
-                    BigDecimal syExportTotal = Optional.ofNullable(feeOrders.getSyExportPremium()).orElse(BigDecimal.ZERO);
-                    BigDecimal jyExportTotal = Optional.ofNullable(feeOrders.getJyExportPremium()).orElse(BigDecimal.ZERO);
-                    BigDecimal jqExportKeepPoint = Optional.ofNullable(feeOrders.getJqExportKeepPointPremium()).orElse(BigDecimal.ZERO);
-                    BigDecimal syExportKeepPoint = Optional.ofNullable(feeOrders.getSyExportKeepPointPremium()).orElse(BigDecimal.ZERO);
-                    BigDecimal jyExportKeepPoint = Optional.ofNullable(feeOrders.getJyExportKeepPointPremium()).orElse(BigDecimal.ZERO);
-                    BigDecimal equityAmount = jqExportTotal.add(syExportTotal).add(jyExportTotal)
-                            .subtract(jqExportKeepPoint.add(syExportKeepPoint).add(jyExportKeepPoint));
-
-                    // 权益金额大于 0,计算实际花费的权益金额并发放权益券
-                    if (equityAmount.compareTo(BigDecimal.ZERO) > 0) {
-                        // 初始化变量
-                        BigDecimal rightsTotalAmount = BigDecimal.ZERO;
-                        BigDecimal rightsPackageTotalAmount = BigDecimal.ZERO;
-                        ChannelRightsApiGrantReceiverDTO receiverDTO = new ChannelRightsApiGrantReceiverDTO();
-                        List<ChannelRightsGrantRightsDTO> rightsRequest = new ArrayList<>();
-
-                        // 遍历权益单品,计算总金额并构建请求参数
-                        if (CollUtil.isNotEmpty(rightsList)) {
-                            for (InsOrderRights rights : rightsList) {
-                                // 提取接收人信息(取第一条有手机号的记录)
-                                if (StringUtils.isBlank(receiverDTO.getPhone()) && StringUtils.isNotBlank(rights.getReceiverMobile())) {
-                                    receiverDTO.setPhone(rights.getReceiverMobile());
-                                    receiverDTO.setReceiverName( rights.getReceiverName());
-                                    receiverDTO.setRemark("车险订单权益赠送");
-                                    receiverDTO.setReceiverAmountLimit(equityAmount);
-                                }
-                                // 累加金额
-                                BigDecimal amount = Optional.ofNullable(rights.getSettlePrice()).orElse(BigDecimal.ZERO);
-                                Integer count = Optional.ofNullable(rights.getRightsCount()).orElse(0);
-                                rightsTotalAmount = rightsTotalAmount.add(amount.multiply(new BigDecimal(count)));
-
-                                // 构建权益单品请求参数
-                                ChannelRightsGrantRightsDTO rightsItem = new ChannelRightsGrantRightsDTO();
-                                rightsItem.setRightsContentId( rights.getRightsId());
-                                rightsItem.setRightsCount( rights.getRightsCount());
-                                rightsItem.setRightsType( 1);
-                                rightsRequest.add(rightsItem);
-                            }
-                        }
-
-                        // 遍历权益套餐,计算总金额并构建请求参数
-                        if (CollUtil.isNotEmpty(rightsPackageList)) {
-                            for (InsOrderRightsPackage pkg : rightsPackageList) {
-                                // 提取接收人信息(取第一条有手机号的记录)
-                                if (StringUtils.isBlank(receiverDTO.getPhone()) && StringUtils.isNotBlank(pkg.getReceiverMobile())) {
-                                    receiverDTO.setPhone(pkg.getReceiverMobile());
-                                    receiverDTO.setReceiverName( pkg.getReceiverName());
-                                    receiverDTO.setRemark("车险订单权益赠送");
-                                    receiverDTO.setReceiverAmountLimit(equityAmount);
-                                }
-
-                                // 累加金额
-                                BigDecimal packagePrice = Optional.ofNullable(pkg.getPackagePrice()).orElse(BigDecimal.ZERO);
-                                Integer count = Optional.ofNullable(pkg.getRightsCount()).orElse(0);
-                                rightsPackageTotalAmount = rightsPackageTotalAmount.add(packagePrice.multiply(new BigDecimal(count)));
-
-                                // 构建权益套餐请求参数
-                                ChannelRightsGrantRightsDTO rightsItem = new ChannelRightsGrantRightsDTO();
-                                rightsItem.setRightsContentId( pkg.getRightsId());
-                                rightsItem.setRightsCount( pkg.getRightsCount());
-                                rightsItem.setRightsType( 2);
-                                rightsRequest.add(rightsItem);
-                            }
-                        }
-                        // 计算权益总花费并校验
-                        BigDecimal totalAmount = rightsTotalAmount.add(rightsPackageTotalAmount);
-                        if (totalAmount.compareTo(equityAmount) > 0) {
-                            AssertionUtils.isFail(true, "权益金额不足!");
-                        }
-
-                        // 调用权益发放接口
-                        ChannelRightsApiGrantRecordDTO grantRequest = new ChannelRightsApiGrantRecordDTO();
-                        grantRequest.setBusinessId(param.getOrderNo());
-                        grantRequest.setReceiverDTO(receiverDTO);
-                        grantRequest.setRightsList(rightsRequest);
-                        grantRequest.setRemark("订单号:" + param.getOrderNo() + "权益赠送");
-                        Result<String> grantResult = localLivingClient.distribution(grantRequest);
-                        // 处理响应结果
-                        if (grantResult != null  && grantResult.getCode() == 200) {
-                            // 发放成功后扣除订单总应收保费
-                            feeOrders.setTotalReceivablePremium(
-                                    feeOrders.getTotalReceivablePremium().subtract(totalAmount)
-                            );
-                        } else {
-                            AssertionUtils.isFail(true, "权益券下发失败:" + grantResult.getMessage());
-                        }
-                    }
-                }
-
-            }
-            catch (Exception e) {
+                this.dealRightsRelatedOrder(feeOrders);
+            } catch (Exception e) {
+                log.error("权益下发失败:orderNo=[{}]", JSONUtil.toJsonStr(param.getOrderNo()));
                 AssertionUtils.isFail(true, "权益券下发失败");
             }
-
             if(Objects.isNull(userAccount)){
                 userAccount = new SysUserAccount();
                 // 新建账户
@@ -609,6 +512,113 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         }
     }
 
+    /**
+     * 处理订单关联的权益信息(将权益处理的逻辑抽取到一个单独的方法里面)
+     *
+     * @param feeOrders 订单的费用信息
+     * @author lipf
+     * @date 2026/6/6 10:18
+     */
+    private void dealRightsRelatedOrder(InsFeeOrders feeOrders) {
+        // 获取权益列表
+        List<InsOrderRights> rightsList = insOrderRightsMapper.queryByOrderNo(feeOrders.getOrderNo());
+        List<InsOrderRightsPackage> rightsPackageList = insOrderRightsPackageMapper.queryByOrderNo(feeOrders.getOrderNo());
+        if(CollUtil.isEmpty(rightsList) && CollUtil.isEmpty(rightsPackageList)){
+            log.info("订单[{}]关联的权益信息为空.不进行权益相关的处理",feeOrders.getOrderNo());
+            return;
+        }
+        log.info("订单[{}]关联的权益信息不为空.进行权益相关的处理",feeOrders.getOrderNo());
+        // 计算权益金额 = (出口费用总和) - (出口留点费用总和)
+        BigDecimal jqExportTotal = Optional.ofNullable(feeOrders.getJqExportPremium()).orElse(BigDecimal.ZERO);
+        BigDecimal syExportTotal = Optional.ofNullable(feeOrders.getSyExportPremium()).orElse(BigDecimal.ZERO);
+        BigDecimal jyExportTotal = Optional.ofNullable(feeOrders.getJyExportPremium()).orElse(BigDecimal.ZERO);
+        BigDecimal jqExportKeepPoint = Optional.ofNullable(feeOrders.getJqExportKeepPointPremium()).orElse(BigDecimal.ZERO);
+        BigDecimal syExportKeepPoint = Optional.ofNullable(feeOrders.getSyExportKeepPointPremium()).orElse(BigDecimal.ZERO);
+        BigDecimal jyExportKeepPoint = Optional.ofNullable(feeOrders.getJyExportKeepPointPremium()).orElse(BigDecimal.ZERO);
+        BigDecimal equityAmount = jqExportTotal.add(syExportTotal).add(jyExportTotal)
+                .subtract(jqExportKeepPoint.add(syExportKeepPoint).add(jyExportKeepPoint));
+
+        // 权益金额大于 0,计算实际花费的权益金额并发放权益券
+        if (equityAmount.compareTo(BigDecimal.ZERO) > 0) {
+            // 初始化变量
+            BigDecimal rightsTotalAmount = BigDecimal.ZERO;
+            BigDecimal rightsPackageTotalAmount = BigDecimal.ZERO;
+            ChannelRightsApiGrantReceiverDTO receiverDTO = new ChannelRightsApiGrantReceiverDTO();
+            List<ChannelRightsGrantRightsDTO> rightsRequest = new ArrayList<>();
+
+            // 遍历权益单品,计算总金额并构建请求参数
+            if (CollUtil.isNotEmpty(rightsList)) {
+                for (InsOrderRights rights : rightsList) {
+                    // 提取接收人信息(取第一条有手机号的记录)
+                    if (StringUtils.isBlank(receiverDTO.getPhone()) && StringUtils.isNotBlank(rights.getReceiverMobile())) {
+                        receiverDTO.setPhone(rights.getReceiverMobile());
+                        receiverDTO.setReceiverName( rights.getReceiverName());
+                        receiverDTO.setRemark("车险订单权益赠送");
+                        receiverDTO.setReceiverAmountLimit(equityAmount);
+                    }
+                    // 累加金额
+                    BigDecimal amount = Optional.ofNullable(rights.getSettlePrice()).orElse(BigDecimal.ZERO);
+                    Integer count = Optional.ofNullable(rights.getRightsCount()).orElse(0);
+                    rightsTotalAmount = rightsTotalAmount.add(amount.multiply(new BigDecimal(count)));
+
+                    // 构建权益单品请求参数
+                    ChannelRightsGrantRightsDTO rightsItem = new ChannelRightsGrantRightsDTO();
+                    rightsItem.setRightsContentId( rights.getRightsId());
+                    rightsItem.setRightsCount( rights.getRightsCount());
+                    rightsItem.setRightsType( 1);
+                    rightsRequest.add(rightsItem);
+                }
+            }
+
+            // 遍历权益套餐,计算总金额并构建请求参数
+            if (CollUtil.isNotEmpty(rightsPackageList)) {
+                for (InsOrderRightsPackage pkg : rightsPackageList) {
+                    // 提取接收人信息(取第一条有手机号的记录)
+                    if (StringUtils.isBlank(receiverDTO.getPhone()) && StringUtils.isNotBlank(pkg.getReceiverMobile())) {
+                        receiverDTO.setPhone(pkg.getReceiverMobile());
+                        receiverDTO.setReceiverName( pkg.getReceiverName());
+                        receiverDTO.setRemark("车险订单权益赠送");
+                        receiverDTO.setReceiverAmountLimit(equityAmount);
+                    }
+
+                    // 累加金额
+                    BigDecimal packagePrice = Optional.ofNullable(pkg.getPackagePrice()).orElse(BigDecimal.ZERO);
+                    Integer count = Optional.ofNullable(pkg.getRightsCount()).orElse(0);
+                    rightsPackageTotalAmount = rightsPackageTotalAmount.add(packagePrice.multiply(new BigDecimal(count)));
+
+                    // 构建权益套餐请求参数
+                    ChannelRightsGrantRightsDTO rightsItem = new ChannelRightsGrantRightsDTO();
+                    rightsItem.setRightsContentId( pkg.getRightsId());
+                    rightsItem.setRightsCount( pkg.getRightsCount());
+                    rightsItem.setRightsType( 2);
+                    rightsRequest.add(rightsItem);
+                }
+            }
+            // 计算权益总花费并校验
+            BigDecimal totalAmount = rightsTotalAmount.add(rightsPackageTotalAmount);
+            if (totalAmount.compareTo(equityAmount) > 0) {
+                AssertionUtils.isFail(true, "权益金额不足!");
+            }
+
+            // 调用权益发放接口
+            ChannelRightsApiGrantRecordDTO grantRequest = new ChannelRightsApiGrantRecordDTO();
+            grantRequest.setBusinessId(feeOrders.getOrderNo());
+            grantRequest.setReceiverDTO(receiverDTO);
+            grantRequest.setRightsList(rightsRequest);
+            grantRequest.setRemark("订单号:" + feeOrders.getOrderNo() + "权益赠送");
+            Result<String> grantResult = localLivingClient.distribution(grantRequest);
+            // 处理响应结果
+            if (grantResult != null  && grantResult.getCode() == 200) {
+                // 发放成功后扣除订单总应收保费
+                feeOrders.setTotalReceivablePremium(
+                        feeOrders.getTotalReceivablePremium().subtract(totalAmount)
+                );
+            } else {
+                AssertionUtils.isFail(true, "权益券下发失败:" + grantResult.getMessage());
+            }
+        }
+    }
+
     /**
      * 生成收入明细日志
      * @param orderNo       订单号