Commit 9d8e0b1b authored by tianbo's avatar tianbo

refactor(jg): 优化特种设备查询和维护逻辑

- 修改 CommonMapper 中的查询逻辑,使用 INSPECT_DATE 替代 NEXT_INSPECT_DATE - 优化 JgMaintenanceContractServiceImpl 中的查询条件处理 - 重构 SafetyProblemTracingGenServiceImpl 中的数据修正逻辑 - 优化 JgUseRegistrationMapper 中的查询 SQL,提高查询效率
parent dff61cf6
......@@ -1115,7 +1115,7 @@
SELECT "RECORD","NEXT_INSPECT_DATE",rowNum1
FROM
(
SELECT ROW_NUMBER () OVER ( PARTITION BY "RECORD" ORDER BY "NEXT_INSPECT_DATE" DESC) AS rowNum1,"RECORD", "NEXT_INSPECT_DATE"
SELECT ROW_NUMBER () OVER ( PARTITION BY "RECORD" ORDER BY "INSPECT_DATE" DESC) AS rowNum1,"RECORD", "NEXT_INSPECT_DATE"
FROM
idx_biz_jg_inspection_detection_info where "NEXT_INSPECT_DATE" is not null
) d
......
......@@ -135,9 +135,12 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC
companyType = companyTypeMap.get("companyType").toString();
}
if ("supervision".equals(companyLevel)) {
// 监管单位用"接收机构统一使用代码"匹配
dto.setReceiveOrgCodeFilter(company.getCompanyCode());
dto.setOrgBranchCode(company.getOrgCode());
// 监管单位查询
if (client.equals("jgLook")) {
dto.setOrgBranchCode(company.getOrgCode());
} else { // 接收机构查询
dto.setReceiveOrgCodeFilter(company.getCompanyCode());
}
} else if ("company".equals(companyLevel)) {
if (companyType.contains(CompanyTypeEnum.USE.getCode()) || companyType.contains(CompanyTypeEnum.INDIVIDUAL.getCode())) {
// 使用单位用"使用单位统一信用代码"匹配数据
......
......@@ -26,10 +26,7 @@ import org.springframework.stereotype.Service;
import org.typroject.tyboot.component.emq.EmqKeeper;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
* 安全追溯问题生成服务实现类
......@@ -123,36 +120,104 @@ public class SafetyProblemTracingGenServiceImpl{
public void update3MaintenanceCheck() {
logger.info("开始修正数据");
List<String> oldAllRecords = idxBizJgOtherInfoService.getBaseMapper()
.selectList(new LambdaQueryWrapper<IdxBizJgOtherInfo>()
.eq(IdxBizJgOtherInfo::getStatus, SafetyProblemStatusEnum.UNHANDLED.getCode()))
.stream()
.map(IdxBizJgOtherInfo::getRecord)
.collect(Collectors.toList());
logger.info("总的旧数据条数:{}",oldAllRecords.size());
List<Map<String, Object>> outOfMaintenanceRecords = commonMapper.queryOutOfMaintenanceRecord();
List<String> realRecordsMain = outOfMaintenanceRecords.stream().map(m -> m.get("RECORD").toString()).collect(Collectors.toList());
List<Map<String, Object>> outOfInspectionRecords = commonMapper.queryOutOfInspectionRecord();
List<String> realRecordsInsp = outOfInspectionRecords.stream().map(m -> m.get("RECORD").toString()).collect(Collectors.toList());
realRecordsMain.addAll(realRecordsInsp);
logger.info("正常数据条数:{}", realRecordsMain.size());
List<String> errorRecord = oldAllRecords.stream().filter(item -> !realRecordsMain.contains(item)).collect(Collectors.toList());
logger.info("异常数据条数---------------:{}",errorRecord.size());
Set<String> realOutOfMaintenanceRecord = commonMapper.queryOutOfMaintenanceRecord().stream().map(m -> m.get("RECORD").toString()).collect(Collectors.toSet());
Set<String> realOutOfInspectRecord = commonMapper.queryOutOfInspectionRecord().stream().map(m -> m.get("RECORD").toString()).collect(Collectors.toSet());
// 需要修正业务表+es的数据
List<String> correctData = Lists.newArrayList();
// 1.处理维保超期错误数据
List<String> outOfMaintenanceErrorData = handleOutOfMaintenanceErrorData(realOutOfMaintenanceRecord);
// 2.处理检验超期错误数据
List<String> outOfInspectionErrorData = handleOutOfInspectionErrorData(realOutOfInspectRecord);
// 3.修正业务表+es数据状态
if (ValidationUtil.isEmpty(outOfMaintenanceErrorData) && ValidationUtil.isEmpty(outOfInspectionErrorData)) {
// 没有需要修正的数据
return;
}
Set<String> maintenanceSet = new HashSet<>(ValidationUtil.isEmpty(outOfMaintenanceErrorData) ? Collections.emptyList() : outOfMaintenanceErrorData);
Set<String> inspectionSet = new HashSet<>(ValidationUtil.isEmpty(outOfInspectionErrorData) ? Collections.emptyList() : outOfInspectionErrorData);
if (!maintenanceSet.isEmpty() && inspectionSet.isEmpty()) {
// 仅有维保备案错误数据
correctData.addAll(maintenanceSet);
} else if (maintenanceSet.isEmpty() && !inspectionSet.isEmpty()) {
// 仅有检验超期错误数据
correctData.addAll(inspectionSet);
} else if (!maintenanceSet.isEmpty()) {
// 再次查询维保备案这些数据有没有检验超期的问题
// 没有则可以愉快地更新设备状态为正常
maintenanceSet.retainAll(realOutOfInspectRecord);
// 再次查询检验这些数据有没有维保超期问题
// 没有则可以愉快地更新设备状态为正常
inspectionSet.retainAll(realOutOfMaintenanceRecord);
correctData.addAll(maintenanceSet);
correctData.addAll(inspectionSet);
}
idxBizJgOtherInfoService.lambdaUpdate().set(IdxBizJgOtherInfo::getStatus, null)
.in(IdxBizJgOtherInfo::getRecord, correctData).update();
Iterable<ESEquipmentCategoryDto> equipEsDtoIter = esEquipmentCategory.findAllById(correctData);
for (ESEquipmentCategoryDto equipEsDto : equipEsDtoIter) {
equipEsDto.setProblemStatus(null);
}
esEquipmentCategory.saveAll(equipEsDtoIter);
logger.info("修改正数据条数:{}", correctData.size());
}
private List<String> handleOutOfMaintenanceErrorData(Set<String> realOutOfMaintenanceRecord) {
// 设备表到今日维保超期设备realOutOfMaintenanceRecord
if (ValidationUtil.isEmpty(realOutOfMaintenanceRecord)) {
return Lists.newArrayList();
}
List<SafetyProblemTracing> problemList = safetyProblemTracingService.list(new LambdaQueryWrapper<SafetyProblemTracing>()
.select(SafetyProblemTracing::getSourceId)
.eq(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.UNHANDLED.getCode())
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.WBCQ.getProblemTypeCode())
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE)
);
if (ValidationUtil.isEmpty(problemList)) {
return Lists.newArrayList();
}
// 追溯问题表中未处理的维保超期设备
List<String> outOfMaintenanceEquipIds = problemList.stream().map(SafetyProblemTracing::getSourceId).collect(Collectors.toList());
// 未超期但错误生成的维保超期设备
outOfMaintenanceEquipIds.removeIf(realOutOfMaintenanceRecord::contains);
safetyProblemTracingService.lambdaUpdate()
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.in(SafetyProblemTracing::getSourceId, errorRecord)
.in(SafetyProblemTracing::getSourceId, outOfMaintenanceEquipIds)
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.WBCQ.getProblemTypeCode())
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE)
.update();
idxBizJgOtherInfoService.lambdaUpdate().set(IdxBizJgOtherInfo::getStatus, null)
.in(IdxBizJgOtherInfo::getRecord, errorRecord).update();
Iterable<ESEquipmentCategoryDto> equipEsDtoIter = esEquipmentCategory.findAllById(errorRecord);
for (ESEquipmentCategoryDto equipEsDto : equipEsDtoIter) {
equipEsDto.setProblemStatus(null);
return outOfMaintenanceEquipIds;
}
private List<String> handleOutOfInspectionErrorData(Set<String> realOutOfInspectRecord) {
// 设备表到今日检验超期设备realOutOfInspectRecord
if (ValidationUtil.isEmpty(realOutOfInspectRecord)) {
return Lists.newArrayList();
}
esEquipmentCategory.saveAll(equipEsDtoIter);
logger.info("修改正数据条数:{}",errorRecord.size());
List<SafetyProblemTracing> problemList = safetyProblemTracingService.list(new LambdaQueryWrapper<SafetyProblemTracing>()
.select(SafetyProblemTracing::getSourceId)
.eq(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.UNHANDLED.getCode())
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.JYCQ.getProblemTypeCode())
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE)
);
if (ValidationUtil.isEmpty(problemList)) {
return Lists.newArrayList();
}
// 追溯问题表中未处理的检验超期设备
List<String> outOfInspectionEquipIds = problemList.stream().map(SafetyProblemTracing::getSourceId).collect(Collectors.toList());
// 未超期但错误生成的检验超期设备
outOfInspectionEquipIds.removeIf(realOutOfInspectRecord::contains);
safetyProblemTracingService.lambdaUpdate()
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.in(SafetyProblemTracing::getSourceId, outOfInspectionEquipIds)
.eq(SafetyProblemTracing::getProblemTypeCode, SafetyProblemTypeEnum.JYCQ.getProblemTypeCode())
.eq(SafetyProblemTracing::getIsDelete,Boolean.FALSE)
.update();
return outOfInspectionEquipIds;
}
private void updateEquipAndSendMessage(List<Map<String, Object>> mapList, SafetyProblemTypeEnum safetyProblemTypeEnum) {
......
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