1.开始结束时间均传入的情况,实现筛选逻辑(startTime >= 查询开始时间 AND startTime <= 查询结束时间) OR (finishTime >= 查询开始时间 AND finishTime <= 查询结束时间),这样兼容查询结束时间为空值的情况,因为学员课程未结束时没有结束时间
2.和前端沟通组件中有通过组件实现今年以来等筛选逻辑,去掉对应逻辑和枚举类
This commit is contained in:
miaowenbo
2025-11-25 14:05:29 +08:00
parent 2145e5d17e
commit b9e1125145
3 changed files with 44 additions and 94 deletions

View File

@@ -1,71 +0,0 @@
package com.xboe.enums;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
/**
* 学习时长时间筛选状态枚举
* <p>用于筛选学习时长的时间范围条件</p>
*
* @author miaowenbo
* @since 2025-11-24
*/
@Getter
public enum StudyTimeStatusEnum {
/**
* 所有时间范围
*/
STATUS_ALL(0, "所有"),
/**
* 今年以来
*/
STATUS_THIS_YEAR(1, "今年以来"),
/**
* 最近一年
*/
STATUS_LAST_YEAR(2, "最近一年"),
/**
* 最近三个月
*/
STATUS_LAST_THREE_MONTHS(3, "最近三个月"),
/**
* 最近一个月
*/
STATUS_LAST_MONTH(4, "最近一个月"),
/**
* 最近一周
*/
STATUS_LAST_WEEK(5, "最近一周");
private final int code;
private final String label;
/**
* 构造函数
*
* @param code 状态码
* @param label 标签描述
*/
StudyTimeStatusEnum(int code, String label) {
this.code = code;
this.label = label;
}
/**
* 根据状态码获取对应的枚举值
*
* @param code 状态码
* @return 对应的枚举值若未找到则返回默认值STATUS_ALL
*/
public static StudyTimeStatusEnum getByCode(Integer code) {
return Arrays.stream(values()).filter(item -> Objects.equals(item.code, code)).findFirst().orElse(STATUS_ALL);
}
}

View File

@@ -176,25 +176,17 @@ public class StudyCourse extends IdEntity{
private String bestScore;
/**
* 查询开始学习时间(年月日
*/
@Transient
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime queryStartTime;
/**
* 查询完成学习时间(年月日)
*/
@Transient
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime queryFinishTime;
/**
* 学习时长时间筛选状态0、空或其他-所有、1-今年以来、2-最近一年、3-最近三个月、4-最近一个月、5-最近一周)
* 此字段生效时,查询开始学习时间和查询完成学习时间填写无效
* 查询开始学习时间(yyyy-MM-dd
* 25.11.24新增
*/
@Transient
private Integer studyTimeStatus;
private String queryStartTime;
/**
* 查询完成学习时间yyyy-MM-dd
* 25.11.24新增
*/
@Transient
private String queryFinishTime;
}

View File

@@ -2,10 +2,7 @@ package com.xboe.school.study.service.impl;
import com.xboe.common.OrderCondition;
import com.xboe.common.PageList;
import com.xboe.core.orm.FieldFilters;
import com.xboe.core.orm.FieldUpdateType;
import com.xboe.core.orm.QueryBuilder;
import com.xboe.core.orm.UpdateBuilder;
import com.xboe.core.orm.*;
import com.xboe.core.utils.ConvertUtil;
import com.xboe.data.outside.IOutSideDataService;
import com.xboe.module.course.dao.CourseContentDao;
@@ -34,6 +31,7 @@ import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
@@ -147,7 +145,38 @@ public class StudyCourseServiceImpl implements IStudyCourseService{
if(StringUtils.isNotBlank(sc.getAid())) {
query.addFilter(FieldFilters.eq("aid", sc.getAid()));
}
// 25.11.25新增:添加基于时间的查询条件
if (sc.getQueryStartTime() != null && sc.getQueryFinishTime() != null) {
// 开始结束时间均传入的情况,实现筛选逻辑
// (startTime >= 查询开始时间 AND startTime <= 查询结束时间) OR (finishTime >= 查询开始时间 AND finishTime <= 查询结束时间)
// 这样兼容查询结束时间为空值的情况,因为学员课程未结束时没有结束时间
LocalDate startDate = LocalDate.parse(sc.getQueryStartTime());
LocalDateTime startDateTime = startDate.atStartOfDay();
LocalDate finishDate = LocalDate.parse(sc.getQueryFinishTime());
LocalDateTime finishDateTime = finishDate.atTime(LocalTime.MAX);
// 筛选开始时间
IFieldFilter startTimeInRange = FieldFilters.and(FieldFilters.ge("startTime", startDateTime), FieldFilters.le("startTime", finishDateTime));
// 筛选结束时间
IFieldFilter finishTimeInRange = FieldFilters.and(FieldFilters.ge("finishTime", startDateTime), FieldFilters.le("finishTime", finishDateTime));
// OR条件查询
query.addFilter(FieldFilters.or(startTimeInRange, finishTimeInRange));
} else {
// 只输出单个参数情况
// 筛选开始时间
if (sc.getQueryStartTime() != null) {
LocalDate startDate = LocalDate.parse(sc.getQueryStartTime());
LocalDateTime startDateTime = startDate.atStartOfDay();
query.addFilter(FieldFilters.ge("startTime", startDateTime));
}
// 筛选结束时间
if (sc.getQueryFinishTime() != null) {
LocalDate finishDate = LocalDate.parse(sc.getQueryFinishTime());
LocalDateTime finishDateTime = finishDate.atTime(LocalTime.MAX);
query.addFilter(FieldFilters.le("finishTime", finishDateTime));
}
}
}
// 原有查询是否结束逻辑
if (isFinish != null) {
if (isFinish) {
query.addFilter(FieldFilters.eq("status", 9));
@@ -155,8 +184,8 @@ public class StudyCourseServiceImpl implements IStudyCourseService{
query.addFilter(FieldFilters.lt("status", 9));
}
}
// 25.11.24新增:添加工号和部门字段,并增加学习时长枚举筛选
PageList<StudyCourse> studyCoursePageList = studyCourseDao.findPage(query.builder());
// 25.11.24新增:添加工号和部门字段,并增加学习时长枚举筛选
// 根据当前查询数据的aid补全用户工号和部门字段
List<StudyCourse> studyCourses = studyCoursePageList.getList();
List<String> userIds = studyCourses.stream().map(StudyCourse::getAid).collect(Collectors.toList());
@@ -199,7 +228,7 @@ public class StudyCourseServiceImpl implements IStudyCourseService{
}
}
}
return studyCourseDao.findPage(query.builder());
return studyCoursePageList;
}
@Override