fix:太阳能网控,后台代码修改完善。

This commit is contained in:
tianyongbao
2026-04-25 06:49:58 +08:00
parent 9217efc155
commit 03c8bfb276
8 changed files with 61 additions and 21 deletions

View File

@@ -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);