diff --git a/safety-cedu-service/pom.xml b/safety-cedu-service/pom.xml index 00e5ad1a..38468576 100644 --- a/safety-cedu-service/pom.xml +++ b/safety-cedu-service/pom.xml @@ -36,6 +36,10 @@ io.swagger swagger-annotations + + com.jjb.saas + jjb-saas-framework-job + diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/CourseManagementServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/CourseManagementServiceImpl.java index 7c9f2e9b..200a8d4e 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/CourseManagementServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/CourseManagementServiceImpl.java @@ -62,7 +62,7 @@ public class CourseManagementServiceImpl extends ServiceImpl convert = page.convert(courseManagementConvertor::convertEToVo); Map collectMap = classCourseMapper.selectList(new LambdaQueryWrapper() .in(ClassCourseDO::getCourseId, convert.getRecords().stream().map(CourseManagementVO::getId))) - .stream().collect(Collectors.toMap(ClassCourseDO::getCourseId, v -> 1)); + .stream().map(ClassCourseDO::getCourseId).distinct().collect(Collectors.toMap(v -> v, v -> 1)); convert.getRecords().forEach(vo -> { vo.setCourseRelCoursewareVOList(courseRelCoursewareConvertor.convertEListToVoList( courseRelCoursewareMapper.selectList(new LambdaQueryWrapper() @@ -81,11 +81,15 @@ public class CourseManagementServiceImpl extends ServiceImpl collectMap = classCourseMapper.selectList(new LambdaQueryWrapper() + .eq(ClassCourseDO::getCourseId, courseManagementVO.getId())) + .stream().map(ClassCourseDO::getCourseId).distinct().collect(Collectors.toMap(v -> v, v -> 1)); courseManagementVO.setCourseRelCoursewareVOList(courseRelCoursewareConvertor.convertEListToVoList( courseRelCoursewareMapper.selectList(new LambdaQueryWrapper() .eq(CourseRelCoursewareDO::getCourseId, courseManagementVO.getId()) .orderByAsc(CourseRelCoursewareDO::getSort)) )); + courseManagementVO.setUsed(Math.toIntExact(collectMap.getOrDefault(Long.valueOf(courseManagementVO.getId()), 0))); return courseManagementVO; } 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 new file mode 100644 index 00000000..968735ab --- /dev/null +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/support/job/ClassManagementStateJob.java @@ -0,0 +1,79 @@ +package org.qinan.cedu.service.support.job; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.jjb.saas.framework.job.Job; +import com.jjb.saas.framework.job.annotation.JobRegister; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.qinan.cedu.enums.ClassStatusEnum; +import org.qinan.cedu.enums.DeleteEnum; +import org.qinan.cedu.mapper.ClassManagementMapper; +import org.qinan.cedu.model.entity.ClassManagementDO; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +/** + * 过程控制签字完成,超过3天未归档 + * + * @author ltq + * @since 2026/08/13 + */ +@Component +@Slf4j +@RequiredArgsConstructor +public class ClassManagementStateJob implements Job { + + private final ClassManagementMapper classManagementMapper; + + /** + * 班级管理状态检查 + */ + @Override + @XxlJob("classManagementStateTask") + @JobRegister(cron = "0 7 0 * * ?", + jobDesc = "班级管理状态检查", + author = "ltq", + triggerStatus = 1) + public ReturnT execute(String param) { + param = XxlJobHelper.getJobParam(); + log.info("班级管理状态检查开始, param: {}", param); + List classManagementDOS = classManagementMapper.selectList(new LambdaQueryWrapper() + .ne(ClassManagementDO::getStatus, 1)); + LocalDate now = LocalDate.now(); + for (ClassManagementDO classManagementDO : classManagementDOS) { + log.info("班级管理状态检查 {}", classManagementDO.getClassName()); + LocalDate start = classManagementDO.getStartDate().toLocalDate(); + LocalDate end = classManagementDO.getDelayTime().toLocalDate(); + if (Objects.isNull(end)) { + end = classManagementDO.getEndDate().toLocalDate(); + } + ClassStatusEnum pendingStart; + if (now.isBefore(start)) { + pendingStart = ClassStatusEnum.PENDING_START; + } else if (now.isAfter(start) && now.isBefore(end)) { + pendingStart = ClassStatusEnum.IN_PROGRESS; + } else if (now.isAfter(end)) { + pendingStart = ClassStatusEnum.FINISHED; + } else { + pendingStart = ClassStatusEnum.NOT_APPLIED; + } + log.info("班级管理状态检查结束 {}, 状态: {}", classManagementDO.getClassName(), pendingStart.getDesc()); + classManagementMapper.update(new LambdaUpdateWrapper() + .set(ClassManagementDO::getStatus, pendingStart.getCode()) + .set(ClassManagementDO::getUpdateTime, LocalDateTime.now()) + .eq(ClassManagementDO::getId, classManagementDO.getId()) + .eq(ClassManagementDO::getDeleteEnum, DeleteEnum.FALSE.getCode())); + + } + log.info("班级管理状态检查完成"); + return ReturnT.SUCCESS; + } +}