Commit 2b4a60a9 authored by tianbo's avatar tianbo

refactor(jg):优化设备维保与检验超期数据处理逻辑

- 使用流式过滤替代集合removeAll操作,提高数据筛选准确性 - 添加分批处理机制,避免大数据量更新时性能问题 - 增加关键节点日志记录,便于追踪处理过程与数据量变化- 完善空值校验,确保数据更新前的有效性检查 - 统一处理逻辑结构,提升代码可读性与维护性
parent b13041f8
...@@ -277,17 +277,27 @@ public class SafetyProblemTracingGenServiceImpl{ ...@@ -277,17 +277,27 @@ public class SafetyProblemTracingGenServiceImpl{
correctData.addAll(inspectionSet); correctData.addAll(inspectionSet);
} else if (!maintenanceSet.isEmpty()) { } else if (!maintenanceSet.isEmpty()) {
// 再次查询维保备案这些数据有没有检验超期的问题 // 再次查询维保备案这些数据有没有检验超期的问题
maintenanceSet.removeAll(realOutOfInspectRecord); // 找出仅在maintenanceSet中而不在realOutOfInspectRecord中的元素(真正需要更新的维保数据)
// 没有则可以愉快地更新设备状态为正常 List<String> maintenanceOnly = maintenanceSet.stream()
correctData.addAll(maintenanceSet); .filter(id -> !realOutOfMaintenanceRecord.contains(id))
// 再次查询检验这些数据有没有维保超期问题 .collect(Collectors.toList());
inspectionSet.removeAll(realOutOfMaintenanceRecord); // 找出仅在inspectionSet中而不在realOutOfMaintenanceRecord中的元素(真正需要更新的检验数据)
// 没有则可以愉快地更新设备状态为正常 List<String> inspectionOnly = inspectionSet.stream()
correctData.addAll(inspectionSet); .filter(id -> !realOutOfInspectRecord.contains(id))
.collect(Collectors.toList());
correctData.addAll(maintenanceOnly);
correctData.addAll(inspectionOnly);
}
if (!ValidationUtil.isEmpty(correctData)) {
logger.info("开始更新设备表和ES数据状态--updateOtherTableAndES");
int batchSize = 1000;
for (int i = 0; i < correctData.size(); i += batchSize) {
List<String> batch = correctData.subList(i, Math.min(i + batchSize, correctData.size()));
safetyProblemTracingService.updateOtherTableAndES(Sets.newHashSet(batch));
}
logger.info("更新设备表和ES数据状态完成--updateOtherTableAndES,更新数据:{}条", correctData.size());
} }
safetyProblemTracingService.updateOtherTableAndES(Sets.newHashSet(correctData));
logger.info("设备维保备案和检验超期数据修正完成,更新数据:{}条", correctData.size());
} }
private List<String> handleOutOfMaintenanceErrorData(Set<String> realOutOfMaintenanceRecord) { private List<String> handleOutOfMaintenanceErrorData(Set<String> realOutOfMaintenanceRecord) {
...@@ -295,6 +305,7 @@ public class SafetyProblemTracingGenServiceImpl{ ...@@ -295,6 +305,7 @@ public class SafetyProblemTracingGenServiceImpl{
if (ValidationUtil.isEmpty(realOutOfMaintenanceRecord)) { if (ValidationUtil.isEmpty(realOutOfMaintenanceRecord)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
logger.info("设备维保超期safety表数据修正开始,实际检验超期数据:{}条", realOutOfMaintenanceRecord.size());
List<SafetyProblemTracing> problemList = safetyProblemTracingService.list(new LambdaQueryWrapper<SafetyProblemTracing>() List<SafetyProblemTracing> problemList = safetyProblemTracingService.list(new LambdaQueryWrapper<SafetyProblemTracing>()
.select(SafetyProblemTracing::getSourceId) .select(SafetyProblemTracing::getSourceId)
.eq(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.UNHANDLED.getCode()) .eq(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.UNHANDLED.getCode())
...@@ -305,20 +316,29 @@ public class SafetyProblemTracingGenServiceImpl{ ...@@ -305,20 +316,29 @@ public class SafetyProblemTracingGenServiceImpl{
return Lists.newArrayList(); return Lists.newArrayList();
} }
// 追溯问题表中未处理的维保超期设备 // 追溯问题表中未处理的维保超期设备
List<String> outOfMaintenanceEquipIds = problemList.stream().map(SafetyProblemTracing::getSourceId).collect(Collectors.toList());
// 未超期但错误生成的维保超期设备 // 未超期但错误生成的维保超期设备
outOfMaintenanceEquipIds.removeIf(realOutOfMaintenanceRecord::contains); List<String> outOfMaintenanceEquipIds = problemList.stream()
.map(SafetyProblemTracing::getSourceId)
.filter(id -> !realOutOfMaintenanceRecord.contains(id))
.collect(Collectors.toList());
if (ValidationUtil.isEmpty(outOfMaintenanceEquipIds)) { if (ValidationUtil.isEmpty(outOfMaintenanceEquipIds)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
safetyProblemTracingService.lambdaUpdate() logger.info("设备维保超期safety表数据修正开始,待更新数据:{}条", outOfMaintenanceEquipIds.size());
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode()) // 分批处理更新
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName()) int batchSize = 1000;
.set(SafetyProblemTracing::getRecDate, new Date()) for (int i = 0; i < outOfMaintenanceEquipIds.size(); i += batchSize) {
.in(SafetyProblemTracing::getSourceId, outOfMaintenanceEquipIds) List<String> batch = outOfMaintenanceEquipIds.subList(i, Math.min(i + batchSize, outOfMaintenanceEquipIds.size()));
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.WBCQ.getProblemTypeCode()) safetyProblemTracingService.lambdaUpdate()
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE) .set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.update(); .set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.set(SafetyProblemTracing::getRecDate, new Date())
.in(SafetyProblemTracing::getSourceId, batch)
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.WBCQ.getProblemTypeCode())
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE)
.update();
}
logger.info("设备维保超期safety表数据修正完成,已更新数据:{}条", outOfMaintenanceEquipIds.size());
return outOfMaintenanceEquipIds; return outOfMaintenanceEquipIds;
} }
...@@ -327,6 +347,7 @@ public class SafetyProblemTracingGenServiceImpl{ ...@@ -327,6 +347,7 @@ public class SafetyProblemTracingGenServiceImpl{
if (ValidationUtil.isEmpty(realOutOfInspectRecord)) { if (ValidationUtil.isEmpty(realOutOfInspectRecord)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
logger.info("设备检验超期safety表数据修正开始,实际检验超期数据:{}条", realOutOfInspectRecord.size());
List<SafetyProblemTracing> problemList = safetyProblemTracingService.list(new LambdaQueryWrapper<SafetyProblemTracing>() List<SafetyProblemTracing> problemList = safetyProblemTracingService.list(new LambdaQueryWrapper<SafetyProblemTracing>()
.select(SafetyProblemTracing::getSourceId) .select(SafetyProblemTracing::getSourceId)
.eq(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.UNHANDLED.getCode()) .eq(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.UNHANDLED.getCode())
...@@ -337,20 +358,29 @@ public class SafetyProblemTracingGenServiceImpl{ ...@@ -337,20 +358,29 @@ public class SafetyProblemTracingGenServiceImpl{
return Lists.newArrayList(); return Lists.newArrayList();
} }
// 追溯问题表中未处理的检验超期设备 // 追溯问题表中未处理的检验超期设备
List<String> outOfInspectionEquipIds = problemList.stream().map(SafetyProblemTracing::getSourceId).collect(Collectors.toList());
// 未超期但错误生成的检验超期设备 // 未超期但错误生成的检验超期设备
outOfInspectionEquipIds.removeIf(realOutOfInspectRecord::contains); List<String> outOfInspectionEquipIds = problemList.stream()
.map(SafetyProblemTracing::getSourceId)
.filter(id -> !realOutOfInspectRecord.contains(id))
.collect(Collectors.toList());
if (ValidationUtil.isEmpty(outOfInspectionEquipIds)) { if (ValidationUtil.isEmpty(outOfInspectionEquipIds)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
safetyProblemTracingService.lambdaUpdate() logger.info("设备检验超期safety表数据修正开始,待更新数据:{}条", outOfInspectionEquipIds.size());
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode()) // 分批处理更新
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName()) int batchSize = 1000;
.set(SafetyProblemTracing::getRecDate, new Date()) for (int i = 0; i < outOfInspectionEquipIds.size(); i += batchSize) {
.in(SafetyProblemTracing::getSourceId, outOfInspectionEquipIds) List<String> batch = outOfInspectionEquipIds.subList(i, Math.min(i + batchSize, outOfInspectionEquipIds.size()));
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.JYCQ.getProblemTypeCode()) safetyProblemTracingService.lambdaUpdate()
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE) .set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.update(); .set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.set(SafetyProblemTracing::getRecDate, new Date())
.in(SafetyProblemTracing::getSourceId, batch)
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.JYCQ.getProblemTypeCode())
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE)
.update();
}
logger.info("设备检验超期safety表数据修正完成,已更新数据:{}条", outOfInspectionEquipIds.size());
return outOfInspectionEquipIds; return outOfInspectionEquipIds;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment