From a1808344893d9f5317b7f3e51d3390d1de92e86e Mon Sep 17 00:00:00 2001
From: zjf <1799650030@qq.com>
Date: Thu, 14 Aug 2025 10:01:08 +0800
Subject: [PATCH 1/3] 1
---
.../NOTICE-EXPIRATION-GUIDE.md | 217 ++++++++++++++++++
.../integrated/config/SchedulingConfig.java | 16 ++
.../integrated/task/NoticeExpirationTask.java | 65 ++++++
.../V1.0.1__add_expire_time_to_notice.sql | 12 +
4 files changed, 310 insertions(+)
create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/NOTICE-EXPIRATION-GUIDE.md
create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/config/SchedulingConfig.java
create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/task/NoticeExpirationTask.java
create mode 100644 pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/db/migration/V1.0.1__add_expire_time_to_notice.sql
diff --git a/pjcloud-integrated/pjcloud-integrated-biz/NOTICE-EXPIRATION-GUIDE.md b/pjcloud-integrated/pjcloud-integrated-biz/NOTICE-EXPIRATION-GUIDE.md
new file mode 100644
index 000000000..955c37aeb
--- /dev/null
+++ b/pjcloud-integrated/pjcloud-integrated-biz/NOTICE-EXPIRATION-GUIDE.md
@@ -0,0 +1,217 @@
+# 通知公告过期时间功能使用指南
+
+## 📋 功能概述
+
+通知公告系统新增过期时间功能,支持为公告设置具体的过期时间。到期后,公告将自动下架,不再在前端显示,无需手动操作。
+
+## ✨ 主要特性
+
+- **自动过期**: 支持设置具体过期时间,到期自动下架
+- **灵活配置**: 可选择设置过期时间或永不过期
+- **自动处理**: 系统定时任务自动处理过期公告
+- **智能过滤**: 所有查询接口自动过滤已过期公告
+- **性能优化**: 添加数据库索引,提高查询效率
+
+## 🗄️ 数据库变更
+
+### 新增字段
+```sql
+ALTER TABLE notice ADD COLUMN expire_time DATETIME COMMENT '过期时间,到期后公告自动下架';
+```
+
+### 新增索引
+```sql
+-- 过期时间索引
+CREATE INDEX idx_notice_expire_time ON notice(expire_time);
+
+-- 状态+过期时间复合索引
+CREATE INDEX idx_notice_status_expire ON notice(status, expire_time);
+```
+
+## 🔧 配置说明
+
+### 1. 启用定时任务
+在启动类或配置类上添加注解:
+```java
+@EnableScheduling
+```
+
+### 2. 定时任务配置
+系统默认每天凌晨2点执行过期处理:
+```java
+@Scheduled(cron = "0 0 2 * * ?")
+```
+
+如需调整执行时间,可修改 `NoticeExpirationTask` 中的 cron 表达式。
+
+## 💻 使用方法
+
+### 1. 创建公告时设置过期时间
+
+#### 前端表单示例
+```html
+
+
+
+
+ 不设置表示永不过期,设置后到期自动下架
+
+
+```
+
+#### 后端实体字段
+```java
+@Schema(description="过期时间,到期后公告自动下架")
+private LocalDateTime expireTime;
+```
+
+### 2. 过期时间设置建议
+
+#### 短期公告(1-7天)
+- 活动通知
+- 临时维护公告
+- 节日祝福
+
+#### 中期公告(1-30天)
+- 功能更新通知
+- 政策变更公告
+- 培训通知
+
+#### 长期公告(30天以上)
+- 规章制度
+- 长期政策
+- 重要通知
+
+#### 永不过期
+- 系统说明文档
+- 基础操作指南
+- 重要规章制度
+
+## 🔍 查询逻辑
+
+### 自动过滤规则
+所有查询接口都会自动过滤已过期公告:
+
+```java
+// 过滤已过期的公告
+wrapper.and(w -> w.isNull(NoticeEntity::getExpireTime)
+ .or()
+ .gt(NoticeEntity::getExpireTime, LocalDateTime.now()));
+```
+
+### 查询逻辑说明
+- `expireTime IS NULL`: 永不过期的公告
+- `expireTime > NOW()`: 未过期的公告
+- `expireTime <= NOW()`: 已过期的公告(自动过滤)
+
+## ⏰ 定时任务详情
+
+### 执行时间
+- **频率**: 每天执行一次
+- **时间**: 凌晨2点(可配置)
+- **时区**: 系统默认时区
+
+### 处理逻辑
+1. 查询已过期但状态仍为"已发布"的公告
+2. 批量更新状态为"已下架"
+3. 记录处理日志
+4. 异常处理和错误日志
+
+### 日志示例
+```
+2025-01-27 02:00:00 INFO - 开始执行通知公告过期处理任务
+2025-01-27 02:00:01 INFO - 发现 3 条过期公告,开始处理
+2025-01-27 02:00:01 INFO - 公告 [系统维护通知] 已过期,状态已更新为已下架
+2025-01-27 02:00:01 INFO - 通知公告过期处理任务执行完成,共处理 3 条过期公告
+```
+
+## 🚀 性能优化
+
+### 数据库索引
+- 过期时间字段索引,提高过期查询性能
+- 状态+过期时间复合索引,优化常用查询
+
+### 查询优化
+- 使用 MyBatis-Plus 的 Lambda 查询
+- 批量更新过期公告状态
+- 避免 N+1 查询问题
+
+## 📊 监控和维护
+
+### 1. 日志监控
+- 定时任务执行日志
+- 过期公告处理数量
+- 异常错误日志
+
+### 2. 数据统计
+```sql
+-- 统计过期公告数量
+SELECT COUNT(*) FROM notice
+WHERE expire_time IS NOT NULL
+AND expire_time <= NOW()
+AND status = '0';
+
+-- 统计即将过期的公告
+SELECT COUNT(*) FROM notice
+WHERE expire_time IS NOT NULL
+AND expire_time BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)
+AND status = '0';
+```
+
+### 3. 定期维护
+- 清理过期的过期时间记录
+- 监控定时任务执行情况
+- 优化数据库查询性能
+
+## ⚠️ 注意事项
+
+### 1. 时区问题
+- 确保系统时区设置正确
+- 过期时间以系统时区为准
+- 考虑跨时区部署的情况
+
+### 2. 性能考虑
+- 大量公告时,定时任务执行时间可能较长
+- 建议在业务低峰期执行
+- 监控数据库性能影响
+
+### 3. 数据一致性
+- 定时任务执行期间,公告状态可能短暂不一致
+- 查询接口始终过滤过期公告,保证显示一致性
+- 建议在定时任务执行期间避免重要操作
+
+## 🔧 故障排除
+
+### 1. 定时任务未执行
+**检查项**:
+- 是否启用 `@EnableScheduling`
+- 定时任务类是否被 Spring 管理
+- cron 表达式是否正确
+- 系统时间是否正确
+
+### 2. 过期公告仍显示
+**检查项**:
+- 过期时间字段是否正确设置
+- 数据库索引是否创建
+- 查询逻辑是否正确
+- 定时任务是否正常执行
+
+### 3. 性能问题
+**优化建议**:
+- 检查数据库索引使用情况
+- 优化查询语句
+- 调整定时任务执行时间
+- 考虑分页处理大量数据
+
+## 📞 技术支持
+
+如遇到问题,请联系技术支持并提供以下信息:
+- 错误日志
+- 数据库表结构
+- 定时任务配置
+- 系统环境信息
+
+---
+
+*最后更新时间: 2025-01-27*
+*版本: v1.0*
\ No newline at end of file
diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/config/SchedulingConfig.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/config/SchedulingConfig.java
new file mode 100644
index 000000000..bc4ba7981
--- /dev/null
+++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/config/SchedulingConfig.java
@@ -0,0 +1,16 @@
+package com.bsd.pjcloud.integrated.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * 定时任务配置
+ * 启用定时任务功能,支持通知公告自动过期处理
+ *
+ * @author zjf
+ * @date 2025-01-27
+ */
+@Configuration
+@EnableScheduling
+public class SchedulingConfig {
+}
\ No newline at end of file
diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/task/NoticeExpirationTask.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/task/NoticeExpirationTask.java
new file mode 100644
index 000000000..a666bd56e
--- /dev/null
+++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/task/NoticeExpirationTask.java
@@ -0,0 +1,65 @@
+package com.bsd.pjcloud.integrated.task;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.bsd.pjcloud.integrated.entity.NoticeEntity;
+import com.bsd.pjcloud.integrated.service.NoticeService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 通知公告过期处理定时任务
+ * 自动将过期的公告状态设置为已下架
+ *
+ * @author zjf
+ * @date 2025-01-27
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class NoticeExpirationTask {
+
+ private final NoticeService noticeService;
+
+ /**
+ * 每天凌晨2点执行,处理过期的公告
+ */
+ @Scheduled(cron = "0 0 2 * * ?")
+ public void handleExpiredNotices() {
+ log.info("开始执行通知公告过期处理任务");
+
+ try {
+ // 查询已过期但状态仍为已发布的公告
+ LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
+ wrapper.eq(NoticeEntity::getStatus, "0") // 状态为已发布
+ .lt(NoticeEntity::getExpireTime, LocalDateTime.now()) // 过期时间小于当前时间
+ .isNotNull(NoticeEntity::getExpireTime); // 过期时间不为空
+
+ List expiredNotices = noticeService.list(wrapper);
+
+ if (expiredNotices.isEmpty()) {
+ log.info("没有发现过期的公告");
+ return;
+ }
+
+ log.info("发现 {} 条过期公告,开始处理", expiredNotices.size());
+
+ // 批量更新过期公告状态为已下架
+ for (NoticeEntity notice : expiredNotices) {
+ notice.setStatus("1"); // 设置为已下架
+ noticeService.updateById(notice);
+ log.info("公告 [{}] 已过期,状态已更新为已下架", notice.getTitle());
+ }
+
+ log.info("通知公告过期处理任务执行完成,共处理 {} 条过期公告", expiredNotices.size());
+
+ } catch (Exception e) {
+ log.error("执行通知公告过期处理任务时发生错误", e);
+ }
+ }
+}
\ No newline at end of file
diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/db/migration/V1.0.1__add_expire_time_to_notice.sql b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/db/migration/V1.0.1__add_expire_time_to_notice.sql
new file mode 100644
index 000000000..8ae398c69
--- /dev/null
+++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/db/migration/V1.0.1__add_expire_time_to_notice.sql
@@ -0,0 +1,12 @@
+-- 为通知公告表添加过期时间字段
+-- 版本: V1.0.1
+-- 描述: 添加过期时间字段,支持公告自动过期功能
+
+ALTER TABLE notice ADD COLUMN expire_time DATETIME COMMENT '过期时间,到期后公告自动下架';
+
+-- 添加索引以提高查询性能
+CREATE INDEX idx_notice_expire_time ON notice(expire_time);
+CREATE INDEX idx_notice_status_expire ON notice(status, expire_time);
+
+-- 更新现有公告的过期时间为空(表示永不过期)
+UPDATE notice SET expire_time = NULL WHERE expire_time IS NULL;
\ No newline at end of file
From 72e23fbdbe23a3cf81b422c4fb9b37bf52ac04b4 Mon Sep 17 00:00:00 2001
From: zjf <1799650030@qq.com>
Date: Thu, 14 Aug 2025 11:29:43 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E8=AE=A2=E9=A4=90?=
=?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=BD=93=E5=89=8D=E6=97=A5=E6=9C=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../canteen/controller/CanteenOnlineSpuController.java | 2 +-
.../service/impl/CanteenOnlineSpuServiceImpl.java | 9 ++++++++-
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenOnlineSpuController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenOnlineSpuController.java
index 8019f5f1c..dcee541b7 100644
--- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenOnlineSpuController.java
+++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenOnlineSpuController.java
@@ -156,7 +156,7 @@ public class CanteenOnlineSpuController {
@Operation(summary = "获取在线点餐的菜品列表", description = "1.通过分类id,可以不填,默认查全部,2.商户id,必传")
public R> getCanteenSpuList(@RequestParam(value = "categoryId", required = false) String categoryId,
@RequestParam(value = "merchantId") String merchantId,
- @RequestParam(value = "time")String time) {
+ @RequestParam(value = "time",required = false)String time) {
return canteenOnlineSpuService.getCanteenOnlineSpuList(categoryId, merchantId,time);
}
diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenOnlineSpuServiceImpl.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenOnlineSpuServiceImpl.java
index 1c140f045..8df22d705 100644
--- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenOnlineSpuServiceImpl.java
+++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenOnlineSpuServiceImpl.java
@@ -25,6 +25,8 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -58,7 +60,12 @@ public class CanteenOnlineSpuServiceImpl extends ServiceImpl dailyMenuEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
dailyMenuEntityLambdaQueryWrapper.eq(CanteenDailyMenuEntity::getMerchantId, merchantId);
- dailyMenuEntityLambdaQueryWrapper.eq(CanteenDailyMenuEntity::getStartTime,time);
+ if (!StringUtils.isEmpty(time)){
+ dailyMenuEntityLambdaQueryWrapper.eq(CanteenDailyMenuEntity::getStartTime,time);
+ }else {
+ time = LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE); // 格式化为 yyyy-MM-dd
+ dailyMenuEntityLambdaQueryWrapper.eq(CanteenDailyMenuEntity::getStartTime,time);
+ }
List dailyMenuEntities = canteenDailyMenuMapper.selectList(dailyMenuEntityLambdaQueryWrapper);
List linkSpuIds = dailyMenuEntities.stream().map(d -> d.getSpuId()).collect(Collectors.toList());
//从canteenSpuEntities中筛选出今天有上新的数据
From 687906f16c3f86f55539c291e1466f0d1e2affb2 Mon Sep 17 00:00:00 2001
From: zjf <1799650030@qq.com>
Date: Thu, 14 Aug 2025 15:09:52 +0800
Subject: [PATCH 3/3] 1
---
.../canteen/entity/BoxesInfoEntity.java | 16 ++++++++
.../entity/CanteenOnlineSpuEntity.java | 14 +++++++
.../pjcloud/canteen/vo/AppBoxesInfoVO.java | 6 +++
.../controller/BoxesInfoController.java | 37 +++++++++++++++++--
.../CanteenOnlineSpuController.java | 19 +++++++++-
.../impl/CanteenOnlineSpuServiceImpl.java | 19 +++++++++-
6 files changed, 105 insertions(+), 6 deletions(-)
diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/entity/BoxesInfoEntity.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/entity/BoxesInfoEntity.java
index 925c4d8fe..9895f44b1 100644
--- a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/entity/BoxesInfoEntity.java
+++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/entity/BoxesInfoEntity.java
@@ -124,4 +124,20 @@ public class BoxesInfoEntity extends Model {
@Schema(description="部门id")
private Long deptId;
+
+ /**
+ * 获取餐桌类型
+ * @return 餐桌类型
+ */
+ public Integer getTableType() {
+ return tableType;
+ }
+
+ /**
+ * 设置餐桌类型
+ * @param tableType 餐桌类型
+ */
+ public void setTableType(Integer tableType) {
+ this.tableType = tableType;
+ }
}
\ No newline at end of file
diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/entity/CanteenOnlineSpuEntity.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/entity/CanteenOnlineSpuEntity.java
index a63a729c3..725228f3f 100644
--- a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/entity/CanteenOnlineSpuEntity.java
+++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/entity/CanteenOnlineSpuEntity.java
@@ -185,4 +185,18 @@ public class CanteenOnlineSpuEntity extends Model {
@Schema(description="关联每日菜谱id")
private Long linkSpuId;
+
+ /**
+ * 菜品类型 1-常驻菜品 2-每日菜品
+ */
+ @Schema(description="菜品类型 1-常驻菜品 2-每日菜品")
+ @TableField(exist = false)
+ private Integer dishType;
+
+ /**
+ * 菜品类型名称
+ */
+ @Schema(description="菜品类型名称")
+ @TableField(exist = false)
+ private String dishTypeName;
}
\ No newline at end of file
diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/AppBoxesInfoVO.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/AppBoxesInfoVO.java
index 5519c2058..fbe3d7477 100644
--- a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/AppBoxesInfoVO.java
+++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/AppBoxesInfoVO.java
@@ -54,6 +54,12 @@ public class AppBoxesInfoVO {
*/
private Integer tableType;
+ /**
+ * 餐桌类型名称
+ */
+ @Schema(description="餐桌类型名称")
+ private String tableTypeName;
+
/**
* 商户id
*/
diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/BoxesInfoController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/BoxesInfoController.java
index cea517663..d6c7fea16 100644
--- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/BoxesInfoController.java
+++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/BoxesInfoController.java
@@ -164,14 +164,45 @@ public class BoxesInfoController {
wrapper.eq(StrUtil.isNotBlank(boxesInfo.getName()), BoxesInfoEntity::getName, boxesInfo.getName());
wrapper.eq(ObjectUtil.isNotEmpty(boxesInfo.getStatus()), BoxesInfoEntity::getStatus, boxesInfo.getStatus());
wrapper.eq(ObjectUtil.isNotEmpty(boxesInfo.getTableType()), BoxesInfoEntity::getTableType, boxesInfo.getTableType());
- Page pageResult = boxesInfo.selectPage(page, wrapper);
+
+ // 使用service的分页方法
+ Page pageResult = boxesInfoService.page(page, wrapper);
List appInfoRespVOS = new ArrayList<>();
+
pageResult.getRecords().forEach(x -> {
AppBoxesInfoVO appBoxesInfoVO = com.bsd.pjcloud.common.core.util.BeanUtils.toBean(x, AppBoxesInfoVO.class);
+ // 转换餐桌类型
+ Integer tableType = x.getTableType();
+ if (tableType != null) {
+ switch (tableType) {
+ case 1:
+ appBoxesInfoVO.setTableTypeName("小桌(2-4人)");
+ break;
+ case 2:
+ appBoxesInfoVO.setTableTypeName("中桌(4-6人)");
+ break;
+ case 3:
+ appBoxesInfoVO.setTableTypeName("大桌(6-8人)");
+ break;
+ case 4:
+ appBoxesInfoVO.setTableTypeName("包间(8人以上)");
+ break;
+ default:
+ appBoxesInfoVO.setTableTypeName("未知类型");
+ break;
+ }
+ }
appInfoRespVOS.add(appBoxesInfoVO);
});
- pageResult.setRecords(appInfoRespVOS);
- return R.ok(pageResult);
+
+ // 创建新的Page对象,避免类型转换问题
+ Page resultPage = new Page<>();
+ resultPage.setCurrent(pageResult.getCurrent());
+ resultPage.setSize(pageResult.getSize());
+ resultPage.setTotal(pageResult.getTotal());
+ resultPage.setRecords(appInfoRespVOS);
+
+ return R.ok(resultPage);
}
@PostMapping("/createBooking")
diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenOnlineSpuController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenOnlineSpuController.java
index dcee541b7..2c8d757fb 100644
--- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenOnlineSpuController.java
+++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenOnlineSpuController.java
@@ -50,15 +50,30 @@ public class CanteenOnlineSpuController {
*
* @param page 分页对象
* @param canteenOnlineSpu 在线点餐spu
+ * @param dishType 菜品类型筛选:1-常驻菜品(linkSpuId为空),2-每日菜品(linkSpuId不为空)
* @return
*/
- @Operation(summary = "分页查询", description = "分页查询")
+ @Operation(summary = "分页查询", description = "分页查询,支持按菜品类型筛选:1-常驻菜品,2-每日菜品")
@GetMapping("/page")
@PreAuthorize("@pms.hasPermission('canteen_canteenOnlineSpu_view')")
- public R getCanteenOnlineSpuPage(@ParameterObject Page page, @ParameterObject CanteenOnlineSpuEntity canteenOnlineSpu) {
+ public R getCanteenOnlineSpuPage(@ParameterObject Page page,
+ @ParameterObject CanteenOnlineSpuEntity canteenOnlineSpu,
+ @RequestParam(value = "dishType", required = false) Integer dishType) {
LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
wrapper.like(StrUtil.isNotBlank(canteenOnlineSpu.getName()), CanteenOnlineSpuEntity::getName, canteenOnlineSpu.getName());
wrapper.eq(Objects.nonNull(canteenOnlineSpu.getCategoryId()), CanteenOnlineSpuEntity::getCategoryId, canteenOnlineSpu.getCategoryId());
+
+ // 根据菜品类型筛选
+ if (Objects.nonNull(dishType)) {
+ if (dishType == 1) {
+ // 1-常驻菜品:linkSpuId为空
+ wrapper.isNull(CanteenOnlineSpuEntity::getLinkSpuId);
+ } else if (dishType == 2) {
+ // 2-每日菜品:linkSpuId不为空
+ wrapper.isNotNull(CanteenOnlineSpuEntity::getLinkSpuId);
+ }
+ }
+
return R.ok(canteenOnlineSpuService.pageScope(page, wrapper));
}
diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenOnlineSpuServiceImpl.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenOnlineSpuServiceImpl.java
index 8df22d705..c4291d43c 100644
--- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenOnlineSpuServiceImpl.java
+++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenOnlineSpuServiceImpl.java
@@ -32,6 +32,7 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.Objects;
+import cn.hutool.core.collection.CollUtil;
/**
* 在线点餐spu
@@ -167,6 +168,22 @@ public class CanteenOnlineSpuServiceImpl extends ServiceImpl wrapper) {
- return baseMapper.selectPageByScope(page, wrapper, DataScope.of());
+ Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of());
+ List records = pageData.getRecords();
+
+ if (CollUtil.isNotEmpty(records)) {
+ // 为每条记录添加菜品类型标识
+ records.forEach(record -> {
+ if (record.getLinkSpuId() == null) {
+ record.setDishTypeName("常驻菜品");
+ record.setDishType(1);
+ } else {
+ record.setDishTypeName("每日菜品");
+ record.setDishType(2);
+ }
+ });
+ }
+
+ return pageData;
}
}
\ No newline at end of file