@@ -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
|
||||
|
||||
Reference in New Issue
Block a user