按照 memberId 对 SplitData 列表中的 amount 进行汇总,保留原始的 feeFlag 数据

This commit is contained in:
Guoqs
2025-10-09 11:22:08 +08:00
parent 5539ce6c40
commit fe4b8bf3af
2 changed files with 184 additions and 480 deletions

View File

@@ -2330,9 +2330,46 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
resultList.add(insuranceSplit);
}
// TODO 是否可以分多笔给同一个账户?,如果不行,下面进行根据adapayMemberId进行金额累加
// 下面进行根据adapayMemberId进行金额累加
return aggregateSplitDataByMemberId(resultList);
}
return resultList;
/**
* 按照 memberId 对 SplitData 列表中的 amount 进行汇总,保留原始的 feeFlag 数据
* @param splitDataList 包含 SplitData 对象的列表
* @return 按 memberId 分组后的汇总结果列表
*/
private List<SplitData> aggregateSplitDataByMemberId(List<SplitData> splitDataList) {
if (splitDataList == null || splitDataList.isEmpty()) {
return new ArrayList<>();
}
// 按 memberId 分组,并保留每组第一条记录的 feeFlag
Map<String, List<SplitData>> groupedByMemberId = splitDataList.stream()
.collect(Collectors.groupingBy(SplitData::getMemberId));
List<SplitData> result = new ArrayList<>();
for (Map.Entry<String, List<SplitData>> entry : groupedByMemberId.entrySet()) {
String memberId = entry.getKey();
List<SplitData> group = entry.getValue();
// 计算该组的 amount 总和
BigDecimal totalAmount = group.stream()
.map(splitData -> new BigDecimal(splitData.getAmount()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
// 创建新的汇总记录,使用该组第一条记录的 feeFlag
SplitData aggregatedData = new SplitData();
aggregatedData.setMemberId(memberId);
aggregatedData.setAmount(totalAmount.toString());
// 保留原始的 feeFlag 数据(取第一条记录的值)
if (!group.isEmpty()) {
aggregatedData.setFeeFlag(group.get(0).getFeeFlag());
}
result.add(aggregatedData);
}
return result;
}
/**