|
|
@@ -1,6 +1,7 @@
|
|
|
package com.qqflow.engine.domain.flow.job;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.qqflow.engine.common.service.RedissonService;
|
|
|
import com.qqflow.engine.domain.flow.enums.TaskStatus;
|
|
|
import com.qqflow.engine.domain.flow.po.ApprovalTask;
|
|
|
import com.qqflow.engine.domain.flow.service.NotificationService;
|
|
|
@@ -15,6 +16,7 @@ import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.List;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
|
* 审批任务超时检查定时任务
|
|
|
@@ -35,12 +37,24 @@ public class OverdueCheckJob {
|
|
|
private final ApprovalTaskMapper approvalTaskMapper;
|
|
|
private final ProcessInstanceMapper processInstanceMapper;
|
|
|
private final NotificationService notificationService;
|
|
|
+ private final RedissonService redissonService;
|
|
|
+
|
|
|
+ private static final String LOCK_KEY = "job:overdue-check";
|
|
|
|
|
|
/**
|
|
|
- * 每 5 分钟执行一次
|
|
|
+ * 每 5 分钟执行一次,分布式锁保证多实例只有一个触发
|
|
|
*/
|
|
|
@Scheduled(cron = "0 0/5 * * * ?")
|
|
|
public void check() {
|
|
|
+ if (!redissonService.tryLock(LOCK_KEY, 0, 240, TimeUnit.SECONDS)) return;
|
|
|
+ try {
|
|
|
+ doCheck();
|
|
|
+ } finally {
|
|
|
+ redissonService.unlock(LOCK_KEY);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void doCheck() {
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
LocalDateTime warningThreshold = now.plusHours(24);
|
|
|
|