package com.xxxxx.task;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hebyl.ccp.framework.util.QueryUtil;
import com.hebyl.siccpzdycdy.config.QuartzConfig;
import lombok.SneakyThrows;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import java.sql.Timestamp;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
public class UpdateApplicationResultTask extends QuartzJobBean {
private static final int EXPIRED_DAYS = 3;
@Autowired
private Scheduler scheduler;
@SneakyThrows
@Override
protected synchronized void executeInternal(JobExecutionContext context) throws JobExecutionException {
updateTriggerInterval();
}
private synchronized void updateTriggerInterval() throws SchedulerException {
Integer newInterval = greenApplicationService.getInitialInterval();
TriggerKey triggerKey = new TriggerKey("updateApplicationResultTrigger");
Trigger existingTrigger = scheduler.getTrigger(triggerKey);
long nextFireTime = System.currentTimeMillis() + (newInterval * 1000L);
System.out.println("下次执行时间" + new Date(nextFireTime));
if (existingTrigger!= null) {
TriggerBuilder tb = existingTrigger.getTriggerBuilder();
Trigger newTrigger = tb.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(newInterval)
.withRepeatCount(1)
.repeatForever())
.startAt(new Date(nextFireTime))
.build();
scheduler.rescheduleJob(existingTrigger.getKey(), newTrigger);
}
}
}
public Integer getInitialInterval(){
Integer IntervalIn=10;
LocalDateTime currentDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(greenApplicationDAO.getReleaseTime(), formatter);
localDateTime = localDateTime.plusDays(3);
Duration duration = Duration.between(currentDateTime,localDateTime);
long minutes = duration.toMinutes()+1;
IntervalIn=(int) Math.min(Integer.MAX_VALUE, minutes)*60;
if (IntervalIn<=0){
IntervalIn=10;
}
return IntervalIn;
}
package com.xxxx.config;
;
import com.hebyl.siccpzdycdy.task.UpdateApplicationResultTask;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QuartzConfig {
@Bean
public JobDetail updateApplicationResultJobDetail() {
return JobBuilder.newJob(UpdateApplicationResultTask.class)
.withIdentity("updateApplicationResultJob")
.storeDurably()
.build();
}
@Bean
public Trigger updateApplicationResultTrigger() {
JobDetail jobDetail = updateApplicationResultJobDetail();
JobDataMap jobDataMap = jobDetail.getJobDataMap();
jobDataMap.put("triggerKey", new TriggerKey("updateApplicationResultTrigger"));
Integer intervalIn = greenApplicationService.getInitialInterval();
System.out.println("下次间隔秒" + intervalIn);
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(intervalIn)
.withRepeatCount(1)
.repeatForever();
org.quartz.Trigger newTrigger=TriggerBuilder.newTrigger()
.forJob(updateApplicationResultJobDetail())
.withIdentity("updateApplicationResultTrigger")
.withSchedule(scheduleBuilder)
.build();
return newTrigger;
}
}