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 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); } } }