| | |
| | | import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum; |
| | | import cn.iocoder.yudao.module.mes.enums.pro.MesProTaskStatusEnum; |
| | | import cn.iocoder.yudao.module.mes.service.dv.machinery.MesDvMachineryService; |
| | | import cn.iocoder.yudao.module.mes.service.cal.team.MesCalTeamService; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.cal.team.MesCalTeamDO; |
| | | import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService; |
| | | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| | | import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; |
| | |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_TASK_ALREADY_FINISHED; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_TASK_CANNOT_PAUSE; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_TASK_HAS_FEEDBACK; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_TASK_NOT_EXISTS; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_TASK_NOT_PAUSED; |
| | | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskPauseRecordDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.pro.task.MesProTaskPauseRecordMapper; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.task.vo.MesProTaskPauseReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.task.vo.MesProTaskResumeReqVO; |
| | | |
| | | /** |
| | | * MES 生产任务 Service 实现类 |
| | |
| | | |
| | | @Resource |
| | | private MesProFeedbackMapper feedbackMapper; |
| | | |
| | | @Resource |
| | | private MesProTaskPauseRecordMapper taskPauseRecordMapper; |
| | | |
| | | @Resource |
| | | @Lazy |
| | |
| | | @Resource |
| | | @Lazy |
| | | private MesDvMachineryService machineryService; |
| | | @Resource |
| | | private MesCalTeamService teamService; |
| | | |
| | | @Override |
| | | public Long createTask(MesProTaskSaveReqVO createReqVO) { |
| | |
| | | workstationService.validateWorkstationExists(createReqVO.getWorkstationId()); |
| | | routeService.validateRouteExists(createReqVO.getRouteId()); |
| | | processService.validateProcessExistsAndEnable(createReqVO.getProcessId()); |
| | | fillTeamInfo(createReqVO); |
| | | |
| | | // 2. 自动确定 itemId:优先前端传入 → 工艺路线工序的产出产品 → 工单成品 |
| | | Long itemId = createReqVO.getItemId(); |
| | |
| | | if (updateReqVO.getProcessId() != null) { |
| | | processService.validateProcessExistsAndEnable(updateReqVO.getProcessId()); |
| | | } |
| | | fillTeamInfo(updateReqVO); |
| | | MesMdItemDO item; |
| | | if (updateReqVO.getItemId() != null) { |
| | | item = itemService.validateItemExists(updateReqVO.getItemId()); |
| | |
| | | MesProTaskDO updateObj = BeanUtils.toBean(updateReqVO, MesProTaskDO.class) |
| | | .setName(buildTaskName(item, quantity)); |
| | | taskMapper.updateById(updateObj); |
| | | } |
| | | |
| | | /** |
| | | * 校验班组存在并回填班组名称 |
| | | */ |
| | | private void fillTeamInfo(MesProTaskSaveReqVO reqVO) { |
| | | if (reqVO.getTeamId() == null) { |
| | | return; |
| | | } |
| | | MesCalTeamDO team = teamService.validateTeamExists(reqVO.getTeamId()); |
| | | if (team != null) { |
| | | reqVO.setTeamName(team.getName()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | return taskIds; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void pauseTask(MesProTaskPauseReqVO pauseReqVO) { |
| | | // 1. 校验任务存在 |
| | | MesProTaskDO task = validateTaskExists(pauseReqVO.getId()); |
| | | // 2. 校验状态是否允许停工(如必须是 生产中 或 部分完成) |
| | | if (!ObjectUtils.equalsAny(task.getStatus(), MesProTaskStatusEnum.PREPARE.getStatus())) { |
| | | throw exception(PRO_TASK_CANNOT_PAUSE); |
| | | } |
| | | |
| | | // 3. 修改任务状态为已停工 |
| | | taskMapper.updateById(new MesProTaskDO().setId(task.getId()).setStatus(MesProTaskStatusEnum.PAUSED.getStatus())); |
| | | |
| | | // 4. 创建停工记录 |
| | | MesProTaskPauseRecordDO pauseRecord = new MesProTaskPauseRecordDO() |
| | | .setTaskId(task.getId()) |
| | | .setWorkOrderId(task.getWorkOrderId()) |
| | | .setWorkstationId(task.getWorkstationId()) |
| | | .setReason(pauseReqVO.getReason()) |
| | | .setRemark(pauseReqVO.getRemark()) |
| | | .setPauseTime(LocalDateTime.now()) |
| | | .setPauseUserId(SecurityFrameworkUtils.getLoginUserId()); |
| | | taskPauseRecordMapper.insert(pauseRecord); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void resumeTask(MesProTaskResumeReqVO resumeReqVO) { |
| | | // 1. 校验任务存在 |
| | | MesProTaskDO task = validateTaskExists(resumeReqVO.getId()); |
| | | // 2. 校验状态必须是已停工 |
| | | if (!ObjectUtils.equalsAny(task.getStatus(), MesProTaskStatusEnum.PAUSED.getStatus())) { |
| | | throw exception(PRO_TASK_NOT_PAUSED); |
| | | } |
| | | |
| | | // 3. 恢复任务状态 |
| | | Integer resumeStatus = MesProTaskStatusEnum.PREPARE.getStatus(); |
| | | taskMapper.updateById(new MesProTaskDO().setId(task.getId()).setStatus(resumeStatus)); |
| | | |
| | | // 4. 更新最新的一条停工记录 |
| | | MesProTaskPauseRecordDO pauseRecord = taskPauseRecordMapper.selectLastUnresumedByTaskId(task.getId()); |
| | | if (pauseRecord != null) { |
| | | pauseRecord.setResumeTime(LocalDateTime.now()); |
| | | pauseRecord.setResumeUserId(SecurityFrameworkUtils.getLoginUserId()); |
| | | taskPauseRecordMapper.updateById(pauseRecord); |
| | | } |
| | | } |
| | | |
| | | } |