From 45992216068be1ff718dea2601a9e86182349e18 Mon Sep 17 00:00:00 2001 From: zhugongping Date: Mon, 5 Oct 2026 19:45:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=AE=BE=E7=BD=AE=EF=BC=9A?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot/service/impl/DeviceServiceImpl.java | 55 +++++++++++++------ 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java index d9ec3eda..8ff18684 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java @@ -1026,24 +1026,12 @@ public class DeviceServiceImpl implements IDeviceService { if (CollectionUtils.isEmpty(list)) { return new ArrayList<>(); } - List serialNumberList; - SysUser user = getLoginUser().getUser(); - if (null != user.getDept()) { - Long tenantId = user.getDept().getDeptUserId(); - serialNumberList = list.stream().filter(d -> tenantId.equals(d.getTenantId())) - .map(DeviceShortOutput::getSerialNumber).collect(Collectors.toList()); - } else { - serialNumberList = list.stream().map(DeviceShortOutput::getSerialNumber).collect(Collectors.toList()); + Integer entrance = null == device ? null : device.getEntrance(); + // 未处理告警数(alertCount)只有详情,根据产品查询设备详情 entrance=4 + if (Integer.valueOf(4).equals(entrance)) { + fillAlertCount(list); } - if (!CollectionUtils.isEmpty(serialNumberList)) { - List alist = alertLogService.selectDeviceAlertCount(serialNumberList); - for (DeviceAlertCount item : alist) { - list.stream() - .filter(it -> Objects.equals(it.getSerialNumber(), item.getSerialNumber())) - .forEach(it -> it.setAlertCount(item)); - } - } - fillShortListLatestReportTime(list, device.getEntrance()); + fillShortListLatestReportTime(list, entrance); long took = System.currentTimeMillis() - startTime; if (took > 1000L) { log.warn("selectDeviceShortList took: {}", took); @@ -1051,6 +1039,39 @@ public class DeviceServiceImpl implements IDeviceService { return list; } + /** + * 回填设备未处理告警数(DeviceShortOutput#alertCount)。 + *

+ * 只统计当前登录用户自己租户的设备:存在部门时按 dept.deptUserId 过滤, + * 因此「查询下级机构」带出来的下级机构设备不会带告警徽标。 + */ + private void fillAlertCount(List list) { + SysUser user = getLoginUser().getUser(); + Long deptUserId = null != user.getDept() ? user.getDept().getDeptUserId() : null; + List serialNumberList = list.stream() + .filter(d -> null == deptUserId || deptUserId.equals(d.getTenantId())) + .map(DeviceShortOutput::getSerialNumber) + .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(serialNumberList)) { + return; + } + List alertCountList = alertLogService.selectDeviceAlertCount(serialNumberList); + if (CollectionUtils.isEmpty(alertCountList)) { + return; + } + // 先按 serialNumber 建索引再回填,避免原先的嵌套 stream 匹配(O(设备数 × 告警行数)) + Map alertCountMap = new HashMap<>(alertCountList.size()); + for (DeviceAlertCount item : alertCountList) { + alertCountMap.put(item.getSerialNumber(), item); + } + for (DeviceShortOutput row : list) { + DeviceAlertCount alertCount = alertCountMap.get(row.getSerialNumber()); + if (null != alertCount) { + row.setAlertCount(alertCount); + } + } + } + /** * 查询当前用户可见设备统计(与 shortList 相同范围) */