package com.shkj.wms.service;

import com.shkj.common.core.domain.Result;
import com.shkj.wms.bo.*;
import com.shkj.wms.config.ValidList;
import com.shkj.wms.domain.BaseContainer;
import com.shkj.wms.vo.BaseContainerInWWarehoseVo;
import com.shkj.wms.vo.BaseContainerVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.List;

/**
 * 容器资料Service接口
 *
 * @author lch
 * @date 2022-04-23
 */
public interface IBaseContainerService extends IService<BaseContainer> {
    /**
     * 查询单个
     *
     * @param id
     * @return
     */
    Result<BaseContainerVo> queryById(Long id);

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

    /**
     * 根据新增业务对象插入容器资料
     *
     * @param bo 容器资料新增业务对象
     * @return
     */
    Result<Boolean> insertByAddBo(BaseContainerAddBo bo);

    /**
     * 根据编辑业务对象修改容器资料
     *
     * @param bo 容器资料编辑业务对象
     * @return
     */
    Result<Boolean> updateByEditBo(BaseContainerEditBo bo);

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

    Boolean updateById(Long id);

    Result<BaseContainerVo> checkBaseContainer(String containerCode);



    Result checkChangeTray(Long containerId);

    /**
     * @param containerIds
     */
    void releaseContainer(List<Long> containerIds);

    /**
     * 根据容器编号获取容器对象
     *
     * @param containerCode 容器编号
     * @return
     */
    Result<BaseContainer> queryBaseContainerByCode(String containerCode);

    BaseContainer queryContainerByCode(String containerCode);

    /**
     * 查询周转箱的体积（每个体积都是一样的）
     *
     * @return
     */
//    BigDecimal queryZZXVolume();

    /**
     * 容器资料页面根据条件查询容器资料列表(不区分大小写)
     * @param
     * @return
     */
    List<BaseContainerVo> queryBaseContainerList(BaseContainerQueryListBo bo);


    /**
     * 保存或者修改容器资料（根据是否有id来判断新增或者修改）
     * @param list
     * @return
     */
    Result<Boolean> saveOrUpdateBaseContainers(ValidList<BaseContainerSaveOrUpdateBo> list);

    /**
     * 删除空闲的容器资料
     * @param ids
     * @return
     */
    Result<Boolean> removeBaseContainers(ValidList<Long> ids);

    /**
     * 批量保存容器数据
     * @param bo
     * @return
     */
    Result<Boolean> saveManyBaseContainers(BaseContainerManySaveBo bo);

    /**
     * 容器资料页面根据条件查询容器资料列表(不区分大小写)
     * @param
     * @return
     */
    List<BaseContainerInWWarehoseVo> queryContainerInWWarehoseList(BaseContainerQueryListBo bo);
}
