Browse Source

报价后返回增加权益可用金额、出口费用、代理人留点费用;订单详情增加权益信息查询;权益金额信息改存insFeeOrder表;通过协议ID与规则ID查询协议费用信息远程调用在请求头补充system_code;

郭子栋 6 tháng trước cách đây
mục cha
commit
c2c110c486

+ 0 - 10
commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrders.java

@@ -7,7 +7,6 @@ import com.jzg.commons.core.base.BaseModel;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
-import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 
@@ -103,13 +102,4 @@ public class InsOrders extends BaseModel {
     @Schema(description = "对接人电话")
     private String dockingPersonPhone;
 
-    @Schema(description = "权益相关:可用金额<可用金额=出口佣金➖代理人留点佣金>")
-    private BigDecimal availableAmount;
-
-    @Schema(description = "权益相关:已使用金额<发放权益价格总数量(结算价)>")
-    private BigDecimal 	usedAmount;
-
-    @Schema(description = "权益相关:剩余金额<可用金额-已使用金额>")
-    private BigDecimal remainingAmount;
-
 }

+ 14 - 0
commons/src/main/java/com/jzg/commons/entity/po/InsFeeOrders.java

@@ -192,7 +192,21 @@ public class InsFeeOrders {
     @Schema(description = "驾意险出口留点费用")
     private BigDecimal jyExportKeepPointPremium;
 
+    @Schema(description = "权益相关:可用金额<可用金额=出口费用➖出口人留点费用>")
+    private BigDecimal availableAmount;
 
+    @Schema(description = "权益相关:出口总费用")
+    @TableField(exist = false)
+    private BigDecimal totalExportPremium;
+
+    @Schema(description = "权益相关:出口留点总费用")
+    @TableField(exist = false)
+    private BigDecimal totalExportKeepPointPremium;
+    @Schema(description = "权益相关:已使用金额<发放权益价格总数量(结算价)>")
+    private BigDecimal 	usedAmount;
+
+    @Schema(description = "权益相关:剩余金额<可用金额-已使用金额>")
+    private BigDecimal remainingAmount;
     @Schema(description = "一级分销费")
     private BigDecimal firstDistributionFee;
 

+ 4 - 1
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteEchoVo.java

@@ -17,8 +17,8 @@ import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
+import com.jzg.commons.entity.rights.vo.InsOrderRightsInfoVo;
 import com.jzg.commons.entity.scheme.vo.PtlAgreementInsCompanyVo;
-import com.jzg.commons.entity.vo.ImagesVo;
 import com.jzg.commons.entity.vo.InsFeeOrdersVo;
 import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -238,6 +238,9 @@ public class QuoteEchoVo extends QuoteVo {
     @Schema(description = "订单批改信息")
     private InsOrderAdjustVo insOrderAdjustVo;
 
+    @Schema(description = "权益信息")
+    private InsOrderRightsInfoVo insOrderRightsInfoVo;
+
     @Data
     private static class InsOrderAdjustVo{
 

+ 10 - 0
commons/src/main/java/com/jzg/commons/entity/rights/dto/InsOrderRightsInfoDto.java

@@ -3,6 +3,7 @@ package com.jzg.commons.entity.rights.dto;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -23,4 +24,13 @@ public class InsOrderRightsInfoDto {
     @Schema(description = "权益接收人")
     private RightsGrantReceiverDTO rightsGrantReceiverDTO;
 
+    @Schema(description = "权益相关:可用金额<可用金额=出口费用➖出口人留点费用>")
+    private BigDecimal availableAmount;
+
+    @Schema(description = "权益相关:已使用金额<发放权益价格总数量(结算价)>")
+    private BigDecimal 	usedAmount;
+
+    @Schema(description = "权益相关:剩余金额<可用金额-已使用金额>")
+    private BigDecimal remainingAmount;
+
 }

+ 21 - 0
commons/src/main/java/com/jzg/commons/entity/vo/InsFeeOrdersVo.java

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.jzg.commons.entity.po.InsFeeOrders;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -104,6 +105,22 @@ public class InsFeeOrdersVo {
     @Schema(description = "驾意险出口留点费用")
     private String jyExportKeepPointPremium;
 
+    @Schema(description = "权益相关:可用金额<可用金额=出口费用➖出口人留点费用>")
+    private BigDecimal availableAmount;
+
+    @Schema(description = "权益相关:出口总费用")
+    @TableField(exist = false)
+    private BigDecimal totalExportPremium;
+
+    @Schema(description = "权益相关:出口留点总费用")
+    @TableField(exist = false)
+    private BigDecimal totalExportKeepPointPremium;
+    @Schema(description = "权益相关:已使用金额<发放权益价格总数量(结算价)>")
+    private BigDecimal 	usedAmount;
+
+    @Schema(description = "权益相关:剩余金额<可用金额-已使用金额>")
+    private BigDecimal remainingAmount;
+
     public InsFeeOrdersVo(InsFeeOrders insFeeOrders) {
         this.orderNo = insFeeOrders.getOrderNo();
         this.agreementId = insFeeOrders.getAgreementId();
@@ -136,5 +153,9 @@ public class InsFeeOrdersVo {
         this.jqExportKeepPointPremium = insFeeOrders.getJqExportKeepPointPremium() != null ? insFeeOrders.getJqExportKeepPointPremium().toString() : "0.00";
         this.syExportKeepPointPremium = insFeeOrders.getSyExportKeepPointPremium() != null ? insFeeOrders.getSyExportKeepPointPremium().toString() : "0.00";
         this.jyExportKeepPointPremium = insFeeOrders.getJyExportKeepPointPremium() != null ? insFeeOrders.getJyExportKeepPointPremium().toString() : "0.00";
+
+        this.availableAmount = insFeeOrders.getAvailableAmount() != null ? insFeeOrders.getAvailableAmount() : BigDecimal.ZERO;
+        this.remainingAmount = insFeeOrders.getRemainingAmount() != null ? insFeeOrders.getRemainingAmount() : BigDecimal.ZERO;
+        this.usedAmount = insFeeOrders.getUsedAmount() != null ? insFeeOrders.getUsedAmount() : BigDecimal.ZERO;
     }
 }

+ 12 - 1
commons/src/main/java/com/jzg/commons/entity/vo/PtlAgreementCostRatioVo.java

@@ -2,7 +2,6 @@ package com.jzg.commons.entity.vo;
 
 import com.jzg.commons.entity.po.InsFeeOrders;
 import com.jzg.commons.entity.po.PtlAgreement;
-import com.jzg.commons.entity.po.PtlAgreementCostType;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -84,6 +83,13 @@ public class PtlAgreementCostRatioVo {
     @Schema(description = "驾意险出口留点比例")
     private BigDecimal jyExportKeepPointRatio;
 
+    @Schema(description = "权益相关:可用金额<可用金额=出口费用➖出口人留点费用>")
+    private BigDecimal availableAmount;
+    @Schema(description = "权益相关:已使用金额<发放权益价格总数量(结算价)>")
+    private BigDecimal 	usedAmount;
+
+    @Schema(description = "权益相关:剩余金额<可用金额-已使用金额>")
+    private BigDecimal remainingAmount;
     public PtlAgreementCostRatioVo(List<PtlAgreementCostTypeVo> ptlAgreementCostTypeList, PtlAgreement ptlAgreement) {
         ptlAgreementCostTypeList.forEach(ptlAgreementCostType -> {
             switch (ptlAgreementCostType.getCostType()) {
@@ -141,6 +147,11 @@ public class PtlAgreementCostRatioVo {
         this.jyKeepPointRatio = insFeeOrders.getJyKeepPointRatio() != null ? insFeeOrders.getJyKeepPointRatio().multiply(new BigDecimal("100")) : BigDecimal.ZERO;
         this.jyExportRatio = insFeeOrders.getJyExportRatio() != null ? insFeeOrders.getJyExportRatio().multiply(new BigDecimal("100")) : BigDecimal.ZERO;
         this.jyExportKeepPointRatio = insFeeOrders.getJyExportKeepPointRatio() != null ? insFeeOrders.getJyExportKeepPointRatio().multiply(new BigDecimal("100")) : BigDecimal.ZERO;
+
+        //权益可用金额、已使用金额、剩余金额
+        this.availableAmount = insFeeOrders.getAvailableAmount() != null ? insFeeOrders.getAvailableAmount() : BigDecimal.ZERO;
+        this.usedAmount = insFeeOrders.getUsedAmount() != null ? insFeeOrders.getUsedAmount() : BigDecimal.ZERO;
+        this.remainingAmount = insFeeOrders.getRemainingAmount() != null ? insFeeOrders.getRemainingAmount() : BigDecimal.ZERO;
     }
 
 

+ 1 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java

@@ -66,7 +66,7 @@ public interface OrgClient {
 
     @PostMapping(value = "/ptlAgreementCost/queryByAgreementIdAndProductId")
     public List<CostsListVo> queryByAgreementIdAndProductId(@RequestBody CostAgreementParam costAgreementParam,
-                                                            @RequestHeader("Authorization") String authToken);
+                                                            @RequestHeader("Authorization") String authToken,@RequestHeader("system_code")String systemCode);
 
     @GetMapping(value = "/pltAgreement/attr/list")
     public HttpResult<List<PtlAgreementUndwrtRulesAttr>> list();

+ 34 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java

@@ -104,7 +104,7 @@ public class QuoteVerificationAspect {
             CostAgreementParam costAgreementParam = new CostAgreementParam();
             costAgreementParam.setPtlAgreementId(insOrders.getAgreementId());
             costAgreementParam.setProductId(insOrders.getProductId());
-            List<CostsListVo> costsList = orgClient.queryByAgreementIdAndProductId(costAgreementParam, baseController.getToken());
+            List<CostsListVo> costsList = orgClient.queryByAgreementIdAndProductId(costAgreementParam, baseController.getToken(),baseController.getSystemCode());
             //先过滤 能源 车辆类型
             List<CostsListVo> agreementProductCosts = this.beforeFilter(costsList,insOrdersCarInfo);
             // 设置默认的优先级
@@ -424,8 +424,40 @@ public class QuoteVerificationAspect {
         BigDecimal jyExportKeepRatioPremium = insFeeOrders.getJyExportKeepPointRatio().multiply(insFeeOrders.getJyPremium());
         insFeeOrders.setJyExportKeepPointPremium(jyExportKeepRatioPremium);
 
+        //计算权益可用金额
+        BigDecimal availableAmount = calculateAvailableAmount(jqExportPremium,syExportPremium,jyExportPremium,jqExportKeepRatioPremium,syExportKeepRatioPremium,jyExportKeepRatioPremium);
+        insFeeOrders.setAvailableAmount(availableAmount);
+        //出口总费用
+        insFeeOrders.setTotalExportPremium(jqExportPremium.add(syExportPremium).add(jyExportPremium));
+        //出口留点总费用
+        insFeeOrders.setTotalExportKeepPointPremium(jqExportKeepRatioPremium.add(syExportKeepRatioPremium).add(jyExportKeepRatioPremium));
+    }
+    // 封装计算方法
+    private BigDecimal calculateAvailableAmount(
+            BigDecimal jqExportPremium,
+            BigDecimal syExportPremium,
+            BigDecimal jyExportPremium,
+            BigDecimal jqExportKeepRatioPremium,
+            BigDecimal syExportKeepRatioPremium,
+            BigDecimal jyExportKeepRatioPremium) {
+
+        // 1. 空值处理:将 null 转为 0
+        BigDecimal jq = jqExportPremium != null ? jqExportPremium : BigDecimal.ZERO;
+        BigDecimal sy = syExportPremium != null ? syExportPremium : BigDecimal.ZERO;
+        BigDecimal jy = jyExportPremium != null ? jyExportPremium : BigDecimal.ZERO;
+        BigDecimal jqKeep = jqExportKeepRatioPremium != null ? jqExportKeepRatioPremium : BigDecimal.ZERO;
+        BigDecimal syKeep = syExportKeepRatioPremium != null ? syExportKeepRatioPremium : BigDecimal.ZERO;
+        BigDecimal jyKeep = jyExportKeepRatioPremium != null ? jyExportKeepRatioPremium : BigDecimal.ZERO;
+
+        // 2. 链式计算
+        BigDecimal result = jq.add(sy)
+                .add(jy)
+                .subtract(jqKeep)
+                .subtract(syKeep)
+                .subtract(jyKeep)
+                .setScale(2, RoundingMode.HALF_UP); // 保留2位小数,四舍五入
+        return result;
     }
-
     /**
      * 保存比例
      */

+ 2 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrderRightsInfoService.java

@@ -1,7 +1,7 @@
 package com.jzg.quotation.summary.service;
 
 import com.jzg.commons.core.page.HttpResult;
-import com.jzg.commons.entity.orders.po.InsOrders;
+import com.jzg.commons.entity.po.InsFeeOrders;
 import com.jzg.commons.entity.rights.dto.InsOrderRightsInfoDto;
 import com.jzg.commons.entity.rights.vo.InsOrderRightsInfoVo;
 
@@ -19,7 +19,7 @@ public interface InsOrderRightsInfoService {
     * @param insOrderRightsInfoDto
     * @return
     */
-   void saveInsOrderRightsInfo(InsOrderRightsInfoDto insOrderRightsInfoDto, InsOrders insOrders);
+   void saveInsOrderRightsInfo(InsOrderRightsInfoDto insOrderRightsInfoDto, InsFeeOrders insFeeOrders);
 
    /**
     * 根据订单ID查询权益信息

+ 13 - 16
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrderRightsInfoServiceImpl.java

@@ -2,7 +2,7 @@ package com.jzg.quotation.summary.service.impl;
 
 import com.alibaba.nacos.common.utils.CollectionUtils;
 import com.jzg.commons.core.page.HttpResult;
-import com.jzg.commons.entity.orders.po.InsOrders;
+import com.jzg.commons.entity.po.InsFeeOrders;
 import com.jzg.commons.entity.rights.dto.InsOrderRightsDto;
 import com.jzg.commons.entity.rights.dto.InsOrderRightsInfoDto;
 import com.jzg.commons.entity.rights.dto.InsOrderRightsPackageDto;
@@ -12,10 +12,7 @@ import com.jzg.commons.entity.rights.po.InsOrderRightsPackage;
 import com.jzg.commons.entity.rights.vo.InsOrderRightsInfoVo;
 import com.jzg.commons.entity.rights.vo.InsOrderRightsPackageVo;
 import com.jzg.commons.entity.rights.vo.InsOrderRightsVo;
-import com.jzg.quotation.summary.service.InsOrderRightsInfoService;
-import com.jzg.quotation.summary.service.InsOrderRightsPackageService;
-import com.jzg.quotation.summary.service.InsOrderRightsService;
-import com.jzg.quotation.summary.service.InsOrdersService;
+import com.jzg.quotation.summary.service.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.beanutils.BeanUtils;
@@ -41,30 +38,30 @@ public class InsOrderRightsInfoServiceImpl implements InsOrderRightsInfoService
     private final InsOrderRightsService insOrderRightsService;
     private final InsOrderRightsPackageService insOrderRightsPackageService;
 
-    private final InsOrdersService insOrdersService;
+    private final InsFeeOrdersService insFeeOrdersService;
 
     /**
      * 订单关联权益信息入库
      * @param insOrderRightsInfoDto
-     * @param insOrders
+     * @param insFeeOrders
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void saveInsOrderRightsInfo(InsOrderRightsInfoDto insOrderRightsInfoDto,InsOrders insOrders) {
+    public void saveInsOrderRightsInfo(InsOrderRightsInfoDto insOrderRightsInfoDto, InsFeeOrders insFeeOrders) {
         // 1. 业务校验:至少有一个集合有数据
         boolean hasRights = CollectionUtils.isNotEmpty(insOrderRightsInfoDto.getInsOrderRightsList());
         boolean hasPackages = CollectionUtils.isNotEmpty(insOrderRightsInfoDto.getInsOrderRightsPackageList());
         try{
             // 先删除现有的权益券
             if (hasRights) {
-                Integer deletedRights =  insOrderRightsService.deleteByOrderNo(insOrders.getId());
-                log.info("删除订单 {} 现有权益券 {} 条", insOrders.getId(), deletedRights);
+                Integer deletedRights =  insOrderRightsService.deleteByOrderNo(insFeeOrders.getOrderNo());
+                log.info("删除订单 {} 现有权益券 {} 条", insFeeOrders.getOrderNo(), deletedRights);
             }
             //删除现有的权益包
             if (hasPackages) {
-                Integer deletedPackages = insOrderRightsPackageService.deleteByOrderNo(insOrders.getId());
-                log.info("删除订单 {} 现有权益包 {} 条", insOrders.getId(), deletedPackages);
+                Integer deletedPackages = insOrderRightsPackageService.deleteByOrderNo(insFeeOrders.getOrderNo());
+                log.info("删除订单 {} 现有权益包 {} 条", insFeeOrders.getOrderNo(), deletedPackages);
             }
             //保存权益券信息
             if(hasRights){
@@ -81,7 +78,7 @@ public class InsOrderRightsInfoServiceImpl implements InsOrderRightsInfoService
                     insOrderRightsList.add(insOrderRights);
                 }
                 insOrderRightsService.saveInsOrderRights(insOrderRightsList);
-                log.info("保存订单 {} 权益券 {} 条", insOrders.getId(), insOrderRightsList.size());
+                log.info("保存订单 {} 权益券 {} 条", insFeeOrders.getOrderNo(), insOrderRightsList.size());
             }
             //保存权益套餐信息
             if(hasPackages){
@@ -98,15 +95,15 @@ public class InsOrderRightsInfoServiceImpl implements InsOrderRightsInfoService
                     insOrderRightsPackageList.add(insOrderRightsPackage);
                 }
                 insOrderRightsPackageService.saveInsOrderRightsPackage(insOrderRightsPackageList);
-                log.info("保存订单 {} 权益包 {} 条", insOrders.getId(), insOrderRightsInfoDto.getInsOrderRightsPackageList().size());
+                log.info("保存订单 {} 权益包 {} 条", insFeeOrders.getOrderNo(), insOrderRightsInfoDto.getInsOrderRightsPackageList().size());
             }
             log.info("订单权益券信息保存成功!");
             if(hasRights || hasPackages){
                 //更新订单表的权益可用金额、已使用金额、剩余金额
-                insOrdersService.updateById(insOrders);
+                insFeeOrdersService.updateById(insFeeOrders);
             }
         }catch (Exception e) {
-            log.error("保存订单权益信息失败,订单ID: {}", insOrders.getId(), e);
+            log.error("保存订单权益信息失败,订单ID: {}", insFeeOrders.getOrderNo(), e);
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
         }
 

+ 6 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -34,6 +34,7 @@ import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersAdd;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersEnd;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
+import com.jzg.commons.entity.rights.vo.InsOrderRightsInfoVo;
 import com.jzg.commons.entity.vo.*;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.AssertionUtils;
@@ -142,6 +143,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
     @Autowired
     private InsFeeOrdersMapper insFeeOrdersMapper;
+    @Autowired
+    private InsOrderRightsInfoService insOrderRightsInfoService;
 
     @Value("${minio.bucket-name}")
     private String bucketName;
@@ -1137,6 +1140,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             //resultVo.setCostRatio(new PtlAgreementCostRatioVo(ptlAgreementCostTypeList, ptlAgreement));
             resultVo.setCostRatio(new PtlAgreementCostRatioVo(insFeeOrders));
         }
+        //权益信息
+        InsOrderRightsInfoVo insOrderRightsInfoVo = insOrderRightsInfoService.queryByOrderNo(ordersNo);
+        resultVo.setInsOrderRightsInfoVo(insOrderRightsInfoVo);
         return resultVo;
     }