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.MaterialUseEndReuseDetailPageReqVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseDetailRespVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReuseDetailSaveReqVO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseEndReuseDetailDO;
import jakarta.validation.Valid;

import java.util.List;

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

    /**
     * 创建物料用完标记或清洗回收明细
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    MaterialUseEndReuseDetailRespVO createMaterialUseEndReuseDetail(@Valid MaterialUseEndReuseDetailSaveReqVO createReqVO);

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

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

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

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

    /**
     * 获得物料用完标记或清洗回收明细分页
     *
     * @param pageReqVO 分页查询
     * @return 物料用完标记或清洗回收明细分页
     */
    PageResult<MaterialUseEndReuseDetailDO> getMaterialUseEndReuseDetailPage(MaterialUseEndReuseDetailPageReqVO pageReqVO);

    /**
     * 批量保存物料用完标记或清洗回收明细
     *
     * @param detailDOS 物料用完标记或清洗回收明细
     */
    void saveBatch(List<MaterialUseEndReuseDetailDO> detailDOS);

    /**
     * 获得物料用完标记或清洗回收明细分页 - 带父级信息和物料信息
     *
     * @param pageReqVO 分页查询
     * @return 物料用完标记或清洗回收明细分页
     */
    PageResult<MaterialUseEndReuseDetailRespVO> getDetailPageWithParentInfoAndMaterialInfo(@Valid MaterialUseEndReuseDetailPageReqVO pageReqVO);

    /**
     * 获得物料用完标记或清洗回收明细 - 带父级信息和物料信息
     *
     * @param parentIds 用完标记或清洗回收的编号
     * @return 物料用完标记或清洗回收明细
     */
    List<MaterialUseEndReuseDetailRespVO> getDetailRespVOSByParentIds(List<Long> parentIds);

    /**
     *  根据主表id删除物料用完标记或清洗回收明细
     *
     * @param id 用完标记或清洗回收的编号
     */
    void deleteDetailListByParentId(Long id);

    /**
     *  根据主表ids批量删除物料用完标记或清洗回收明细
     *
     * @param parentIds 用完标记或清洗回收的编号
     */
    void deleteDetailListByParentIds(List<Long> parentIds);

    /**
     *  根据ids批量获取明细
     *
     * @param detailIds 编号
     * @return 用完标记或清洗回收明细
     */
    List<MaterialUseEndReuseDetailDO> getDetailListByIds(List<Long> detailIds);

    /**
     *  根据ids批量更新明细
     *
     * @param detailIds 编号
     * @param detailDO 用完标记或清洗回收明细
     */
    void updateByIds(List<Long> detailIds, MaterialUseEndReuseDetailDO detailDO);

}