diff --git a/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/exceptionController/AlertMessageController.java b/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/exceptionController/AlertMessageController.java index 385feccf..a664300d 100644 --- a/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/exceptionController/AlertMessageController.java +++ b/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/exceptionController/AlertMessageController.java @@ -48,12 +48,8 @@ public class AlertMessageController extends BaseController @ApiOperation("立即执行预警") @Log(title = "【立即执行预警】", businessType = BusinessType.DELETE) @PostMapping("/executeImmediate") - public AjaxResult executeImmediate(@RequestBody Map> paramMap) { + public AjaxResult executeImmediate() { try { - List ruleIds = paramMap.get("ruleIds"); - if (ruleIds == null || ruleIds.isEmpty()) { - return AjaxResult.error("请选择至少一条规则"); - } iAlertLaunchService.executeImmediateAlerts(); // 调用 Service 执行 return AjaxResult.success("立即预警任务已触发,存入成功,请查看"); diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/job/GatherJob.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/job/GatherJob.java index fda98a32..5304d589 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/job/GatherJob.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/job/GatherJob.java @@ -40,8 +40,9 @@ public class GatherJob implements Job { try { if (rule == null) return; - // 1.状态为4时取消调度任务 - if (rule.getStatus() == 4) { + // 1.状态为5时取消调度任务 + if (rule.getStatus() == 5) { + rule.setStatus(4); Scheduler scheduler = context.getScheduler(); JobKey jobKey = context.getJobDetail().getKey(); // scheduler.deleteJob(jobKey); diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/InternalMessageMapper.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/InternalMessageMapper.java index b845f2cb..f7ae5df0 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/InternalMessageMapper.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/InternalMessageMapper.java @@ -16,7 +16,10 @@ import java.util.List; public interface InternalMessageMapper { - + /** + * 根据用户ID将所有消息状态更新为已读 + */ + int updateMessagesToReadByUserId(@Param("userId") Long userId); /** * 查询指定用户的所有消息,按时间倒序 */ diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/ScheduleRulesMapper.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/ScheduleRulesMapper.java index a2df65b0..5baf8948 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/ScheduleRulesMapper.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/ScheduleRulesMapper.java @@ -16,6 +16,12 @@ public interface ScheduleRulesMapper { + /** + * 将 status 为 1 或 5 的记录更新为 3 + * @return 更新的记录数 + */ + int updateStatusFrom1And5To3(); + public List selectList(); public List selectListOne(); diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/AlertLaunchServiceImpl.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/AlertLaunchServiceImpl.java index ade8c281..9f8243de 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/AlertLaunchServiceImpl.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/AlertLaunchServiceImpl.java @@ -341,7 +341,8 @@ public class AlertLaunchServiceImpl implements IAlertLaunchService { " WHERE t3.equ_id = g1.equ_id " + " ) " + ") " + - "AND (g1." + col + " <> g2." + col + " OR g1." + col + " IS NULL OR g2." + col + " IS NULL)"; + "AND (g1." + col + " <> g2." + col + " OR g1." + col + " IS NULL OR g2." + col + " IS NULL)"+ + "AND b.status = '1'"; System.out.println(sql); System.out.println(jdbcTemplate.queryForList(sql)); diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/AlertRuleServiceImpl.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/AlertRuleServiceImpl.java index 81fb8ca6..2434fd16 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/AlertRuleServiceImpl.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/AlertRuleServiceImpl.java @@ -159,8 +159,10 @@ public class AlertRuleServiceImpl implements IAlertRuleService .append(" FROM equ_gather ") .append(" GROUP BY equ_id ") .append(") latest ON g.equ_id = latest.equ_id AND g.gather_time = latest.latest_time ") - .append("WHERE ") - .append(buildConditionsSql(conditions)); + .append("WHERE b.status = '1' "); // 先把固定条件放在前面 + if (!buildConditionsSql(conditions).isEmpty()) { + sql.append(" AND ").append(buildConditionsSql(conditions)); + } } else { // 其他表,需要连 equ_gather → equ_base → equ_type sql.append("src.*, g.equ_id, t.name AS equ_type,b.name AS equ_name,b.equ_number ") @@ -168,8 +170,12 @@ public class AlertRuleServiceImpl implements IAlertRuleService .append("JOIN equ_gather g ON src.equ_gather_id = g.id ") .append("JOIN equ_base b ON g.equ_id = b.id ") .append("JOIN equ_type t ON b.equ_type = t.id ") // ★ 新增关联 - .append("WHERE ") - .append(buildConditionsSql(conditions)); + .append("WHERE b.status = '1' "); // 先把固定条件放在前面 + + if (!buildConditionsSql(conditions).isEmpty()) { + sql.append(" AND ").append(buildConditionsSql(conditions)); + } + } return sql.toString(); diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/InternalMessageServiceImpl.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/InternalMessageServiceImpl.java index f2c46ac6..f47d81f5 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/InternalMessageServiceImpl.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/InternalMessageServiceImpl.java @@ -29,6 +29,7 @@ public class InternalMessageServiceImpl implements IInternalMessageService if (userId == null) { return Collections.emptyList(); } + internalMessageMapper.updateMessagesToReadByUserId(userId); return internalMessageMapper.selectMessagesByUserId(userId); } @Override diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/ScheduleRulesServiceImpl.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/ScheduleRulesServiceImpl.java index 0f461f1e..8bc738dd 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/ScheduleRulesServiceImpl.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/ScheduleRulesServiceImpl.java @@ -89,12 +89,13 @@ public class ScheduleRulesServiceImpl implements IScheduleRulesService { switch (rule.getStatus()) { case 1: // 正在执行 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); - } +// if (rule.getRuleType() == 2 || rule.getRuleType() == 1) { +//// rule.setStatus(2); +// } else +// if (rule.getRuleType() == 0) { + log.info("改变状态为5"); + rule.setStatus(5); +// } scheduleRulesMapper.updateScheduleRules(rule); return true; case 0: // 待执行 @@ -105,6 +106,8 @@ public class ScheduleRulesServiceImpl implements IScheduleRulesService { scheduleRulesMapper.updateScheduleRules(rule); iAlertSenderService.sendInternalMessage("采集整体任务取消成功","任务执行完此次,已取消后续任务","2"); return false; + case 5: + return true; default: return true; } diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/ScheduleShutdownHook.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/ScheduleShutdownHook.java new file mode 100644 index 00000000..a150e71c --- /dev/null +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/ScheduleShutdownHook.java @@ -0,0 +1,57 @@ +package com.alops.system.service.impl; + +import com.alops.system.mapper.ScheduleRulesMapper; +import com.alops.system.service.IAlertSenderService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +@Component +public class ScheduleShutdownHook { + private static final Logger log = LoggerFactory.getLogger(ScheduleShutdownHook.class); + + @Autowired + private ScheduleRulesMapper scheduleRulesMapper; + + @Autowired + private IAlertSenderService iAlertSenderService; + + private static ScheduleShutdownHook instance; + + @PostConstruct + public void init() { + instance = this; + registerShutdownHook(); + } + + private void registerShutdownHook() { + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + log.info("检测到应用关闭,开始更新任务状态..."); + updateInterruptedStatus(); + })); + } + + private void updateInterruptedStatus() { + try { + // 将所有状态为1(执行中)、5(等待中)的任务更新为3(执行失败) + int affectedRows = scheduleRulesMapper.updateStatusFrom1And5To3(); + log.info("成功更新 {} 个任务状态为中断", affectedRows); + + // 发送站内信 + if (affectedRows > 0) { + iAlertSenderService.sendInternalMessage( + "系统中断", + "采集任务被外部中断,已更新" + affectedRows + "个任务状态", + "2" + ); + } + + } catch (Exception e) { + log.error("中断处理失败: {}", e.getMessage(), e); + // 备用方案:直接输出到控制台 + System.err.println("中断处理失败: " + e.getMessage()); + } + } +} diff --git a/ALOps_sys_backend/alops-system/src/main/resources/mapper/system/InternalMessageMapper.xml b/ALOps_sys_backend/alops-system/src/main/resources/mapper/system/InternalMessageMapper.xml index 0c4a20f6..bf659d5b 100644 --- a/ALOps_sys_backend/alops-system/src/main/resources/mapper/system/InternalMessageMapper.xml +++ b/ALOps_sys_backend/alops-system/src/main/resources/mapper/system/InternalMessageMapper.xml @@ -14,6 +14,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + UPDATE internal_message + SET status = 'read' + WHERE user_id = #{userId} + SELECT * FROM schedule_rules - WHERE status IN (0, 1) + WHERE status IN (0, 1,5) diff --git a/ALOps_sys_fe/alops-ui/src/api/message/index.js b/ALOps_sys_fe/alops-ui/src/api/message/index.js new file mode 100644 index 00000000..0fcd0dab --- /dev/null +++ b/ALOps_sys_fe/alops-ui/src/api/message/index.js @@ -0,0 +1,15 @@ +import request from '@/utils/request' +import { parseStrEmpty } from "@/utils/ruoyi"; + +// 查询预警消息列表 +export function messageList(query) { + return request({ + url: '/message/list', + method: 'get', + params: query + }) +} + + + + diff --git a/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/detail.vue b/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/detail.vue index 3a374f1d..a47e6aba 100644 --- a/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/detail.vue +++ b/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/detail.vue @@ -227,6 +227,9 @@
+
+ +
@@ -245,10 +248,12 @@ import Interface from './interface.vue' import Vlan from './vlan.vue' import Routing from './routing.vue' import LineChart from './LineChart.vue' +import Veneer from './veneer.vue' + export default { name: "cardItem", - components: { History, Interface, Vlan, Routing, LineChart }, + components: { History, Interface, Vlan, Routing, LineChart, Veneer}, data() { return { DateValue: [dayjs().subtract(1, 'month').format('YYYY-MM-DD HH:mm:ss'),dayjs().format('YYYY-MM-DD HH:mm:ss')], @@ -258,6 +263,7 @@ export default { { name: '接口信息' }, { name: 'VLAN信息' }, { name: '路由表信息' }, + { name: 'venner信息' }, ], tabIndex: 0, dsId:null, diff --git a/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/history.vue b/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/history.vue index 91e92cb0..f3687bd7 100644 --- a/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/history.vue +++ b/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/history.vue @@ -10,17 +10,17 @@ > @@ -39,7 +39,7 @@ diff --git a/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/interface.vue b/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/interface.vue index 50cd32bb..cb7d24dc 100644 --- a/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/interface.vue +++ b/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/interface.vue @@ -10,12 +10,12 @@ > @@ -25,37 +25,37 @@ diff --git a/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/routing.vue b/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/routing.vue index 4e1af7dd..70c5191c 100644 --- a/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/routing.vue +++ b/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/routing.vue @@ -10,17 +10,17 @@ > diff --git a/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/veneer.vue b/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/veneer.vue new file mode 100644 index 00000000..fb17a395 --- /dev/null +++ b/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/veneer.vue @@ -0,0 +1,93 @@ + + + \ No newline at end of file diff --git a/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/vlan.vue b/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/vlan.vue index d9dcc453..051946d0 100644 --- a/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/vlan.vue +++ b/ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/vlan.vue @@ -10,17 +10,17 @@ > @@ -52,7 +52,7 @@ export default { // 查询参数 queryParams: { pageNum: 1, - pageSize: 10, + pageSize: 1000, name: undefined }, } diff --git a/ALOps_sys_fe/alops-ui/src/views/index.vue b/ALOps_sys_fe/alops-ui/src/views/index.vue index 07ff5052..ce9628df 100644 --- a/ALOps_sys_fe/alops-ui/src/views/index.vue +++ b/ALOps_sys_fe/alops-ui/src/views/index.vue @@ -375,7 +375,7 @@ export default { // 定期更新设备状态数据(每分钟更新一次) setInterval(() => { this.refreshDeviceStatus(); - }, 60000); + }, 600000); }, beforeDestroy() { // 移除事件监听 diff --git a/ALOps_sys_fe/alops-ui/src/views/message/index.vue b/ALOps_sys_fe/alops-ui/src/views/message/index.vue new file mode 100644 index 00000000..5d2c7238 --- /dev/null +++ b/ALOps_sys_fe/alops-ui/src/views/message/index.vue @@ -0,0 +1,95 @@ + + +