张世豪
2025-12-01 d23f280e37080cb9b5934350cc0fafb2c68421d5
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
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();
    }
 
    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 + '\'' +
                '}';
    }
}