From 0ac92d5cee8fa64efc9970680329c5f95150910d Mon Sep 17 00:00:00 2001 From: wanghu Date: Wed, 23 Sep 2026 09:27:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E9=83=A8=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/homework/HomeworkQuery.java | 10 +++++ .../service/impl/HomeworkService.java | 44 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/main/java/com/yunhai/homework/model/homework/HomeworkQuery.java b/src/main/java/com/yunhai/homework/model/homework/HomeworkQuery.java index afea9a6..53d9d80 100644 --- a/src/main/java/com/yunhai/homework/model/homework/HomeworkQuery.java +++ b/src/main/java/com/yunhai/homework/model/homework/HomeworkQuery.java @@ -20,6 +20,16 @@ public class HomeworkQuery extends BasePageQuery { /** 状态过滤:null 不过滤;1 已发布 */ private Integer status; + /** + * 状态过滤(前端 Tab,旧四态派生值):all 全部 / collecting 收集中 / closed 已截止 / + * done 已完成 / draft 草稿。口径与列表返回的 hwStatus 派生规则一致, + * null/空/未知值不过滤。 + */ + private String hwStatus; + + /** 学科过滤(字典编码,与 homework.subject 精确匹配) */ + private String subject; + /** 类型过滤:1 普通 / 2 重要 */ private Integer type; diff --git a/src/main/java/com/yunhai/homework/service/impl/HomeworkService.java b/src/main/java/com/yunhai/homework/service/impl/HomeworkService.java index 1dd42f6..8ca03e7 100644 --- a/src/main/java/com/yunhai/homework/service/impl/HomeworkService.java +++ b/src/main/java/com/yunhai/homework/service/impl/HomeworkService.java @@ -448,12 +448,16 @@ public class HomeworkService implements IHomeworkService { if (StringUtils.hasText(query.getKeyword())) { predicates.add(cb.like(root.get("title"), "%" + query.getKeyword() + "%")); } + if (StringUtils.hasText(query.getSubject())) { + predicates.add(cb.equal(root.get("subject"), query.getSubject())); + } if (query.getType() != null) { predicates.add(cb.equal(root.get("type"), query.getType())); } if (StringUtils.hasText(query.getDeptId())) { predicates.add(cb.equal(root.get("deptId"), query.getDeptId())); } + appendLegacyHwStatus(query.getHwStatus(), root, cb, predicates); // 前端传 yyyy-MM-dd 短日期:startTime 当天 00:00:00 起,endTime 补全到当天 23:59:59 if (query.getStartTime() != null) { predicates.add(cb.greaterThanOrEqualTo(root.get("createTime"), query.getStartTime().atStartOfDay())); @@ -463,6 +467,46 @@ public class HomeworkService implements IHomeworkService { } } + /** + * 状态过滤(前端 Tab 的旧四态值 all/collecting/closed/done/draft),口径与 + * {@link #legacyHwStatus(Homework)} 派生规则一致,保证「展示什么状态就筛出什么状态」: + * draft/collecting 兼容存量 hw_status 为空的行(按定时发送时间是否到点判定), + * closed/done 直接等值;null/空/all/未知值不过滤。 + */ + private static void appendLegacyHwStatus(String hwStatus, Root root, CriteriaBuilder cb, + List predicates) { + if (!StringUtils.hasText(hwStatus) || "all".equalsIgnoreCase(hwStatus.trim())) { + return; + } + LocalDateTime now = LocalDateTime.now(); + switch (hwStatus.trim()) { + case "draft": + predicates.add(cb.or( + root.get("hwStatus").in(Arrays.asList( + HwStatusEnum.DRAFT_UNPUBLISHED.getCode(), HwStatusEnum.DRAFT_SCHEDULED.getCode())), + cb.and(cb.isNull(root.get("hwStatus")), + cb.isNotNull(root.get("timingSendTime")), + cb.greaterThan(root.get("timingSendTime"), now)))); + break; + case "collecting": + predicates.add(cb.or( + cb.equal(root.get("hwStatus"), HwStatusEnum.PUBLISHED.getCode()), + cb.and(cb.isNull(root.get("hwStatus")), + cb.or(cb.isNull(root.get("timingSendTime")), + cb.lessThanOrEqualTo(root.get("timingSendTime"), now))))); + break; + case "closed": + predicates.add(cb.equal(root.get("hwStatus"), HwStatusEnum.CLOSED.getCode())); + break; + case "done": + predicates.add(cb.equal(root.get("hwStatus"), HwStatusEnum.ARCHIVED.getCode())); + break; + default: + // 未知值按不过滤处理(同 all),避免前后端值不一致时列表误清空 + break; + } + } + // ============================ 详情(顺带标记已读) ============================ @Override