package com.ruoyi.oa.service;

import com.ruoyi.oa.domain.bo.SysOaOutWarehouseBoList;
import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo;
import com.ruoyi.oa.domain.vo.SysOaWarehouseDetailVo;
import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;

import javax.validation.constraints.NotNull;
import java.util.Collection;
import java.util.List;

/**
 * 仓库出库Service接口
 *
 * @author liuzongkun999
 * @date 2024-11-02
 */
public interface ISysOaWarehouseDetailService {

    /**
     * 查询仓库出库
     */
    SysOaWarehouseDetailVo queryById(Long id);

    /**
     * 查询仓库出库产品id的列表
     *
     * @param WarehouseId 出库产品id
     */
    TableDataInfo<SysOaWarehouseDetailVo> queryWarehouseIdList(Long WarehouseId);

    /**
     * 查询仓库出库列表
     */
    TableDataInfo<SysOaOutWarehouseListVo> queryPageList(SysOaWarehouseDetailBo bo, PageQuery pageQuery);

    /**
     * 查询仓库出库列表
     */
    List<SysOaWarehouseDetailVo> queryList(SysOaWarehouseDetailBo bo);

    /**
     * 新增仓库出库
     */
    Boolean insertByBo(SysOaWarehouseDetailBo bo);

    /**
     * 仓库批量出库
     */
    Boolean insertByBoList(SysOaOutWarehouseBoList boList);

    /**
     * 修改仓库出库
     */
    Boolean updateByBo(SysOaWarehouseDetailBo bo);

    /**
     * 校验并批量删除仓库出库信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);


    TableDataInfo<SysOaWarehouseDetailVo> queryOutWarehouseByProjectId(@NotNull(message = "项目名不能为空") Long projectId);

    /**
     * 用于撤回车库 在上层已经恢复库存不需要再次方法中恢复
     * @param id
     */
    void deleteById(Long id);
}
