From d508e3f9598ad19970d5f896cdb5dfa9f75564ad Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 27 Aug 2026 22:03:54 +0800 Subject: [PATCH] 11 --- .../api/vo/order/HardCanteenUserApptDishStatisticsVo.java | 2 +- .../vo/order/HardCanteenUserApptStatisticsSummaryVo.java | 2 +- .../impl/order/HardCanteenApptTotalServiceImpl.java | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCanteenUserApptDishStatisticsVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCanteenUserApptDishStatisticsVo.java index 581e8637d..4de7cf12f 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCanteenUserApptDishStatisticsVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCanteenUserApptDishStatisticsVo.java @@ -21,7 +21,7 @@ public class HardCanteenUserApptDishStatisticsVo { @Schema(description = "菜品名称") private String productName; - /** 当前同餐段、同名菜品统计项实际涉及的商品 ID;同名商品可能因重复建档包含多个 ID,历史空值不写入集合。 */ + /** 当前菜品统计项实际涉及的商品 ID;正常数据仅有一个,历史商品 ID 为空时不写入集合。 */ @Schema(description = "商品ID集合") private List productIds = new ArrayList<>(); diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCanteenUserApptStatisticsSummaryVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCanteenUserApptStatisticsSummaryVo.java index 0c85a2004..88ebbaea5 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCanteenUserApptStatisticsSummaryVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCanteenUserApptStatisticsSummaryVo.java @@ -47,7 +47,7 @@ public class HardCanteenUserApptStatisticsSummaryVo { @Schema(description = "餐段统计") private List meals = new ArrayList<>(); - /** 按餐段和菜品名称聚合的菜品份数。 */ + /** 按餐段和商品 ID 聚合的菜品份数;历史商品 ID 缺失时按菜品名称兜底。 */ @Schema(description = "菜品统计") private List dishes = new ArrayList<>(); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenApptTotalServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenApptTotalServiceImpl.java index 9bdd41165..4d7c06eb1 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenApptTotalServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenApptTotalServiceImpl.java @@ -1076,7 +1076,7 @@ public class HardCanteenApptTotalServiceImpl implements HardCanteenApptTotalServ /** 餐段编码到餐段聚合结果的有序映射。 */ private final Map meals = new LinkedHashMap<>(); - /** 餐段和菜品名称到菜品聚合结果的有序映射。 */ + /** 餐段和商品身份到菜品聚合结果的有序映射;商品 ID 缺失时使用名称兼容历史数据。 */ private final Map dishes = new LinkedHashMap<>(); /** @@ -1120,7 +1120,9 @@ public class HardCanteenApptTotalServiceImpl implements HardCanteenApptTotalServ dishCount += count; meal.dishCount += count; String productName = normalize(car.getProductName(), "未命名菜品"); - String dishKey = hourType + "\u0000" + productName; + // 同一商品的历史名称快照可能带有空格或不可见字符,优先按商品 ID 聚合可避免页面出现同 ID 重复行。 + String productKey = car.getProductId() == null ? "name:" + productName : "id:" + car.getProductId(); + String dishKey = hourType + "\u0000" + productKey; DishStatisticsAccumulator dish = dishes.computeIfAbsent(dishKey, key -> new DishStatisticsAccumulator(hourType, productName, car.getProductPic())); if (car.getProductId() != null) { @@ -1247,7 +1249,7 @@ public class HardCanteenApptTotalServiceImpl implements HardCanteenApptTotalServ /** 下单时固化的菜品名称。 */ private final String productName; - /** 同餐段、同名菜品实际涉及的商品 ID,保留首次出现顺序并去重,便于排查同名商品重复建档。 */ + /** 当前统计项实际涉及的商品 ID,正常数据仅有一个;集合结构兼容历史无 ID 的名称兜底聚合。 */ private final Set productIds = new LinkedHashSet<>(); /** 下单时固化的菜品图片地址;同名菜品聚合时保留首个非空值。 */