package cn.iocoder.yudao.module.mes.service.safety;
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardCheckReqVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardPageReqVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardRectifyReqVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardSaveReqVO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyHazardDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyHazardMapper;
|
import jakarta.annotation.Resource;
|
import org.springframework.stereotype.Service;
|
import org.springframework.validation.annotation.Validated;
|
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.util.Objects;
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
|
|
/**
|
* 安全生产 - 隐患 Service 实现
|
*
|
* @author 超级管理员
|
*/
|
@Service
|
@Validated
|
public class MesSafetyHazardServiceImpl implements MesSafetyHazardService {
|
|
@Resource
|
private MesSafetyHazardMapper hazardMapper;
|
|
@Override
|
public PageResult<MesSafetyHazardDO> getHazardPage(MesSafetyHazardPageReqVO pageReqVO) {
|
return hazardMapper.selectPage(pageReqVO);
|
}
|
|
@Override
|
public MesSafetyHazardDO getHazard(Long id) {
|
return hazardMapper.selectById(id);
|
}
|
|
@Override
|
public Long createHazard(MesSafetyHazardSaveReqVO createReqVO) {
|
validateCodeUnique(null, createReqVO.getCode());
|
MesSafetyHazardDO hazard = BeanUtils.toBean(createReqVO, MesSafetyHazardDO.class);
|
// 新建即为待整改
|
hazard.setStatus(MesSafetyHazardDO.STATUS_PENDING);
|
if (hazard.getFoundDate() == null) {
|
hazard.setFoundDate(LocalDate.now());
|
}
|
hazardMapper.insert(hazard);
|
return hazard.getId();
|
}
|
|
@Override
|
public void updateHazard(MesSafetyHazardSaveReqVO updateReqVO) {
|
MesSafetyHazardDO exists = validateHazardExists(updateReqVO.getId());
|
// 已闭环的隐患不允许再修改基本信息
|
if (MesSafetyHazardDO.STATUS_CLOSED.equals(exists.getStatus())) {
|
throw exception(MES_SAFETY_HAZARD_STATUS_INVALID);
|
}
|
validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode());
|
MesSafetyHazardDO updateObj = BeanUtils.toBean(updateReqVO, MesSafetyHazardDO.class);
|
// 状态与整改/验收信息不通过此接口修改
|
updateObj.setStatus(null);
|
updateObj.setMeasure(null);
|
updateObj.setFinishDate(null);
|
updateObj.setCheckUserId(null);
|
updateObj.setCheckTime(null);
|
updateObj.setCheckResult(null);
|
updateObj.setRejectReason(null);
|
hazardMapper.updateById(updateObj);
|
}
|
|
@Override
|
public void deleteHazard(Long id) {
|
validateHazardExists(id);
|
hazardMapper.deleteById(id);
|
}
|
|
@Override
|
public void rectifyHazard(MesSafetyHazardRectifyReqVO reqVO) {
|
MesSafetyHazardDO hazard = validateHazardExists(reqVO.getId());
|
// 只有「待整改」「整改中」可以提交整改;已提交待验收或已闭环不可重复提交
|
if (!MesSafetyHazardDO.STATUS_PENDING.equals(hazard.getStatus())
|
&& !MesSafetyHazardDO.STATUS_RECTIFYING.equals(hazard.getStatus())) {
|
throw exception(MES_SAFETY_HAZARD_STATUS_INVALID);
|
}
|
MesSafetyHazardDO updateObj = new MesSafetyHazardDO();
|
updateObj.setId(reqVO.getId());
|
updateObj.setMeasure(reqVO.getMeasure());
|
updateObj.setFinishDate(reqVO.getFinishDate() != null ? reqVO.getFinishDate() : LocalDate.now());
|
updateObj.setStatus(MesSafetyHazardDO.STATUS_TO_CHECK);
|
// 重新提交时清空上一次的驳回原因
|
updateObj.setRejectReason("");
|
hazardMapper.updateById(updateObj);
|
}
|
|
@Override
|
public void checkHazard(MesSafetyHazardCheckReqVO reqVO) {
|
MesSafetyHazardDO hazard = validateHazardExists(reqVO.getId());
|
// 只有「待验收」可以验收
|
if (!MesSafetyHazardDO.STATUS_TO_CHECK.equals(hazard.getStatus())) {
|
throw exception(MES_SAFETY_HAZARD_STATUS_INVALID);
|
}
|
MesSafetyHazardDO updateObj = new MesSafetyHazardDO();
|
updateObj.setId(reqVO.getId());
|
updateObj.setCheckResult(reqVO.getCheckResult());
|
updateObj.setCheckTime(LocalDateTime.now());
|
if (Boolean.TRUE.equals(reqVO.getPass())) {
|
// 验收通过 → 闭环
|
updateObj.setStatus(MesSafetyHazardDO.STATUS_CLOSED);
|
updateObj.setRejectReason("");
|
} else {
|
// 验收驳回 → 必须填原因,退回整改中
|
if (reqVO.getRejectReason() == null || reqVO.getRejectReason().trim().isEmpty()) {
|
throw exception(MES_SAFETY_HAZARD_REJECT_REASON_REQUIRED);
|
}
|
updateObj.setStatus(MesSafetyHazardDO.STATUS_RECTIFYING);
|
updateObj.setRejectReason(reqVO.getRejectReason());
|
}
|
hazardMapper.updateById(updateObj);
|
}
|
|
@Override
|
public MesSafetyHazardDO validateHazardExists(Long id) {
|
if (id == null) {
|
throw exception(MES_SAFETY_HAZARD_NOT_EXISTS);
|
}
|
MesSafetyHazardDO hazard = hazardMapper.selectById(id);
|
if (hazard == null) {
|
throw exception(MES_SAFETY_HAZARD_NOT_EXISTS);
|
}
|
return hazard;
|
}
|
|
private void validateCodeUnique(Long id, String code) {
|
MesSafetyHazardDO exists = hazardMapper.selectByCode(code);
|
if (exists == null) {
|
return;
|
}
|
if (id == null || !Objects.equals(exists.getId(), id)) {
|
throw exception(MES_SAFETY_HAZARD_CODE_DUPLICATE);
|
}
|
}
|
|
}
|