张世豪
昨天 43bd281a47eeac52e649ef79ea25c0dd4d61af7d
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
package home;
import java.io.*;
import java.util.Properties;
 
/**
 * 发卡机系统配置类
 * 用于管理系统运行时的各项配置参数
 */
public class MachineConfig {
    
    // 配置属性
    private String machineId;          // 发卡机编号
    private String serverAddress;      // 服务器地址
    private int serverPort;           // 服务器端口
    private String adminPassword;      // 管理员密码
    private String fetchCardPassword;  // 取卡密码
    private String systemLanguage;     // 系统语言
    private String currentVersion;     // 当前系统版本
    private int totalSlots;           // 卡槽总数
    private String readCardMode;       // 读卡号模式
    private String defaultSerialPort;  // 默认串口
    private int pollingInterval;      // 轮询时间(毫秒)
    private int baudrate;           // 波特率
    
    // 配置文件路径
    private static final String CONFIG_FILE = "config.properties";
    
    // 默认值常量
    private static final String DEFAULT_MACHINE_ID = "M001";
    private static final String DEFAULT_SERVER_ADDRESS = "127.0.0.1";
    private static final int DEFAULT_SERVER_PORT = 8080;
    private static final String DEFAULT_ADMIN_PASSWORD = "admin123";
    private static final String DEFAULT_FETCH_CARD_PASSWORD = "fetch123";
    private static final String DEFAULT_SYSTEM_LANGUAGE = "zh-CN";
    private static final String DEFAULT_CURRENT_VERSION = "1.0.0";
    private static final int DEFAULT_TOTAL_SLOTS = 60;
    private static final String DEFAULT_READ_CARD_MODE = "AUTO";
    private static final String DEFAULT_SERIAL_PORT = "COM1";
    private static final int DEFAULT_POLLING_INTERVAL = 100;
 // 默认值常量 - 在现有常量后添加
    private static final int DEFAULT_BAUDRATE = 57600;
    
    /**
     * 构造函数 - 使用默认值初始化
     */
    public MachineConfig() {
        loadDefaultValues();
    }
    
    /**
     * 构造函数 - 从配置文件加载
     * @param configFilePath 配置文件路径
     */
    public MachineConfig(String configFilePath) {
        loadFromFile(configFilePath);
    }
    
    /**
     * 加载默认值
     */
    private void loadDefaultValues() {
        this.machineId = DEFAULT_MACHINE_ID;
        this.serverAddress = DEFAULT_SERVER_ADDRESS;
        this.serverPort = DEFAULT_SERVER_PORT;
        this.adminPassword = DEFAULT_ADMIN_PASSWORD;
        this.fetchCardPassword = DEFAULT_FETCH_CARD_PASSWORD;
        this.systemLanguage = DEFAULT_SYSTEM_LANGUAGE;
        this.currentVersion = DEFAULT_CURRENT_VERSION;
        this.totalSlots = DEFAULT_TOTAL_SLOTS;
        this.readCardMode = DEFAULT_READ_CARD_MODE;
        this.defaultSerialPort = DEFAULT_SERIAL_PORT;
        this.pollingInterval = DEFAULT_POLLING_INTERVAL;
        this.baudrate = DEFAULT_BAUDRATE;
    }
    
    /**
     * 从配置文件加载配置
     * @param filePath 配置文件路径
     */
    public void loadFromFile(String filePath) {
        Properties props = new Properties();
        try (InputStream input = new FileInputStream(filePath)) {
            props.load(input);
            
            // 读取配置值,如果不存在则使用默认值
            this.machineId = props.getProperty("machine.id", DEFAULT_MACHINE_ID);
            this.serverAddress = props.getProperty("server.address", DEFAULT_SERVER_ADDRESS);
            this.serverPort = Integer.parseInt(props.getProperty("server.port", String.valueOf(DEFAULT_SERVER_PORT)));
            this.adminPassword = props.getProperty("admin.password", DEFAULT_ADMIN_PASSWORD);
            this.fetchCardPassword = props.getProperty("fetch.card.password", DEFAULT_FETCH_CARD_PASSWORD);
            this.systemLanguage = props.getProperty("system.language", DEFAULT_SYSTEM_LANGUAGE);
            this.currentVersion = props.getProperty("current.version", DEFAULT_CURRENT_VERSION);
            this.totalSlots = Integer.parseInt(props.getProperty("total.slots", String.valueOf(DEFAULT_TOTAL_SLOTS)));
            this.readCardMode = props.getProperty("read.card.mode", DEFAULT_READ_CARD_MODE);
            this.defaultSerialPort = props.getProperty("default.serial.port", DEFAULT_SERIAL_PORT);
            this.pollingInterval = Integer.parseInt(props.getProperty("polling.interval", String.valueOf(DEFAULT_POLLING_INTERVAL)));
            this.baudrate = Integer.parseInt(props.getProperty("baudrate", String.valueOf(DEFAULT_BAUDRATE)));
            
        } catch (IOException e) {
            System.err.println("无法读取配置文件: " + filePath + ", 使用默认配置");
            loadDefaultValues();
        } catch (NumberFormatException e) {
            System.err.println("配置文件中的数字格式错误: " + e.getMessage() + ", 使用默认值");
            this.baudrate = DEFAULT_BAUDRATE;
        }
    }
    
    /**
     * 保存配置到文件
     * @param filePath 配置文件路径
     */
    public void saveToFile(String filePath) {
        Properties props = new Properties();
        
        // 设置配置属性
        props.setProperty("machine.id", this.machineId);
        props.setProperty("server.address", this.serverAddress);
        props.setProperty("server.port", String.valueOf(this.serverPort));
        props.setProperty("admin.password", this.adminPassword);
        props.setProperty("fetch.card.password", this.fetchCardPassword);
        props.setProperty("system.language", this.systemLanguage);
        props.setProperty("current.version", this.currentVersion);
        props.setProperty("total.slots", String.valueOf(this.totalSlots));
        props.setProperty("read.card.mode", this.readCardMode);
        props.setProperty("default.serial.port", this.defaultSerialPort);
        props.setProperty("polling.interval", String.valueOf(this.pollingInterval));
        props.setProperty("baudrate", String.valueOf(this.baudrate));
        try (OutputStream output = new FileOutputStream(filePath)) {
            props.store(output, "发卡机系统配置");
            System.out.println("配置已保存到: " + filePath);
        } catch (IOException e) {
            System.err.println("无法保存配置文件: " + filePath + ", 错误: " + e.getMessage());
        }
    }
    
    /**
     * 保存配置到默认文件
     */
    public void saveToFile() {
        saveToFile(CONFIG_FILE);
    }
    
    // Getter 和 Setter 方法
    
    public String getMachineId() {
        return machineId;
    }
    
    public void setMachineId(String machineId) {
        this.machineId = machineId;
    }
    
    public String getServerAddress() {
        return serverAddress;
    }
    
    public void setServerAddress(String serverAddress) {
        this.serverAddress = serverAddress;
    }
    
    public int getServerPort() {
        return serverPort;
    }
    
    public void setServerPort(int serverPort) {
        this.serverPort = serverPort;
    }
    
    public String getAdminPassword() {
        return adminPassword;
    }
    
    public void setAdminPassword(String adminPassword) {
        this.adminPassword = adminPassword;
    }
    
    public String getFetchCardPassword() {
        return fetchCardPassword;
    }
    
    public void setFetchCardPassword(String fetchCardPassword) {
        this.fetchCardPassword = fetchCardPassword;
    }
    
    public String getSystemLanguage() {
        return systemLanguage;
    }
    
    public void setSystemLanguage(String systemLanguage) {
        this.systemLanguage = systemLanguage;
    }
    
    public String getCurrentVersion() {
        return currentVersion;
    }
    
    public void setCurrentVersion(String currentVersion) {
        this.currentVersion = currentVersion;
    }
    
    public int getTotalSlots() {
        return totalSlots;
    }
    
    public void setTotalSlots(int totalSlots) {
        this.totalSlots = totalSlots;
    }
    
    public String getReadCardMode() {
        return readCardMode;
    }
    
    public void setReadCardMode(String readCardMode) {
        this.readCardMode = readCardMode;
    }
    
    public String getDefaultSerialPort() {
        return defaultSerialPort;
    }
    
    public void setDefaultSerialPort(String defaultSerialPort) {
        this.defaultSerialPort = defaultSerialPort;
    }
    
    public int getPollingInterval() {
        return pollingInterval;
    }
    
    public void setPollingInterval(int pollingInterval) {
        this.pollingInterval = pollingInterval;
    }
 // 添加Getter和Setter方法
    public int getBaudrate() {
        return baudrate;
    }
 
    public void setBaudrate(int baudrate) {
        this.baudrate = baudrate;
    }
    
    @Override
    public String toString() {
        return "MachineConfig{" +
                "machineId='" + machineId + '\'' +
                ", serverAddress='" + serverAddress + '\'' +
                ", serverPort=" + serverPort +
                ", adminPassword='" + "***" + '\'' + // 密码不直接显示
                ", fetchCardPassword='" + "***" + '\'' + // 密码不直接显示
                ", systemLanguage='" + systemLanguage + '\'' +
                ", currentVersion='" + currentVersion + '\'' +
                ", totalSlots=" + totalSlots +
                ", readCardMode='" + readCardMode + '\'' +
                ", defaultSerialPort='" + defaultSerialPort + '\'' +
                ", pollingInterval=" + pollingInterval + '\'' +
                 ", baudrate=" + baudrate +
                '}';
    }    
   
}