Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
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
项目统一框架
amos-boot-biz
Commits
b94b6244
Commit
b94b6244
authored
Jun 24, 2024
by
张森
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
定时任务问题处理
parent
fe622688
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
63 additions
and
159 deletions
+63
-159
PlanTaskMapper.java
...ejoin/amos/patrol/business/dao/mapper/PlanTaskMapper.java
+4
-0
JobService.java
.../main/java/com/yeejoin/amos/patrol/quartz/JobService.java
+51
-159
dbTemplate_plan_task.xml
...rol/src/main/resources/db/mapper/dbTemplate_plan_task.xml
+8
-0
No files found.
amos-boot-module/amos-boot-module-biz/amos-boot-module-patrol-biz/src/main/java/com/yeejoin/amos/patrol/business/dao/mapper/PlanTaskMapper.java
View file @
b94b6244
...
...
@@ -194,4 +194,8 @@ public interface PlanTaskMapper extends BaseMapper {
List
<
Plan
>
getPlanIdsByDate
(
@Param
(
"date"
)
Date
date
);
List
<
PlanTask
>
getPlanTaskList
(
@Param
(
"date"
)
Date
date
);
PlanTask
getById
(
@Param
(
"planTaskId"
)
Long
planTaskId
);
void
updateStatusById
(
@Param
(
"planTaskId"
)
Long
planTaskId
,
@Param
(
"status"
)
int
status
);
}
amos-boot-module/amos-boot-module-biz/amos-boot-module-patrol-biz/src/main/java/com/yeejoin/amos/patrol/quartz/JobService.java
View file @
b94b6244
...
...
@@ -665,92 +665,38 @@ public class JobService implements IJobService {
@Override
@Transactional
public
void
taskJobPerform
(
long
taskId
,
String
jobType
,
String
jobName
)
{
if
(
"cluster"
.
equals
(
cluster
)){
// TODO Auto-generated method stub
//为了便于区分key,增加后缀_redisson
RLock
lock
=
redisson
.
getLock
(
jobName
);
try
{
//拿锁失败10停止尝试,20秒后直接释放锁 无论是返回 true 还是 false,都会继续执行之后的代码。
lock
.
tryLock
(
10
,
20
,
TimeUnit
.
SECONDS
);
//为了防止重复
if
(!
redisUtils
.
hasKey
(
jobName
+
"_redisson_key"
))
{
redisUtils
.
set
(
jobName
+
"_redisson_key"
,
"1"
);
//增加标识
if
(
iTaskDao
.
existsById
(
taskId
))
{
Task
task
=
iTaskDao
.
findById
(
taskId
).
get
();
Toke
toke
=
remoteSecurityService
.
getServerToken
();
if
(
XJConstant
.
STATUS_MONITOR_END
.
equals
(
jobType
))
{
if
(
TaskStatusEnum
.
UNDERWAY
.
getValue
()
==
task
.
getStatus
())
{
task
.
setStatus
(
TaskStatusEnum
.
OVERTIME
.
getValue
());
iTaskDao
.
saveAndFlush
(
task
);
TaskFeedback
taskFeedback
=
new
TaskFeedback
();
taskFeedback
.
setUserId
(
task
.
getExecutorId
());
taskFeedback
.
setMessage
(
"该任务在规定时间内未完成,请核实信息!任务名称: "
+
task
.
getTitle
()
+
" 要求完成时间: "
+
DateUtil
.
getDateFormat
(
task
.
getFinishTime
(),
"yyyy-MM-dd HH:mm:ss"
)
+
" 发起人:"
+
task
.
getPublisherName
()
+
" 执行人:"
+
task
.
getExecutor
());
taskFeedback
.
setCreateDate
(
new
Date
());
taskFeedback
.
setUserName
(
task
.
getExecutor
());
taskFeedback
.
setFeedbackTime
(
new
Date
());
taskFeedback
.
setOrgCode
(
task
.
getOrgCode
());
taskFeedback
.
setTaskId
(
task
.
getId
());
taskFeedback
.
setMessageType
(
TaskStatusEnum
.
OVERTIME
.
getName
());
taskFeedback
=
taskFeedbackDao
.
save
(
taskFeedback
);
try
{
asyncTask
.
pushTaskDetailInfoTo3D
(
toke
.
getToke
(),
toke
.
getProduct
(),
toke
.
getAppKey
(),
taskId
);
// 超时任务向3D推送
}
catch
(
InterruptedException
e
)
{
// TODO Auto-generated catch block
log
.
error
(
e
.
getMessage
(),
e
);
e
.
printStackTrace
();
}
}
}
else
{
messageService
.
pushTaskMessage
(
toke
.
getToke
(),
toke
.
getProduct
(),
toke
.
getAppKey
(),
task
);
}
}
removeJob
(
jobName
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
lock
.
unlock
();
//释放锁
}
}
else
{
if
(
iTaskDao
.
existsById
(
taskId
))
{
Task
task
=
iTaskDao
.
findById
(
taskId
).
get
();
Toke
toke
=
remoteSecurityService
.
getServerToken
();
if
(
XJConstant
.
STATUS_MONITOR_END
.
equals
(
jobType
))
{
if
(
TaskStatusEnum
.
UNDERWAY
.
getValue
()
==
task
.
getStatus
())
{
task
.
setStatus
(
TaskStatusEnum
.
OVERTIME
.
getValue
());
iTaskDao
.
saveAndFlush
(
task
);
TaskFeedback
taskFeedback
=
new
TaskFeedback
();
taskFeedback
.
setUserId
(
task
.
getExecutorId
());
taskFeedback
.
setMessage
(
"该任务在规定时间内未完成,请核实信息!任务名称: "
+
task
.
getTitle
()
+
" 要求完成时间: "
+
DateUtil
.
getDateFormat
(
task
.
getFinishTime
(),
"yyyy-MM-dd HH:mm:ss"
)
+
" 发起人:"
+
task
.
getPublisherName
()
+
" 执行人:"
+
task
.
getExecutor
());
taskFeedback
.
setCreateDate
(
new
Date
());
taskFeedback
.
setUserName
(
task
.
getExecutor
());
taskFeedback
.
setFeedbackTime
(
new
Date
());
taskFeedback
.
setOrgCode
(
task
.
getOrgCode
());
taskFeedback
.
setTaskId
(
task
.
getId
());
taskFeedback
.
setMessageType
(
TaskStatusEnum
.
OVERTIME
.
getName
());
taskFeedback
=
taskFeedbackDao
.
save
(
taskFeedback
);
try
{
asyncTask
.
pushTaskDetailInfoTo3D
(
toke
.
getToke
(),
toke
.
getProduct
(),
toke
.
getAppKey
(),
taskId
);
// 超时任务向3D推送
}
catch
(
InterruptedException
e
)
{
// TODO Auto-generated catch block
log
.
error
(
e
.
getMessage
(),
e
);
e
.
printStackTrace
();
}
if
(
iTaskDao
.
existsById
(
taskId
))
{
Task
task
=
iTaskDao
.
findById
(
taskId
).
get
();
Toke
toke
=
remoteSecurityService
.
getServerToken
();
if
(
XJConstant
.
STATUS_MONITOR_END
.
equals
(
jobType
))
{
if
(
TaskStatusEnum
.
UNDERWAY
.
getValue
()
==
task
.
getStatus
())
{
task
.
setStatus
(
TaskStatusEnum
.
OVERTIME
.
getValue
());
iTaskDao
.
saveAndFlush
(
task
);
TaskFeedback
taskFeedback
=
new
TaskFeedback
();
taskFeedback
.
setUserId
(
task
.
getExecutorId
());
taskFeedback
.
setMessage
(
"该任务在规定时间内未完成,请核实信息!任务名称: "
+
task
.
getTitle
()
+
" 要求完成时间: "
+
DateUtil
.
getDateFormat
(
task
.
getFinishTime
(),
"yyyy-MM-dd HH:mm:ss"
)
+
" 发起人:"
+
task
.
getPublisherName
()
+
" 执行人:"
+
task
.
getExecutor
());
taskFeedback
.
setCreateDate
(
new
Date
());
taskFeedback
.
setUserName
(
task
.
getExecutor
());
taskFeedback
.
setFeedbackTime
(
new
Date
());
taskFeedback
.
setOrgCode
(
task
.
getOrgCode
());
taskFeedback
.
setTaskId
(
task
.
getId
());
taskFeedback
.
setMessageType
(
TaskStatusEnum
.
OVERTIME
.
getName
());
taskFeedback
=
taskFeedbackDao
.
save
(
taskFeedback
);
try
{
asyncTask
.
pushTaskDetailInfoTo3D
(
toke
.
getToke
(),
toke
.
getProduct
(),
toke
.
getAppKey
(),
taskId
);
// 超时任务向3D推送
}
catch
(
InterruptedException
e
)
{
// TODO Auto-generated catch block
log
.
error
(
e
.
getMessage
(),
e
);
e
.
printStackTrace
();
}
}
else
{
messageService
.
pushTaskMessage
(
toke
.
getToke
(),
toke
.
getProduct
(),
toke
.
getAppKey
(),
task
);
}
}
else
{
messageService
.
pushTaskMessage
(
toke
.
getToke
(),
toke
.
getProduct
(),
toke
.
getAppKey
(),
task
);
}
removeJob
(
jobName
);
}
}
}
@Override
...
...
@@ -809,58 +755,28 @@ public class JobService implements IJobService {
@Transactional
public
void
planTaskJobPerform
(
long
planTaskId
,
String
jobType
,
String
jobName
)
{
if
(
"cluster"
.
equals
(
cluster
))
{
RLock
lock
=
redisson
.
getLock
(
jobName
);
try
{
//拿锁失败10停止尝试,20秒后直接释放锁 无论是返回 true 还是 false,都会继续执行之后的代码。
lock
.
tryLock
(
10
,
20
,
TimeUnit
.
SECONDS
);
System
.
out
.
println
(
"获取锁成功============"
);
if
(!
redisUtils
.
hasKey
(
jobName
+
"_redisson_key"
))
{
redisUtils
.
set
(
jobName
+
"_redisson_key"
,
"1"
);
//增加标识
if
(
iPlanTaskDao
.
existsById
(
planTaskId
))
{
PlanTask
planTask
=
iPlanTaskDao
.
findById
(
planTaskId
).
get
();
if
(
XJConstant
.
STATUS_MONITOR_START
.
equals
(
jobType
))
{
if
(
PlanTaskFinishStatusEnum
.
NOTSTARTED
.
getValue
()
==
planTask
.
getFinishStatus
())
{
log
.
debug
(
"未开始改为进行中定时器执行=="
+
jobName
);
planTask
.
setFinishStatus
(
PlanTaskFinishStatusEnum
.
UNDERWAY
.
getValue
());
iPlanTaskDao
.
saveAndFlush
(
planTask
);
}
}
else
if
(
XJConstant
.
STATUS_MONITOR_END
.
equals
(
jobType
))
{
if
(
PlanTaskFinishStatusEnum
.
UNDERWAY
.
getValue
()
==
planTask
.
getFinishStatus
())
{
log
.
debug
(
"进行中改为结束定时器执行=="
+
jobName
);
updatePlanTaskStatus
(
planTask
,
PlanTaskFinishStatusEnum
.
OVERTIME
.
getValue
());
}
}
else
{
Toke
toke
=
remoteSecurityService
.
getServerToken
();
messageService
.
pushPlanTaskMessage
(
toke
.
getToke
(),
toke
.
getProduct
(),
toke
.
getAppKey
(),
planTask
,
jobType
);
}
}
removeJob
(
jobName
);
if
(
ObjectUtils
.
isEmpty
(
planTaskId
))
{
log
.
info
(
"任务ID为空,退出,任务Id:{}"
,
planTaskId
);
return
;
}
PlanTask
planTask
=
planTaskMapper
.
getById
(
planTaskId
);
log
.
info
(
"==用任务ID查询任务数据planTask:{},planTaskId:{}"
,
JSON
.
toJSONString
(
planTask
),
planTaskId
);
if
(!
ObjectUtils
.
isEmpty
(
planTask
))
{
if
(
XJConstant
.
STATUS_MONITOR_START
.
equals
(
jobType
))
{
if
(
PlanTaskFinishStatusEnum
.
NOTSTARTED
.
getValue
()
==
planTask
.
getFinishStatus
())
{
log
.
debug
(
"未开始改为进行中定时器执行=={}"
,
jobName
);
planTask
.
setFinishStatus
(
PlanTaskFinishStatusEnum
.
UNDERWAY
.
getValue
());
iPlanTaskDao
.
saveAndFlush
(
planTask
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
lock
.
unlock
();
//释放锁
}
}
else
{
if
(
iPlanTaskDao
.
existsById
(
planTaskId
))
{
PlanTask
planTask
=
iPlanTaskDao
.
findById
(
planTaskId
).
get
();
if
(
XJConstant
.
STATUS_MONITOR_START
.
equals
(
jobType
))
{
if
(
PlanTaskFinishStatusEnum
.
NOTSTARTED
.
getValue
()
==
planTask
.
getFinishStatus
())
{
planTask
.
setFinishStatus
(
PlanTaskFinishStatusEnum
.
UNDERWAY
.
getValue
());
iPlanTaskDao
.
save
(
planTask
);
}
}
else
if
(
XJConstant
.
STATUS_MONITOR_END
.
equals
(
jobType
))
{
if
(
PlanTaskFinishStatusEnum
.
UNDERWAY
.
getValue
()
==
planTask
.
getFinishStatus
())
{
updatePlanTaskStatus
(
planTask
,
PlanTaskFinishStatusEnum
.
OVERTIME
.
getValue
());
}
}
else
{
Toke
toke
=
remoteSecurityService
.
getServerToken
();
messageService
.
pushPlanTaskMessage
(
toke
.
getToke
(),
toke
.
getProduct
(),
toke
.
getAppKey
(),
planTask
,
jobType
);
}
else
if
(
XJConstant
.
STATUS_MONITOR_END
.
equals
(
jobType
))
{
if
(
PlanTaskFinishStatusEnum
.
UNDERWAY
.
getValue
()
==
planTask
.
getFinishStatus
())
{
log
.
info
(
"进行中改为结束定时器执行=={}"
,
jobName
);
updatePlanTaskStatus
(
planTask
,
PlanTaskFinishStatusEnum
.
OVERTIME
.
getValue
());
}
}
else
{
Toke
toke
=
remoteSecurityService
.
getServerToken
();
messageService
.
pushPlanTaskMessage
(
toke
.
getToke
(),
toke
.
getProduct
(),
toke
.
getAppKey
(),
planTask
,
jobType
);
}
removeJob
(
jobName
);
}
}
...
...
@@ -871,34 +787,10 @@ public class JobService implements IJobService {
@Override
public
void
msgJobPerform
(
long
msgId
,
String
jobType
,
String
jobName
)
{
if
(
"cluster"
.
equals
(
cluster
))
{
RLock
lock
=
redisson
.
getLock
(
jobName
);
try
{
//拿锁失败10停止尝试,20秒后直接释放锁 无论是返回 true 还是 false,都会继续执行之后的代码。
lock
.
tryLock
(
10
,
20
,
TimeUnit
.
SECONDS
);
//为了防止重复
if
(!
redisUtils
.
hasKey
(
jobName
+
"_redisson_key"
))
{
redisUtils
.
set
(
jobName
+
"_redisson_key"
,
"1"
);
//增加标识
if
(
iMsgDao
.
existsById
(
msgId
))
{
Msg
msg
=
iMsgDao
.
findById
(
msgId
).
get
();
Toke
toke
=
remoteSecurityService
.
getServerToken
();
messageService
.
pushMsgAndSave
(
toke
.
getToke
(),
toke
.
getProduct
(),
toke
.
getAppKey
(),
msg
);
}
removeJob
(
jobName
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
lock
.
unlock
();
//释放锁
}
}
else
{
if
(
iMsgDao
.
existsById
(
msgId
))
{
Msg
msg
=
iMsgDao
.
findById
(
msgId
).
get
();
Toke
toke
=
remoteSecurityService
.
getServerToken
();
messageService
.
pushMsgAndSave
(
toke
.
getToke
(),
toke
.
getProduct
(),
toke
.
getAppKey
(),
msg
);
}
removeJob
(
jobName
);
if
(
iMsgDao
.
existsById
(
msgId
))
{
Msg
msg
=
iMsgDao
.
findById
(
msgId
).
get
();
Toke
toke
=
remoteSecurityService
.
getServerToken
();
messageService
.
pushMsgAndSave
(
toke
.
getToke
(),
toke
.
getProduct
(),
toke
.
getAppKey
(),
msg
);
}
}
...
...
amos-boot-system-patrol/src/main/resources/db/mapper/dbTemplate_plan_task.xml
View file @
b94b6244
...
...
@@ -1140,4 +1140,11 @@
(select id from p_plan where is_delete = 0 and status = 0)
</select>
<select
id=
"getById"
resultType=
"com.yeejoin.amos.patrol.dao.entity.PlanTask"
>
select * from p_plan_task where id = #{planTaskId}
</select>
<update
id=
"updateStatusById"
>
update p_plan_task set finish_status = #{status} where id = #{planTaskId}
</update>
</mapper>
\ No newline at end of file
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