Commit e350da83 by jianan

新单跟进135

parent 4a99383b
......@@ -28,6 +28,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
......@@ -137,6 +138,28 @@ public class ApiCommissionController {
entities.add(entity);
}
// 保存来佣数据
commissionService.saveBatch(entities);
// todo 6. 异步触发比对任务(事务提交后执行)
// TransactionSynchronizationManager.registerSynchronization(
// new TransactionSynchronization() {
// @Override
// public void afterCommit() {
// // 主事务提交后再执行异步任务
// commissionComareBatch(entities);
// }
// }
// );
}
/**
* 异步执行来佣对比(有独立事务)
*/
@Async("commonAsyncExecutor")
@Transactional(rollbackFor = Exception.class)
public void commissionComareBatch(List<Commission> entities) {
// 根据导入的来佣获取保单号集合
List<String> policyNoList = entities.stream()
.map(Commission::getPolicyNo)
......@@ -146,12 +169,7 @@ public class ApiCommissionController {
.in(CommissionExpected::getPolicyNo, policyNoList)
.list();
// 校验导入的来佣是否与预计来佣一致
for (Commission commission : entities) {
String policyNo = commission.getPolicyNo();
Integer commissionPeriod = commission.getCommissionPeriod();
String commissionName = commission.getCommissionName();
// 查询预计来佣
CommissionExpected commissionExpected;
try {
......@@ -165,22 +183,12 @@ public class ApiCommissionController {
commission.setRemark(e.getMessage());
}
}
// 保存来佣数据
commissionService.saveBatch(entities);
// 更新预计来佣状态
commissionExpectedService.updateBatchById(expectedList);
}
private static CommissionExpected getCommissionExpected(List<CommissionExpected> expectedList, String policyNo, Integer commissionPeriod, String commissionName) {
return expectedList.stream()
.filter(item -> item.getPolicyNo().equals(policyNo)
&& commissionPeriod.equals(item.getCommissionPeriod())
&& commissionName.equals(item.getCommissionName()))
.findFirst()
.orElse(null);
}
/**
* 生成可出账(发佣)记录,支持手动复选框选择
*
......
package com.yd.csf.service.service;
import com.yd.csf.service.enums.CommissionStatusEnum;
import com.yd.csf.service.model.Commission;
import com.yd.csf.service.model.CommissionExpected;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
@Service
@Slf4j
public class CommissionAsyncService {
@Resource
private CommissionExpectedService commissionExpectedService;
@Resource
private CommissionService commissionService;
@Async("commonAsyncExecutor")
@Transactional(rollbackFor = Exception.class)
public void commissionCompareBatch(List<Commission> entities) {
// 比对逻辑...
log.info("开始异步比对,数据量:{}", entities.size());
List<String> policyNoList = entities.stream()
.map(Commission::getPolicyNo)
.collect(Collectors.toList());
List<CommissionExpected> expectedList = commissionExpectedService.lambdaQuery()
.in(CommissionExpected::getPolicyNo, policyNoList)
.list();
// 执行比对...
}
public void commissionCompare(Commission commission) {
log.info("开始执行比对事务,来佣ID: {}, 保单号: {}",
commission.getId(), commission.getPolicyNo());
CommissionExpected commissionExpected;
try {
commissionExpected = commissionService.queryByCommission(commission);
// 对比预计来佣
commissionService.compareWithExpected(commission.getPremium(), commission, commissionExpected);
commissionExpectedService.updateById(commissionExpected);
// 比对成功,更新状态
commission.setStatus(CommissionStatusEnum.COMPARE_SUCCESS.getItemValue());
} catch (Exception e) {
// 预计来佣不存在或比对失败
commission.setStatus(CommissionStatusEnum.COMPARE_FAIL.getItemValue());
commission.setRemark(e.getMessage());
log.warn("来佣比对失败,保单号: {},原因: {}",
commission.getPolicyNo(), e.getMessage());
}
// 更新来佣的比对状态(在比对事务中)
commissionService.updateById(commission);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment