全部列表
build / build-push (push) Successful in 53s

This commit is contained in:
wanghu
2026-09-23 09:27:31 +08:00
parent 6e5b8756aa
commit 0ac92d5cee
2 changed files with 54 additions and 0 deletions
@@ -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;
@@ -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<Homework> root, CriteriaBuilder cb,
List<Predicate> 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