10.6设备采集规则修改

dev
xiaohuo 9 months ago
parent 62be1abd27
commit c5903d61c7
  1. 19
      ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/ScheduleRulesController.java
  2. 30
      ALOps_sys_backend/alops-system/src/main/java/com/alops/system/job/GatherJob.java
  3. 4
      ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/IScheduleRulesService.java
  4. 113
      ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/ScheduleRulesServiceImpl.java

@ -58,28 +58,29 @@ public class ScheduleRulesController extends BaseController
@PreAuthorize("@ss.hasPermi('device:deviceInformation:protoCollect')")
@PostMapping("/addRule")
@ApiOperation("立即确定")
public AjaxResult run(@RequestBody ScheduleRules newRule) throws SchedulerException, ExecutionException, InterruptedException {
// 先检查是否有任务正在执行
if (scheduleRulesService.checkRunningOrWaitingRules()) {
return AjaxResult.error("正在采集,请稍后");
return AjaxResult.error(4001,"正在采集,请稍后,此次采集完成后会站内信通知到你");
}
if (newRule.getRuleType() == 2) {
// 立即执行
return scheduleRulesService.executeRule(newRule);
// 执行规则(立即或定时/按频率)
boolean success = scheduleRulesService.executeRule(newRule);
if (success) {
// 返回调度/插入成功
return AjaxResult.success("任务已调度成功,采集结果会通过站内信/邮件通知");
} else {
// 固定时间/按频率:异步处理异常
scheduleRulesService.executeRule(newRule);
return AjaxResult.success("任务已调度成功,异常会通过站内信/邮件通知");
return AjaxResult.error("任务设置失败,请稍后重试");
}
}
/**
* 查询定时采集规则列表
*/

@ -39,7 +39,23 @@ public class GatherJob implements Job {
try {
if (rule == null) return;
// 按频率判断时间范围
// 1.状态为4时取消调度任务
if (rule.getStatus() == 4) {
Scheduler scheduler = context.getScheduler();
JobKey jobKey = context.getJobDetail().getKey();
scheduler.deleteJob(jobKey);
String Content=String.format("任务执行完此次,已取消后续任务");
iAlertSenderService.sendInternalMessage( Content,"2" );
log.info("规则[{}] 已标记为取消状态(4),对应定时任务已删除: {}", rule.getId(), jobKey);
return;
}
// 2.设置状态为执行中
rule.setStatus(1);
scheduleRulesMapper.updateScheduleRules(rule);
// 3.判断是否执行完成 按频率判断时间范围
if (rule.getRuleType() == 0) {
Date start = rule.getStartTime();
Date end = rule.getEndTime();
@ -48,7 +64,6 @@ public class GatherJob implements Job {
if ( now.after(end)) {
rule.setStatus(2); // 超出范围标记完成
scheduleRulesMapper.updateScheduleRules(rule);
return;
}
}
@ -58,10 +73,17 @@ public class GatherJob implements Job {
iScheduleRulesService.executeImmediately();
// 执行成功
if (rule.getRuleType() == 0 || rule.getRuleType() == 1) {
if (rule.getRuleType() == 1 ) {
rule.setStatus(2);
}
String Content=String.format("任务执行完成",
rule.getId(), rule.getRuleName());
iAlertSenderService.sendInternalMessage( Content,"2" );
scheduleRulesMapper.updateScheduleRules(rule);
}
} catch (Exception e) {
//执行失败是不会有采集信息和预警信息的

@ -21,9 +21,9 @@ public interface IScheduleRulesService
public Boolean checkRunningOrWaitingRules();
public Boolean checkRunningOrWaitingRules() throws SchedulerException;
public AjaxResult executeRule(ScheduleRules newRule) throws SchedulerException, ExecutionException, InterruptedException;
public Boolean executeRule(ScheduleRules newRule) throws SchedulerException, ExecutionException, InterruptedException;
public int executeImmediately() throws ExecutionException, InterruptedException;
/**

@ -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;
}

Loading…
Cancel
Save