Commit 70d5c407 authored by wanghao's avatar wanghao

1测试上电断电操作

parent 9b331001
......@@ -21,6 +21,11 @@ public class DeviceTaskScheduler {
private static final Logger log = LoggerFactory.getLogger(DeviceTaskScheduler.class);
@Resource
private Scheduler scheduler;
// 任务组名(统一固定,与原有逻辑保持一致)
private static final String JOB_GROUP = "DEVICE_TASKS";
// 触发器组名(统一固定,与原有逻辑保持一致)
private static final String TRIGGER_GROUP = "DEVICE_TRIGGERS";
/**
* 创建设备监控任务
* @param fStoreyId 设备ID
......@@ -38,52 +43,75 @@ public class DeviceTaskScheduler {
* 创建每小时通信任务
*/
private void createHourlyCommunicationJob(Long fStoreyId) throws SchedulerException {
// 任务标识 = 设备ID + 任务类型
// 1. 构建任务唯一标识(JobKey = jobId + 任务组名)
String jobId = "COMM_" + fStoreyId;
JobKey jobKey = new JobKey(jobId, JOB_GROUP);
// 构建触发器唯一标识(TriggerKey = jobId + "_TRIGGER" + 触发器组名)
TriggerKey triggerKey = new TriggerKey(jobId + "_TRIGGER", TRIGGER_GROUP);
String fStoreyIdStr = fStoreyId + "";
// 2. 准备JobDetail(与原有逻辑一致,仅初始化不提交)
String fStoreyIdStr = fStoreyId.toString();
JobDetail job = JobBuilder.newJob(DeviceCommunicationJob.class)
.withIdentity(jobId, "DEVICE_TASKS")
.withIdentity(jobKey) // 直接用构建好的JobKey,避免重复编码
.usingJobData("fStoreyId", fStoreyIdStr)
.storeDurably()
.storeDurably() // 保留原有持久化配置
.build();
// 测试每两分钟 读一次数据
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(jobId + "_TRIGGER", "DEVICE_TRIGGERS")
// .withSchedule(CronScheduleBuilder.cronSchedule("0 0 * * * ?")) 每小时执行一次 (0分0秒执行)
.withSchedule(CronScheduleBuilder.cronSchedule("0 0/2 * * * ?"))
// 3. 准备新触发器(Cron调度,与原有逻辑一致)
Trigger newTrigger = TriggerBuilder.newTrigger()
.withIdentity(triggerKey) // 用构建好的TriggerKey
.withSchedule(CronScheduleBuilder.cronSchedule("0 0/2 * * * ?")) // 测试每2分钟执行,后续可改回0 0 * * * ?
.build();
scheduler.scheduleJob(job, trigger);
// 4. 分场景处理:存在则更新,不存在则创建
if (scheduler.checkExists(jobKey)) {
// 任务已存在:更新触发器(替换旧触发器为新触发器)
Date updatedTime = scheduler.rescheduleJob(triggerKey, newTrigger);
log.info("每小时通信任务[{}]已存在,成功更新触发器,下次执行时间:{}", jobId, updatedTime);
} else {
// 任务不存在:创建JobDetail和触发器
scheduler.scheduleJob(job, newTrigger);
log.info("每小时通信任务[{}]不存在,成功创建任务及触发器", jobId);
}
}
/**
* 创建71小时后执行任务
*/
private void createFinalExecutionJob(Long fStoreyId,String fPowerOutageIp,Integer fPowerOutagePort) throws SchedulerException {
// 1. 构建任务唯一标识(JobKey = jobId + 任务组名)
String jobId = "FINAL_" + fStoreyId;
JobKey jobKey = new JobKey(jobId, JOB_GROUP);
// 构建触发器唯一标识(TriggerKey = jobId + "_TRIGGER" + 触发器组名)
TriggerKey triggerKey = new TriggerKey(jobId + "_TRIGGER", TRIGGER_GROUP);
// 2. 准备JobDetail(与原有逻辑一致,仅初始化不提交)
String fStoreyIdStr = fStoreyId.toString();
String fPowerOutagePortStr = fPowerOutagePort.toString();
JobDetail job = JobBuilder.newJob(FinalExecutionJob.class)
.withIdentity(jobId, "DEVICE_TASKS")
.withIdentity(jobKey) // 直接用构建好的JobKey
.usingJobData("fStoreyId", fStoreyIdStr)
.usingJobData("fPowerOutageIp", fPowerOutageIp)
.usingJobData("fPowerOutagePort", fPowerOutagePortStr)
.storeDurably()
.storeDurably() // 保留原有持久化配置
.build();
// 计算71小时后的时间点
// Date executeTime = Date.from(Instant.now().plus(71, ChronoUnit.HOURS));
// 测试 先用 10分钟
Date executeTime = Date.from(Instant.now().plus(10, ChronoUnit.MINUTES));
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(jobId + "_TRIGGER", "DEVICE_TRIGGERS")
.startAt(executeTime)
// 3. 准备新触发器(定时一次执行,测试用10分钟后,后续可改回71小时)
Date executeTime = Date.from(Instant.now().plus(10, ChronoUnit.MINUTES)); // 测试用10分钟,正式环境改71
Trigger newTrigger = TriggerBuilder.newTrigger()
.withIdentity(triggerKey) // 用构建好的TriggerKey
.startAt(executeTime) // 指定执行时间(一次触发)
.build();
scheduler.scheduleJob(job, trigger);
// 4. 分场景处理:存在则更新,不存在则创建
if (scheduler.checkExists(jobKey)) {
// 任务已存在:更新触发器(重新指定执行时间)
Date updatedTime = scheduler.rescheduleJob(triggerKey, newTrigger);
log.info("71小时后执行任务[{}]已存在,成功更新触发器,新执行时间:{}", jobId, updatedTime);
} else {
// 任务不存在:创建JobDetail和触发器
scheduler.scheduleJob(job, newTrigger);
log.info("71小时后执行任务[{}]不存在,成功创建任务及触发器,执行时间:{}", jobId, executeTime);
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment