package com.ruoyi.personnel.schedule; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.personnel.pojo.PersonTrainingDetailed; import com.ruoyi.personnel.service.PersonTrainingDetailedService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.ZoneId; import java.util.Date; import java.util.List; @Component public class PersonSchedule { @Resource private PersonTrainingDetailedService personTrainingDetailedService; /** * 当前课程小于当前时间,并且状态为2:进行中;3: 未开始更新状态为4:已结束 */ @Scheduled(cron = "0 0/15 * * * ?") //15分钟执行一次 //@Scheduled(cron = "0/10 * * * * ?") //每10秒执行一次 public void testScheduleTask() { // 获取当天的所有培训课程 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdfWithTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String newDate = sdf.format(date); List list = personTrainingDetailedService.list(Wrappers.lambdaQuery() .eq(PersonTrainingDetailed::getState, 2) .or().eq(PersonTrainingDetailed::getState, 3) .le(PersonTrainingDetailed::getTrainingDateTwo, newDate)); list.forEach(i -> { LocalDate parse = LocalDate.parse(i.getTrainingDateTwo()); Date date1 = Date.from(parse.atStartOfDay(ZoneId.systemDefault()).toInstant()); String trainingDate = sdf.format(date1); String endTime = trainingDate + " " + i.getEndTime(); try { Date endNewTime = sdfWithTime.parse(endTime); // 日期超出 if (endNewTime.before(date)) { i.setState(4); personTrainingDetailedService.updateById(i); } } catch (ParseException e) {} }); } }