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();
|
}
|
|
}
|