Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
Z
zhmes-agecal
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
耿迪迪
zhmes-agecal
Commits
70d5c407
Commit
70d5c407
authored
Sep 23, 2025
by
wanghao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1测试上电断电操作
parent
9b331001
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
50 additions
and
22 deletions
+50
-22
DeviceTaskScheduler.java
...main/java/com/zehong/system/task/DeviceTaskScheduler.java
+50
-22
No files found.
zhmes-agecal-system/src/main/java/com/zehong/system/task/DeviceTaskScheduler.java
View file @
70d5c407
...
...
@@ -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
(
job
Id
,
"DEVICE_TASKS"
)
.
withIdentity
(
job
Key
)
// 直接用构建好的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
(
job
Id
,
"DEVICE_TASKS"
)
.
withIdentity
(
job
Key
)
// 直接用构建好的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
);
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment