1.导出学习记录接口修改工号字段映射,调用用户中心取code字段,本地库取userNo字段
2.修改分页查询课程学习记录接口,原有分页接口只支持查询当前登录用户,增加同逻辑的课程维度分页接口
3.增加学习时长时间筛选字段与枚举(学习时长筛选逻辑还未完成)
This commit is contained in:
miaowenbo
2025-11-24 19:52:08 +08:00
parent 2df7e9061c
commit 2145e5d17e
5 changed files with 232 additions and 31 deletions

View File

@@ -0,0 +1,71 @@
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

@@ -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<PageList<StudyCourse>> findPage(Pagination pager,StudyCourse sc,Boolean isFinish){
// 默认查询当前登录用户aid
sc.setAid(getCurrent().getAccountId());
try {
PageList<StudyCourse> rs=service.findPage(pager.getPageIndex(),pager.getPageSize(), sc,OrderCondition.desc("id"),isFinish);
//查询出图片
// List<String> ids=new ArrayList<String>();
// for(StudyCourse scourse:rs.getList()) {
// ids.add(scourse.getCourseId());
// }
// Map<String,Object> 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<PageList<StudyCourse>> findPageEx(Pagination pager, StudyCourse sc, Boolean isFinish) {
// 空值校验
if (StringUtils.isBlank(sc.getCourseId())) {
return error("课程id不能为空");
}
try {
PageList<StudyCourse> 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());
// 这个开始时间已经弃置了,不过先用再说(有值)

View File

@@ -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;
}

View File

@@ -57,12 +57,13 @@ public interface IStudyCourseService {
List<StudyCourse> 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<StudyCourse> findPage(int pageIndex,int pageSize,StudyCourse sc,OrderCondition oc,Boolean isFinish);

View File

@@ -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<StudyCourse> 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<StudyCourse> studyCoursePageList = studyCourseDao.findPage(query.builder());
// 根据当前查询数据的aid补全用户工号和部门字段
List<StudyCourse> studyCourses = studyCoursePageList.getList();
List<String> userIds = studyCourses.stream().map(StudyCourse::getAid).collect(Collectors.toList());
// 这块和StudyCourseApi的export方法一致但是因为两种查询方式返回对象不同暂时没有整合为独立方法复用
if (!userIds.isEmpty()) {
// 调用用户中心接口
List<UserSimpleVo> 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());