package cn.iocoder.yudao.module.pms.service.iotmaterialrequisition;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo.IotMaterialRequisitionPageReqVO;
import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo.IotMaterialRequisitionSaveReqVO;
import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo.IotMaterialRequisitionSaveVO;
import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialrequisition.IotMaterialRequisitionDO;

import javax.validation.Valid;

/**
 * 物料领用 Service 接口
 *
 * @author ruiqi
 */
public interface IotMaterialRequisitionService {

    /**
     * 创建物料领用
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createIotMaterialRequisition(@Valid IotMaterialRequisitionSaveReqVO createReqVO);

    /**
     * 更新物料领用
     *
     * @param updateReqVO 更新信息
     */
    void updateIotMaterialRequisition(@Valid IotMaterialRequisitionSaveReqVO updateReqVO);

    /**
     * 删除物料领用
     *
     * @param id 编号
     */
    void deleteIotMaterialRequisition(Long id);

    /**
     * 获得物料领用
     *
     * @param id 编号
     * @return 物料领用
     */
    IotMaterialRequisitionDO getIotMaterialRequisition(Long id);

    /**
     * 获得物料领用分页
     *
     * @param pageReqVO 分页查询
     * @return 物料领用分页
     */
    PageResult<IotMaterialRequisitionDO> getIotMaterialRequisitionPage(IotMaterialRequisitionPageReqVO pageReqVO);

    /**
     * 新增 物料领用
     *
     * @param saveVO
     * @return 物料领用分页
     */
    void addMaterialRequisition(IotMaterialRequisitionSaveVO saveVO);

    /**
     * 生成物料领用单号
     *
     * @return 物料领用单号
     */
    String createMaterialReqNumber();
}