diff --git a/intc-modules/intc-iot/src/main/java/com/intc/iot/controller/IotController.java b/intc-modules/intc-iot/src/main/java/com/intc/iot/controller/IotController.java index b99ea3b..2e1dd2a 100644 --- a/intc-modules/intc-iot/src/main/java/com/intc/iot/controller/IotController.java +++ b/intc-modules/intc-iot/src/main/java/com/intc/iot/controller/IotController.java @@ -223,6 +223,10 @@ public class IotController extends BaseController { int updated = 0; int skipped = 0; int failed = 0; + int noReportTime = 0; + int updateNoRows = 0; + List> skippedSamples = new java.util.ArrayList<>(); + List> failedSamples = new java.util.ArrayList<>(); List devices = deviceMapper.selectList( new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() @@ -236,7 +240,9 @@ public class IotController extends BaseController { try { String latestTime = deviceSensorDataService.getLatestReportTime(device.getSerialNum()); if (latestTime == null || latestTime.isBlank()) { + noReportTime++; skipped++; + addBackfillSample(skippedSamples, device, "TDengine未查到最新上数时间"); continue; } @@ -246,10 +252,13 @@ public class IotController extends BaseController { if (deviceMapper.updateById(updateDevice) > 0) { updated++; } else { + updateNoRows++; skipped++; + addBackfillSample(skippedSamples, device, "业务库更新影响行数为0"); } } catch (Exception e) { failed++; + addBackfillSample(failedSamples, device, e.getMessage()); log.warn("回填设备最后上数时间失败: deviceId={}, serialNum={}, error={}", device.getId(), device.getSerialNum(), e.getMessage()); } @@ -260,9 +269,24 @@ public class IotController extends BaseController { result.put("updated", updated); result.put("skipped", skipped); result.put("failed", failed); + result.put("noReportTime", noReportTime); + result.put("updateNoRows", updateNoRows); + result.put("skippedSamples", skippedSamples); + result.put("failedSamples", failedSamples); return result; } + private void addBackfillSample(List> samples, Device device, String reason) { + if (samples.size() >= 10) { + return; + } + Map 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) { String normalized = normalizeReportTime(time); return Date.from(LocalDateTime.parse(normalized, DATETIME_FORMATTER) diff --git a/intc-modules/intc-tdengine/src/main/java/com/intc/tdengine/service/impl/DeviceSensorDataService.java b/intc-modules/intc-tdengine/src/main/java/com/intc/tdengine/service/impl/DeviceSensorDataService.java index fb7cdb8..698400a 100644 --- a/intc-modules/intc-tdengine/src/main/java/com/intc/tdengine/service/impl/DeviceSensorDataService.java +++ b/intc-modules/intc-tdengine/src/main/java/com/intc/tdengine/service/impl/DeviceSensorDataService.java @@ -266,17 +266,18 @@ public class DeviceSensorDataService implements IDeviceSensorDataService { return null; } try { - Integer exists = deviceSensorDataMapper.checkTableExists(serialNum); - if (exists == null || exists == 0) { - return null; - } DeviceSensorData latest = deviceSensorDataMapper.getLatestReportTime(serialNum); if (latest == null) { return null; } return latest.getCreateTime() != null ? latest.getCreateTime() : latest.getTime(); } 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; } }