作业查询逻辑修改

This commit is contained in:
Lqc 2025-10-15 17:15:02 +08:00
parent 821be43cfd
commit b077443687
2 changed files with 74 additions and 64 deletions

View File

@ -1381,7 +1381,8 @@ public class AiolExamController extends JeecgController<AiolExam, IAiolExamServi
} }
if(paper.getRequireReview()==1){ if(paper.getRequireReview()==1){
updateWrapper updateWrapper
.set(AiolExamRecord::getStatus, 1); .set(AiolExamRecord::getStatus, 1)
.set(AiolExamRecord::getTotalScore, totalPoint);
}else { }else {
updateWrapper updateWrapper
.set(AiolExamRecord::getStatus, 2) .set(AiolExamRecord::getStatus, 2)

View File

@ -101,7 +101,7 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
@Operation(summary = "我的作业-作业查询") @Operation(summary = "我的作业-作业查询")
@GetMapping(value = "/myHomeworkList") @GetMapping(value = "/myHomeworkList")
public Result<?> queryMyHomeworkList(HttpServletRequest request,@RequestParam(name = "type" , defaultValue = "4" , required = false) Integer type) { public Result<?> queryMyHomeworkList(HttpServletRequest request, @RequestParam(name = "type", defaultValue = "4", required = false) Integer type) {
// 尝试获取token判断用户id // 尝试获取token判断用户id
String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN); String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN);
List<MyHomeworkDTO> homeworkDTOList = new ArrayList<>(); List<MyHomeworkDTO> homeworkDTOList = new ArrayList<>();
@ -136,17 +136,14 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
.in("source_id", courseIdList) .in("source_id", courseIdList)
.eq("target_type", "homework") .eq("target_type", "homework")
.select("target_id")).stream().map(AiolEntityLink::getTargetId).collect(Collectors.toList()); .select("target_id")).stream().map(AiolEntityLink::getTargetId).collect(Collectors.toList());
}else return Result.ok(); } else return Result.ok();
log.info("查询到作业关联数量: {}", list.size()); log.info("查询到作业关联数量: {}", list.size());
// 查询作业 // 查询作业
QueryWrapper<AiolHomework> queryWrapper = new QueryWrapper<>(); QueryWrapper<AiolHomework> queryWrapper = new QueryWrapper<>();
if(type != 4){
queryWrapper.eq("status", type);
}
if (!list.isEmpty()) { if (!list.isEmpty()) {
queryWrapper.in("id", list); queryWrapper.in("id", list);
}else return Result.ok(); } else return Result.ok();
// 查询作业列表并去重 // 查询作业列表并去重
List<AiolHomework> homeworkList = aiolHomeworkService.list(queryWrapper) List<AiolHomework> homeworkList = aiolHomeworkService.list(queryWrapper)
.stream() .stream()
@ -189,12 +186,22 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
SysUser -> SysUser SysUser -> SysUser
)); ));
// 替换作业中的创建人ID为用户名 // 替换作业中的创建人ID为用户名
homeworkList.forEach(homework -> { for (AiolHomework homework : homeworkList) {
MyHomeworkDTO myHomeworkDTO = new MyHomeworkDTO(); MyHomeworkDTO myHomeworkDTO = new MyHomeworkDTO();
myHomeworkDTO.setAiolHomework(homework); myHomeworkDTO.setAiolHomework(homework);
// 获取当前用户的提交记录如果没有则返回空列表 // 获取当前用户的提交记录如果没有则返回空列表
List<AiolHomeworkSubmit> userSubmits = userSubmitMap.getOrDefault(homework.getId(), Collections.emptyMap()) List<AiolHomeworkSubmit> userSubmits = userSubmitMap.getOrDefault(homework.getId(), Collections.emptyMap())
.getOrDefault(currentUserId, Collections.emptyList()); .getOrDefault(currentUserId, Collections.emptyList());
if (type == 1 || type == 2) {
if (userSubmits.isEmpty() || !userSubmits.get(0).getStatus().equals(type)) {
continue;
}
} else if (type == 0) {
if (!userSubmits.isEmpty() && !userSubmits.get(0).getStatus().equals(type)) {
continue;
}
}
myHomeworkDTO.setAiolHomeworkSubmits(userSubmits); myHomeworkDTO.setAiolHomeworkSubmits(userSubmits);
myHomeworkDTO.setSubmitCount(submitCountMap.getOrDefault(homework.getId(), 0L)); myHomeworkDTO.setSubmitCount(submitCountMap.getOrDefault(homework.getId(), 0L));
String creatorId = homework.getCreateBy(); String creatorId = homework.getCreateBy();
@ -203,9 +210,9 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
myHomeworkDTO.setAvatar(userMap.get(creatorId).getAvatar()); myHomeworkDTO.setAvatar(userMap.get(creatorId).getAvatar());
} }
homeworkDTOList.add(myHomeworkDTO); homeworkDTOList.add(myHomeworkDTO);
}); }
} }
}catch (Exception e){ } catch (Exception e) {
return Result.error(e.getMessage()); return Result.error(e.getMessage());
} }
} }
@ -288,7 +295,7 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
if (aiolHomework == null) { if (aiolHomework == null) {
return Result.error("未找到对应数据"); return Result.error("未找到对应数据");
} }
// 转换为包含详情的DTO // 转换为包含详情的DTO
HomeworkWithDetailsDTO result = convertToHomeworkWithDetails(aiolHomework); HomeworkWithDetailsDTO result = convertToHomeworkWithDetails(aiolHomework);
return Result.OK(result); return Result.OK(result);
@ -321,16 +328,15 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
@Autowired @Autowired
private IAiolHomeworkSubmitService homeworkSubmitService; private IAiolHomeworkSubmitService homeworkSubmitService;
@Autowired @Autowired
private IAiolEntityLinkService entityLinkBizService; private IAiolEntityLinkService entityLinkBizService;
@Autowired @Autowired
private AiolClassStudentMapper aiolClassStudentMapper; private AiolClassStudentMapper aiolClassStudentMapper;
@Autowired @Autowired
private AiolCourseSignupMapper aiolCourseSignupMapper; private AiolCourseSignupMapper aiolCourseSignupMapper;
@Autowired @Autowired
@ -352,17 +358,17 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
try { try {
QueryWrapper<AiolHomework> queryWrapper = new QueryWrapper<>(); QueryWrapper<AiolHomework> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("course_id", courseId) queryWrapper.eq("course_id", courseId)
.orderByDesc("create_time"); .orderByDesc("create_time");
List<AiolHomework> homeworkList = aiolHomeworkService.list(queryWrapper); List<AiolHomework> homeworkList = aiolHomeworkService.list(queryWrapper);
// 转换为包含详情的DTO列表 // 转换为包含详情的DTO列表
List<HomeworkWithDetailsDTO> resultList = homeworkList.stream() List<HomeworkWithDetailsDTO> resultList = homeworkList.stream()
.map(this::convertToHomeworkWithDetails) .map(this::convertToHomeworkWithDetails)
.collect(Collectors.toList()); .collect(Collectors.toList());
return Result.OK(resultList); return Result.OK(resultList);
} catch (Exception e) { } catch (Exception e) {
log.error("查询教师作业列表失败: error={}", e.getMessage(), e); log.error("查询教师作业列表失败: error={}", e.getMessage(), e);
return Result.error("查询教师作业列表失败: " + e.getMessage()); return Result.error("查询教师作业列表失败: " + e.getMessage());
@ -398,7 +404,7 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
QueryWrapper<AiolHomeworkSubmit> submitWrapper = new QueryWrapper<>(); QueryWrapper<AiolHomeworkSubmit> submitWrapper = new QueryWrapper<>();
submitWrapper.eq("homework_id", homeworkId); submitWrapper.eq("homework_id", homeworkId);
List<AiolHomeworkSubmit> submitList = homeworkSubmitService.list(submitWrapper); List<AiolHomeworkSubmit> submitList = homeworkSubmitService.list(submitWrapper);
if (!submitList.isEmpty()) { if (!submitList.isEmpty()) {
List<String> submitIds = submitList.stream() List<String> submitIds = submitList.stream()
.map(AiolHomeworkSubmit::getId) .map(AiolHomeworkSubmit::getId)
@ -406,16 +412,16 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
homeworkSubmitService.removeByIds(submitIds); homeworkSubmitService.removeByIds(submitIds);
log.info("删除作业提交记录成功: homeworkId={}, 删除数量={}", homeworkId, submitIds.size()); log.info("删除作业提交记录成功: homeworkId={}, 删除数量={}", homeworkId, submitIds.size());
} }
// 2. 删除作业记录 // 2. 删除作业记录
boolean deleted = aiolHomeworkService.removeById(homeworkId); boolean deleted = aiolHomeworkService.removeById(homeworkId);
if (!deleted) { if (!deleted) {
return Result.error("删除作业失败,作业不存在"); return Result.error("删除作业失败,作业不存在");
} }
log.info("教师删除作业成功: homeworkId={}", homeworkId); log.info("教师删除作业成功: homeworkId={}", homeworkId);
return Result.OK("删除成功!"); return Result.OK("删除成功!");
} catch (Exception e) { } catch (Exception e) {
log.error("教师删除作业失败: homeworkId={}, error={}", homeworkId, e.getMessage(), e); log.error("教师删除作业失败: homeworkId={}, error={}", homeworkId, e.getMessage(), e);
return Result.error("删除作业失败: " + e.getMessage()); return Result.error("删除作业失败: " + e.getMessage());
@ -433,15 +439,15 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
// 复制DTO中的作业字段到实体 // 复制DTO中的作业字段到实体
BeanUtils.copyProperties(homeworkSaveDTO, aiolHomework); BeanUtils.copyProperties(homeworkSaveDTO, aiolHomework);
aiolHomeworkService.save(aiolHomework); aiolHomeworkService.save(aiolHomework);
String homeworkId = aiolHomework.getId(); String homeworkId = aiolHomework.getId();
String classId = homeworkSaveDTO.getClassId(); String classId = homeworkSaveDTO.getClassId();
String courseId = homeworkSaveDTO.getCourseId(); String courseId = homeworkSaveDTO.getCourseId();
String sectionId = homeworkSaveDTO.getSectionId(); String sectionId = homeworkSaveDTO.getSectionId();
// 2. 为学生创建作业提交记录 // 2. 为学生创建作业提交记录
List<String> studentIds = new ArrayList<>(); List<String> studentIds = new ArrayList<>();
if (classId != null && !classId.trim().isEmpty()) { if (classId != null && !classId.trim().isEmpty()) {
// 如果传递了班级ID查询指定班级的学生 // 如果传递了班级ID查询指定班级的学生
String[] classIds = classId.split(","); String[] classIds = classId.split(",");
@ -451,7 +457,7 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
QueryWrapper<AiolClassStudent> classStudentWrapper = new QueryWrapper<>(); QueryWrapper<AiolClassStudent> classStudentWrapper = new QueryWrapper<>();
classStudentWrapper.eq("class_id", singleClassId); classStudentWrapper.eq("class_id", singleClassId);
List<AiolClassStudent> classStudents = aiolClassStudentMapper.selectList(classStudentWrapper); List<AiolClassStudent> classStudents = aiolClassStudentMapper.selectList(classStudentWrapper);
for (AiolClassStudent classStudent : classStudents) { for (AiolClassStudent classStudent : classStudents) {
String studentId = classStudent.getStudentId(); String studentId = classStudent.getStudentId();
if (!studentIds.contains(studentId)) { if (!studentIds.contains(studentId)) {
@ -465,7 +471,7 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
QueryWrapper<AiolCourseSignup> courseSignupWrapper = new QueryWrapper<>(); QueryWrapper<AiolCourseSignup> courseSignupWrapper = new QueryWrapper<>();
courseSignupWrapper.eq("course_id", courseId); courseSignupWrapper.eq("course_id", courseId);
List<AiolCourseSignup> courseSignups = aiolCourseSignupMapper.selectList(courseSignupWrapper); List<AiolCourseSignup> courseSignups = aiolCourseSignupMapper.selectList(courseSignupWrapper);
for (AiolCourseSignup courseSignup : courseSignups) { for (AiolCourseSignup courseSignup : courseSignups) {
String studentId = courseSignup.getUserId(); String studentId = courseSignup.getUserId();
if (!studentIds.contains(studentId)) { if (!studentIds.contains(studentId)) {
@ -473,28 +479,28 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
} }
} }
} }
// 为每个学生创建空的作业提交记录 // 为每个学生创建空的作业提交记录
for (String studentId : studentIds) { for (String studentId : studentIds) {
homeworkSubmitService.createEmptySubmit(homeworkId, studentId); homeworkSubmitService.createEmptySubmit(homeworkId, studentId);
} }
// 3. 如果传递了章节ID创建章节与作业的关联关系 // 3. 如果传递了章节ID创建章节与作业的关联关系
if (sectionId != null && !sectionId.trim().isEmpty()) { if (sectionId != null && !sectionId.trim().isEmpty()) {
entityLinkBizService.save( entityLinkBizService.save(
EntityLinkConst.SourceType.COURSE_SECTION, EntityLinkConst.SourceType.COURSE_SECTION,
sectionId.trim(), sectionId.trim(),
EntityLinkConst.TargetType.HOMEWORK, EntityLinkConst.TargetType.HOMEWORK,
homeworkId homeworkId
); );
log.info("作业 {} 成功关联到章节 {}", homeworkId, sectionId); log.info("作业 {} 成功关联到章节 {}", homeworkId, sectionId);
} }
log.info("教师添加作业成功: homeworkId={}, courseId={}, classId={}, sectionId={}, 学生数量={}", log.info("教师添加作业成功: homeworkId={}, courseId={}, classId={}, sectionId={}, 学生数量={}",
homeworkId, courseId, classId, sectionId, studentIds.size()); homeworkId, courseId, classId, sectionId, studentIds.size());
return Result.OK("添加成功!"); return Result.OK("添加成功!");
} catch (Exception e) { } catch (Exception e) {
log.error("教师添加作业失败: homeworkSaveDTO={}, error={}", homeworkSaveDTO, e.getMessage(), e); log.error("教师添加作业失败: homeworkSaveDTO={}, error={}", homeworkSaveDTO, e.getMessage(), e);
return Result.error("添加作业失败: " + e.getMessage()); return Result.error("添加作业失败: " + e.getMessage());
@ -533,16 +539,16 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
try { try {
QueryWrapper<AiolEntityLink> delWrapper = new QueryWrapper<>(); QueryWrapper<AiolEntityLink> delWrapper = new QueryWrapper<>();
delWrapper.eq("target_type", EntityLinkConst.TargetType.HOMEWORK) delWrapper.eq("target_type", EntityLinkConst.TargetType.HOMEWORK)
.eq("target_id", homeworkId) .eq("target_id", homeworkId)
.eq("source_type", EntityLinkConst.SourceType.COURSE_SECTION); .eq("source_type", EntityLinkConst.SourceType.COURSE_SECTION);
entityLinkBizService.remove(delWrapper); entityLinkBizService.remove(delWrapper);
if (sectionId != null && !sectionId.trim().isEmpty()) { if (sectionId != null && !sectionId.trim().isEmpty()) {
entityLinkBizService.save( entityLinkBizService.save(
EntityLinkConst.SourceType.COURSE_SECTION, EntityLinkConst.SourceType.COURSE_SECTION,
sectionId.trim(), sectionId.trim(),
EntityLinkConst.TargetType.HOMEWORK, EntityLinkConst.TargetType.HOMEWORK,
homeworkId homeworkId
); );
} }
} catch (Exception e) { } catch (Exception e) {
@ -555,7 +561,9 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
if (classId != null && !classId.trim().isEmpty()) { if (classId != null && !classId.trim().isEmpty()) {
String[] classIds = classId.split(","); String[] classIds = classId.split(",");
for (String singleClassId : classIds) { for (String singleClassId : classIds) {
if (singleClassId == null || singleClassId.trim().isEmpty()) { continue; } if (singleClassId == null || singleClassId.trim().isEmpty()) {
continue;
}
QueryWrapper<AiolClassStudent> csWrapper = new QueryWrapper<>(); QueryWrapper<AiolClassStudent> csWrapper = new QueryWrapper<>();
csWrapper.eq("class_id", singleClassId.trim()); csWrapper.eq("class_id", singleClassId.trim());
List<AiolClassStudent> classStudents = aiolClassStudentMapper.selectList(csWrapper); List<AiolClassStudent> classStudents = aiolClassStudentMapper.selectList(csWrapper);
@ -611,44 +619,44 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
String submitId = (String) reviewParams.get("submitId"); String submitId = (String) reviewParams.get("submitId");
Integer score = (Integer) reviewParams.get("score"); Integer score = (Integer) reviewParams.get("score");
String comment = (String) reviewParams.get("comment"); String comment = (String) reviewParams.get("comment");
// 验证必填参数 // 验证必填参数
if (submitId == null || submitId.trim().isEmpty()) { if (submitId == null || submitId.trim().isEmpty()) {
return Result.error("submitId不能为空"); return Result.error("submitId不能为空");
} }
// 2. 查询作业提交记录 // 2. 查询作业提交记录
AiolHomeworkSubmit submit = homeworkSubmitService.getById(submitId); AiolHomeworkSubmit submit = homeworkSubmitService.getById(submitId);
if (submit == null) { if (submit == null) {
return Result.error("作业提交记录不存在"); return Result.error("作业提交记录不存在");
} }
// 3. 更新作业提交记录 // 3. 更新作业提交记录
AiolHomeworkSubmit updateSubmit = new AiolHomeworkSubmit(); AiolHomeworkSubmit updateSubmit = new AiolHomeworkSubmit();
updateSubmit.setId(submitId); updateSubmit.setId(submitId);
// 设置分数如果提供 // 设置分数如果提供
if (score != null) { if (score != null) {
updateSubmit.setScore(score); updateSubmit.setScore(score);
} }
// 设置评语如果提供 // 设置评语如果提供
if (comment != null && !comment.trim().isEmpty()) { if (comment != null && !comment.trim().isEmpty()) {
updateSubmit.setComment(comment.trim()); updateSubmit.setComment(comment.trim());
} }
// 更新状态为已批阅3 // 更新状态为已批阅3
updateSubmit.setStatus(3); updateSubmit.setStatus(3);
// 4. 保存更新 // 4. 保存更新
boolean updated = homeworkSubmitService.updateById(updateSubmit); boolean updated = homeworkSubmitService.updateById(updateSubmit);
if (!updated) { if (!updated) {
return Result.error("批阅失败,更新作业提交记录失败"); return Result.error("批阅失败,更新作业提交记录失败");
} }
log.info("作业批阅成功: submitId={}, score={}, status=3", submitId, score); log.info("作业批阅成功: submitId={}, score={}, status=3", submitId, score);
return Result.OK("批阅成功!"); return Result.OK("批阅成功!");
} catch (Exception e) { } catch (Exception e) {
log.error("作业批阅失败: reviewParams={}, error={}", reviewParams, e.getMessage(), e); log.error("作业批阅失败: reviewParams={}, error={}", reviewParams, e.getMessage(), e);
return Result.error("批阅失败: " + e.getMessage()); return Result.error("批阅失败: " + e.getMessage());
@ -657,13 +665,14 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
/** /**
* 将AiolHomework转换为包含详情的DTO * 将AiolHomework转换为包含详情的DTO
*
* @param homework 作业实体 * @param homework 作业实体
* @return 包含班级名和章节信息的DTO * @return 包含班级名和章节信息的DTO
*/ */
private HomeworkWithDetailsDTO convertToHomeworkWithDetails(AiolHomework homework) { private HomeworkWithDetailsDTO convertToHomeworkWithDetails(AiolHomework homework) {
HomeworkWithDetailsDTO dto = new HomeworkWithDetailsDTO(); HomeworkWithDetailsDTO dto = new HomeworkWithDetailsDTO();
BeanUtils.copyProperties(homework, dto); BeanUtils.copyProperties(homework, dto);
try { try {
// 1. 查询班级信息 // 1. 查询班级信息
List<String> classNames = new ArrayList<>(); List<String> classNames = new ArrayList<>();
@ -681,29 +690,29 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
} }
} }
dto.setClassNames(classNames); dto.setClassNames(classNames);
// 2. 查询章节信息 // 2. 查询章节信息
List<String> sectionIds = entityLinkBizService.listSourceIds( List<String> sectionIds = entityLinkBizService.listSourceIds(
EntityLinkConst.TargetType.HOMEWORK, EntityLinkConst.TargetType.HOMEWORK,
homework.getId(), homework.getId(),
EntityLinkConst.SourceType.COURSE_SECTION EntityLinkConst.SourceType.COURSE_SECTION
); );
if (!sectionIds.isEmpty()) { if (!sectionIds.isEmpty()) {
String sectionId = sectionIds.get(0); // 取第一个章节ID String sectionId = sectionIds.get(0); // 取第一个章节ID
dto.setSectionId(sectionId); dto.setSectionId(sectionId);
AiolCourseSection section = aiolCourseSectionService.getById(sectionId); AiolCourseSection section = aiolCourseSectionService.getById(sectionId);
if (section != null && section.getName() != null) { if (section != null && section.getName() != null) {
dto.setSectionTitle(section.getName()); dto.setSectionTitle(section.getName());
} }
} }
} catch (Exception e) { } catch (Exception e) {
log.error("转换作业详情失败: homeworkId={}, error={}", homework.getId(), e.getMessage(), e); log.error("转换作业详情失败: homeworkId={}, error={}", homework.getId(), e.getMessage(), e);
// 即使转换失败也返回基本的作业信息 // 即使转换失败也返回基本的作业信息
} }
return dto; return dto;
} }
} }