张世豪
2025-12-05 2144172c7b961d4112850692ed77b46f1ae5d373
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package baseStation;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
 
/**
 * 基站信息类,负责加载/更新 basestation.properties。
 */
public class BaseStation {
    private static final String PROPERTIES_FILE = "basestation.properties";
 
    private String deviceId;
    private String installationCoordinates;
    private String iotSimCardNumber;
    private String deviceActivationTime;
    private String dataUpdateTime;
 
    public BaseStation() {
        setDefaults();
    }
 
    /**
     * 从 basestation.properties 加载数据,失败时回落为默认值 -1。
     */
    public void load() {
        Properties properties = new Properties();
        try (FileInputStream input = new FileInputStream(PROPERTIES_FILE)) {
            properties.load(input);
            this.deviceId = properties.getProperty("deviceId", "-1");
            this.installationCoordinates = properties.getProperty("installationCoordinates", "-1");
            this.iotSimCardNumber = properties.getProperty("iotSimCardNumber", "-1");
            this.deviceActivationTime = properties.getProperty("deviceActivationTime", "-1");
            this.dataUpdateTime = properties.getProperty("dataUpdateTime", "-1");
        } catch (IOException ex) {
            System.err.println("无法读取 basestation.properties: " + ex.getMessage());
            setDefaults();
        }
    }
 
    private void setDefaults() {
        this.deviceId = "-1";
        this.installationCoordinates = "-1";
        this.iotSimCardNumber = "-1";
        this.deviceActivationTime = "-1";
        this.dataUpdateTime = "-1";
    }
 
    /**
     * 根据设备编号更新属性并持久化。
     */
    public void updateByDeviceId(String newDeviceId,
                                 String newInstallationCoordinates,
                                 String newIotSimCardNumber,
                                 String newActivationTime,
                                 String newUpdateTime) {
        if (newDeviceId == null || newDeviceId.trim().isEmpty()) {
            throw new IllegalArgumentException("设备编号不能为空");
        }
        this.deviceId = newDeviceId.trim();
        this.installationCoordinates = valueOrDefault(newInstallationCoordinates);
        this.iotSimCardNumber = valueOrDefault(newIotSimCardNumber);
        this.deviceActivationTime = valueOrDefault(newActivationTime);
        this.dataUpdateTime = valueOrDefault(newUpdateTime);
        save();
    }
 
    private String valueOrDefault(String value) {
        if (value == null || value.trim().isEmpty()) {
            return "-1";
        }
        return value.trim();
    }
 
    /**
     * 更新基站安装坐标并立即持久化到 basestation.properties。
     */
    public void updateInstallationCoordinates(String newInstallationCoordinates) {
        this.installationCoordinates = valueOrDefault(newInstallationCoordinates);
        save();
    }
 
    private void save() {
        Properties properties = new Properties();
        properties.setProperty("deviceId", deviceId);
        properties.setProperty("installationCoordinates", installationCoordinates);
        properties.setProperty("iotSimCardNumber", iotSimCardNumber);
        properties.setProperty("deviceActivationTime", deviceActivationTime);
        properties.setProperty("dataUpdateTime", dataUpdateTime);
 
        try (FileOutputStream output = new FileOutputStream(PROPERTIES_FILE);
             OutputStreamWriter writer = new OutputStreamWriter(output, StandardCharsets.UTF_8)) {
            properties.store(writer, "Base station properties");
        } catch (IOException ex) {
            System.err.println("无法保存 basestation.properties: " + ex.getMessage());
        }
    }
 
    public String getDeviceId() {
        return deviceId;
    }
 
    public String getInstallationCoordinates() {
        return installationCoordinates;
    }
 
    public String getIotSimCardNumber() {
        return iotSimCardNumber;
    }
 
    public String getDeviceActivationTime() {
        return deviceActivationTime;
    }
 
    public String getDataUpdateTime() {
        return dataUpdateTime;
    }
 
    @Override
    public String toString() {
        return "BaseStation{" +
                "deviceId='" + deviceId + '\'' +
                ", installationCoordinates='" + installationCoordinates + '\'' +
                ", iotSimCardNumber='" + iotSimCardNumber + '\'' +
                ", deviceActivationTime='" + deviceActivationTime + '\'' +
                ", dataUpdateTime='" + dataUpdateTime + '\'' +
                '}';
    }
}