fix: 设备最后上数时间,历史数据同步接口修改。

This commit is contained in:
tianyongbao
2026-06-04 14:57:23 +08:00
parent f4bd1c6942
commit fcd5bcd032
2 changed files with 30 additions and 5 deletions

View File

@@ -223,6 +223,10 @@ public class IotController extends BaseController {
int updated = 0; int updated = 0;
int skipped = 0; int skipped = 0;
int failed = 0; int failed = 0;
int noReportTime = 0;
int updateNoRows = 0;
List<Map<String, Object>> skippedSamples = new java.util.ArrayList<>();
List<Map<String, Object>> failedSamples = new java.util.ArrayList<>();
List<Device> devices = deviceMapper.selectList( List<Device> devices = deviceMapper.selectList(
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Device>() new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Device>()
@@ -236,7 +240,9 @@ public class IotController extends BaseController {
try { try {
String latestTime = deviceSensorDataService.getLatestReportTime(device.getSerialNum()); String latestTime = deviceSensorDataService.getLatestReportTime(device.getSerialNum());
if (latestTime == null || latestTime.isBlank()) { if (latestTime == null || latestTime.isBlank()) {
noReportTime++;
skipped++; skipped++;
addBackfillSample(skippedSamples, device, "TDengine未查到最新上数时间");
continue; continue;
} }
@@ -246,10 +252,13 @@ public class IotController extends BaseController {
if (deviceMapper.updateById(updateDevice) > 0) { if (deviceMapper.updateById(updateDevice) > 0) {
updated++; updated++;
} else { } else {
updateNoRows++;
skipped++; skipped++;
addBackfillSample(skippedSamples, device, "业务库更新影响行数为0");
} }
} catch (Exception e) { } catch (Exception e) {
failed++; failed++;
addBackfillSample(failedSamples, device, e.getMessage());
log.warn("回填设备最后上数时间失败: deviceId={}, serialNum={}, error={}", log.warn("回填设备最后上数时间失败: deviceId={}, serialNum={}, error={}",
device.getId(), device.getSerialNum(), e.getMessage()); device.getId(), device.getSerialNum(), e.getMessage());
} }
@@ -260,9 +269,24 @@ public class IotController extends BaseController {
result.put("updated", updated); result.put("updated", updated);
result.put("skipped", skipped); result.put("skipped", skipped);
result.put("failed", failed); result.put("failed", failed);
result.put("noReportTime", noReportTime);
result.put("updateNoRows", updateNoRows);
result.put("skippedSamples", skippedSamples);
result.put("failedSamples", failedSamples);
return result; return result;
} }
private void addBackfillSample(List<Map<String, Object>> samples, Device device, String reason) {
if (samples.size() >= 10) {
return;
}
Map<String, Object> sample = new java.util.HashMap<>();
sample.put("deviceId", device.getId());
sample.put("serialNum", device.getSerialNum());
sample.put("reason", reason);
samples.add(sample);
}
private Date parseReportTime(String time) { private Date parseReportTime(String time) {
String normalized = normalizeReportTime(time); String normalized = normalizeReportTime(time);
return Date.from(LocalDateTime.parse(normalized, DATETIME_FORMATTER) return Date.from(LocalDateTime.parse(normalized, DATETIME_FORMATTER)

View File

@@ -266,17 +266,18 @@ public class DeviceSensorDataService implements IDeviceSensorDataService {
return null; return null;
} }
try { try {
Integer exists = deviceSensorDataMapper.checkTableExists(serialNum);
if (exists == null || exists == 0) {
return null;
}
DeviceSensorData latest = deviceSensorDataMapper.getLatestReportTime(serialNum); DeviceSensorData latest = deviceSensorDataMapper.getLatestReportTime(serialNum);
if (latest == null) { if (latest == null) {
return null; return null;
} }
return latest.getCreateTime() != null ? latest.getCreateTime() : latest.getTime(); return latest.getCreateTime() != null ? latest.getCreateTime() : latest.getTime();
} catch (Exception e) { } catch (Exception e) {
log.warn("查询设备最新上数时间失败: serialNum={}, error={}", serialNum, e.getMessage()); String errorMsg = e.getMessage();
if (errorMsg != null && errorMsg.toLowerCase().contains("not exist")) {
log.debug("设备TDengine子表不存在或无数据: serialNum={}", serialNum);
} else {
log.warn("查询设备最新上数时间失败: serialNum={}, error={}", serialNum, errorMsg);
}
return null; return null;
} }
} }