| | |
| | | |
| | | 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; |
| | |
| | | import cn.iocoder.yudao.module.mes.enums.wm.BarcodeBizTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemBatchConfigService; |
| | | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| | | import cn.iocoder.yudao.module.mes.service.common.bpm.MesBpmProcessService; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderProgressRespVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessDO; |
| | |
| | | @Service |
| | | @Validated |
| | | public class MesProWorkOrderServiceImpl implements MesProWorkOrderService { |
| | | |
| | | @Resource |
| | | private MesBpmProcessService mesBpmProcessService; |
| | | |
| | | private static final String BPM_PROCESS_DEFINITION_CATEGORY_CODE = "mes_pro_feedback_audit"; |
| | | |
| | | @Resource |
| | | private MesProWorkOrderMapper workOrderMapper; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getWorkOrderApproveProcessDefinitionList() { |
| | | return mesBpmProcessService.getApproveProcessDefinitionList(BPM_PROCESS_DEFINITION_CATEGORY_CODE); |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | | public MesProWorkOrderDO getWorkOrder(Long id) { |
| | | return workOrderMapper.selectById(id); |
| | | } |
| | |
| | | |
| | | @Override |
| | | public PageResult<MesProWorkOrderDO> getWorkOrderPage(MesProWorkOrderPageReqVO pageReqVO) { |
| | | // 获取用户有权限的客户 ID 列表 |
| | | List<Long> permittedClientIds = customerApi.getPermittedCustomerIds(); |
| | | return workOrderMapper.selectPage(pageReqVO, permittedClientIds); |
| | | return workOrderMapper.selectPage(pageReqVO, (List<Long>) null); |
| | | } |
| | | |
| | | @Override |
| | | public PageResult<MesProWorkOrderDO> getWorkOrderSchedulePage(MesProWorkOrderPageReqVO pageReqVO) { |
| | | // 获取用户有权限的客户 ID 列表 |
| | | List<Long> permittedClientIds = customerApi.getPermittedCustomerIds(); |
| | | return workOrderMapper.selectSchedulePage(pageReqVO, permittedClientIds); |
| | | return workOrderMapper.selectSchedulePage(pageReqVO, (List<Long>) null); |
| | | } |
| | | |
| | | @Override |
| | |
| | | } |
| | | |
| | | @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. 校验存在 + 只有已确认状态才能完成 |