Commit 9cfa9333 by jianan

前端对接问题修复17

parent c5fa57cb
...@@ -215,7 +215,7 @@ public class ApiCommissionController { ...@@ -215,7 +215,7 @@ public class ApiCommissionController {
} }
/** /**
* 生成实际出账(发佣)记录,并设置检核日期 * 生成实际出账(发佣)记录
* *
* @param generateFortuneRequest * @param generateFortuneRequest
* @param request * @param request
...@@ -225,8 +225,8 @@ public class ApiCommissionController { ...@@ -225,8 +225,8 @@ public class ApiCommissionController {
@Operation(summary = "生成实际出账(发佣)记录") @Operation(summary = "生成实际出账(发佣)记录")
public Result<Boolean> generateFortune(@RequestBody GenerateFortuneRequest generateFortuneRequest, public Result<Boolean> generateFortune(@RequestBody GenerateFortuneRequest generateFortuneRequest,
HttpServletRequest request) { HttpServletRequest request) {
if (ObjectUtils.isEmpty(generateFortuneRequest.getPayoutYearMonth())) { if (CollectionUtils.isEmpty(generateFortuneRequest.getCommissionBizIdList())) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "预计出账年月不能为空"); return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "入账业务id列表不能为空");
} }
return Result.success(commissionService.generateFortune(generateFortuneRequest)); return Result.success(commissionService.generateFortune(generateFortuneRequest));
} }
......
...@@ -10,13 +10,9 @@ import java.util.List; ...@@ -10,13 +10,9 @@ import java.util.List;
@Data @Data
public class GenerateFortuneRequest { public class GenerateFortuneRequest {
// @Schema(description = "入账业务id列表") @Schema(description = "入账业务id列表")
// private List<String> commissionBizIdList; private List<String> commissionBizIdList;
// @Schema(description = "expected fortune id 列表") // @Schema(description = "expected fortune id 列表")
// private List<Long> expectedFortuneIdList; // private List<Long> expectedFortuneIdList;
@Schema(description = "预计出账年月,格式:yyyy-MM")
@JsonFormat(pattern = "yyyy-MM")
private LocalDate payoutYearMonth;
} }
...@@ -332,48 +332,66 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -332,48 +332,66 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest) { public Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest) {
LocalDate payoutYearMonth = generateFortuneRequest.getPayoutYearMonth(); List<String> commissionBizIdList = generateFortuneRequest.getCommissionBizIdList();
if (ObjectUtils.isEmpty(payoutYearMonth)) { List<Commission> commissions = this.lambdaQuery().in(Commission::getCommissionBizId, commissionBizIdList).list();
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "请选择预计出账年月"); // 根据保单号,期数建立映射关系
Map<String, Commission> policyNoPeriodMap = commissions.stream()
.collect(Collectors.toMap(i -> i.getPolicyNo() + "_" + i.getCommissionPeriod(), commission -> commission));
// 校验来佣记录是否存在
if (CollectionUtils.isEmpty(commissions)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "未找到对应的来佣记录,请先创建来佣记录");
} }
// 1. 查询在预计出账年月的预计发佣记录,预计出账日期在预计出账年月的1号到最后一天 for (Commission commission : commissions) {
QueryWrapper<ExpectedFortune> queryWrapper = new QueryWrapper<>(); if (StringUtils.isBlank(commission.getPolicyNo())) {
queryWrapper.between("payout_date", payoutYearMonth.withDayOfMonth(1), payoutYearMonth.withDayOfMonth(payoutYearMonth.lengthOfMonth())); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "保单号不能为空");
List<ExpectedFortune> expectedFortuneList = iExpectedFortuneService.list(queryWrapper); }
}
if (CollectionUtils.isEmpty(expectedFortuneList)) { // 获取所有保单号
Set<String> policyNoSet = commissions.stream()
.map(Commission::getPolicyNo)
.collect(Collectors.toSet());
// 1.1 根据保单号查询的预计发佣记录
List<ExpectedFortune> expectedFortuneList = iExpectedFortuneService.lambdaQuery()
.in(ExpectedFortune::getPolicyNo, policyNoSet)
.list();
// 1.2 根据保单号和期数筛选符合的预计发佣记录
List<ExpectedFortune> filteredExpectedFortuneList = new ArrayList<>();
for (Commission commission : commissions) {
String policyNo = commission.getPolicyNo();
Integer commissionPeriod = commission.getCommissionPeriod();
for (ExpectedFortune expectedFortune : expectedFortuneList) {
if (expectedFortune.getPolicyNo().equals(policyNo) && expectedFortune.getFortunePeriod().equals(commissionPeriod)) {
filteredExpectedFortuneList.add(expectedFortune);
}
}
}
if (CollectionUtils.isEmpty(filteredExpectedFortuneList)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "未找到保单对应的预计发佣记录,请先创建预计发佣记录"); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "未找到保单对应的预计发佣记录,请先创建预计发佣记录");
} }
// 2. 根据本次发佣日期,查询本期待发佣记录 // 2. 根据本次发佣日期,查询本期待发佣记录
QueryWrapper<Fortune> queryWrapperFortune = new QueryWrapper<>(); List<Fortune> fortuneList = fortuneService.lambdaQuery()
queryWrapperFortune.eq("reconciliation_year_month", payoutYearMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"))); .in(Fortune::getExpectedFortuneBizId, filteredExpectedFortuneList.stream().map(ExpectedFortune::getExpectedFortuneBizId).collect(Collectors.toList()))
List<Fortune> fortuneList = fortuneService.list(queryWrapperFortune); .list();
// 2.1 校验是否有已出账的记录 // 2.1 校验是否有已出账的记录
for (Fortune fortune : fortuneList) { for (Fortune fortune : fortuneList) {
if (FortuneStatusEnum.SENT.getItemValue().equals(fortune.getStatus())) { if (!FortuneStatusEnum.WAIT.getItemValue().equals(fortune.getStatus())) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "已出账的记录不能重新出账"); Commission commission = policyNoPeriodMap.get(fortune.getPolicyNo() + "_" + fortune.getFortunePeriod());
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "保单号为" + commission.getPolicyNo() + ",期数为" + commission.getCommissionPeriod() + "已有出账,不能重新出账");
} }
} }
// 2.2 过滤掉 is_part = 1 的 fortune 记录 // 2.2 过滤掉 is_part = 1 的 fortune 记录
List<Fortune> filteredFortuneList = fortuneList.stream() // List<Fortune> filteredFortuneList = fortuneList.stream()
.filter(fortune -> Integer.valueOf(0).equals(fortune.getIsPart())) // .filter(fortune -> Integer.valueOf(0).equals(fortune.getIsPart()))
.collect(Collectors.toList()); // .collect(Collectors.toList());
// 3.根据本次发佣日期,删除旧的发佣记录,以便重新计算
fortuneService.removeByIds(filteredFortuneList);
// 4.根据保单号查询对应来佣记录
Set<String> policyNoSet = expectedFortuneList.stream()
.map(ExpectedFortune::getPolicyNo)
.collect(Collectors.toSet());
List<Commission> commissionList = this.list(new QueryWrapper<Commission>().in("policy_no", policyNoSet));
// 5. 构建实际的初始发佣记录 // 5. 构建实际的初始发佣记录
List<Fortune> newFortuneList = buildNewFortunes(expectedFortuneList, commissionList, payoutYearMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"))); List<Fortune> newFortuneList = buildNewFortunes(filteredExpectedFortuneList, commissions);
// List<Fortune> newFortuneList = new ArrayList<>(); // List<Fortune> newFortuneList = new ArrayList<>();
// for (ExpectedFortune expectedFortune : filteredExpectedFortuneList) { // for (ExpectedFortune expectedFortune : filteredExpectedFortuneList) {
// Fortune fortune = new Fortune(); // Fortune fortune = new Fortune();
...@@ -416,8 +434,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -416,8 +434,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
* 构建新的发佣记录 * 构建新的发佣记录
*/ */
private List<Fortune> buildNewFortunes(List<ExpectedFortune> expectedFortuneList, private List<Fortune> buildNewFortunes(List<ExpectedFortune> expectedFortuneList,
List<Commission> commissionList, List<Commission> commissionList) {
String reconciliationYearMonth) {
// 构建来佣记录映射,用于快速查找 // 构建来佣记录映射,用于快速查找
Map<String, Commission> commissionByPolicyPeriod = commissionList.stream() Map<String, Commission> commissionByPolicyPeriod = commissionList.stream()
.collect(Collectors.toMap( .collect(Collectors.toMap(
...@@ -436,8 +453,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -436,8 +453,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
fortune.setExpectedFortuneBizId(expectedFortune.getExpectedFortuneBizId()); fortune.setExpectedFortuneBizId(expectedFortune.getExpectedFortuneBizId());
fortune.setStatus(FortuneStatusEnum.CAN_SEND.getItemValue()); fortune.setStatus(FortuneStatusEnum.CAN_SEND.getItemValue());
fortune.setIsPart(0); fortune.setIsPart(0);
// 检核日期
fortune.setReconciliationYearMonth(reconciliationYearMonth);
// 关联来佣业务ID // 关联来佣业务ID
String key = buildPolicyPeriodKey(expectedFortune.getPolicyNo(), expectedFortune.getFortunePeriod()); String key = buildPolicyPeriodKey(expectedFortune.getPolicyNo(), expectedFortune.getFortunePeriod());
......
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