package com.zt.plat.module.qms.resource.material.service;

import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReusePageReqVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseRespVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseSaveReqVO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseEndReuseDO;
import jakarta.validation.Valid;

import java.util.List;

/**
 * 物料用完标记或清洗回收 Service 接口
 *
 * @author 后台管理
 */
public interface MaterialUseEndReuseService {

    /**
     * 创建物料用完标记或清洗回收
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    MaterialUseEndReuseRespVO createMaterialUseEndReuse(@Valid MaterialUseEndReuseSaveReqVO createReqVO);

    /**
     * 更新物料用完标记或清洗回收
     *
     * @param updateReqVO 更新信息
     */
    void updateMaterialUseEndReuse(@Valid MaterialUseEndReuseSaveReqVO updateReqVO);

    /**
     * 删除物料用完标记或清洗回收
     *
     * @param id 编号
     */
    void deleteMaterialUseEndReuse(Long id);

    /**
    * 批量删除物料用完标记或清洗回收
    *
    * @param ids 编号
    */
    void deleteMaterialUseEndReuseListByIds(List<Long> ids);

    /**
     * 获得物料用完标记或清洗回收
     *
     * @param id 编号
     * @return 物料用完标记或清洗回收
     */
    MaterialUseEndReuseDO getMaterialUseEndReuse(Long id);

    /**
     * 获得物料用完标记或清洗回收分页
     *
     * @param pageReqVO 分页查询
     * @return 物料用完标记或清洗回收分页
     */
    PageResult<MaterialUseEndReuseDO> getMaterialUseEndReusePage(MaterialUseEndReusePageReqVO pageReqVO);

    /**
     * 获得物料用完标记或清洗回收分页 - 带明细数据
     *
     * @param pageReqVO 分页查询
     * @return 物料用完标记或清洗回收分页
     */
    PageResult<MaterialUseEndReuseRespVO> getPageWithDetail(@Valid MaterialUseEndReusePageReqVO pageReqVO);

    /**
     * 批量回收物料
     *
     * @param detailIds 明细编号
     */
    void reuseMaterialsByDetailIds(List<Long> detailIds);

    /**
     * 批量更新物料用完标记或清洗回收
     *
     * @param reuseIds 用完标记或清洗回收编号
     * @param useEndReuseDO 用完标记或清洗回收
     */
    void updateByIds(List<Long> reuseIds, MaterialUseEndReuseDO useEndReuseDO);
}