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 | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 180 insertions(+), 0 deletions(-) diff --git a/src/dell_targets/Dell_BaseStation.java b/src/dell_targets/Dell_BaseStation.java new file mode 100644 index 0000000..c58dd3b --- /dev/null +++ b/src/dell_targets/Dell_BaseStation.java @@ -0,0 +1,180 @@ +package dell_targets; +import databases.DBConnector; +import targets.LocationBaseStation; +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 { + 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")); + baseStation.setCode(rs.getString("base_station_id")); + baseStation.setStatus(rs.getString("statuss")); + baseStation.setXCoordinate(rs.getString("x_coordinate")); + baseStation.setYCoordinate(rs.getString("y_coordinate")); + baseStation.setZCoordinate(rs.getString("z_coordinate")); + baseStation.setLongitude(rs.getString("longitude")); + baseStation.setLatitude(rs.getString("latitude")); + baseStation.setElevation(rs.getString("elevation")); + baseStation.setHorizontalAngle(rs.getString("horizontal_angle")); + baseStation.setPitchAngle(rs.getString("pitch_angle")); + baseStation.setFloor(rs.getString("located_layer")); + baseStation.setGroup(rs.getString("located_group")); + baseStation.setRange(rs.getString("range")); + baseStation.setSyncStatus(rs.getString("sync_status")); + baseStation.setSyncType(rs.getString("sync_type")); + baseStation.setSyncBaseStation(rs.getString("sync_base_station")); + baseStation.setIpAddress(rs.getString("ip_address")); + baseStation.setPort(rs.getString("ports")); + baseStation.setFirmwareVersion(rs.getString("firmware_version")); + baseStation.setJudgmentDistance(rs.getString("judgment_distance")); + baseStation.setBattery(rs.getString("battery")); + baseStation.setCalibrationDistance(rs.getString("calibration_distance")); + baseStation.setSignalSendTime(rs.getString("signal_transmission_time")); + baseStation.setCommunicationGroup(rs.getString("communication_group")); + baseStation.setIconAddress(rs.getString("icon_url")); + baseStation.setOnlineTime(rs.getString("online_time")); + baseStation.setOfflineTime(rs.getString("offline_time")); + baseStation.setOfflineDuration(rs.getString("offline_duration")); + baseStation.setAlgorithmDimension(rs.getString("algorithm_dimension")); + baseStation.setBottomHeight(rs.getString("located_bottom_height")); + baseStation.setTopHeight(rs.getString("located_top_height")); + baseStation.setIsBarometricStation(rs.getString("barometric_base_station")); + baseStation.setSwitchDistance(rs.getString("handover_distance")); + baseStation.setMaxDistance(rs.getString("maximum_distance")); + baseStation.setOutputAllRanging(rs.getString("output_all_base_station_ranging")); + baseStation.setCompany(rs.getString("company")); + baseStation.setCrossLayerHeight(rs.getString("cross_layer_height")); + baseStation.setCrossLayerGroup(rs.getString("cross_layer_group")); + baseStation.setRequiredDistance(rs.getString("must_pass_distance")); + baseStation.setAdjacent1(rs.getString("adjacent1")); + baseStation.setAdjacent2(rs.getString("adjacent2")); + baseStation.setAdjacent3(rs.getString("adjacent3")); + baseStation.setAdjacent4(rs.getString("adjacent4")); + baseStation.setAdjacent5(rs.getString("adjacent5")); + baseStation.setAdjacent6(rs.getString("adjacent6")); + baseStation.setAdjacent7(rs.getString("adjacent7")); + baseStation.setAdjacent8(rs.getString("adjacent8")); + baseStation.setAdjacent9(rs.getString("adjacent9")); + baseStation.setAdjacent10(rs.getString("adjacent10")); + baseStation.setReserved1(rs.getString("reserved1")); + baseStation.setReserved2(rs.getString("reserved2")); + baseStation.setReserved3(rs.getString("reserved3")); + baseStation.setReserved4(rs.getString("reserved4")); + baseStation.setReserved5(rs.getString("reserved5")); + baseStation.setReserved6(rs.getString("reserved6")); + baseStation.setReserved7(rs.getString("reserved7")); + baseStation.setReserved8(rs.getString("reserved8")); + baseStation.setReserved9(rs.getString("reserved9")); + baseStation.setReserved10(rs.getString("reserved10")); + baseStation.setReserved11(rs.getString("reserved11")); + baseStation.setReserved12(rs.getString("reserved12")); + baseStation.setReserved13(rs.getString("reserved13")); + baseStation.setReserved14(rs.getString("reserved14")); + baseStation.setReserved15(rs.getString("reserved15")); + baseStation.setReserved16(rs.getString("reserved16")); + baseStations.add(baseStation); + baseStationMap.put(baseStation.getCode(), baseStation); // 以基站ID为键存入映射 + } + return baseStations; + } + + /** + * 根据基站ID高效修改属性值 + * @param baseStationId 基站ID(base_station_id) + * @param propertyName 属性名(需与setter方法匹配) + * @param value 新属性值 + */ + public static void updateBaseStationProperty(String baseStationId, String propertyName, String value) { + LocationBaseStation station = baseStationMap.get(baseStationId); + if (station == null) return; // 基站不存在则忽略 + + // 根据属性名调用对应setter(高效匹配高频属性) + switch (propertyName) { + case "status": + station.setStatus(value); break; // 更新状态 + case "battery": + station.setBattery(value); break; // 更新电量 + case "ipAddress": + station.setIpAddress(value); break; // 更新IP地址 + case "onlineTime": + station.setOnlineTime(value); break; // 更新上线时间 + case "offlineTime": + station.setOfflineTime(value); break; // 更新离线时间 + case "offlineDuration": + station.setOfflineDuration(value); break; // 更新离线时长 + case "syncStatus": + station.setSyncStatus(value); break; //同步状态 + case "barometerReading": + station.setBarometerReading(value); break; //同步状态 + + // 添加其他高频属性... + default: + throw new IllegalArgumentException("不支持属性: " + propertyName); + } + } + + /** + * 根据基站ID获取基站对象(高效访问) + * @param baseStationId 基站ID + * @return 基站对象(不存在则返回null) + */ + 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