fix: 设备最后上数时间,历史数据同步接口修改。
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user