Commit 0b6225ae authored by tianbo's avatar tianbo

refactor(amos-boot-module-jg): 优化设备问题处理逻辑- 修复了设备问题处理时的状态更新逻辑

- 优化了代码结构,提高了可读性和可维护性 - 添加了日志记录,便于问题排查 -优化了 SQL 查询,提高了查询效率
parent ce7ba6ec
......@@ -2697,7 +2697,7 @@
LEFT JOIN idx_biz_jg_supervision_info si on si."RECORD" = ui."RECORD"
LEFT JOIN idx_biz_jg_factory_info fi on fi."RECORD" = ui."RECORD"
WHERE ui."USE_DATE" is not null and ui."IS_INTO_MANAGEMENT" = true and ri."EQU_LIST" = '2000' and di."DESIGN_USE_DATE" is not null
and ui."USE_DATE" not in ('null','不详','/') and di."DESIGN_USE_DATE" not in ('null','不详','/') and di.OVER_DESIGN_REG_NUM = 0
and ui."USE_DATE" not in ('null','不详','/') and di."DESIGN_USE_DATE" not in ('null','不详','/') and di."OVER_DESIGN_REG_NUM" = 0
) t where t.isExpired = true
UNION ALL
select * from (
......
......@@ -11,15 +11,17 @@ import com.yeejoin.amos.boot.module.jg.biz.service.impl.IdxBizJgOtherInfoService
import com.yeejoin.amos.boot.module.jg.biz.service.impl.SafetyProblemTracingServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgOtherInfo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@Component("equipmentProblemStrategy")
@RequiredArgsConstructor
@Slf4j
public class EquipmentProblemStrategy implements ProblemHandleStrategy {
private final SafetyProblemTracingServiceImpl safetyProblemTracingService;
......@@ -29,21 +31,68 @@ public class EquipmentProblemStrategy implements ProblemHandleStrategy {
@Transactional(rollbackFor = Exception.class)
@Override
public void handleProblem(JSONArray jsonArray, SafetyProblemTypeEnum problemTypeEnum) {
List<String> equipRecords = jsonArray.stream().map(obj -> JSONObject.parseObject(obj.toString()).getString("record")).collect(Collectors.toList());
if (!ValidationUtil.isEmpty(equipRecords)) {
safetyProblemTracingService.lambdaUpdate()
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.in(SafetyProblemTracing::getSourceId, equipRecords)
.eq(SafetyProblemTracing::getProblemTypeCode, problemTypeEnum.getCode()).update();
idxBizJgOtherInfoService.lambdaUpdate().set(IdxBizJgOtherInfo::getStatus, SafetyProblemStatusEnum.HANDLED.getCode())
.in(IdxBizJgOtherInfo::getRecord, equipRecords).update();
Iterable<ESEquipmentCategoryDto> equipEsDtoIter = esEquipmentCategory.findAllById(equipRecords);
for (ESEquipmentCategoryDto equipEsDto : equipEsDtoIter) {
equipEsDto.setProblemStatus(SafetyProblemStatusEnum.HANDLED.getCode());
}
esEquipmentCategory.saveAll(equipEsDtoIter);
if (ValidationUtil.isEmpty(jsonArray)) {
return;
}
log.info("安全追溯-设备问题处理接收数据:---> {}", jsonArray);
List<String> equipRecords = jsonArray.stream()
.map(obj -> JSONObject.parseObject(obj.toString()).getString("record"))
.collect(Collectors.toList());
if (ValidationUtil.isEmpty(equipRecords)) {
return;
}
log.info("安全追溯-设备问题处理设备record:---> {}", equipRecords);
// 更新问题状态为已处理
safetyProblemTracingService.lambdaUpdate()
.set(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.HANDLED.getCode())
.set(SafetyProblemTracing::getProblemStatus, SafetyProblemStatusEnum.HANDLED.getName())
.in(SafetyProblemTracing::getSourceId, equipRecords)
.eq(SafetyProblemTracing::getProblemTypeCode, problemTypeEnum.getCode())
.update();
// 查询仍存在未处理问题的设备
Set<String> problemEquipIds = safetyProblemTracingService.lambdaQuery()
.select(SafetyProblemTracing::getSourceId)
.in(SafetyProblemTracing::getSourceId, equipRecords)
.eq(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.UNHANDLED.getCode())
.list().stream().map(SafetyProblemTracing::getSourceId).collect(Collectors.toCollection(HashSet::new));
// 确定无未处理问题的设备列表
List<String> resolvedRecords = equipRecords.stream()
.filter(record -> !problemEquipIds.contains(record))
.collect(Collectors.toCollection(ArrayList::new));
// 更新无未处理问题的设备状态
if (!ValidationUtil.isEmpty(resolvedRecords)) {
log.info("可更新状态的设备record:---> {}", resolvedRecords);
updateOtherTableAndES(resolvedRecords);
}
log.info("安全追溯-设备问题处理完成!");
}
/**
* 更新Other表和ES状态(提取公共方法)
*/
private void updateOtherTableAndES(List<String> records) {
// 更新Other表
idxBizJgOtherInfoService.lambdaUpdate()
.set(IdxBizJgOtherInfo::getStatus, SafetyProblemStatusEnum.HANDLED.getCode())
.in(IdxBizJgOtherInfo::getRecord, records)
.update();
// 更新ES状态(添加异常处理)
try {
Iterable<ESEquipmentCategoryDto> esEquipmentIter = esEquipmentCategory.findAllById(records);
esEquipmentIter.forEach(dto ->
dto.setProblemStatus(SafetyProblemStatusEnum.HANDLED.getCode()));
esEquipmentCategory.saveAll(esEquipmentIter);
log.info("ES状态更新成功,记录数:{}", records.size());
} catch (Exception e) {
log.error("ES状态更新失败,设备record:{},错误原因:{}", records, e.getMessage(), e);
}
}
}
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