package com.shkj.wms.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.shkj.wms.bo.BaseLocationQueryListBo;
import com.shkj.wms.domain.BaseLocation;
import com.shkj.wms.bo.BaseLocationQueryBo;
import com.shkj.wms.bo.BaseLocationQueryPageBo;
import com.shkj.wms.vo.BaseLocationMapListVo;
import com.shkj.wms.vo.BaseLocationRecommendVo;
import com.shkj.wms.vo.BaseLocationVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 货位资料Mapper接口
 *
 * @author lch
 * @date 2022-04-23
 */
public interface BaseLocationMapper extends BaseMapper<BaseLocation> {
    // 获取推荐的货位
    List<BaseLocationVo> queryLocations(BaseLocationQueryBo bo);

    /**
     * 空的货位
     *
     * @param ids
     * @param locationName
     * @param abcClassify
     * @return
     */
    List<BaseLocationRecommendVo> getLocationByAreaIds(@Param("ids") List<String> ids, @Param("locationName") String locationName, @Param("abcClassify") String abcClassify);

    /**
     * 查找空货位
     *
     * @param locationId
     * @param areaId
     * @param storageId
     * @return
     */
    List<BaseLocation> getNearestEmptyLocationById(@Param("locationId") Long locationId, @Param("areaId") Long areaId, @Param("storageId") String storageId);

    /**
     * 根据id查询
     *
     * @param ids
     * @return
     */
    List<BaseLocationVo> queryLocationsByIds(@Param("ids") List<Long> ids);


    List<BaseLocationVo> queryLocationsPackageByIds(@Param("ids") List<Long> ids, @Param("goodId") Long goodId);

    /**
     * 查询货位资料列表（货位资料维护）
     * @param bo
     * @return
     */
    List<BaseLocationVo> queryBaseLocationList(BaseLocationQueryPageBo bo);

    BaseLocationVo queryLocationById(@Param("locationId") Long locationId);
    BaseLocationVo queryLocationByCode(@Param("locationCode") String locationCode, @Param("branchId") Long branchId);

    BaseLocationVo queryLocationByName(@Param("locationName") String locationName, @Param("branchId") Long branchId);

    List<BaseLocationRecommendVo> getLocationByGoodsIdStorageId(@Param("goodId") Long goodId, @Param("storageId") String storageId, @Param("branchId") Long branchId);

    /**
     * 根据派生获取货位信息
     * @param bo
     * @return
     */
    List<BaseLocationVo> queryBaseLocationListByDerive( BaseLocationQueryListBo bo);

    List<BaseLocationVo> getLocationByAreaId( Long areaId);
    /**
     *根据库位id查询巷道信息
     * @param locationId
     * @return
     */
    List<BaseLocationVo> gettunnel(String locationId);

    List<BaseLocationMapListVo>  getBaseLocationForMap(BaseLocationQueryPageBo bo);

}

