Commit 2a8e305a by jianan

生成可出帐,根据入账记录的 保单号+期数 获取

parent 8868d149
......@@ -634,11 +634,16 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
List<ExpectedFortune> expectedFortuneList = iExpectedFortuneService.lambdaQuery()
.in(ExpectedFortune::getPolicyNo, policyNoSet)
.list();
// 1.2 根据期数筛选符合的预计发佣记录
Set<Integer> commissionPeriodSet = commissions.stream().map(Commission::getCommissionPeriod).collect(Collectors.toSet());
// 1.2 构建保单号+佣金期数的快速查找集合
Set<String> commissionKeySet = commissions.stream()
.map(c -> c.getPolicyNo() + "_" + c.getCommissionPeriod())
.collect(Collectors.toSet());
// 1.3 根据保单号+佣金期数筛选符合的预计发佣记录
List<ExpectedFortune> filteredExpectedFortuneList1 = new ArrayList<>();
for (ExpectedFortune expectedFortune : expectedFortuneList) {
if (commissionPeriodSet.contains(expectedFortune.getFortunePeriod())) {
if (commissionKeySet.contains(expectedFortune.getPolicyNo() + "_" + expectedFortune.getFortunePeriod())) {
filteredExpectedFortuneList1.add(expectedFortune);
}
}
......@@ -674,7 +679,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
}
// 2.4 根据保单号、期数查询入账检核汇率
Map<String, BigDecimal> exchangeRateMap = this.queryCommissionExchangeRateMap(policyNoSet, commissionPeriodSet);
Map<String, BigDecimal> exchangeRateMap = this.queryCommissionExchangeRateMap(commissions);
// 3. 构建实际的初始发佣记录(使用入账检核汇率)
List<Fortune> newFortuneList = buildNewFortunes(filteredExpectedFortuneList2, commissions, exchangeRateMap);
......@@ -685,18 +690,15 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return true;
}
private Map<String, BigDecimal> queryCommissionExchangeRateMap(Set<String> policyNoSet, Set<Integer> commissionPeriodSet) {
if (CollectionUtils.isEmpty(policyNoSet) || CollectionUtils.isEmpty(commissionPeriodSet)) {
private Map<String, BigDecimal> queryCommissionExchangeRateMap(List<Commission> commissions) {
if (CollectionUtils.isEmpty(commissions)) {
return new HashMap<>();
}
// 1. 查询所有符合条件的记录,按入账日期降序排序
List<Commission> commissionExchangeRateList = this.lambdaQuery()
.in(Commission::getPolicyNo, policyNoSet)
.in(Commission::getCommissionPeriod, commissionPeriodSet)
.select(Commission::getPolicyNo, Commission::getCommissionPeriod, Commission::getExchangeRate, Commission::getCommissionDate)
.orderByDesc(Commission::getId)
.list();
// 1. 按入账日期降序排序
List<Commission> commissionExchangeRateList = commissions.stream()
.sorted(Comparator.comparing(Commission::getCommissionDate).reversed())
.collect(Collectors.toList());
// 2. 按 policyNo + commissionPeriod 分组,取每组的第一条(最新的)
Map<String, BigDecimal> exchangeRateMap = commissionExchangeRateList.stream()
......@@ -711,12 +713,10 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
// 3. 确保所有 policyNo + commissionPeriod 组合都在 Map 中,没有记录的设为 null
Map<String, BigDecimal> result = new HashMap<>();
for (String policyNo : policyNoSet) {
for (Integer commissionPeriod : commissionPeriodSet) {
String key = buildPolicyPeriodKey(policyNo, commissionPeriod);
for (Commission commission : commissions) {
String key = buildPolicyPeriodKey(commission.getPolicyNo(), commission.getCommissionPeriod());
result.put(key, exchangeRateMap.getOrDefault(key, null));
}
}
return result;
}
......
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