diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index edd036a9a..63ff8d21d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -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 aggregateSplitDataByMemberId(List splitDataList) { + if (splitDataList == null || splitDataList.isEmpty()) { + return new ArrayList<>(); + } + + // 按 memberId 分组,并保留每组第一条记录的 feeFlag + Map> groupedByMemberId = splitDataList.stream() + .collect(Collectors.groupingBy(SplitData::getMemberId)); + + List result = new ArrayList<>(); + + for (Map.Entry> entry : groupedByMemberId.entrySet()) { + String memberId = entry.getKey(); + List 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; } /** diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/SettleOrderReportServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/SettleOrderReportServiceImpl.java index 74a117827..2187e7bfe 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/SettleOrderReportServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/SettleOrderReportServiceImpl.java @@ -683,7 +683,12 @@ public class SettleOrderReportServiceImpl implements SettleOrderReportService { List orderSplitRecords = orderSplitRecordService.queryOrderSplitRecordList(stationInfo.getMerchantId(), stationId, tradeDate, tradeDate); log.info("查分账记录,站点:{}, 在{}-{}查询到分账数据{}条", stationInfo.getStationName(), startTime, endTime, orderSplitRecords.size()); // orderSplitRecords转为map, key为订单编号, value为分账记录 - Map splitRecordMap = orderSplitRecords.stream().collect(Collectors.toMap(OrderSplitRecord::getOrderCode, v -> v)); + // Map splitRecordMap = orderSplitRecords.stream().collect(Collectors.toMap(OrderSplitRecord::getOrderCode, v -> v)); + + // orderSplitRecords转为map, key为订单编号, value为分账记录(过滤该运营商分账记录) + Map splitRecordMap = orderSplitRecords.stream() + .filter(v -> v.getFeeAmount().compareTo(BigDecimal.ZERO) > 0) + .collect(Collectors.toMap(OrderSplitRecord::getOrderCode, v -> v)); // 统计出日报信息 BigDecimal useElectricity = BigDecimal.ZERO; // 总电量使用量