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 baseStations; private static ConcurrentHashMap baseStationMap; // ÒÔ»ùÕ¾IDΪ¼üµÄÓ³Éä public static List 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 getOnlineBaseStations() { if (baseStationMap == null || baseStationMap.isEmpty()) { return Collections.emptyList(); // »º´æÎª¿Õʱ·µ»Ø¿Õ¼¯ºÏ } List 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(); } }