Merge remote-tracking branch 'origin/dev-tmp1' into dev-tmp1

dev-tmp1
luotaiqian 2026-08-24 11:09:26 +08:00
commit 3da4937be0
3 changed files with 88 additions and 1 deletions

View File

@ -36,6 +36,10 @@
<groupId>io.swagger</groupId> <groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId> <artifactId>swagger-annotations</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.jjb.saas</groupId>
<artifactId>jjb-saas-framework-job</artifactId>
</dependency>
<!-- EasyExcel --> <!-- EasyExcel -->
<dependency> <dependency>

View File

@ -62,7 +62,7 @@ public class CourseManagementServiceImpl extends ServiceImpl<CourseManagementMap
IPage<CourseManagementVO> convert = page.convert(courseManagementConvertor::convertEToVo); IPage<CourseManagementVO> convert = page.convert(courseManagementConvertor::convertEToVo);
Map<Long, Integer> collectMap = classCourseMapper.selectList(new LambdaQueryWrapper<ClassCourseDO>() Map<Long, Integer> collectMap = classCourseMapper.selectList(new LambdaQueryWrapper<ClassCourseDO>()
.in(ClassCourseDO::getCourseId, convert.getRecords().stream().map(CourseManagementVO::getId))) .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 -> { convert.getRecords().forEach(vo -> {
vo.setCourseRelCoursewareVOList(courseRelCoursewareConvertor.convertEListToVoList( vo.setCourseRelCoursewareVOList(courseRelCoursewareConvertor.convertEListToVoList(
courseRelCoursewareMapper.selectList(new LambdaQueryWrapper<CourseRelCoursewareDO>() courseRelCoursewareMapper.selectList(new LambdaQueryWrapper<CourseRelCoursewareDO>()
@ -81,11 +81,15 @@ public class CourseManagementServiceImpl extends ServiceImpl<CourseManagementMap
.eq(CourseManagementDO::getDeleteEnum, DeleteEnum.FALSE.getCode()) .eq(CourseManagementDO::getDeleteEnum, DeleteEnum.FALSE.getCode())
.one(); .one();
CourseManagementVO courseManagementVO = courseManagementConvertor.convertEToVo(entity); CourseManagementVO courseManagementVO = courseManagementConvertor.convertEToVo(entity);
Map<Long, Integer> collectMap = classCourseMapper.selectList(new LambdaQueryWrapper<ClassCourseDO>()
.eq(ClassCourseDO::getCourseId, courseManagementVO.getId()))
.stream().map(ClassCourseDO::getCourseId).distinct().collect(Collectors.toMap(v -> v, v -> 1));
courseManagementVO.setCourseRelCoursewareVOList(courseRelCoursewareConvertor.convertEListToVoList( courseManagementVO.setCourseRelCoursewareVOList(courseRelCoursewareConvertor.convertEListToVoList(
courseRelCoursewareMapper.selectList(new LambdaQueryWrapper<CourseRelCoursewareDO>() courseRelCoursewareMapper.selectList(new LambdaQueryWrapper<CourseRelCoursewareDO>()
.eq(CourseRelCoursewareDO::getCourseId, courseManagementVO.getId()) .eq(CourseRelCoursewareDO::getCourseId, courseManagementVO.getId())
.orderByAsc(CourseRelCoursewareDO::getSort)) .orderByAsc(CourseRelCoursewareDO::getSort))
)); ));
courseManagementVO.setUsed(Math.toIntExact(collectMap.getOrDefault(Long.valueOf(courseManagementVO.getId()), 0)));
return courseManagementVO; return courseManagementVO;
} }

View File

@ -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<String> execute(String param) {
param = XxlJobHelper.getJobParam();
log.info("班级管理状态检查开始, param: {}", param);
List<ClassManagementDO> classManagementDOS = classManagementMapper.selectList(new LambdaQueryWrapper<ClassManagementDO>()
.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<ClassManagementDO>()
.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;
}
}