From 2145e5d17e36b1a344e8b07bc79131868f940f83 Mon Sep 17 00:00:00 2001
From: miaowenbo <1670593359@qq.com>
Date: Mon, 24 Nov 2025 19:52:08 +0800
Subject: [PATCH] =?UTF-8?q?feat:=201.=E5=AF=BC=E5=87=BA=E5=AD=A6=E4=B9=A0?=
=?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9=E5=B7=A5?=
=?UTF-8?q?=E5=8F=B7=E5=AD=97=E6=AE=B5=E6=98=A0=E5=B0=84=EF=BC=8C=E8=B0=83?=
=?UTF-8?q?=E7=94=A8=E7=94=A8=E6=88=B7=E4=B8=AD=E5=BF=83=E5=8F=96code?=
=?UTF-8?q?=E5=AD=97=E6=AE=B5=EF=BC=8C=E6=9C=AC=E5=9C=B0=E5=BA=93=E5=8F=96?=
=?UTF-8?q?userNo=E5=AD=97=E6=AE=B5=202.=E4=BF=AE=E6=94=B9=E5=88=86?=
=?UTF-8?q?=E9=A1=B5=E6=9F=A5=E8=AF=A2=E8=AF=BE=E7=A8=8B=E5=AD=A6=E4=B9=A0?=
=?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=8E=9F=E6=9C=89?=
=?UTF-8?q?=E5=88=86=E9=A1=B5=E6=8E=A5=E5=8F=A3=E5=8F=AA=E6=94=AF=E6=8C=81?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=BD=93=E5=89=8D=E7=99=BB=E5=BD=95=E7=94=A8?=
=?UTF-8?q?=E6=88=B7=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=90=8C=E9=80=BB=E8=BE=91?=
=?UTF-8?q?=E7=9A=84=E8=AF=BE=E7=A8=8B=E7=BB=B4=E5=BA=A6=E5=88=86=E9=A1=B5?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3=203.=E5=A2=9E=E5=8A=A0=E5=AD=A6=E4=B9=A0?=
=?UTF-8?q?=E6=97=B6=E9=95=BF=E6=97=B6=E9=97=B4=E7=AD=9B=E9=80=89=E5=AD=97?=
=?UTF-8?q?=E6=AE=B5=E4=B8=8E=E6=9E=9A=E4=B8=BE=EF=BC=88=E5=AD=A6=E4=B9=A0?=
=?UTF-8?q?=E6=97=B6=E9=95=BF=E7=AD=9B=E9=80=89=E9=80=BB=E8=BE=91=E8=BF=98?=
=?UTF-8?q?=E6=9C=AA=E5=AE=8C=E6=88=90=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/xboe/enums/StudyTimeStatusEnum.java | 71 ++++++++++++++++
.../xboe/school/study/api/StudyCourseApi.java | 54 ++++++++-----
.../xboe/school/study/entity/StudyCourse.java | 45 ++++++++++-
.../study/service/IStudyCourseService.java | 13 +--
.../service/impl/StudyCourseServiceImpl.java | 80 +++++++++++++++++--
5 files changed, 232 insertions(+), 31 deletions(-)
create mode 100644 servers/boe-server-all/src/main/java/com/xboe/enums/StudyTimeStatusEnum.java
diff --git a/servers/boe-server-all/src/main/java/com/xboe/enums/StudyTimeStatusEnum.java b/servers/boe-server-all/src/main/java/com/xboe/enums/StudyTimeStatusEnum.java
new file mode 100644
index 00000000..cc03cadf
--- /dev/null
+++ b/servers/boe-server-all/src/main/java/com/xboe/enums/StudyTimeStatusEnum.java
@@ -0,0 +1,71 @@
+package com.xboe.enums;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * 学习时长时间筛选状态枚举
+ *
用于筛选学习时长的时间范围条件
+ *
+ * @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);
+ }
+}
\ No newline at end of file
diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java
index 4b1bf8fc..1994b7f7 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java
@@ -113,32 +113,44 @@ public class StudyCourseApi extends ApiBaseController{
private EntityManager entityManager;
/**
- * 用于查询课程的学习记录
- * @param pager
- * @param sc
- * @return
+ * 分页查询当前用户的课程学习记录(学生维度)
+ *
+ * @param pager 分页参数
+ * @param sc 课程学习记录查询参数
+ * @return 课程学习记录分页集合
*/
@RequestMapping(value="/pagelist",method = {RequestMethod.GET,RequestMethod.POST})
public JsonResponse> findPage(Pagination pager,StudyCourse sc,Boolean isFinish){
-
+ // 默认查询当前登录用户aid
sc.setAid(getCurrent().getAccountId());
try {
PageList rs=service.findPage(pager.getPageIndex(),pager.getPageSize(), sc,OrderCondition.desc("id"),isFinish);
- //查询出图片
-// List ids=new ArrayList();
-// for(StudyCourse scourse:rs.getList()) {
-// ids.add(scourse.getCourseId());
-// }
-// Map maps = courseService.findImages(ids);
-// for(StudyCourse scourse:rs.getList()) {
-// if(maps.containsKey(scourse.getCourseId())) {
-// scourse.setCourseImage((String)maps.get(scourse.getCourseId()));
-// }
-// }
return success(rs);
}catch(Exception e) {
- log.error("查询课程学习记录错误",e.getMessage());
- return error("查询失败",e.getMessage());
+ log.error("查询课程学习记录错误{}", e.getMessage());
+ return error("查询失败", e.getMessage());
+ }
+ }
+
+ /**
+ * 分页查询当前课程的学习记录(课程维度)
+ *
+ * @param pager 分页参数
+ * @param sc 课程学习记录查询参数
+ * @return 课程学习记录分页集合
+ */
+ @RequestMapping(value = "/pagelistEx", method = {RequestMethod.GET, RequestMethod.POST})
+ public JsonResponse> findPageEx(Pagination pager, StudyCourse sc, Boolean isFinish) {
+ // 空值校验
+ if (StringUtils.isBlank(sc.getCourseId())) {
+ return error("课程id不能为空");
+ }
+ try {
+ PageList rs = service.findPage(pager.getPageIndex(), pager.getPageSize(), sc, OrderCondition.desc("id"), isFinish);
+ return success(rs);
+ } catch (Exception e) {
+ log.error("【分页查询当前课程的学习记录(课程维度)】错误{}", e.getMessage());
+ return error("查询失败", e.getMessage());
}
}
@@ -233,6 +245,8 @@ public class StudyCourseApi extends ApiBaseController{
for (StudyCourse studyCourse1 : studyCourses) {
if (userSimpleVo.getAid().equals(studyCourse1.getAid())) {
studyCourse1.setOrgInfo(userSimpleVo.getOrgInfo());
+ // 取code为工号
+ studyCourse1.setUserNo(userSimpleVo.getCode());
}
}
}
@@ -250,6 +264,8 @@ public class StudyCourseApi extends ApiBaseController{
log.info("【导出课程学习记录】查询boe人员表,机构id:{}", userInfo.getDepartId());
// 和技术沟通后,确认这里机构名称是redis获取的,获取不到返回null,因此正常遍历没有效率和空值问题
studyCourse1.setOrgInfo(organizationService.getName(userInfo.getDepartId()));
+ // 取userNo为工号
+ studyCourse1.setUserNo(userInfo.getUserNo());
}
}
} else {
@@ -264,7 +280,7 @@ public class StudyCourseApi extends ApiBaseController{
// 拼接课程学习记录信息
map.put("在线课名称", studyCourse1.getCourseName());
map.put("姓名", studyCourse1.getAname());
- map.put("工号", studyCourse1.getAid());
+ map.put("工号", studyCourse1.getUserNo());
// 部门信息需要额外获取,暂时留空
map.put("部门", studyCourse1.getOrgInfo());
// 这个开始时间已经弃置了,不过先用再说(有值)
diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/entity/StudyCourse.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/entity/StudyCourse.java
index a29b2269..6de88c26 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/school/study/entity/StudyCourse.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/entity/StudyCourse.java
@@ -145,6 +145,7 @@ public class StudyCourse extends IdEntity{
/**
* 机构信息,多级使用/分隔
+ * 25.11.24新增
*/
@Transient
private String orgInfo;
@@ -152,6 +153,48 @@ public class StudyCourse extends IdEntity{
@Transient
private String courseImage;
-
+
+ /**
+ * 工号
+ * 25.11.24新增
+ */
+ @Transient
+ private String userNo;
+
+ /**
+ * 部门
+ * 25.11.24新增
+ */
+ @Transient
+ private String departName;
+
+ /**
+ * 根据考试设置的最新/最高成绩
+ * 25.11.24新增
+ */
+ @Transient
+ 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-最近一周)
+ * 此字段生效时,查询开始学习时间和查询完成学习时间填写无效
+ * 25.11.24新增
+ */
+ @Transient
+ private Integer studyTimeStatus;
}
diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyCourseService.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyCourseService.java
index 1e6c3857..3e434100 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyCourseService.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyCourseService.java
@@ -57,12 +57,13 @@ public interface IStudyCourseService {
List findList(StudyCourse sc, OrderCondition oc, Boolean isFinish);
/**
- * 分页查询课程学习记录,用户的课程学习记录
- * @param pageIndex
- * @param pageSize
- * @param sc
- * @param oc
- * @return
+ * 分页查询课程学习记录
+ * @param pageIndex 页码
+ * @param pageSize 每页数量
+ * @param sc 课程学习记录查询参数
+ * @param oc 排序字段
+ * @param isFinish 是否已完成
+ * @return 课程学习记录分页集合
*/
PageList findPage(int pageIndex,int pageSize,StudyCourse sc,OrderCondition oc,Boolean isFinish);
diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyCourseServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyCourseServiceImpl.java
index 57754dc3..4ada3f8f 100644
--- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyCourseServiceImpl.java
+++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyCourseServiceImpl.java
@@ -7,6 +7,7 @@ import com.xboe.core.orm.FieldUpdateType;
import com.xboe.core.orm.QueryBuilder;
import com.xboe.core.orm.UpdateBuilder;
import com.xboe.core.utils.ConvertUtil;
+import com.xboe.data.outside.IOutSideDataService;
import com.xboe.module.course.dao.CourseContentDao;
import com.xboe.module.course.dao.CourseDao;
import com.xboe.module.course.entity.Course;
@@ -21,6 +22,10 @@ import com.xboe.school.study.entity.StudyCourseItem;
import com.xboe.school.study.entity.StudySignup;
import com.xboe.school.study.service.IStudyCourseService;
import com.xboe.school.study.service.IStudySignupService;
+import com.xboe.system.organization.service.IOrganizationService;
+import com.xboe.system.user.entity.User;
+import com.xboe.system.user.service.IUserService;
+import com.xboe.system.user.vo.UserSimpleVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -32,6 +37,8 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
@Slf4j
@Service
@@ -44,6 +51,15 @@ public class StudyCourseServiceImpl implements IStudyCourseService{
@Autowired
IStudySignupService signupService;
+ @Autowired
+ IOutSideDataService outsideService;
+
+ @Autowired
+ IUserService userService;
+
+ @Autowired
+ IOrganizationService organizationService;
+
@Autowired
StudyCourseDao studyCourseDao;
@@ -90,6 +106,16 @@ public class StudyCourseServiceImpl implements IStudyCourseService{
return null;
}
+ /**
+ * 分页查询课程学习记录
+ *
+ * @param pageIndex 页码
+ * @param pageSize 每页数量
+ * @param sc 课程学习记录查询参数
+ * @param oc 排序字段
+ * @param isFinish 是否已完成
+ * @return 课程学习记录分页集合
+ */
@Override
public PageList findPage(int pageIndex, int pageSize, StudyCourse sc, OrderCondition oc,Boolean isFinish) {
QueryBuilder query=QueryBuilder.from(StudyCourse.class);
@@ -122,11 +148,55 @@ public class StudyCourseServiceImpl implements IStudyCourseService{
query.addFilter(FieldFilters.eq("aid", sc.getAid()));
}
}
- if(isFinish!=null) {
- if(isFinish) {
- query.addFilter(FieldFilters.eq("status",9));
- }else {
- query.addFilter(FieldFilters.lt("status",9));
+ if (isFinish != null) {
+ if (isFinish) {
+ query.addFilter(FieldFilters.eq("status", 9));
+ } else {
+ query.addFilter(FieldFilters.lt("status", 9));
+ }
+ }
+ // 25.11.24新增:添加工号和部门字段,并增加学习时长枚举筛选
+ PageList studyCoursePageList = studyCourseDao.findPage(query.builder());
+ // 根据当前查询数据的aid,补全用户工号和部门字段
+ List studyCourses = studyCoursePageList.getList();
+ List userIds = studyCourses.stream().map(StudyCourse::getAid).collect(Collectors.toList());
+ // 这块和StudyCourseApi的export方法一致,但是因为两种查询方式返回对象不同,暂时没有整合为独立方法复用
+ if (!userIds.isEmpty()) {
+ // 调用用户中心接口
+ List userSimpleVos = outsideService.findByIds(userIds);
+ if (userSimpleVos != null && !userSimpleVos.isEmpty()) {
+ for (UserSimpleVo userSimpleVo : userSimpleVos) {
+ // 填充部门字段
+ for (StudyCourse studyCourse1 : studyCourses) {
+ if (userSimpleVo.getAid().equals(studyCourse1.getAid())) {
+ studyCourse1.setOrgInfo(userSimpleVo.getOrgInfo());
+ // 取code为工号
+ studyCourse1.setUserNo(userSimpleVo.getCode());
+ }
+ }
+ }
+ } else {
+ log.error("【分页查询课程学习记录】用户信息查询失败,查询boe人员表作为兜底方案");
+ // 和需求沟通后,查询用户中心失败情况,查询boe的人员表作为兜底方案,如果仍然查询不到则不填充,继续导出其他字段
+ for (String userId : userIds) {
+ // 用户信息也是redis获取的
+ User userInfo = userService.get(userId);
+ log.info("【分页查询课程学习记录】查询boe人员表,用户id:{}", userId);
+ if (userInfo != null) {
+ // 填充部门字段
+ for (StudyCourse studyCourse1 : studyCourses) {
+ if (Objects.equals(userId, studyCourse1.getAid())) {
+ log.info("【分页查询课程学习记录】查询boe人员表,机构id:{}", userInfo.getDepartId());
+ // 和技术沟通后,确认这里机构名称是redis获取的,获取不到返回null,因此正常遍历没有效率和空值问题
+ studyCourse1.setOrgInfo(organizationService.getName(userInfo.getDepartId()));
+ // 取userNo为工号
+ studyCourse1.setUserNo(userInfo.getUserNo());
+ }
+ }
+ } else {
+ log.error("【分页查询课程学习记录】用户信息查询boe人员表失败,用户id:{}", userId);
+ }
+ }
}
}
return studyCourseDao.findPage(query.builder());