|
|
@@ -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 订单号
|