From 7f516a6e9b9642a78b06319a2978ae670dc31186 Mon Sep 17 00:00:00 2001 From: xiaohuo <14141624+dsgfhrh@user.noreply.gitee.com> Date: Mon, 27 Oct 2025 16:50:12 +0800 Subject: [PATCH] =?UTF-8?q?10.27=E5=A2=9E=E5=8A=A0=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E6=A5=BC=E5=B1=82=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/alops/system/domain/EquBase.java | 3 +- .../system/domain/vo/queryEquBaseVO.java | 3 + .../impl/ScheduleRulesServiceImpl.java | 74 +++++++++++++++---- .../resources/mapper/system/EquBaseMapper.xml | 7 +- 4 files changed, 72 insertions(+), 15 deletions(-) diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/domain/EquBase.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/domain/EquBase.java index 60a8f6b2..7ba6f50d 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/domain/EquBase.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/domain/EquBase.java @@ -56,7 +56,8 @@ public class EquBase @Excel(name = "设备类型 id") private String equTypeId; - + @Excel(name = "楼层位置") + private String floor; public EquType getEquTypeVO() { return equTypeVO; diff --git a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/domain/vo/queryEquBaseVO.java b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/domain/vo/queryEquBaseVO.java index 365eb167..9a10c7ea 100644 --- a/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/domain/vo/queryEquBaseVO.java +++ b/ALOps_sys_backend/alops-system/src/main/java/com/alops/system/domain/vo/queryEquBaseVO.java @@ -99,6 +99,9 @@ public class queryEquBaseVO { @Excel(name = "设备编号") private String equNumber; + @Excel(name = "楼层位置") + private String floor; + public void setId(String id) 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 ecf3d3b0..62516365 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 @@ -360,22 +360,70 @@ public class ScheduleRulesServiceImpl implements IScheduleRulesService { executor.shutdown(); - // ✅ 完整性校验:找出所有子表为空的设备 - List invalidDevices = successList.stream() - .filter(g -> g.getSubEntities() == null - || g.getSubEntities().isEmpty() - || g.getSubEntities().values().stream().anyMatch(list -> list == null || list.isEmpty())) - .map(g -> g.getEquGather().getEquId()) - .collect(Collectors.toList()); +// // ✅ 完整性校验:找出所有子表为空的设备 +// List invalidDevices = successList.stream() +// .filter(g -> g.getSubEntities() == null +// || g.getSubEntities().isEmpty() +// || g.getSubEntities().values().stream().anyMatch(list -> list == null || list.isEmpty())) +// .map(g -> g.getEquGather().getEquId()) +// .collect(Collectors.toList()); +// +// // 如果全部失败或者发现不完整设备,抛异常 +// if (successList.isEmpty() || !invalidDevices.isEmpty()) { +// String msg = "本次采集失败,保持旧数据完好。失败设备:" + +// String.join(", ", failed) + +// (invalidDevices.isEmpty() ? "" : ",采集数据不完整设备:" + String.join(", ", invalidDevices)); +// log.error(msg); +// throw new RuntimeException(msg); // 异常抛出去,外层可捕获发送邮件 +// } + // ✅ 完整性校验:找出所有子表为空的设备及对应子表 + Map> invalidDeviceMap = successList.stream() + .map(g -> { + String equId = g.getEquGather().getEquId(); + + // 找出这个设备下不完整的子表 + List emptyTables = new ArrayList<>(); + + // subEntities 为空或没有数据 + if (g.getSubEntities() == null || g.getSubEntities().isEmpty()) { + emptyTables.add("所有子表为空"); + } else { + // 检查每个子表的值 + g.getSubEntities().forEach((tableName, list) -> { + if (list == null || list.isEmpty()) { + emptyTables.add(tableName); + } + }); + } + + // 如果有任何空子表,返回 (设备ID, 空表列表) + return emptyTables.isEmpty() ? null : Map.entry(equId, emptyTables); + }) + .filter(Objects::nonNull) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - // 如果全部失败或者发现不完整设备,抛异常 +// ✅ 提取不完整设备ID列表 + List invalidDevices = new ArrayList<>(invalidDeviceMap.keySet()); + +// ✅ 如果全部失败或有不完整设备,抛异常 if (successList.isEmpty() || !invalidDevices.isEmpty()) { - String msg = "本次采集失败,保持旧数据完好。失败设备:" + - String.join(", ", failed) + - (invalidDevices.isEmpty() ? "" : ",采集数据不完整设备:" + String.join(", ", invalidDevices)); - log.error(msg); - throw new RuntimeException(msg); // 异常抛出去,外层可捕获发送邮件 + StringBuilder msg = new StringBuilder("本次采集失败,保持旧数据完好。"); + + if (!failed.isEmpty()) { + msg.append("失败设备:").append(String.join(", ", failed)); + } + + if (!invalidDeviceMap.isEmpty()) { + msg.append(";采集数据不完整设备如下:"); + invalidDeviceMap.forEach((equId, tables) -> + msg.append("\n设备[").append(equId).append("] 缺少表:") + .append(String.join(", ", tables))); + } + + log.error(msg.toString()); + throw new RuntimeException(msg.toString()); } + // 事务内:删除旧表 + 插入成功设备数据 deleteAllEquipmentData(); // 删除依附表,不含 equ_gather int inserted = persistAndUpdate(successList); // 插入成功设备数据 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 4e0c876c..915247da 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 @@ -25,6 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -159,7 +160,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" b.status AS status, b.device_level AS deviceLevel, g.health AS health, - b.equ_image AS equImage + b.equ_image AS equImage, + b.floor AS floor