IntelligentRecognition/ah-jjsp-service/.svn/pristine/85/85713fc4d444a87cadcf5122ea2...

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