Kaynağa Gözat

订单详情展示信息补充、修改权益可用金额接口

郭子栋 5 ay önce
ebeveyn
işleme
a03eae8a6d

+ 0 - 13
commons/src/main/java/com/jzg/commons/entity/vo/PtlAgreementCostRatioVo.java

@@ -82,14 +82,6 @@ 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()) {
@@ -147,11 +139,6 @@ 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 - 0
gateway/src/main/resources/application-dev.yml

@@ -115,6 +115,7 @@ spring:
                   - /order/searchHistory/**
                   - /rightsGrant/**
                   - /insOrderRights/**
+                  - /insFeeOrder/updateAvailableAmount
 
         - id: costsorrule_route
           uri: http://localhost:8085/

+ 3 - 0
gateway/src/main/resources/application-test.yml

@@ -109,6 +109,9 @@ spring:
                   - /orderTrack/**
                   - /feeAudit/**
                   - /adjust/**
+                  - /rightsGrant/**
+                  - /insOrderRights/**
+                  - /insFeeOrder/updateAvailableAmount
 
         - id: costsorrule_route
           uri: http://192.168.0.250:9085/

+ 8 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeOrderController.java

@@ -1,6 +1,7 @@
 package com.jzg.quotation.summary.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.InsFeeOrdersParam;
 import com.jzg.commons.entity.po.InsFeeOrders;
 import com.jzg.quotation.summary.service.InsFeeOrdersService;
@@ -9,8 +10,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -60,4 +60,10 @@ public class InsFeeOrderController {
         return insFeeOrdersService.getInsFeeOrderByOrderNo(orderNo);
     }
 
+    @Operation(summary = "修改权益可用金额")
+    @PostMapping("updateAvailableAmount")
+    public HttpResult updateOrders(@RequestParam("orderNo") String orderNo,@RequestParam("availableAmount") BigDecimal availableAmount) {
+        return insFeeOrdersService.updateAvailableAmount(orderNo,availableAmount);
+    }
+
 }

+ 4 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsFeeOrdersService.java

@@ -1,10 +1,12 @@
 package com.jzg.quotation.summary.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.InsFeeOrdersParam;
 import com.jzg.commons.entity.po.InsFeeOrders;
 import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 public interface InsFeeOrdersService extends IService<InsFeeOrders> {
@@ -20,5 +22,7 @@ public interface InsFeeOrdersService extends IService<InsFeeOrders> {
 
     List<InsFeeOrders> getInsFeeOrderByOrderNo(String orderNo);
 
+    HttpResult updateAvailableAmount(String orderNo,BigDecimal availableAmount);
+
 
 }

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

@@ -19,7 +19,7 @@ public interface InsOrderRightsInfoService {
     * @param insOrderRightsInfoDto
     * @return
     */
-   void saveInsOrderRightsInfo(InsOrderRightsInfoDto insOrderRightsInfoDto, InsFeeOrders insFeeOrders);
+   void saveInsOrderRightsInfo(InsOrderRightsInfoDto insOrderRightsInfoDto,String orderNo);
 
    /**
     * 根据订单ID查询权益信息

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

@@ -3,12 +3,15 @@ package com.jzg.quotation.summary.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.core.base.BaseController;
+import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.InsFeeOrdersParam;
 import com.jzg.commons.entity.orders.po.InsOrders;
 import com.jzg.commons.entity.orders.po.InsOrdersCosts;
 import com.jzg.commons.entity.po.InsFeeOrders;
 import com.jzg.commons.entity.po.PtlAgreement;
 import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
+import com.jzg.commons.util.AssertionUtils;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.client.OrgClient;
 import com.jzg.quotation.summary.mapper.InsFeeOrdersMapper;
 import com.jzg.quotation.summary.service.InsFeeOrdersService;
@@ -288,4 +291,31 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
     public List<InsFeeOrders> getInsFeeOrderByOrderNo(String orderNo) {
         return insFeeOrdersMapper.getInsFeeOrderByOrderNo(orderNo);
     }
+
+    @Override
+    public HttpResult updateAvailableAmount(String orderNo, BigDecimal availableAmount) {
+        // 1. 参数校验
+        AssertionUtils.isFail(StringUtils.isBlank(orderNo), "订单号不能为空");
+        AssertionUtils.isFail(availableAmount == null, "可用金额不能为空");
+        AssertionUtils.isFail(availableAmount.compareTo(BigDecimal.ZERO) < 0, "可用金额不能小于0");
+
+        // 2. 查询订单
+        InsFeeOrders insFeeOrders = getFeeOrderByOrderNo(orderNo);
+        AssertionUtils.isFail(insFeeOrders == null, "根据订单号查询订单费用表查无数据,订单号:" + orderNo);
+
+        // 3. 更新
+        insFeeOrders.setAvailableAmount(availableAmount);
+        int updateCount = insFeeOrdersMapper.updateById(insFeeOrders);
+        AssertionUtils.isFail(updateCount <= 0, "更新失败,订单号:" + orderNo);
+
+        return HttpResult.ok("更新成功");
+    }
+    /**
+     * 根据订单号查询单个订单
+     */
+    private InsFeeOrders getFeeOrderByOrderNo(String orderNo) {
+        LambdaQueryWrapper<InsFeeOrders> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(InsFeeOrders::getOrderNo, orderNo);
+        return insFeeOrdersMapper.selectOne(wrapper);
+    }
 }

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

@@ -1,5 +1,6 @@
 package com.jzg.quotation.summary.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.alibaba.nacos.common.utils.CollectionUtils;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.po.InsFeeOrders;
@@ -12,6 +13,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.commons.util.AssertionUtils;
 import com.jzg.quotation.summary.service.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -20,8 +22,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * 类描述:
@@ -43,25 +47,25 @@ public class InsOrderRightsInfoServiceImpl implements InsOrderRightsInfoService
     /**
      * 订单关联权益信息入库
      * @param insOrderRightsInfoDto
-     * @param insFeeOrders
+     * @param orderNo
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void saveInsOrderRightsInfo(InsOrderRightsInfoDto insOrderRightsInfoDto, InsFeeOrders insFeeOrders) {
+    public void saveInsOrderRightsInfo(InsOrderRightsInfoDto insOrderRightsInfoDto,String orderNo) {
         // 1. 业务校验:至少有一个集合有数据
         boolean hasRights = CollectionUtils.isNotEmpty(insOrderRightsInfoDto.getInsOrderRightsList());
         boolean hasPackages = CollectionUtils.isNotEmpty(insOrderRightsInfoDto.getInsOrderRightsPackageList());
         try{
             // 先删除现有的权益券
             if (hasRights) {
-                Integer deletedRights =  insOrderRightsService.deleteByOrderNo(insFeeOrders.getOrderNo());
-                log.info("删除订单 {} 现有权益券 {} 条", insFeeOrders.getOrderNo(), deletedRights);
+                Integer deletedRights =  insOrderRightsService.deleteByOrderNo(orderNo);
+                log.info("删除订单 {} 现有权益券 {} 条", orderNo, deletedRights);
             }
             //删除现有的权益包
             if (hasPackages) {
-                Integer deletedPackages = insOrderRightsPackageService.deleteByOrderNo(insFeeOrders.getOrderNo());
-                log.info("删除订单 {} 现有权益包 {} 条", insFeeOrders.getOrderNo(), deletedPackages);
+                Integer deletedPackages = insOrderRightsPackageService.deleteByOrderNo(orderNo);
+                log.info("删除订单 {} 现有权益包 {} 条", orderNo, deletedPackages);
             }
             //保存权益券信息
             if(hasRights){
@@ -75,11 +79,11 @@ public class InsOrderRightsInfoServiceImpl implements InsOrderRightsInfoService
                     insOrderRights.setReceiverMobile(rightsGrantReceiverDTO.getReceiverMobile());
                     insOrderRights.setReceiverName(rightsGrantReceiverDTO.getReceiverName());
                     insOrderRights.setReceiverType(rightsGrantReceiverDTO.getReceiverType());
-                    insOrderRights.setOrderId(insFeeOrders.getOrderNo());
+                    insOrderRights.setOrderId(orderNo);
                     insOrderRightsList.add(insOrderRights);
                 }
                 insOrderRightsService.saveInsOrderRights(insOrderRightsList);
-                log.info("保存订单 {} 权益券 {} 条", insFeeOrders.getOrderNo(), insOrderRightsList.size());
+                log.info("保存订单 {} 权益券 {} 条", orderNo, insOrderRightsList.size());
             }
             //保存权益套餐信息
             if(hasPackages){
@@ -93,24 +97,71 @@ public class InsOrderRightsInfoServiceImpl implements InsOrderRightsInfoService
                     insOrderRightsPackage.setReceiverMobile(rightsGrantReceiverDTO.getReceiverMobile());
                     insOrderRightsPackage.setReceiverName(rightsGrantReceiverDTO.getReceiverName());
                     insOrderRightsPackage.setReceiverType(rightsGrantReceiverDTO.getReceiverType());
-                    insOrderRightsPackage.setOrderId(insFeeOrders.getOrderNo());
+                    insOrderRightsPackage.setOrderId(orderNo);
                     insOrderRightsPackageList.add(insOrderRightsPackage);
                 }
                 insOrderRightsPackageService.saveInsOrderRightsPackage(insOrderRightsPackageList);
-                log.info("保存订单 {} 权益包 {} 条", insFeeOrders.getOrderNo(), insOrderRightsInfoDto.getInsOrderRightsPackageList().size());
+                log.info("保存订单 {} 权益包 {} 条", orderNo, insOrderRightsInfoDto.getInsOrderRightsPackageList().size());
             }
             log.info("订单权益券信息保存成功!");
             if(hasRights || hasPackages){
+                InsFeeOrders feeOrders = insFeeOrdersService.getById(orderNo);
+                setUsedAmountAndRemainAmount(feeOrders,insOrderRightsInfoDto.getInsOrderRightsList(),insOrderRightsInfoDto.getInsOrderRightsPackageList());
                 //更新订单表的权益可用金额、已使用金额、剩余金额
-                insFeeOrdersService.updateById(insFeeOrders);
+                insFeeOrdersService.updateById(feeOrders);
             }
         }catch (Exception e) {
-            log.error("保存订单权益信息失败,订单ID: {}", insFeeOrders.getOrderNo(), e);
+            log.error("保存订单权益信息失败,订单ID: {}", orderNo, e);
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
         }
 
     }
 
+    /**
+     * 计算已使用金额、剩余金额存入订单费用表
+     * @param feeOrders
+     * @param rightsList
+     * @param rightsPackageList
+     */
+    private void setUsedAmountAndRemainAmount(InsFeeOrders feeOrders,List<InsOrderRightsDto> rightsList,List<InsOrderRightsPackageDto> rightsPackageList) {
+
+        // 计算权益金额 = (出口费用总和) - (出口留点费用总和)
+        BigDecimal availableAmount = feeOrders.getAvailableAmount();
+        // 权益金额大于 0,计算实际花费的权益金额并发放权益券
+        if (availableAmount.compareTo(BigDecimal.ZERO) > 0) {
+            // 初始化变量
+            BigDecimal rightsTotalAmount = BigDecimal.ZERO;//选中的权益券总价
+            BigDecimal rightsPackageTotalAmount = BigDecimal.ZERO;//选中的权益套餐总价
+
+            // 遍历权益单品,计算总金额并构建请求参数
+            if (CollUtil.isNotEmpty(rightsList)) {
+                for (InsOrderRightsDto rights : rightsList) {
+                    // 累加金额
+                    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)));
+                }
+            }
+
+            // 遍历权益套餐,计算总金额并构建请求参数
+            if (CollUtil.isNotEmpty(rightsPackageList)) {
+                for (InsOrderRightsPackageDto pkg : rightsPackageList) {
+                    // 累加金额
+                    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)));
+                }
+            }
+            // 计算权益总花费并校验
+            BigDecimal usedAmount = rightsTotalAmount.add(rightsPackageTotalAmount);
+            if (usedAmount.compareTo(availableAmount) > 0) {
+                AssertionUtils.isFail(true, "权益金额不足!");
+            }
+            feeOrders.setUsedAmount(usedAmount);//已使用金额
+            feeOrders.setRemainingAmount(availableAmount.subtract(usedAmount));//剩余金额
+
+        }
+    }
     /**
      *  根据订单号查询权益券和权益套餐信息
      * @param orderNo

+ 8 - 2
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderRightsMapper.xml

@@ -28,12 +28,18 @@
         <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
         <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
         <result property="rightsStatus" column="rights_status" jdbcType="TINYINT"/>
+        <result property="rightsCount" column="rights_count" jdbcType="INTEGER"/>
+        <result property="rightsType" column="rights_type" jdbcType="INTEGER"/>
+        <result property="receiverType" column="receiver_type" jdbcType="INTEGER"/>
+        <result property="receiverName" column="receiver_name" jdbcType="VARCHAR"/>
+        <result property="receiverMobile" column="receiver_mobile" jdbcType="VARCHAR"/>
     </resultMap>
 
     <sql id="Base_Column_List">
             id,order_id,rights_id,
-            rights_name,
-            amount,rights_type,rights_count,receiver_type,receiver_name,receiver_mobile
+            rights_name,classify,rebate,amount,rights_picture,use_condition,day_num,start_time,end_time,
+               market_price,contract_rate,settle_price,description,del_flag,create_by,
+                create_time,update_by,update_time,rights_status,rights_count,rights_type,receiver_type,receiver_name,receiver_mobile
     </sql>
     <select id="queryByOrderNo" resultType="com.jzg.commons.entity.rights.po.InsOrderRights">
         SELECT <include refid="Base_Column_List"/>

+ 9 - 6
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderRightsPackageMapper.xml

@@ -9,12 +9,11 @@
         <result property="orderId" column="order_id" jdbcType="VARCHAR"/>
         <result property="rightsId" column="rights_id" jdbcType="VARCHAR"/>
         <result property="equityPackageName" column="equity_package_name" jdbcType="VARCHAR"/>
-        <result property="costPriceMin" column="cost_price_max" jdbcType="VARCHAR"/>
+        <result property="costPriceMax" column="cost_price_max" jdbcType="VARCHAR"/>
         <result property="costPriceMin" column="cost_price_min" jdbcType="VARCHAR"/>
         <result property="marketPrice" column="market_price" jdbcType="VARCHAR"/>
         <result property="agreementPrice" column="agreement_price" jdbcType="VARCHAR"/>
         <result property="threeSettlementPrice" column="three_settlement_price" jdbcType="VARCHAR"/>
-        <result property="totalPackagePrice" column="total_package_price" jdbcType="VARCHAR"/>
         <result property="packagePrice" column="package_price" jdbcType="VARCHAR"/>
         <result property="industryId" column="industry_id" jdbcType="VARCHAR"/>
         <result property="delFlag" column="del_flag" jdbcType="TINYINT"/>
@@ -23,13 +22,17 @@
         <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
         <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
         <result property="status" column="status" jdbcType="VARCHAR"/>
-        <result property="threeUserId" column="three_user_id" jdbcType="VARCHAR"/>
+        <result property="rightsCount" column="rights_count" jdbcType="INTEGER"/>
+        <result property="rightsType" column="rights_type" jdbcType="INTEGER"/>
+        <result property="receiverName" column="receiver_name" jdbcType="VARCHAR"/>
+        <result property="receiverMobile" column="receiver_mobile" jdbcType="VARCHAR"/>
     </resultMap>
 
     <sql id="Base_Column_List">
-            id,order_id,rights_id,
-            equity_package_name,
-            package_price,rights_type,rights_count,receiver_type,receiver_name,receiver_mobile
+            id,order_id,rights_id,equity_package_name,cost_price_max,cost_price_min,
+            market_price,agreement_price,three_settlement_price,
+                package_price,industry_id,del_flag,create_by,create_time,update_by,
+                update_time,status,rights_type,rights_count,receiver_type,receiver_name,receiver_mobile
     </sql>
     <select id="queryByOrderNo" resultType="com.jzg.commons.entity.rights.po.InsOrderRightsPackage">
         SELECT <include refid="Base_Column_List"/>