package com.peanut.modules.job.task; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.peanut.common.utils.DateUtils; import com.peanut.config.DelayQueueConfig; import com.peanut.modules.common.dao.ClassEntityDao; import com.peanut.modules.common.dao.ClassModelDao; import com.peanut.modules.common.entity.ClassEntity; import com.peanut.modules.common.entity.ClassModel; import org.springframework.amqp.AmqpException; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessagePostProcessor; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; @Component("classToExamTask") public class ClassToExamTask implements ITask{ @Autowired private ClassEntityDao classEntityDao; @Autowired private ClassModelDao classModelDao; @Autowired private RabbitTemplate rabbitTemplate; @Override public void run(String params) { List classEntities = classEntityDao.selectList(new MPJLambdaWrapper() .leftJoin(ClassModel.class,ClassModel::getId,ClassEntity::getModelId) .selectAll(ClassEntity.class) .eq(ClassModel::getIsExam,1) .eq(ClassEntity::getState,1)); for (ClassEntity classEntity : classEntities) { ClassModel classModel = classModelDao.selectById(classEntity.getModelId()); //考试周开始时间 Date startExamTime = DateUtils.addDateDays(classEntity.getStartTime(),classModel.getDays()); //20250702添加新规则,考试周时间按整点计算 if (DateUtils.addDateDays(classEntity.getStartTime(),classModel.getDays()).getTime() >DateUtils.stringToDate("2025-07-02","yyyy-MM-dd").getTime()){ startExamTime = DateUtils.addDateDays(classEntity.getStartTime(),classModel.getDays()); startExamTime = DateUtils.stringToDate(DateUtils.format(startExamTime),"yyyy-MM-dd"); } if (startExamTime.getTime()<=new Date().getTime()){//已到考试周,调整小班状态为考试周 classEntity.setState("3"); classEntityDao.updateById(classEntity); }else if (DateUtils.format(startExamTime).equals(DateUtils.format(new Date()))){ //当天与考试周到达天相同,加入队列 //根据设置的天数将班级状态从进行中设置成考试中 rabbitTemplate.convertAndSend( DelayQueueConfig.COMMON_EXCHANGE, DelayQueueConfig.COMMON_ROUTING_KEY, "examDays" + "," + classEntity.getId(), new MessagePostProcessor() { @Override public Message postProcessMessage(Message message) throws AmqpException { message.getMessageProperties().setDelay((int)(DateUtils.addDateDays(classEntity.getStartTime(),classModel.getDays()).getTime()-new Date().getTime())); return message; } } ); } } } }