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