From a8a90fd2d5040e66cc66b3da122a7f82561ff6f6 Mon Sep 17 00:00:00 2001 From: 826220679@qq.com <826220679@qq.com> Date: 星期六, 09 八月 2025 23:32:29 +0800 Subject: [PATCH] 优化了欢迎页面 --- src/dell_targets/Dell_BaseStation.java | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/dell_targets/Dell_BaseStation.java b/src/dell_targets/Dell_BaseStation.java index 67002d3..c58dd3b 100644 --- a/src/dell_targets/Dell_BaseStation.java +++ b/src/dell_targets/Dell_BaseStation.java @@ -4,18 +4,23 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.concurrent.ConcurrentHashMap; public class Dell_BaseStation { - static List<LocationBaseStation> baseStations; + public static List<LocationBaseStation> baseStations; private static ConcurrentHashMap<String, LocationBaseStation> baseStationMap; // 以基站ID为键的映射 public static List<LocationBaseStation> getBaseStations() throws SQLException { baseStations = new ArrayList<>(); baseStationMap = new ConcurrentHashMap<>(); // 修复:初始化映射 ResultSet rs = DBConnector.queryTableData("location_base_station"); - + if (rs == null) { + // 说明底层拿不到数据,直接抛异常或打印日志 + throw new SQLException("DBConnector.queryTableData returned null, " + + "please check database connection & SQL."); + } while (rs.next()) { LocationBaseStation baseStation = new LocationBaseStation(); baseStation.setId((int) rs.getLong("id")); @@ -133,5 +138,43 @@ public static LocationBaseStation getBaseStationById(String baseStationId) { return baseStationMap.get(baseStationId); // O(1)复杂度直接获取 } + + /** + * 获取所有在线状态(onlineStatus=1)的设备(高效内存操作) + * @return 不可修改的baseStationMap集合(避免外部修改缓存) + */ + public static List<LocationBaseStation> getOnlineBaseStations() { + if (baseStationMap == null || baseStationMap.isEmpty()) { + return Collections.emptyList(); // 缓存为空时返回空集合 + } + + List<LocationBaseStation> BaseStation = new ArrayList<>(); + for (LocationBaseStation base : baseStationMap.values()) { + if ("1".equals(base.getStatus())) { // 字符串比较避免NPE + BaseStation.add(base); + } + } + return Collections.unmodifiableList(BaseStation); // 返回不可变集合 + } + + /** + * 快速获取LocationTag对象的总数(使用内存缓存提高性能) + * @return LocationTag对象的总数 + */ + public static int getLocationBaseCount() { + if (baseStationMap == null) { + synchronized (LocationBaseStation.class) { + if (baseStationMap == null) { + try { + getBaseStations(); // 初始化缓存 + } catch (SQLException e) { + e.printStackTrace(); + return 0; // 初始化失败返回0 + } + } + } + } + return baseStationMap.size(); + } } \ No newline at end of file -- Gitblit v1.9.3