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());