From 7fb7feea3f53df89ad2c5350deda8dcd2811d916 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Fri, 11 Sep 2026 18:42:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9D=83=E9=99=90=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/feign/RemoteDailyMenuService.java | 8 + .../CanteenDailyMenuController.java | 11 ++ .../mapper/CanteenDailyMenuMapper.java | 6 + .../mapper/CanteenReportSwipeMapper.java | 6 +- .../service/CanteenDailyMenuService.java | 5 + .../impl/CanteenDailyMenuServiceImpl.java | 35 +++- .../CanteenReportFaceImportServiceImpl.java | 23 ++- .../mapper/CanteenDailyMenuMapper.xml | 39 +++++ .../mapper/CanteenReportSwipeMapper.xml | 11 ++ ...nDailyMenuServiceImplAvailabilityTest.java | 151 +++++++++++------- .../PjcloudDefaultDataScopeHandle.java | 2 +- .../impl/order/HardOrderServiceImpl.java | 7 +- 12 files changed, 231 insertions(+), 73 deletions(-) diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteDailyMenuService.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteDailyMenuService.java index 53be2104..053758ee 100644 --- a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteDailyMenuService.java +++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteDailyMenuService.java @@ -61,6 +61,14 @@ public interface RemoteDailyMenuService { @NoToken R checkAvailability(@RequestBody @Validated DailyMenuAvailabilityCheckDTO request); + /** + * 移动端下单复核:按商户+日期+餐段拉取菜谱(线上剩余),无数据权限过滤。 + */ + @GetMapping("/canteenDailyMenu/inner/list-for-order-validate") + @NoToken + R> listForOrderValidate(@RequestParam("day") String day, + @RequestParam("hourType") Integer hourType, + @RequestParam("merchantId") Long merchantId); /** * app每日菜谱分页查询 diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenDailyMenuController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenDailyMenuController.java index 51a253af..ff7a7213 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenDailyMenuController.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenDailyMenuController.java @@ -79,6 +79,17 @@ public class CanteenDailyMenuController { return R.ok(canteenDailyMenuService.checkAvailability(request)); } + /** + * 供 Hardware 移动端下单复核菜谱与线上库存(无 DataScope,与 App 列表一致)。 + */ + @Inner + @GetMapping("/inner/list-for-order-validate") + public R> listForOrderValidate(@RequestParam("day") String day, + @RequestParam("hourType") Integer hourType, + @RequestParam("merchantId") Long merchantId) { + return R.ok(canteenDailyMenuService.listForOrderValidate(day, hourType, merchantId)); + } + /** * 分页查询 * diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenDailyMenuMapper.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenDailyMenuMapper.java index 3090da9b..f8ba82b4 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenDailyMenuMapper.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenDailyMenuMapper.java @@ -35,6 +35,12 @@ public interface CanteenDailyMenuMapper extends PjcloudBaseMapper getCanteenMenuList(@Param("day") String day, @Param("hourType") Integer hourType, @Param("categoryId") Long categoryId, @Param("merchantId") Long merchantId, DataScope dataScope); + /** + * Hardware 下单复核:按商户+日期+餐段查菜谱,不加 DataScope(与 App /app/page、check-availability 一致)。 + */ + List getCanteenMenuListForOrder(@Param("day") String day, @Param("hourType") Integer hourType, + @Param("merchantId") Long merchantId); + /** * 按闭区间查询收银终端多日菜谱展示数据,字段与单日查询保持一致。 * diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenReportSwipeMapper.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenReportSwipeMapper.java index f23f785d..af14aca3 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenReportSwipeMapper.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/mapper/CanteenReportSwipeMapper.java @@ -35,10 +35,14 @@ public interface CanteenReportSwipeMapper extends BaseMapper excludeParks, @Param("limit") int limit); + /** 仅删除指定厂区的 FACE(排除厂区后从报表消失) */ + int deletePhysicallyFaceByBizMonthOnlyParks(@Param("bizMonth") String bizMonth, + @Param("parks") List parks, @Param("limit") int limit); + int insertBatch(@Param("list") List list); } diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenDailyMenuService.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenDailyMenuService.java index a6c921c5..cbee5ecd 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenDailyMenuService.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenDailyMenuService.java @@ -63,6 +63,11 @@ public interface CanteenDailyMenuService extends IService getCanteenMenuListScope(String day, Integer hourType, Long categoryId, Long merchantId); + /** + * Hardware 移动端下单复核:无数据权限过滤,stock/remainOnlineStock 为线上剩余。 + */ + List listForOrderValidate(String day, Integer hourType, Long merchantId); + /** * 按闭区间查询收银终端多日菜谱,并补充与单日接口一致的套餐组成数据。 * diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java index 3edf2bb7..aad551ad 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.canteen.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.nacos.common.utils.CollectionUtils; import com.baomidou.lock.LockInfo; import com.baomidou.lock.LockTemplate; @@ -116,7 +117,18 @@ public class CanteenDailyMenuServiceImpl extends ServiceImpl new DailyMenuAvailabilityKey(menu.getStartTime(), menu.getHourType(), menu.getSpuId())) .collect(Collectors.toSet()); - return availableKeys.containsAll(requestedKeys); + if (!availableKeys.containsAll(requestedKeys)) { + return false; + } + // 与 App / 下单复核一致:菜品须未删除且展示中(is_show=0) + Set visibleSpuIds = canteenSpuMapper.selectList(new LambdaQueryWrapper() + .in(CanteenSpuEntity::getId, spuIds) + .eq(CanteenSpuEntity::getIsShow, "0") + .select(CanteenSpuEntity::getId)) + .stream() + .map(CanteenSpuEntity::getId) + .collect(Collectors.toSet()); + return visibleSpuIds.containsAll(spuIds); } /** @@ -378,6 +390,27 @@ public class CanteenDailyMenuServiceImpl extends ServiceImpl listForOrderValidate(String day, Integer hourType, Long merchantId) { + if (StrUtil.isBlank(day) || hourType == null || merchantId == null) { + return Collections.emptyList(); + } + List list = baseMapper.getCanteenMenuListForOrder(day, hourType, merchantId); + fillDailyMenuAppCombo(list); + LocalDate mealDate; + try { + mealDate = LocalDate.parse(day); + } + catch (Exception ignored) { + mealDate = null; + } + dailyMenuStockSupport.fillAppOnlineRemain(list, merchantId, mealDate); + return list; + } + /** * 按闭区间查询收银终端多日菜谱,并批量补充套餐组成以避免逐条查询。 * diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenReportFaceImportServiceImpl.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenReportFaceImportServiceImpl.java index 53bd55f5..b51f2b79 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenReportFaceImportServiceImpl.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenReportFaceImportServiceImpl.java @@ -127,11 +127,15 @@ public class CanteenReportFaceImportServiceImpl extends ServiceImpl excludeParks) { + /** 仅删除指定厂区的 FACE(排除厂区后从报表消失) */ + private int deleteSwipeFaceByBizMonthOnlyParks(String bizMonth, List parks) { + if (CollUtil.isEmpty(parks)) { + return 0; + } int total = 0; int n; do { - n = swipeMapper.deletePhysicallyFaceByBizMonthExceptParks(bizMonth, excludeParks, DELETE_BATCH); + n = swipeMapper.deletePhysicallyFaceByBizMonthOnlyParks(bizMonth, parks, DELETE_BATCH); total += n; } while (n >= DELETE_BATCH); @@ -566,6 +570,10 @@ public class CanteenReportFaceImportServiceImpl extends ServiceImpl(excludeParkSet)); + } return R.failed(excludedParkRows > 0 ? String.format("汇总后可写入金额均为 0 或均被排除厂区过滤(排除 %d 条),未写入刷卡明细", excludedParkRows) : "汇总后可写入金额均为 0,未写入刷卡明细"); @@ -575,14 +583,15 @@ public class CanteenReportFaceImportServiceImpl extends ServiceImpl(excludeParkSet)); - } else { + // 整月 FACE 清空再写入;被排除厂区不写入,从而报表列也不再出现 deleteSwipeFaceByBizMonth(month); } } + else if (CollUtil.isNotEmpty(excludeParkSet)) { + // 非覆盖模式也清掉排除厂区旧 FACE,避免看板仍显示这些厂区 + deleteSwipeFaceByBizMonthOnlyParks(month, new ArrayList<>(excludeParkSet)); + } for (List chunk : CollUtil.split(saveList, BATCH_SIZE)) { swipeMapper.insertBatch(chunk); @@ -622,7 +631,7 @@ public class CanteenReportFaceImportServiceImpl extends ServiceImpl 0) { - tip.append(String.format(";已排除厂区数据 %d 条(保留原 FACE 不覆盖)", excludedParkRows)); + tip.append(String.format(";已排除厂区数据 %d 条(已清除这些厂区原 FACE,报表不再展示)", excludedParkRows)); } CanteenReportAggResultVO result = new CanteenReportAggResultVO(); result.setSwipeRows(saveList.size()); diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/resources/mapper/CanteenDailyMenuMapper.xml b/pjcloud-canteen/pjcloud-canteen-biz/src/main/resources/mapper/CanteenDailyMenuMapper.xml index 7a727fc1..95929a4a 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/resources/mapper/CanteenDailyMenuMapper.xml +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/resources/mapper/CanteenDailyMenuMapper.xml @@ -123,6 +123,45 @@ order by sp.sort asc + + + +