Commit e1fb30cd authored by tianbo's avatar tianbo

feat(jg): 新增设备安全问题追溯处理逻辑

- 新增根据sourceId删除安全追溯问题的逻辑,标记为删除状态并记录删除原因 - 新增根据源id更新问题的逻辑,支持检测和维保信息变更时自动更新问题状态 - 新增设备安全问题刷新处理器,实现设备数据变更时的安全问题同步处理
parent 361213f1
package com.yeejoin.amos.boot.module.jg.biz.refresh.handler;
import com.yeejoin.amos.boot.module.common.api.dao.EsEquipmentDao;
import com.yeejoin.amos.boot.module.common.api.entity.TzsDataRefreshMessage;
import com.yeejoin.amos.boot.module.common.api.service.IDataRefreshHandler;
import com.yeejoin.amos.boot.module.common.biz.refresh.DataRefreshEvent;
import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgInspectionDetectionInfoService;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.IdxBizJgMaintenanceRecordInfoServiceImpl;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.IdxBizJgUseInfoServiceImpl;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.SafetyProblemTracingServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgInspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgMaintenanceRecordInfo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
@RequiredArgsConstructor
@Slf4j
public class EquipmentSafetyProblemRefreshHandler implements IDataRefreshHandler {
private final IdxBizJgUseInfoServiceImpl useInfoService;
private final IIdxBizJgInspectionDetectionInfoService iIdxBizJgInspectionDetectionInfoService;
private final EsEquipmentDao esEquipmentDao;
private final IdxBizJgMaintenanceRecordInfoServiceImpl maintenanceRecordInfoService;
private final SafetyProblemTracingServiceImpl safetyProblemTracingService;
@Override
public String supportType() {
return "equipment";
}
@Override
public void doRefresh(TzsDataRefreshMessage message) {
log.info("设备更新安全追溯问题开始,设备id:{}", message.getDataId());
String record = message.getDataId();
switch (DataRefreshEvent.Operation.valueOf(message.getOperation())) {
case DELETE:
safetyProblemTracingService.deleteBySourceId(record, "问题源被删除");
break;
case INSERT:
case UPDATE:
Map<String, Object> detail = useInfoService.getBaseMapper().queryDetail(record);
if(detail == null) {
return;
}
IdxBizJgInspectionDetectionInfo inspectionDetectionInfo = iIdxBizJgInspectionDetectionInfoService.queryNewestDetailByRecord(record);
IdxBizJgMaintenanceRecordInfo lastMaintenanceRecordInfo = maintenanceRecordInfoService.queryNewestDetailByRecord(record);
safetyProblemTracingService.updateBySourceId(record, detail, inspectionDetectionInfo, lastMaintenanceRecordInfo);
break;
default:
log.error("unknown operation: {}", message.getOperation());
}
}
}
......@@ -19,10 +19,13 @@ import com.yeejoin.amos.boot.module.jg.api.dto.SafetyProblemTracingDto;
import com.yeejoin.amos.boot.module.jg.api.entity.SafetyProblemTracing;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemSourceTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemStatusEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.SafetyProblemTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.CommonMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.SafetyProblemTracingMapper;
import com.yeejoin.amos.boot.module.jg.api.service.ISafetyProblemTracingService;
import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgRegisterInfoService;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgInspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgMaintenanceRecordInfo;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -232,4 +235,63 @@ public class SafetyProblemTracingServiceImpl extends BaseService<SafetyProblemTr
public Page<Map<String, Object>> queryUserListProblemById(Page<Map<String, Object>> page, String problemId) {
return this.baseMapper.queryUserListProblemById(page, problemId);
}
/**
* 根据sourceId删除安全追溯问题
*
* @param sourceId 问题源id
* @param deleteReason
*/
@Transactional
public void deleteBySourceId(String sourceId, String deleteReason) {
List<SafetyProblemTracing> safetyProblemTracings = this.baseMapper.selectList(new LambdaQueryWrapper<SafetyProblemTracing>().eq(SafetyProblemTracing::getSourceId, sourceId));
if (!ValidationUtil.isEmpty(safetyProblemTracings)) {
List<SafetyProblemTracing> deleteList = Lists.newArrayList();
safetyProblemTracings.forEach(item -> {
// 设备问题标记为删除状态,删除原因为问题源被删除。但处理状态保留
item.setIsDelete(true);
JSONObject extraInfo = new JSONObject();
extraInfo.put("deleteReason", deleteReason);
item.setExtraInfo(extraInfo.toJSONString());
deleteList.add(item);
});
this.saveBatch(deleteList);
}
}
/**
* 根据源id更新问题
*
* @param record 问题源记录
* @param detail 问题源详情
* @param inspectionDetectionInfo 最新检测信息
* @param lastMaintenanceRecordInfo 最新维保信息
*/
@Transactional
public void updateBySourceId(String record, Map<String, Object> detail,
IdxBizJgInspectionDetectionInfo inspectionDetectionInfo,
IdxBizJgMaintenanceRecordInfo lastMaintenanceRecordInfo) {
List<SafetyProblemTracing> safetyProblemTracings = this.baseMapper.selectList(new LambdaQueryWrapper<SafetyProblemTracing>()
.eq(SafetyProblemTracing::getSourceId, record)
.eq(SafetyProblemTracing::getIsDelete, false)
.eq(SafetyProblemTracing::getProblemStatusCode, SafetyProblemStatusEnum.UNHANDLED.getCode()));
if (!ValidationUtil.isEmpty(safetyProblemTracings)) {
safetyProblemTracings.forEach(item -> {
// 一个设备某类未处理的问题只有一个,所以直接更新某个类型问题
if (item.getProblemTypeCode().equals(SafetyProblemTypeEnum.JYCQ.getProblemTypeCode())
&& inspectionDetectionInfo != null
&& new Date().before(inspectionDetectionInfo.getNextInspectDate())) {
item.setProblemStatusCode(SafetyProblemStatusEnum.HANDLED.getCode());
item.setProblemStatus(SafetyProblemStatusEnum.HANDLED.getName());
}
if (item.getProblemTypeCode().equals(SafetyProblemTypeEnum.WBCQ.getProblemTypeCode())
&& lastMaintenanceRecordInfo != null
&& new Date().before(lastMaintenanceRecordInfo.getInformEnd())) {
item.setProblemStatusCode(SafetyProblemStatusEnum.HANDLED.getCode());
item.setProblemStatus(SafetyProblemStatusEnum.HANDLED.getName());
}
});
this.saveOrUpdateBatch(safetyProblemTracings);
}
}
}
\ No newline at end of file
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