package cn.iocoder.yudao.module.mes.service.pro.andon; import cn.hutool.core.util.ObjUtil; 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.pro.andon.vo.record.MesProAndonRecordUpdateReqVO; import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAndonRecordPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.pro.andon.vo.record.MesProAndonRecordCreateReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon.MesProAndonConfigDO; import cn.iocoder.yudao.module.mes.dal.dataobject.pro.andon.MesProAndonRecordDO; import cn.iocoder.yudao.module.mes.dal.mysql.pro.andon.MesProAndonRecordMapper; import cn.iocoder.yudao.module.mes.enums.pro.MesProAndonStatusEnum; import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService; import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; /** * MES 安灯呼叫记录 Service 实现类 * * @author 芋道源码 */ @Service @Validated public class MesProAndonRecordServiceImpl implements MesProAndonRecordService { @Resource private MesProAndonRecordMapper andonRecordMapper; @Resource private MesMdWorkstationService workstationService; @Resource private MesProWorkOrderService workOrderService; @Resource private MesProProcessService processService; @Resource private MesProAndonConfigService andonConfigService; @Override public Long createAndonRecord(MesProAndonRecordCreateReqVO createReqVO) { // 1. 校验关联数据存在 MesProAndonConfigDO config = andonConfigService.validateAndonConfigExists(createReqVO.getConfigId()); workstationService.validateWorkstationExists(createReqVO.getWorkstationId()); if (createReqVO.getWorkOrderId() != null) { workOrderService.validateWorkOrderConfirmed(createReqVO.getWorkOrderId()); } if (createReqVO.getProcessId() != null) { processService.validateProcessExistsAndEnable(createReqVO.getProcessId()); } // 2. 插入记录 MesProAndonRecordDO record = BeanUtils.toBean(createReqVO, MesProAndonRecordDO.class); record.setReason(config.getReason()).setLevel(config.getLevel()); // 快照配置中的原因和级别 record.setStatus(MesProAndonStatusEnum.ACTIVE.getStatus()); andonRecordMapper.insert(record); return record.getId(); } @Override public void deleteAndonRecord(Long id) { // 1. 校验存在,且未处置 validateAndonRecordNotHandled(id); // 2. 删除 andonRecordMapper.deleteById(id); } @Override public void updateAndonRecord(MesProAndonRecordUpdateReqVO updateReqVO) { // 1. 校验存在,且未处置 validateAndonRecordNotHandled(updateReqVO.getId()); // 2. 更新 andonRecordMapper.updateById(new MesProAndonRecordDO().setId(updateReqVO.getId()) .setStatus(updateReqVO.getStatus()) .setHandleTime(updateReqVO.getHandleTime()) .setHandlerUserId(updateReqVO.getHandlerUserId()) .setRemark(updateReqVO.getRemark())); } /** * 校验安灯记录存在,且未处置 * * @param id 编号 * @return 安灯记录 */ private MesProAndonRecordDO validateAndonRecordNotHandled(Long id) { MesProAndonRecordDO record = andonRecordMapper.selectById(id); if (record == null) { throw exception(PRO_ANDON_RECORD_NOT_EXISTS); } if (ObjUtil.equal(record.getStatus(), MesProAndonStatusEnum.HANDLED.getStatus())) { throw exception(PRO_ANDON_RECORD_ALREADY_HANDLED); } return record; } @Override public MesProAndonRecordDO getAndonRecord(Long id) { return andonRecordMapper.selectById(id); } @Override public PageResult getAndonRecordPage(MesProAndonRecordPageReqVO pageReqVO) { return andonRecordMapper.selectPage(pageReqVO); } }