zhuyifan

feat(settlement): 支持换菜操作的价格调整

- 新增对换菜订单操作记录的处理逻辑
- 构建换菜前后的订单详情映射关系
- 在结算中正确应用换菜后的价格信息
- 完善换菜场景下的订单分类统计逻辑
- 确保换菜操作能准确反映在结算明细中
......@@ -869,6 +869,12 @@ public class SettlementServiceImpl implements SettlementService {
}).stream())
.collect(Collectors.toMap(OrderDetailBO::getId, Function.identity(), (a, b) -> a));
Map<Integer, OrderDetailBO> replaceAdjustDetailMap = orderOperationRecords.stream()
.filter(e -> e.getType() == OrderOperationType.REPLACE_DISHES)
.flatMap(e -> JsonUtil.readJsonAs(e.getAdjustOrderDetailJson(), new TypeReference<List<OrderDetailBO>>() {
}).stream())
.collect(Collectors.toMap(OrderDetailBO::getId, Function.identity(), (a, b) -> a));
for (SingleClientCustomerOrderDetailRpcResponse orderDetail : orderDetails) {
// 1. 先处理加餐
if (addOriginalDetailMap.containsKey(orderDetail.getId())
......@@ -886,11 +892,12 @@ public class SettlementServiceImpl implements SettlementService {
if (replaceOriginalDetailMap.containsKey(orderDetail.getId())
&& !Objects.equals(replaceOriginalDetailMap.get(orderDetail.getId()).getSkuId(), orderDetail.getSkuId())) {
final var orderDetailBO = replaceOriginalDetailMap.get(orderDetail.getId());
final var orderDetailAdjustBO = replaceAdjustDetailMap.get(orderDetail.getId());
SettlementDTO.SettlementOrderDetail beforeChange = buildSettlementOrderDetail(
order, orderDetail.getMenuDetailId(), orderDetailBO.getSkuId(), orderDetailBO.getCount(), orderDetailBO.getPrice(), "换菜前", menuName, customerName, hisCustomerNo, menuDetailMap, mealMap, skuMap);
classifyOrders.add(beforeChange);
SettlementDTO.SettlementOrderDetail afterChange = buildSettlementOrderDetail(
order, orderDetail.getMenuDetailId(), orderDetail.getSkuId(), orderDetail.getCount(), orderDetail.getPrice(), "换菜后", menuName, customerName, hisCustomerNo, menuDetailMap, mealMap, skuMap);
order, orderDetail.getMenuDetailId(), orderDetail.getSkuId(), orderDetail.getCount(), orderDetailAdjustBO.getPrice(), "换菜后", menuName, customerName, hisCustomerNo, menuDetailMap, mealMap, skuMap);
classifyOrders.add(afterChange);
}
......