package com.ruoyi.oa.service;

import com.ruoyi.oa.domain.dto.MonthlyStatsDTO;
import com.ruoyi.oa.domain.dto.SummaryFilterDTO;
import com.ruoyi.oa.domain.vo.SummaryCardVo;
import com.ruoyi.oa.domain.vo.SysOaWarehouseVo;
import com.ruoyi.oa.domain.bo.SysOaWarehouseBo;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;

import java.util.Collection;
import java.util.List;

/**
 * 仓库管理Service接口
 *
 * @author liuzongkun999
 * @date 2024-11-02
 */
public interface ISysOaWarehouseService {

    /**
     * 查询仓库管理
     */
    SysOaWarehouseVo queryById(Long id);

    /**
     * 查询仓库管理列表
     */
    TableDataInfo<SysOaWarehouseVo> queryPageList(SysOaWarehouseBo bo, PageQuery pageQuery);

    /**
     * 查询仓库管理列表
     */
    List<SysOaWarehouseVo> queryList(SysOaWarehouseBo bo);

    /**
     * 新增仓库管理
     */
    Long insertByBo(SysOaWarehouseBo bo);


    /**
     * 新增仓库管理
     */
    Long insertByBo2(SysOaWarehouseBo bo);


    /**
     * 修改仓库管理
     */
    Boolean updateByBo(SysOaWarehouseBo bo);

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

    /**
     * 根据一个name查询多个字段
     */
    TableDataInfo<SysOaWarehouseVo> listByMultiQuery(SysOaWarehouseBo bo, PageQuery pageQuery);

    TableDataInfo<SysOaWarehouseVo> queryPageListThreshold(SysOaWarehouseBo bo, PageQuery pageQuery, boolean b);


    /**
     * 采购 进行入库操作
     * @param boList
     * @return
     */
    Boolean insertBatch(List<SysOaWarehouseBo> boList);


    /**
     * 以下为数据分析专用
     * @param filter
     * @return
     */
    List<SummaryCardVo> getSummaryCards(SummaryFilterDTO filter);

    /**
     * @param ymStr 格式 "yyyy-MM"，可选；不传则默认当前年月
     */
    MonthlyStatsDTO getMonthlyStats(String ymStr);

    List<SysOaWarehouseVo> selectRecentOutbound(int limit);
}
