zhuyifan

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

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