package cn.iocoder.yudao.module.mes.service.wm.productsales; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.MesWmProductSalesPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.MesWmProductSalesSaveReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.MesWmProductSalesShippingReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesDO; import jakarta.validation.Valid; import java.util.List; /** * MES 销售出库单 Service 接口 * * @author 芋道源码 */ public interface MesWmProductSalesService { /** * 创建销售出库单 * * @param createReqVO 创建信息 * @return 编号 */ Long createProductSales(@Valid MesWmProductSalesSaveReqVO createReqVO); /** * 修改销售出库单 * * @param updateReqVO 修改信息 */ void updateProductSales(@Valid MesWmProductSalesSaveReqVO updateReqVO); /** * 删除销售出库单(级联删除行+明细) * * @param id 编号 */ void deleteProductSales(Long id); /** * 获得销售出库单 * * @param id 编号 * @return 销售出库单 */ MesWmProductSalesDO getProductSales(Long id); /** * 获得销售出库单分页 * * @param pageReqVO 分页参数 * @return 销售出库单分页 */ PageResult getProductSalesPage(MesWmProductSalesPageReqVO pageReqVO); /** * 提交销售出库单 * * * @param id 编号 */ void submitProductSales(Long id); /** * 校验销售出库单数量是否匹配 * * @param id 编号 * @return 是否匹配 */ boolean checkProductSalesQuantity(Long id); /** * 执行拣货(待拣货 → 待填写运单) * * @param id 编号 */ void stockProductSales(Long id); /** * 填写运单(待填写运单 → 待执行出库) * * @param reqVO 运单信息 */ void shippingProductSales(@Valid MesWmProductSalesShippingReqVO reqVO); /** * 执行出库(待出库 → 已完成),扣减库存 * * @param id 编号 */ void finishProductSales(Long id); /** * 取消销售出库单(任意非已完成/已取消状态 → 已取消) * * @param id 编号 */ void cancelProductSales(Long id); /** * OQC 检验完成后,自动流转(待检测 → 待拣货) * * @param id 编号 */ void confirmProductSales(Long id); /** * 按客户编号获得销售出库单列表 * * @param clientId 客户编号 * @return 出库单列表 */ List getProductSalesListByClientId(Long clientId); /** * 校验销售出库单存在且为草稿状态 * * @param id 编号 * @return 销售出库单 */ MesWmProductSalesDO validateProductSalesExistsAndDraft(Long id); /** * 更新销售出库单状态 * * @param id 编号 * @param status 状态 */ void updateStatus(Long id, Integer status); }