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

报价和核保接口关于权益代码提交

郭子栋 5 месяцев назад
Родитель
Сommit
adcf0b1cd5

+ 59 - 15
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -14,15 +14,14 @@ import com.jzg.commons.core.base.StateResult;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.enums.MessageCodeEnum;
 import com.jzg.commons.entity.orders.po.*;
-import com.jzg.commons.entity.po.EsmInsCompany;
-import com.jzg.commons.entity.po.InsCompanyClause;
-import com.jzg.commons.entity.po.PtlAgreement;
-import com.jzg.commons.entity.po.SysUploadFiles;
+import com.jzg.commons.entity.po.*;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
 import com.jzg.commons.entity.quote.vo.underwriting.SpecialAppointmentsVo;
+import com.jzg.commons.entity.rights.dto.InsOrderRightsDto;
+import com.jzg.commons.entity.rights.dto.InsOrderRightsPackageDto;
 import com.jzg.commons.entity.vo.CompanyClauseVo;
 import com.jzg.commons.entity.vo.InsCompanyClauseVo;
 import com.jzg.commons.exception.SystemException;
@@ -59,10 +58,8 @@ import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.math.BigDecimal;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -134,6 +131,9 @@ public class UnifyOrderManager {
     @Autowired
     InsOrdersQrcodeService insOrdersQrcodeService;
 
+    @Autowired
+    InsFeeOrdersService insFeeOrdersService;
+
     @Value("${minio.bucket-name}")
     private String bucketName;
 
@@ -343,6 +343,15 @@ public class UnifyOrderManager {
         }
         underwritingVo.setSpecialAppointmentsVos(specialAppointmentsVos);
 
+        boolean hasRights = CollectionUtils.isNotEmpty(underwritingVo.getInsOrderRightsInfoDto().getInsOrderRightsList());//权益券
+        boolean hasPackages = CollectionUtils.isNotEmpty(underwritingVo.getInsOrderRightsInfoDto().getInsOrderRightsPackageList());//权益套餐
+        //核保前需要判断如果有选权益需要判断选中权益总价不超过可用金额
+        if(hasRights || hasPackages){
+            InsFeeOrders feeOrders = insFeeOrdersService.getById(underwritingVo.getOrder().getOrdersNo());
+            AssertionUtils.isFail(Objects.isNull(feeOrders),"费用信息不匹配");
+            checkAvailableAmount(feeOrders.getAvailableAmount(), underwritingVo.getInsOrderRightsInfoDto().getInsOrderRightsList(), underwritingVo.getInsOrderRightsInfoDto().getInsOrderRightsPackageList());
+        }
+
         UnderwritingResultsVo underwritingResultsVo = quoteService.underwriting(underwritingVo);
         underwritingResultsVo.setOrdersNo(insOrders.getId());
         // 保存核保结果
@@ -355,14 +364,8 @@ public class UnifyOrderManager {
                     baseController.getToken(), MessageCodeEnum.TEMPLATE_5);
             //核保成功将权益信息入库
             if(null != underwritingVo.getInsOrderRightsInfoDto()){
-                boolean hasRights = CollectionUtils.isNotEmpty(underwritingVo.getInsOrderRightsInfoDto().getInsOrderRightsList());
-                boolean hasPackages = CollectionUtils.isNotEmpty(underwritingVo.getInsOrderRightsInfoDto().getInsOrderRightsPackageList());
                  if(hasRights || hasPackages){
-                     //核保成功后设置该订单的权益可用金额、已使用金额、剩余金额
-                     insOrders.setAvailableAmount(underwritingVo.getInsOrders().getAvailableAmount());//可使用金额
-                     insOrders.setRemainingAmount(underwritingVo.getInsOrders().getRemainingAmount());//剩余金额
-                     insOrders.setUsedAmount(underwritingVo.getInsOrders().getUsedAmount());//已使用金额
-                     insOrderRightsInfoService.saveInsOrderRightsInfo(underwritingVo.getInsOrderRightsInfoDto(),insOrders);
+                     insOrderRightsInfoService.saveInsOrderRightsInfo(underwritingVo.getInsOrderRightsInfoDto(),underwritingVo.getOrder().getOrdersNo());
                  }
             }
             return HttpResult.ok("核保成功");
@@ -619,4 +622,45 @@ public class UnifyOrderManager {
         zhongMeiCrawlerRequest.login(loginBase);
         return  HttpResult.ok();
     }
+    /**
+     * 判断已使用金额不超过可用金额
+     * @param availableAmount
+     * @param rightsList
+     * @param rightsPackageList
+     */
+    private void checkAvailableAmount(BigDecimal availableAmount, List<InsOrderRightsDto> rightsList, List<InsOrderRightsPackageDto> rightsPackageList) {
+
+        // 权益金额大于 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, "权益金额不足!");
+            }
+
+        }
+    }
 }