package com.shkj.wms.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.shkj.common.core.domain.Result;
import com.shkj.wms.bo.*;
import com.shkj.wms.domain.SysStock;
import com.shkj.wms.vo.*;

import java.util.List;
import java.util.Map;

/**
 * 库存管理Service接口
 *
 * @author lch
 * @date 2023-05-07
 */
public interface ISysStockService extends IService<SysStock> {
    /**
     * 查询单个
     *
     * @param id
     * @return
     */
    Result<SysStockVo> queryById(Long id);

    /**
     * 查询列表
     *
     * @param bo
     * @return
     */
    List<SysStockVo> queryList(SysStockQueryBo bo);

    /**
     * 根据新增业务对象插入库存管理
     *
     * @param bo 库存管理新增业务对象
     * @return
     */
    Result<Boolean> insertByAddBo(SysStockAddBo bo);

    /**
     * 根据编辑业务对象修改库存管理
     *
     * @param bo 库存管理编辑业务对象
     * @return
     */
    Result<Boolean> updateByEditBo(SysStockEditBo bo);

    /**
     * 校验并删除数据
     *
     * @param ids     主键集合
     * @param isValid 是否校验,true-删除前校验,false-不校验
     * @return
     */
    Result<Boolean> deleteWithValidById(List<Long> ids, Boolean isValid);

    /**
     * 入库
     *
     * @param locationId  货位ID
     * @param containerId 治具编号
     * @param batch       批次
     * @param isPuch      是否冲孔
     * @param goods       入库产品信息
     * @return
     */
    Result<Boolean> productDeposit(Long locationId, Long containerId, String batch, String isPuch, List<Map<String, String>> goods,Long storageCode);


    /**
     * 出库减去库存
     * @param bo
     * @return
     */
    Result<Boolean> reduceInventory(SysStockReduceBo bo);

    /**
     * 保存或者修改库存信息
     *
     * @param bo
     * @return
     */
    Result<Boolean> saveOrUpdateStock(SysStockSaveOrUpdateBo bo);


    /**
     * 库存查询
     * @param bo
     * @return
     */
    List<SysStockNumVo> queryStockList(SysReportStockQueryBo bo);

    /**
     * 车型颜色库存图表
     * @param bo
     * @return
     */
    Map<String, List<SysStockVehicheColorVo>> vehicheColorList(SysReportStockQueryBo bo);

    Map<String, List<SysStockVCLocationVo>> vehicheColorLocationList(SysReportStockQueryBo bo);


    Map<String, List<SysStockVehicheVo>> getVehicheStockList();


    List<SysStockNumDetailVo> queryStockDetailList(SysStockNumQueryBo bo);


}
