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 5da30e0fe..53be21042 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 @@ -26,6 +26,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.canteen.dto.CanteenSpuUpdateStockReqDTO; import com.bsd.pjcloud.canteen.dto.DailyMenuAll; import com.bsd.pjcloud.canteen.dto.DailyMenuAvailabilityCheckDTO; +import com.bsd.pjcloud.canteen.dto.DailyMenuDateRangeQueryDTO; import com.bsd.pjcloud.canteen.dto.app.DailyMenuDTO; import com.bsd.pjcloud.canteen.vo.APPOnlineSpuVO; import com.bsd.pjcloud.canteen.vo.app.CanteenOnlineSpuAppVO; @@ -96,4 +97,14 @@ public interface RemoteDailyMenuService { @RequestParam(value = "categoryId", required = false) Long categoryId, @RequestParam(value = "merchantId") Long merchantId); + /** + * 按闭区间查询收银终端多日菜谱,返回结构与单日接口完全一致。 + * + * @param request 日期范围、可选筛选条件和收银终端所属商户 + * @return 指定日期范围内的每日菜谱列表;无可售菜品时 data 为空列表 + */ + @PostMapping("/canteenDailyMenu/ad/getCanteenListByDateRange") + R> getCanteenListByDateRange( + @RequestBody @Validated DailyMenuDateRangeQueryDTO request); + } diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/DailyMenuDateRangeQueryDTO.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/DailyMenuDateRangeQueryDTO.java new file mode 100644 index 000000000..d6d7b5246 --- /dev/null +++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/DailyMenuDateRangeQueryDTO.java @@ -0,0 +1,38 @@ +package com.bsd.pjcloud.canteen.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.time.LocalDate; + +/** + * 收银终端按日期范围查询每日菜谱的请求参数。 + */ +@Data +@Schema(description = "收银终端每日菜谱日期范围查询参数") +public class DailyMenuDateRangeQueryDTO { + + /** 菜谱起始日期,查询闭区间包含当天。 */ + @NotNull(message = "菜谱开始日期不能为空") + @Schema(description = "菜谱起始日期,格式为 yyyy-MM-dd", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDate startDate; + + /** 菜谱结束日期,查询闭区间包含当天。 */ + @NotNull(message = "菜谱结束日期不能为空") + @Schema(description = "菜谱结束日期,格式为 yyyy-MM-dd", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDate endDate; + + /** 餐段协议编码;为空时查询全部餐段。 */ + @Schema(description = "餐段编码;为空表示全部餐段") + private Integer hourType; + + /** 菜品分类 ID;为空时查询全部分类。 */ + @Schema(description = "菜品分类 ID;为空表示全部分类") + private Long categoryId; + + /** 收银终端所属商户 ID,用于隔离不同商户的每日菜谱。 */ + @NotNull(message = "每日菜谱商户不能为空") + @Schema(description = "收银终端所属商户 ID", requiredMode = Schema.RequiredMode.REQUIRED) + private Long merchantId; +} 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 19ecd982d..dc41d9b2c 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 @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.canteen.dto.CanteenDailyMenuCVDTO; import com.bsd.pjcloud.canteen.dto.DailyMenuAll; import com.bsd.pjcloud.canteen.dto.DailyMenuAvailabilityCheckDTO; +import com.bsd.pjcloud.canteen.dto.DailyMenuDateRangeQueryDTO; import com.bsd.pjcloud.canteen.dto.app.DailyMenuDTO; import com.bsd.pjcloud.canteen.entity.CanteenSpuEntity; import com.bsd.pjcloud.canteen.service.CanteenSpuService; @@ -308,6 +309,19 @@ public class CanteenDailyMenuController { return R.ok(canteenDailyMenuService.getCanteenMenuListScope(day, hourType, categoryId, merchantId)); } + /** + * 按闭区间查询收银终端多日菜谱,返回字段及套餐组成与单日接口保持一致。 + * + * @param request 日期范围、可选筛选条件和收银终端所属商户 + * @return 指定日期范围内的每日菜谱列表;无数据时返回空列表 + */ + @PostMapping("/ad/getCanteenListByDateRange") + @SysLog("按日期范围查询每日菜品列表") + public R> getCanteenListByDateRange( + @Validated @RequestBody DailyMenuDateRangeQueryDTO request) { + return R.ok(canteenDailyMenuService.getCanteenMenuListByDateRange(request)); + } + // --------------APP--------------- 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 215f7cd27..80fe522b4 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 @@ -1,6 +1,7 @@ package com.bsd.pjcloud.canteen.mapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.canteen.dto.DailyMenuDateRangeQueryDTO; import com.bsd.pjcloud.canteen.dto.app.DailyMenuDTO; import com.bsd.pjcloud.canteen.vo.DailyMenuAdminVO; import com.bsd.pjcloud.canteen.vo.DailyMenuVO; @@ -34,6 +35,16 @@ public interface CanteenDailyMenuMapper extends PjcloudBaseMapper getCanteenMenuList(@Param("day") String day, @Param("hourType") Integer hourType, @Param("categoryId") Long categoryId, @Param("merchantId") Long merchantId, DataScope dataScope); + /** + * 按闭区间查询收银终端多日菜谱展示数据,字段与单日查询保持一致。 + * + * @param request 日期范围、可选筛选条件和商户 ID + * @param dataScope 当前数据权限范围 + * @return 按日期、餐段和商品排序的菜谱列表,套餐明细由 Service 批量补充 + */ + List getCanteenMenuListByDateRange(@Param("request") DailyMenuDateRangeQueryDTO request, + DataScope dataScope); + Page selectTimeFoodPage(@Param("page")Page page, DailyMenuDTO dailyMenuDTO); 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 c42ff86e9..a6c921c54 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 @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.canteen.dto.CanteenDailyMenuCVDTO; import com.bsd.pjcloud.canteen.dto.DailyMenuAll; import com.bsd.pjcloud.canteen.dto.DailyMenuAvailabilityCheckDTO; +import com.bsd.pjcloud.canteen.dto.DailyMenuDateRangeQueryDTO; import com.bsd.pjcloud.canteen.dto.app.DailyMenuDTO; import com.bsd.pjcloud.canteen.entity.CanteenDailyMenuEntity; import com.bsd.pjcloud.canteen.vo.DailyMenuAdminVO; @@ -62,6 +63,14 @@ public interface CanteenDailyMenuService extends IService getCanteenMenuListScope(String day, Integer hourType, Long categoryId, Long merchantId); + /** + * 按闭区间查询收银终端多日菜谱,并补充与单日接口一致的套餐组成数据。 + * + * @param request 日期范围、可选筛选条件和商户 ID + * @return 日期升序排列的菜谱展示字段列表 + */ + List getCanteenMenuListByDateRange(DailyMenuDateRangeQueryDTO request); + Page selectTimeFoodPage(Page page, DailyMenuDTO dailyMenuDTO); /** 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 02976098d..19c53d5ab 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 @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.canteen.dto.CanteenDailyMenuCVDTO; import com.bsd.pjcloud.canteen.dto.DailyMenuAll; import com.bsd.pjcloud.canteen.dto.DailyMenuAvailabilityCheckDTO; +import com.bsd.pjcloud.canteen.dto.DailyMenuDateRangeQueryDTO; import com.bsd.pjcloud.canteen.constant.DailyMenuAvailabilityLock; import com.bsd.pjcloud.canteen.dto.app.DailyMenuDTO; import com.bsd.pjcloud.canteen.entity.CanteenSpuEntity; @@ -344,6 +345,28 @@ public class CanteenDailyMenuServiceImpl extends ServiceImpl getCanteenMenuListByDateRange(DailyMenuDateRangeQueryDTO request) { + if (request == null || request.getStartDate() == null || request.getEndDate() == null) { + throw new IllegalArgumentException("菜谱开始日期与结束日期不能为空"); + } + if (request.getMerchantId() == null) { + throw new IllegalArgumentException("每日菜谱商户不能为空"); + } + if (request.getEndDate().isBefore(request.getStartDate())) { + throw new IllegalArgumentException("菜谱结束日期不能早于开始日期"); + } + List list = baseMapper.getCanteenMenuListByDateRange(request, DataScope.of()); + fillDailyMenuAppCombo(list); + return list; + } + @Override public Page selectTimeFoodPage(Page page, DailyMenuDTO dailyMenuDTO) { Page pageData = baseMapper.selectTimeFoodPage(page, dailyMenuDTO); 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 a9bc87e5b..ad49c3144 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 @@ -111,6 +111,48 @@ order by sp.sort asc +