diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/controller/ClassCourseController.java b/safety-cedu-service/src/main/java/org/qinan/cedu/controller/ClassCourseController.java index b14c6eeb..bcd80d1c 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/controller/ClassCourseController.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/controller/ClassCourseController.java @@ -69,7 +69,7 @@ public class ClassCourseController { return PageResponse.of(page.getRecords(), page.getTotal()); } - @ApiOperation("我的课程") + @ApiOperation("我的学习") @GetMapping("/myCoursePage") public SingleResponse> myCoursePage() { List list = classCourseService.myCoursePage(); diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/ClassStudentExamRecordDTO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/ClassStudentExamRecordDTO.java index e061906f..f2267c3b 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/ClassStudentExamRecordDTO.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/ClassStudentExamRecordDTO.java @@ -54,4 +54,7 @@ public class ClassStudentExamRecordDTO { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endTime; + + @ApiModelProperty("正确题数") + private Integer correctCount; } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/entity/ClassStudentExamRecordDO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/entity/ClassStudentExamRecordDO.java index fc917ada..b096abe6 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/entity/ClassStudentExamRecordDO.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/entity/ClassStudentExamRecordDO.java @@ -54,4 +54,5 @@ public class ClassStudentExamRecordDO extends BaseEntity { @TableField("end_time") private LocalDateTime endTime; + private Integer correctCount; } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/query/ClassStudentExamRecordPageQuery.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/query/ClassStudentExamRecordPageQuery.java index a5447917..529df327 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/query/ClassStudentExamRecordPageQuery.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/query/ClassStudentExamRecordPageQuery.java @@ -22,4 +22,7 @@ public class ClassStudentExamRecordPageQuery extends BasePageQuery { @ApiModelProperty("是否通过(0-未通过,1-通过)") private Integer passed; + + @ApiModelProperty("试卷名称") + private String paperName; } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassStudentExamRecordVO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassStudentExamRecordVO.java index f9dea5c6..4542e0ee 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassStudentExamRecordVO.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassStudentExamRecordVO.java @@ -40,6 +40,8 @@ public class ClassStudentExamRecordVO extends BaseVO { @ApiModelProperty("错误题数") private Integer wrongCount; + @ApiModelProperty("正确题数") + private Integer correctCount; @ApiModelProperty("正确率(百分比)") private BigDecimal accuracy; diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassCourseServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassCourseServiceImpl.java index a8431642..1a986205 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassCourseServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassCourseServiceImpl.java @@ -22,9 +22,11 @@ import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.math.BigDecimal; import java.time.Duration; import java.time.LocalDateTime; import java.util.Collections; @@ -107,10 +109,13 @@ public class ClassCourseServiceImpl extends ServiceImpl dtoList) { List entities = dtoList.stream().map(this::buildEntity).collect(Collectors.toList()); return this.saveBatch(entities); @@ -133,17 +139,62 @@ public class ClassCourseServiceImpl extends ServiceImpl coursewareManagementDOS = coursewareManagementMapper.selectBatchIds(CollectionUtils.isEmpty(dto.getCoursewareId()) ? Collections.singletonList(0L) : dto.getCoursewareId()); + // 判空 + if (entity.getRequiredTotalHours() != null) { + entity.setRequiredTotalHours(entity.getRequiredTotalHours().add(coursewareManagementDOS.stream().map(CoursewareManagementDO::getClassHourDuration).reduce(BigDecimal.ZERO, BigDecimal::add))); + } else { + entity.setRequiredTotalHours(coursewareManagementDOS.stream().map(CoursewareManagementDO::getClassHourDuration).reduce(BigDecimal.ZERO, BigDecimal::add)); + } + if (entity.getVideoDuration() != null) { + entity.setVideoDuration(entity.getVideoDuration().add(coursewareManagementDOS.stream().map(CoursewareManagementDO::getCreditHours).reduce(BigDecimal.ZERO, BigDecimal::add))); + } else { + entity.setVideoDuration(coursewareManagementDOS.stream().map(CoursewareManagementDO::getCreditHours).reduce(BigDecimal.ZERO, BigDecimal::add)); + } + // 学员回填数据(要求学时) + for (ClassStudentDO classStudentDO : classStudentMapper.selectList(new LambdaQueryWrapper() + .eq(ClassStudentDO::getClassId, entity.getClassId()))) { + if (classStudentDO.getRequiredHours() != null) { + classStudentDO.setRequiredHours(classStudentDO.getRequiredHours().add(entity.getVideoDuration())); + } else { + classStudentDO.setRequiredHours(entity.getVideoDuration()); + } + classStudentMapper.updateById(classStudentDO); + } return entity; } @Override + @Transactional(rollbackFor = Exception.class) public boolean updateCourse(ClassCourseDTO dto) { ClassCourseDO entity = classCourseConvertor.convertDtoToE(dto); InsertFieldDefaults.applyForUpdate(entity); + List coursewareManagementDOS = coursewareManagementMapper.selectBatchIds(CollectionUtils.isEmpty(dto.getCoursewareId()) ? Collections.singletonList(0L) : dto.getCoursewareId()); + // 判空 + if (entity.getRequiredTotalHours() != null) { + entity.setRequiredTotalHours(entity.getRequiredTotalHours().add(coursewareManagementDOS.stream().map(CoursewareManagementDO::getClassHourDuration).reduce(BigDecimal.ZERO, BigDecimal::add))); + } else { + entity.setRequiredTotalHours(coursewareManagementDOS.stream().map(CoursewareManagementDO::getClassHourDuration).reduce(BigDecimal.ZERO, BigDecimal::add)); + } + if (entity.getVideoDuration() != null) { + entity.setVideoDuration(entity.getVideoDuration().add(coursewareManagementDOS.stream().map(CoursewareManagementDO::getCreditHours).reduce(BigDecimal.ZERO, BigDecimal::add))); + } else { + entity.setVideoDuration(coursewareManagementDOS.stream().map(CoursewareManagementDO::getCreditHours).reduce(BigDecimal.ZERO, BigDecimal::add)); + } + // 学员回填数据(要求学时) + for (ClassStudentDO classStudentDO : classStudentMapper.selectList(new LambdaQueryWrapper() + .eq(ClassStudentDO::getClassId, entity.getClassId()))) { + if (classStudentDO.getRequiredHours() != null) { + classStudentDO.setRequiredHours(classStudentDO.getRequiredHours().add(entity.getVideoDuration())); + } else { + classStudentDO.setRequiredHours(entity.getVideoDuration()); + } + classStudentMapper.updateById(classStudentDO); + } return this.updateById(entity); } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java index cc6a5ecb..dfa7b6ec 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java @@ -134,9 +134,9 @@ public class ClassManagementServiceImpl extends ServiceImpl(query.getCurrent(), query.getSize())) .convert(classStudentExamRecordConvertor::convertEToVo); diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassStudentLearningRecordServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassStudentLearningRecordServiceImpl.java index 7d777614..9fa969bc 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassStudentLearningRecordServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassStudentLearningRecordServiceImpl.java @@ -14,6 +14,7 @@ import org.qinan.cedu.service.ClassStudentLearningRecordService; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; @@ -50,6 +51,7 @@ public class ClassStudentLearningRecordServiceImpl extends ServiceImpl pageQuery(ClassStudentPageQuery query) { @@ -58,6 +71,7 @@ public class ClassStudentServiceImpl extends ServiceImpl coursewareIds = classCourseMapper.selectList(new LambdaQueryWrapper() + .eq(ClassCourseDO::getClassId, entity.getClassId())) + .stream() + .map(ClassCourseDO::getCoursewareId) + .flatMap(List::stream) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + List coursewareManagementDOS = coursewareManagementMapper.selectBatchIds(CollectionUtils.isEmpty(coursewareIds) ? Collections.singletonList(0L) : coursewareIds); + entity.setRequiredHours(coursewareManagementDOS.stream().map(CoursewareManagementDO::getCreditHours).reduce(BigDecimal.ZERO, BigDecimal::add)); return entity; } @Override + @Transactional(rollbackFor = Exception.class) public boolean updateStudent(ClassStudentDTO dto) { ClassStudentDO entity = classStudentConvertor.convertDtoToE(dto); InsertFieldDefaults.applyForUpdate(entity); + List coursewareIds = classCourseMapper.selectList(new LambdaQueryWrapper() + .eq(ClassCourseDO::getClassId, entity.getClassId())) + .stream() + .map(ClassCourseDO::getCoursewareId) + .flatMap(List::stream) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + List coursewareManagementDOS = coursewareManagementMapper.selectBatchIds(CollectionUtils.isEmpty(coursewareIds) ? Collections.singletonList(0L) : coursewareIds); + entity.setRequiredHours(coursewareManagementDOS.stream().map(CoursewareManagementDO::getCreditHours).reduce(BigDecimal.ZERO, BigDecimal::add)); return this.updateById(entity); } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/support/job/ClassManagementStateJob.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/support/job/ClassManagementStateJob.java index 968735ab..9d9768e4 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/support/job/ClassManagementStateJob.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/support/job/ClassManagementStateJob.java @@ -51,8 +51,8 @@ public class ClassManagementStateJob implements Job { for (ClassManagementDO classManagementDO : classManagementDOS) { log.info("班级管理状态检查 {}", classManagementDO.getClassName()); LocalDate start = classManagementDO.getStartDate().toLocalDate(); - LocalDate end = classManagementDO.getDelayTime().toLocalDate(); - if (Objects.isNull(end)) { + LocalDate end = classManagementDO.getDelayTime() != null ? classManagementDO.getDelayTime().toLocalDate() : null; + if (Objects.isNull(end) || end.isBefore(classManagementDO.getEndDate().toLocalDate())) { end = classManagementDO.getEndDate().toLocalDate(); } ClassStatusEnum pendingStart;