fix:太阳能网控,后台代码修改完善。
This commit is contained in:
@@ -139,33 +139,36 @@ public class DeviceSensorDataService implements IDeviceSensorDataService {
|
||||
}
|
||||
|
||||
try {
|
||||
// 打印第一条数据的详细信息
|
||||
if (!dataList.isEmpty()) {
|
||||
DeviceSensorData firstData = dataList.get(0);
|
||||
// 检查子表是否存在(使用缓存优化)
|
||||
String serialNum = firstData.getSerialNum();
|
||||
// 按 serialNum 分组,对每个设备单独检查并确保子表存在
|
||||
java.util.Map<String, DeviceSensorData> firstBySerial = new java.util.LinkedHashMap<>();
|
||||
for (DeviceSensorData data : dataList) {
|
||||
String sn = data.getSerialNum();
|
||||
if (sn != null && !sn.isEmpty() && !firstBySerial.containsKey(sn)) {
|
||||
firstBySerial.put(sn, data);
|
||||
}
|
||||
}
|
||||
|
||||
for (java.util.Map.Entry<String, DeviceSensorData> entry : firstBySerial.entrySet()) {
|
||||
String serialNum = entry.getKey();
|
||||
String tableName = "t_" + serialNum;
|
||||
|
||||
// 先检查缓存,避免重复查询数据库
|
||||
|
||||
if (!CREATED_TABLES.containsKey(serialNum)) {
|
||||
try {
|
||||
Integer exists = deviceSensorDataMapper.checkTableExists(serialNum);
|
||||
if (exists == null || exists == 0) {
|
||||
deviceSensorDataMapper.createTable(firstData);
|
||||
deviceSensorDataMapper.createTable(entry.getValue());
|
||||
log.debug("子表 {} 已创建", tableName);
|
||||
}
|
||||
// 加入缓存
|
||||
CREATED_TABLES.put(serialNum, true);
|
||||
} catch (Exception e) {
|
||||
// 检查表不存在是正常情况,使用 USING 语法会自动创建
|
||||
String errorMsg = e.getMessage();
|
||||
if (errorMsg != null && errorMsg.contains("Table does not exist")) {
|
||||
log.debug("子表 {} 不存在,将自动创建", tableName);
|
||||
} else {
|
||||
log.warn("检查子表失败: {}", errorMsg != null && errorMsg.length() > 100 ? errorMsg.substring(0, 100) : errorMsg);
|
||||
log.warn("检查子表失败[{}]: {}", tableName,
|
||||
errorMsg != null && errorMsg.length() > 100 ? errorMsg.substring(0, 100) : errorMsg);
|
||||
}
|
||||
// 即使失败也加入缓存,避免重复尝试
|
||||
CREATED_TABLES.put(serialNum, true);
|
||||
// 建表异常时不加入缓存,下次重试
|
||||
}
|
||||
} else {
|
||||
log.debug("子表 {} 已在缓存中", tableName);
|
||||
|
||||
Reference in New Issue
Block a user