135 lines
5.9 KiB
Plaintext
135 lines
5.9 KiB
Plaintext
package com.securityControl.task.schedule;
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.json.JSONUtil;
|
|
import com.securityControl.common.core.utils.aes.ListHelper;
|
|
import com.securityControl.task.domain.vo.DataTaskVo;
|
|
import com.securityControl.task.mapper.TaskDao;
|
|
import org.quartz.*;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
|
|
|
|
import javax.annotation.PostConstruct;
|
|
import javax.annotation.Resource;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* 任务调度处理
|
|
*
|
|
* @author yvan
|
|
*/
|
|
//@Configuration
|
|
@EnableScheduling
|
|
public class ScheduledChannelWarnJob {
|
|
|
|
@Resource
|
|
private TaskDao mapper;
|
|
|
|
@Resource
|
|
private SchedulerFactoryBean schedulerFactoryBean;
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(ScheduledChannelWarnJob.class);
|
|
|
|
/**
|
|
* 每20秒同步数据库数据一次
|
|
* 启动所有的定时任务
|
|
*/
|
|
// @Scheduled(cron = "0 0/20 * * * ?")
|
|
// @PostConstruct
|
|
public void scheduleJobs() throws SchedulerException {
|
|
List<DataTaskVo> warnList = mapper.getSelectList();
|
|
if (ListHelper.isNotEmpty(warnList)) {
|
|
Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
for (DataTaskVo task : warnList) {
|
|
scheduleJob(scheduler, task);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 配置Job
|
|
*/
|
|
private void scheduleJob(Scheduler scheduler, DataTaskVo warn) throws SchedulerException {
|
|
String jobName = "jobName" + warn.getId();
|
|
String jobGroup = "jobGroup" + warn.getId();
|
|
String triggerName = "triggerName" + warn.getId();
|
|
String triggerGroup = "triggerGroup" + warn.getId();
|
|
JobKey jobKey = new JobKey(jobName, jobGroup);
|
|
String taskSttate = warn.getTaskState();
|
|
//获取当前的job 判断是否已经存在
|
|
JobDetail crrentjobDetail = scheduler.getJobDetail(jobKey);
|
|
//如果当前线程已存在,则刷新时间
|
|
if (ObjectUtil.isNotEmpty(crrentjobDetail)) {
|
|
if ("2".equals(taskSttate)) {//停止运行
|
|
scheduler.deleteJob(jobKey);
|
|
return;
|
|
}
|
|
TriggerKey triggerKey = new TriggerKey(triggerName, triggerGroup);
|
|
CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);
|
|
String oldTime = cronTrigger.getCronExpression();
|
|
if (!oldTime.equalsIgnoreCase(warn.getCron())) {
|
|
// log.info("=====刷新定时器时间====");
|
|
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(warn.getCron());
|
|
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerName, triggerGroup)
|
|
.withSchedule(cronScheduleBuilder).build();
|
|
//重置对应的job
|
|
scheduler.rescheduleJob(triggerKey, trigger);
|
|
|
|
}
|
|
} else {
|
|
Class thisc = null;
|
|
if ("bns_team".equals(warn.getCode())) {//班组智能分析
|
|
// thisc = ScheduledWorkTemWarn.class;
|
|
} else if ("bns_warn".equals(warn.getCode())) {//站班会预警分析
|
|
// thisc = ScheduledClassMettinglWarn.class;
|
|
} else if ("bns_new_team".equals(warn.getCode())) {//新进班组提取
|
|
// thisc = ScheduledNewTem.class;
|
|
}else if ("bns_class".equals(warn.getCode())) {//站班会自动分配
|
|
// thisc = ScheduledClassMettingZdfp.class;
|
|
} else if ("bns_wather_warn".equals(warn.getCode())) {//恶劣天气预警
|
|
// thisc = ScheduledWatherWarn.class;
|
|
} else if ("bns_weather".equals(warn.getCode())) {//当日天气
|
|
// thisc = ScheduledWeather.class;
|
|
} else if ("bns_device_state".equals(warn.getCode())) {//球机状态
|
|
// thisc = ScheduledDeviceMsg.class;
|
|
} else if ("bns_device_xh".equals(warn.getCode())) {//球机信号
|
|
// thisc = ScheduleDeviceXh.class;
|
|
} else if ("bns_class_device".equals(warn.getCode())) {//站班会球机状态
|
|
// thisc = ScheduleClassMettingDeviceState.class;
|
|
} else if ("bns_device_time".equals(warn.getCode())) {//球机上下线时长
|
|
// thisc = ScheduleDeviceTime.class;
|
|
}else if ("bns_daily_report".equals(warn.getCode())) {//值班日报同步数据
|
|
// thisc = ScheduledDailyReport.class;
|
|
} else if ("bns_video_device".equals(warn.getCode())) {//抓取统一视频平台设备
|
|
// thisc = ScheduledAsyncEquipList.class;
|
|
} else if ("bns_video_catch".equals(warn.getCode())) {//单次抓取图片
|
|
// thisc = ScheduledCatchPicture.class;
|
|
} else if ("bns_video_download".equals(warn.getCode())) {//下载图片给人工智能平台
|
|
// thisc = ScheduledDownloadPicture.class;
|
|
}
|
|
if (thisc == null) {
|
|
return;
|
|
}
|
|
if ("2".equals(taskSttate)) {//停止创建
|
|
return;
|
|
}
|
|
// log.info("=====创建新的定时任务====");
|
|
JobDetail jobDetail = JobBuilder.newJob(thisc)
|
|
//这个位置是你自己需要传的数据,处理业务逻辑,可传多个
|
|
.usingJobData("warn", JSONUtil.toJsonStr(warn))
|
|
.withIdentity(jobName, jobGroup).build();
|
|
// 每5s执行一次
|
|
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(warn.getCron());
|
|
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerName, triggerGroup).withSchedule(scheduleBuilder).build();
|
|
scheduler.scheduleJob(jobDetail, cronTrigger);
|
|
|
|
}
|
|
}
|
|
|
|
} |