| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.iocoder.yudao.framework.common.exception.ServiceException; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemBatchConfigDO; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void startWorkOrder(Long id) { |
| | | // 1. 校验存在 + 只有已确认状态才能开工 |
| | | MesProWorkOrderDO workOrder = validateWorkOrderExists(id); |
| | | if (ObjUtil.notEqual(workOrder.getStatus(), MesProWorkOrderStatusEnum.CONFIRMED.getStatus())) { |
| | | throw exception(PRO_WORK_ORDER_NOT_CONFIRMED); |
| | | } |
| | | // 2. 已开工的不允许重复启动,避免开工时间被覆盖 |
| | | if (workOrder.getActualStartTime() != null) { |
| | | throw exception(PRO_WORK_ORDER_ALREADY_STARTED); |
| | | } |
| | | // 3. 写入开工时间与开工人,工单由此进入「生产中」 |
| | | workOrderMapper.updateById(new MesProWorkOrderDO().setId(id) |
| | | .setActualStartTime(LocalDateTime.now()) |
| | | .setStartUserId(SecurityFrameworkUtils.getLoginUserId())); |
| | | } |
| | | |
| | | @Override |
| | | public void updateWorkOrderBatch(Long id, String batchCode) { |
| | | // 1. 校验存在 |
| | | MesProWorkOrderDO workOrder = validateWorkOrderExists(id); |
| | | // 2. 已完成/已取消的工单不允许再改批次 |
| | | if (MesProWorkOrderStatusEnum.FINISHED.getStatus().equals(workOrder.getStatus()) |
| | | || MesProWorkOrderStatusEnum.CANCELED.getStatus().equals(workOrder.getStatus())) { |
| | | throw new ServiceException(PRO_WORK_ORDER_BATCH_NOT_EDITABLE.getCode(), |
| | | String.format("工单[%s]当前状态为[%s],只有未完工的工单可以管理批次。请确认工单状态后重试。", |
| | | workOrder.getCode(), |
| | | MesProWorkOrderStatusEnum.FINISHED.getStatus().equals(workOrder.getStatus()) ? "已完成" : "已取消")); |
| | | } |
| | | // 3. 更新批次号 |
| | | workOrderMapper.updateById(new MesProWorkOrderDO().setId(id).setBatchCode(batchCode)); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void finishWorkOrder(Long id) { |
| | | // 1. 校验存在 + 只有已确认状态才能完成 |