package cn.iocoder.yudao.module.mes.service.pro.workorder; import cn.iocoder.yudao.framework.common.pojo.PageResult; 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.pro.workorder.MesProWorkOrderDO; import jakarta.validation.Valid; import java.math.BigDecimal; import java.util.Collection; import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; /** * MES 生产工单 Service 接口 * * @author 芋道源码 */ public interface MesProWorkOrderService { /** * 创建生产工单 * * @param createReqVO 创建信息 * @return 编号 */ Long createWorkOrder(@Valid MesProWorkOrderSaveReqVO createReqVO); /** * 更新生产工单 * * @param updateReqVO 更新信息 */ void updateWorkOrder(@Valid MesProWorkOrderSaveReqVO updateReqVO); /** * 删除生产工单 * * @param id 编号 */ void deleteWorkOrder(Long id); /** * 校验生产工单存在 * * @param id 编号 * @return 生产工单 */ MesProWorkOrderDO validateWorkOrderExists(Long id); /** * 获得生产工单 * * @param id 编号 * @return 生产工单 */ MesProWorkOrderDO getWorkOrder(Long id); /** * 根据编码获得生产工单 * * @param code 编码 * @return 生产工单 */ MesProWorkOrderDO getWorkOrder(String code); /** * 获得生产工单分页 * * @param pageReqVO 分页查询 * @return 生产工单分页 */ PageResult getWorkOrderPage(MesProWorkOrderPageReqVO pageReqVO); /** * 获得工单列表 * * @param ids 编号数组 * @return 工单列表 */ List getWorkOrderList(Collection ids); /** * 获得工单 Map * * @param ids 编号数组 * @return 工单 Map */ default Map getWorkOrderMap(Collection ids) { return convertMap(getWorkOrderList(ids), MesProWorkOrderDO::getId); } /** * 校验工单已确认 * * @param id 编号 * @return 工单 */ MesProWorkOrderDO validateWorkOrderConfirmed(Long id); /** * 确认工单(草稿 → 已确认) * * @param id 编号 */ void confirmWorkOrder(Long id); /** * 完成工单 * * @param id 编号 */ void finishWorkOrder(Long id); /** * 取消工单 * * @param id 编号 */ void cancelWorkOrder(Long id); /** * 提交工单审批 * * @param id 编号 * @param userId 用户编号 */ void submitWorkOrder(Long id, Long userId); /** * 更新工单的审批状态 * * @param id 编号 * @param bpmResult BPM 审批结果 */ void updateWorkOrderAuditStatus(Long id, Integer bpmResult); /** * 累加工单的已生产数量 * * @param id 工单编号 * @param incrQuantityProduced 本次已生产数量增量 */ void updateProducedQuantity(Long id, BigDecimal incrQuantityProduced); /** * 根据供应商 ID 统计工单数量 * * @param vendorId 供应商 ID * @return 数量 */ Long getWorkOrderCountByVendorId(Long vendorId); }