From f0d66ce892b4662214d4b08a35723300d90c2f19 Mon Sep 17 00:00:00 2001 From: xiaohuo <14141624+dsgfhrh@user.noreply.gitee.com> Date: Mon, 3 Nov 2025 14:56:00 +0800 Subject: [PATCH] =?UTF-8?q?11.3=E9=87=87=E9=9B=86=E8=A7=84=E5=88=99?= =?UTF-8?q?=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF=E7=9A=84=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../equManagement/EquBaseController.java | 22 ++++---- .../equManagement/EquManuController.java | 2 +- .../equManagement/EquSupplierController.java | 2 +- .../equManagement/EquTypeController.java | 2 +- .../ScheduleRulesController.java | 19 +++++-- .../java/com/alops/system/job/GatherJob.java | 54 +++++++++++++------ .../alops/system/mapper/EquBaseMapper.java | 10 +++- .../alops/system/mapper/EquGatherMapper.java | 4 +- .../service/impl/EquBaseServiceImpl.java | 13 ++++- .../service/impl/MemoryToolServiceImpl.java | 30 ++++++++--- .../impl/ScheduleRulesServiceImpl.java | 4 +- .../system/service/impl/SnmpServiceImpl.java | 31 +++++++++++ .../resources/mapper/system/EquBaseMapper.xml | 39 +++++++++++--- .../mapper/system/EquGatherMapper.xml | 16 +++++- 14 files changed, 195 insertions(+), 53 deletions(-) diff --git a/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquBaseController.java b/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquBaseController.java index 9cc60e67..d0f9d7ee 100644 --- a/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquBaseController.java +++ b/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquBaseController.java @@ -144,7 +144,7 @@ public class EquBaseController extends BaseController /** * 获取设备基本信息详细信息 */ - @PreAuthorize("@ss.hasPermi('device:files:query')") + @PreAuthorize("@ss.hasPermi('device:files:query1')") @GetMapping(value = "/{id}") @ApiOperation("查询单个设备信息") public AjaxResult getInfo(@PathVariable("id") String id) @@ -224,18 +224,18 @@ public class EquBaseController extends BaseController @Log(title = "设备基本信息", businessType = BusinessType.INSERT) @PostMapping(value = "/add") @ApiOperation("增加设备档案信息") - public AjaxResult add( @RequestBody EquBase equBase - ) { - -// // 处理图片 -// if (file != null && !file.isEmpty()) { -// equBase.setEquImage(file.getBytes()); -// } - - // 调用 Service 插入数据库 - return toAjax(equBaseService.insertEquBase(equBase)); + public AjaxResult add(@RequestBody EquBase equBase) { + try { + int rows = equBaseService.insertEquBase(equBase); + return toAjax(rows); // 插入成功 + } catch (RuntimeException e) { + return AjaxResult.error(e.getMessage()); // 重复编号或其他业务异常 + } catch (Exception e) { + return AjaxResult.error("新增设备失败,请联系管理员"); + } } + /** * @ModelAttribute EquBase equBase, // 自动绑定表单字段 * @RequestPart(value = "file", required = false) // 使用 @RequestPart diff --git a/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquManuController.java b/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquManuController.java index fa5159b0..f15ed6f8 100644 --- a/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquManuController.java +++ b/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquManuController.java @@ -42,7 +42,7 @@ public class EquManuController extends BaseController /** * 查询设备厂商管理列表 */ - @PreAuthorize("@ss.hasPermi('device:deviceManu:query')") + @PreAuthorize("@ss.hasPermi('device:deviceManu:list')") @GetMapping("/query") @ApiOperation("查询设备厂商管理列表") public TableDataInfo list(EquManu equManu) diff --git a/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquSupplierController.java b/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquSupplierController.java index cedc783e..2cd43127 100644 --- a/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquSupplierController.java +++ b/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquSupplierController.java @@ -50,7 +50,7 @@ public class EquSupplierController extends BaseController /** * 查询供应商功能信息列表 */ - @PreAuthorize("@ss.hasPermi('device:supplier:query')") + @PreAuthorize("@ss.hasPermi('device:supplier:list')") @GetMapping("/query") @ApiOperation("查询供应商功能信息列表") public TableDataInfo list(EquSupplier equSupplier) diff --git a/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquTypeController.java b/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquTypeController.java index ff62c70d..35852867 100644 --- a/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquTypeController.java +++ b/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquTypeController.java @@ -42,7 +42,7 @@ public class EquTypeController extends BaseController /** * 查询设备类型管理列表 */ - @PreAuthorize("@ss.hasPermi('device:deviceType:query')") + @PreAuthorize("@ss.hasPermi('device:deviceType:list')") @GetMapping("/query") @ApiOperation("查询设备类型管理列表") public TableDataInfo list(EquType equType) diff --git a/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/ScheduleRulesController.java b/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/ScheduleRulesController.java index 72e933c7..c72424cc 100644 --- a/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/ScheduleRulesController.java +++ b/ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/ScheduleRulesController.java @@ -10,8 +10,12 @@ import com.alops.common.core.domain.AjaxResult; import com.alops.common.core.page.TableDataInfo; import com.alops.common.enums.BusinessType; import com.alops.common.utils.poi.ExcelUtil; +import com.alops.system.domain.EquBase; +import com.alops.system.domain.EquGather; import com.alops.system.domain.ScheduleRules; import com.alops.system.domain.vo.Code; +import com.alops.system.mapper.EquBaseMapper; +import com.alops.system.mapper.EquGatherMapper; import com.alops.system.mapper.ScheduleRulesMapper; import com.alops.system.service.IScheduleRulesService; import io.swagger.annotations.ApiOperation; @@ -33,9 +37,8 @@ public class ScheduleRulesController extends BaseController { @Autowired private IScheduleRulesService scheduleRulesService; - @Mapper - private ScheduleRulesMapper scheduleRulesMapper; - +// @Autowired +// private EquGatherMapper equGatherMapper; /** * 立即执行按钮 */ @@ -78,6 +81,16 @@ public class ScheduleRulesController extends BaseController } +// @PostMapping("/list1") +// @ApiOperation("测试") +// public AjaxResult list( @RequestBody List updateList) +// { +// if (!updateList.isEmpty()) { +// return AjaxResult.success(equGatherMapper.selectLatestGatherIdsByEquIds(updateList)); +// +// } +// return null; +// } 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 19a9de66..fda98a32 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 @@ -11,9 +11,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; - +import java.util.Calendar; import java.util.Date; + @Component public class GatherJob implements Job { @@ -58,25 +59,46 @@ public class GatherJob implements Job { rule.setStatus(1); scheduleRulesMapper.updateScheduleRules(rule); - // 3.判断是否执行完成 按频率判断时间范围 - if (rule.getRuleType() == 0) { - Date start = rule.getStartTime(); - Date end = rule.getEndTime(); - if (start != null && end != null) { - // 当前时间不在范围内 - if ( now.after(end)) { - rule.setStatus(2); // 超出范围标记完成 - scheduleRulesMapper.updateScheduleRules(rule); - iAlertSenderService.sendInternalMessage("采集整体任务成功","按照频率进行采集的任务执行完成","2"); - - return; - } - } - } + +// if (rule.getRuleType() == 0) { +// Date start = rule.getStartTime(); +// Date end = rule.getEndTime(); +// if (start != null && end != null) { +// // 当前时间不在范围内 +// if ( now.after(end)) { +// rule.setStatus(2); // 超出范围标记完成 +// scheduleRulesMapper.updateScheduleRules(rule); +// iAlertSenderService.sendInternalMessage("采集整体任务成功","按照频率进行采集的任务执行完成","2"); +// +// return; +// } +// } +// } // 执行任务 iScheduleRulesService.executeImmediately(); + // 3.判断是否执行完成 按频率判断时间范围 + if (rule.getRuleType() == 0 && rule.getEndTime() != null && rule.getFrequency() != null) { + // 计算下一次执行时间 + Calendar nextRun = Calendar.getInstance(); + nextRun.setTime(now); + nextRun.add(Calendar.MINUTE, rule.getFrequency().intValue()); + + if (nextRun.getTime().after(rule.getEndTime())) { + // 已经超出范围,标记完成 + 取消任务 + 发送通知 + rule.setStatus(2); + scheduleRulesMapper.updateScheduleRules(rule); + + Scheduler scheduler = context.getScheduler(); + JobKey jobKey = context.getJobDetail().getKey(); + scheduler.deleteJob(jobKey); + + iAlertSenderService.sendInternalMessage("采集整体任务成功", + "按照频率进行采集的任务执行完成","2"); + } + } + // 执行成功 if (rule.getRuleType() == 1 ) { rule.setStatus(2); diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/EquBaseMapper.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/EquBaseMapper.java index 535e466e..d926d34f 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/EquBaseMapper.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/EquBaseMapper.java @@ -22,6 +22,13 @@ import org.springframework.data.repository.query.Param; public interface EquBaseMapper { + /** + * 根据设备编号查询数量,用于唯一性校验 + * @param equNumber 设备编号 + * @return 数量,0表示不存在,>0表示已存在 + */ + int countByEquNumber(String equNumber); + String selectEquNameById(@Param("equId") String equId); /** @@ -29,7 +36,8 @@ public interface EquBaseMapper * @param list 待更新的实体列表,每个实体必须包含 id 和 version * @return 更新的行数 */ - int updateEquBaseVersionBatch(@Param("list") List list); +// int updateEquBaseVersionBatch(@Param("list") List list); + int updateEquBaseVersionBatch(List list); /** * 查询状态为1的设备及其最新采集信息和类型名称 diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/EquGatherMapper.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/EquGatherMapper.java index e5ef2407..e473217f 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/EquGatherMapper.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/EquGatherMapper.java @@ -20,7 +20,9 @@ public interface EquGatherMapper /** * 根据设备ID列表查询每台设备的最新采集ID */ - List selectLatestGatherIdsByEquIds(@Param("equIds") List equIds); +// List selectLatestGatherIdsByEquIds(@Param("equIds") List equIds); + List selectLatestGatherIdsByEquIds(List equIds); + // 更新 health 字段 int updateHealth(String collectId, Double totalHealth); diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/EquBaseServiceImpl.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/EquBaseServiceImpl.java index a437a333..ee8ab02b 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/EquBaseServiceImpl.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/EquBaseServiceImpl.java @@ -305,16 +305,25 @@ public class EquBaseServiceImpl implements IEquBaseService * @return 结果 */ @Override - public int insertEquBase(EquBase equBase) - { + public int insertEquBase(EquBase equBase) { + // 唯一性校验 + int count = equBaseMapper.countByEquNumber(equBase.getEquNumber()); + if (count > 0) { + // 抛出异常或者返回特殊值,前端可捕获 + throw new RuntimeException("设备编号已存在,请重新输入"); + } + + // 设置默认值 if (equBase.getCreateDate() == null) { equBase.setCreateDate(new Date()); } equBase.setId(UUID.randomUUID().toString()); equBase.setCreateBy(SecurityUtils.getLoginUser().getUserId()); + return equBaseMapper.insertEquBase(equBase); } + /** * 修改设备基本信息 * diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/MemoryToolServiceImpl.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/MemoryToolServiceImpl.java index 56fe2f80..8b6f6f35 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/MemoryToolServiceImpl.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/MemoryToolServiceImpl.java @@ -62,17 +62,32 @@ public class MemoryToolServiceImpl implements MemoryToolService { // 🟩 如果是 equ_base,则单独处理为更新型实体 +// if ("equ_base".equalsIgnoreCase(param)) { +// if (value instanceof Map) { +// Map row = (Map) value; +// Object entity = createEntityForTable("equ_base", row); +// if (entity != null) { +// // 填入设备ID(更新时使用) +// fillField(entity, "equ_base", "id", device.getId()); +// updateEntities.put("equ_base", entity); +// } +// } +// continue; // 跳过普通插入逻辑 +// } if ("equ_base".equalsIgnoreCase(param)) { - if (value instanceof Map) { - Map row = (Map) value; - Object entity = createEntityForTable("equ_base", row); + if (value instanceof String) { + String version = (String) value; + // 创建一个实体对象 + Object entity = createEntityForTable("equ_base", new HashMap<>()); if (entity != null) { - // 填入设备ID(更新时使用) + // 填上设备ID fillField(entity, "equ_base", "id", device.getId()); + // 填上版本号(假设数据库字段叫 soft_version) + fillField(entity, "equ_base", "version", version); updateEntities.put("equ_base", entity); } } - continue; // 跳过普通插入逻辑 + continue; } //插入行实体 @@ -209,7 +224,10 @@ public class MemoryToolServiceImpl implements MemoryToolService { switch (tableName) { case "equ_interface": EquInterface equInterface=new EquInterface(); - rowData.forEach((k, v) -> fillField(equInterface, tableName, k, v != null ? v.toString() : null)); + rowData.forEach((k, v) -> fillField(equInterface, tableName, k, v != null ? v.toString() :null)); + if (equInterface.getLossRate() == null) equInterface.setLossRate(BigDecimal.ZERO); + if (equInterface.getErrorRate() == null) equInterface.setErrorRate(BigDecimal.ZERO); + if (equInterface.getRate() == null) equInterface.setRate(0L); return equInterface; case "equ_routing": 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 20dc9338..0f461f1e 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 @@ -103,6 +103,7 @@ public class ScheduleRulesServiceImpl implements IScheduleRulesService { } rule.setStatus(4); scheduleRulesMapper.updateScheduleRules(rule); + iAlertSenderService.sendInternalMessage("采集整体任务取消成功","任务执行完此次,已取消后续任务","2"); return false; default: return true; @@ -275,7 +276,7 @@ public class ScheduleRulesServiceImpl implements IScheduleRulesService { deleteAllEquipmentData(failedEquIds); // 删除依附表,不含 equ_gather // 插入成功设备数据(内部失败会抛异常,触发事务回滚) - persistAndUpdate(successList); + persistAndUpdate(validationResult.getSuccessList()); // 发送成功日志 log.info("本次采集成功 {} 台,删除旧表并写入最新数据,失败设备:{}", successList.size(), failed); @@ -380,6 +381,7 @@ public class ScheduleRulesServiceImpl implements IScheduleRulesService { iAlertLaunchService.executeImmediateAlerts(); } catch (Exception e) { log.error("预警执行异常,不影响采集事务", e); + iAlertSenderService.sendInternalMessage("预警执行异常,不影响采集事务","预警计数失败", "2"); } log.info("批量落库、更新完成,共处理设备:{}", allEntities.size()); diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/SnmpServiceImpl.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/SnmpServiceImpl.java index 7710448b..aac64215 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/SnmpServiceImpl.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/SnmpServiceImpl.java @@ -17,6 +17,9 @@ import org.springframework.stereotype.Service; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + //根据截取方式生成结果 @Service public class SnmpServiceImpl implements SnmpService { @@ -233,6 +236,34 @@ private ConvertRawValueService convertRawValueService; // String value6 = convertRawValueService.convertValue(oid.getConvertRule(), lastValue); result.put(oid.getParam(), lastValue); break; + case "7": + // 单值 + String singleValue2 = null; + outerLoop: + for (TreeEvent event : events) { + if (event == null || event.isError()) continue; + VariableBinding[] vbs = event.getVariableBindings(); + if (vbs == null) continue; + for (VariableBinding vb : vbs) { + singleValue2 = vb.getVariable().toString(); + break outerLoop; // 只取第一个 + } + } + + if (singleValue2 != null) { + // 用正则提取版本号,比如 V200R022C00SPC500 + Pattern pattern = Pattern.compile("(V\\d{3}R\\d{3}C\\d{2}(SPC\\d+)?)"); + Matcher matcher = pattern.matcher(singleValue2); + if (matcher.find()) { + singleValue2 = matcher.group(1); // 提取到的版本号 + } else { + singleValue2 = ""; // 没匹配上就给个空值 + } + } + System.out.println(singleValue2); + result.put(oid.getParam(), singleValue2); + break; + default: result.put(oid.getParam(), null); } diff --git a/ALOps_sys_backend/alops-system/src/main/resources/mapper/system/EquBaseMapper.xml b/ALOps_sys_backend/alops-system/src/main/resources/mapper/system/EquBaseMapper.xml index bf9a5fd2..abbcc43d 100644 --- a/ALOps_sys_backend/alops-system/src/main/resources/mapper/system/EquBaseMapper.xml +++ b/ALOps_sys_backend/alops-system/src/main/resources/mapper/system/EquBaseMapper.xml @@ -77,6 +77,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + + + + + + - - UPDATE equ_base - - - version = #{item.version} - - - WHERE id = #{item.id} + UPDATE equ_base + + version = CASE id + + WHEN #{item.id} THEN #{item.version} + + END + + WHERE id IN + + #{item.id} + + select id,equ_number, name, version, ip, manufacture, location, equ_type, in_charge, install_date, life_cycle, warranty, create_by, create_date, status, device_level, supplier_id from equ_base diff --git a/ALOps_sys_backend/alops-system/src/main/resources/mapper/system/EquGatherMapper.xml b/ALOps_sys_backend/alops-system/src/main/resources/mapper/system/EquGatherMapper.xml index 5c3e35fa..32b50a8f 100644 --- a/ALOps_sys_backend/alops-system/src/main/resources/mapper/system/EquGatherMapper.xml +++ b/ALOps_sys_backend/alops-system/src/main/resources/mapper/system/EquGatherMapper.xml @@ -26,11 +26,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + + + + + + UPDATE equ_gather