|
|
|
|
@ -5,10 +5,7 @@ import java.sql.SQLOutput; |
|
|
|
|
import java.sql.Timestamp; |
|
|
|
|
import java.time.LocalDateTime; |
|
|
|
|
import java.util.*; |
|
|
|
|
import java.util.concurrent.ExecutionException; |
|
|
|
|
import java.util.concurrent.ExecutorService; |
|
|
|
|
import java.util.concurrent.Executors; |
|
|
|
|
import java.util.concurrent.Future; |
|
|
|
|
import java.util.concurrent.*; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
import com.alops.common.core.domain.AjaxResult; |
|
|
|
|
@ -25,6 +22,7 @@ import org.slf4j.Logger; |
|
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
import org.springframework.transaction.annotation.Propagation; |
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -57,81 +55,117 @@ public class ScheduleRulesServiceImpl implements IScheduleRulesService { |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private MemoryToolService memoryToolService; |
|
|
|
|
@Autowired |
|
|
|
|
private IAlertSenderService iAlertSenderService; |
|
|
|
|
|
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(ScheduleRulesServiceImpl.class); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Boolean checkRunningOrWaitingRules() { |
|
|
|
|
|
|
|
|
|
List<ScheduleRules> runningOrWaiting = scheduleRulesMapper.selectListOne(); |
|
|
|
|
@Transactional(propagation = Propagation.REQUIRES_NEW) |
|
|
|
|
public Boolean checkRunningOrWaitingRules() throws SchedulerException { |
|
|
|
|
|
|
|
|
|
// 检查列表是否不为空且有数据
|
|
|
|
|
if (runningOrWaiting != null && !runningOrWaiting.isEmpty()) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public AjaxResult executeRule(ScheduleRules newRule) throws SchedulerException, ExecutionException, InterruptedException { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 1. 获取所有正在执行(1)和待执行(0)的规则
|
|
|
|
|
List<ScheduleRules> runningOrWaiting = scheduleRulesMapper.selectList(); |
|
|
|
|
if (runningOrWaiting!=null) { |
|
|
|
|
for (ScheduleRules rule : runningOrWaiting) { |
|
|
|
|
switch (rule.getStatus()) { |
|
|
|
|
case 1: // 正在执行
|
|
|
|
|
log.info("规则[{}]:正在执行上一个任务,等待上一个任务完成……", rule.getId()); |
|
|
|
|
waitTaskFinish(rule.getId()); |
|
|
|
|
log.info("规则[{}]:完成上一个任务任务,开始新的任务…", rule.getId()); |
|
|
|
|
if (rule.getRuleType() == 2 || rule.getRuleType() == 1) { |
|
|
|
|
rule.setStatus(2); |
|
|
|
|
} else if (rule.getRuleType() == 0) { |
|
|
|
|
log.info("改变状态为4"); |
|
|
|
|
rule.setStatus(4); |
|
|
|
|
} |
|
|
|
|
scheduleRulesMapper.updateScheduleRules(rule); |
|
|
|
|
break; |
|
|
|
|
return true; |
|
|
|
|
case 0: // 待执行
|
|
|
|
|
if (rule.getRuleType() == 0 || rule.getRuleType() == 1) { |
|
|
|
|
quartzService.deleteJob(rule.getId()); |
|
|
|
|
} |
|
|
|
|
rule.setStatus(4); |
|
|
|
|
scheduleRulesMapper.updateScheduleRules(rule); |
|
|
|
|
break; |
|
|
|
|
return false; |
|
|
|
|
default: |
|
|
|
|
break; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// 2. 执行新规则
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//首先存入规则在执行
|
|
|
|
|
@Override |
|
|
|
|
public Boolean executeRule(ScheduleRules newRule) throws SchedulerException, ExecutionException, InterruptedException { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // 1. 获取所有正在执行(1)和待执行(0)的规则
|
|
|
|
|
// List<ScheduleRules> runningOrWaiting = scheduleRulesMapper.selectList();
|
|
|
|
|
// if (runningOrWaiting!=null) {
|
|
|
|
|
// for (ScheduleRules rule : runningOrWaiting) {
|
|
|
|
|
// switch (rule.getStatus()) {
|
|
|
|
|
// case 1: // 正在执行
|
|
|
|
|
// log.info("规则[{}]:正在执行上一个任务,等待上一个任务完成……", rule.getId());
|
|
|
|
|
// waitTaskFinish(rule.getId());
|
|
|
|
|
// log.info("规则[{}]:完成上一个任务任务,开始新的任务…", rule.getId());
|
|
|
|
|
// if (rule.getRuleType() == 2 || rule.getRuleType() == 1) {
|
|
|
|
|
// rule.setStatus(2);
|
|
|
|
|
// } else if (rule.getRuleType() == 0) {
|
|
|
|
|
// rule.setStatus(4);
|
|
|
|
|
// }
|
|
|
|
|
// scheduleRulesMapper.updateScheduleRules(rule);
|
|
|
|
|
// break;
|
|
|
|
|
// case 0: // 待执行
|
|
|
|
|
// if (rule.getRuleType() == 0 || rule.getRuleType() == 1) {
|
|
|
|
|
// quartzService.deleteJob(rule.getId());
|
|
|
|
|
// }
|
|
|
|
|
// rule.setStatus(4);
|
|
|
|
|
// scheduleRulesMapper.updateScheduleRules(rule);
|
|
|
|
|
// break;
|
|
|
|
|
// default:
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// 2. 执行新规则
|
|
|
|
|
try { |
|
|
|
|
Date now = new Date(); |
|
|
|
|
Long userId = SecurityUtils.getLoginUser().getUserId(); |
|
|
|
|
|
|
|
|
|
// 1. 初始化规则
|
|
|
|
|
newRule.setCreatedBy(userId); |
|
|
|
|
newRule.setCreatedAt(now); |
|
|
|
|
newRule.setStatus(0); |
|
|
|
|
scheduleRulesMapper.insertScheduleRules(newRule); |
|
|
|
|
scheduleRulesMapper.insertScheduleRules(newRule); // 插入成功与否决定返回值
|
|
|
|
|
|
|
|
|
|
switch (newRule.getRuleType().toString()) { |
|
|
|
|
case "2": // 立即执行
|
|
|
|
|
newRule.setStatus(1); |
|
|
|
|
newRule.setStatus(1); // 执行中
|
|
|
|
|
scheduleRulesMapper.updateScheduleRules(newRule); |
|
|
|
|
|
|
|
|
|
// 异步立即执行采集任务
|
|
|
|
|
CompletableFuture.runAsync(() -> { |
|
|
|
|
try { |
|
|
|
|
executeImmediately(); |
|
|
|
|
newRule.setStatus(2); |
|
|
|
|
executeImmediately(); // 实际采集逻辑
|
|
|
|
|
newRule.setStatus(2); // 执行成功
|
|
|
|
|
scheduleRulesMapper.updateScheduleRules(newRule); |
|
|
|
|
return AjaxResult.success("立即执行任务成功:"); // 异常会抛出,前端收到
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
|
|
|
|
newRule.setStatus(3); |
|
|
|
|
String content = String.format("立即任务 [%s] 执行完成", newRule.getRuleName()); |
|
|
|
|
iAlertSenderService.sendInternalMessage(content, "2"); |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
newRule.setStatus(3); // 执行失败
|
|
|
|
|
scheduleRulesMapper.updateScheduleRules(newRule); |
|
|
|
|
// 只捕获立即执行异常
|
|
|
|
|
return AjaxResult.error("立即执行任务失败:" + e.getMessage()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String content = String.format("立即任务 [%s] 执行失败:%s", newRule.getRuleName(), e.getMessage()); |
|
|
|
|
try { |
|
|
|
|
iAlertSenderService.sendInternalMessage(content, "2"); |
|
|
|
|
} catch (Exception ne) { |
|
|
|
|
log.error("发送站内信失败: {}", ne.getMessage(), ne); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
break; |
|
|
|
|
case "1": // 固定时间
|
|
|
|
|
newRule.setStatus(0); |
|
|
|
|
scheduleRulesMapper.updateScheduleRules(newRule); |
|
|
|
|
@ -151,7 +185,11 @@ public class ScheduleRulesServiceImpl implements IScheduleRulesService { |
|
|
|
|
default: |
|
|
|
|
throw new IllegalArgumentException("Unsupported rule type"); |
|
|
|
|
} |
|
|
|
|
return null; |
|
|
|
|
return true; // 插入和调度成功
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("规则设置失败: {}", e.getMessage(), e); |
|
|
|
|
return false; // 插入或调度失败
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -255,6 +293,7 @@ public class ScheduleRulesServiceImpl implements IScheduleRulesService { |
|
|
|
|
// 执行最新预警
|
|
|
|
|
iAlertLaunchService.executeImmediateAlerts(); |
|
|
|
|
|
|
|
|
|
log.info("采集完一次!!!"); |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|