package com.hzs.sale.wares.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.sale.ext.BdWaresSpecsSkuExt;
import com.hzs.common.domain.sale.wares.BdWaresSpecsSku;
import com.hzs.sale.shopping.vo.ProductGroup;
import com.hzs.sale.shopping.vo.WaresItemVo;
import com.hzs.sale.shopping.vo.WaresItemWaresInfo;
import com.hzs.sale.wares.param.CuWaresItemsParams;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * 规格sku表 Mapper 接口
 */
public interface BdWaresSpecsSkuMapper extends BaseMapper<BdWaresSpecsSku> {

    /**
     * 根据编号查找商品的sku,携带所有规格，查看详情
     *
     * @param specialArea 专区
     * @param systemType  系统类型
     * @param waresCode   商品编号
     */
    List<BdWaresSpecsSkuExt> queryWaresSpecsSku(@Param("specialArea") Integer specialArea,
                                                @Param("systemType") Integer systemType,
                                                @Param("waresCode") String waresCode);

    /**
     * 根据sku主键查询规格名称
     *
     * @param pkSkuId sku主键
     */
    List<BdWaresSpecsSkuExt> queryWaresSpecsNameSku(@Param("pkSkuIdList") Set<Integer> pkSkuId);

    /**
     * 通过规格列表查询商品最小库存单位，
     *
     * @param cuWaresItemsParams 专区
     */
    BdWaresSpecsSkuExt queryWaresDetailSkuBySpecs(@Param("cuWaresItemsParams") CuWaresItemsParams cuWaresItemsParams);

    /**
     * 根据id修改值
     *
     * @param waresSpecsSku
     */
    void updateBySkuId(BdWaresSpecsSku waresSpecsSku);

    /**
     * 根据id查询sku （可查询删除数据）
     *
     * @param pkWaresSpecsSku
     * @return
     */
    BdWaresSpecsSku selectByWaresSpecsSkuIdAndDel(@Param("pkWaresSpecsSku") Integer pkWaresSpecsSku);

    /**
     * 根据商品id列表查询规格等
     *
     * @param waresIds
     * @return
     */
    List<BdWaresSpecsSkuExt> selectByWaresSpecsSku(@Param("waresIds") List<Integer> waresIds);

    /**
     * 根据id 批量查询sku 信息
     *
     * @param pkWaresSpecsSku
     * @return
     */
    List<WaresItemWaresInfo> selectByPkIds(@Param("pkWaresSpecsSku") List<Integer> pkWaresSpecsSku);

    /**
     * 查询商品封装为返回到会员端商品信息
     */
    WaresItemVo selectWaresItemsVO(@Param("specialArea") Integer specialArea, @Param("waresCode") String waresCode,
                                   @Param("productGroup") List<ProductGroup> productGroup);

    /**
     * 根据id 查询
     *
     * @param pkWaresSpecsSku
     * @return
     */
    BdWaresSpecsSkuExt selectByPkWaresSpecsSku(@Param("pkWaresSpecsSku") Integer pkWaresSpecsSku);

    /**
     * 查询商品的极差价格
     *
     * @param specialArea
     * @param waresCode
     * @param systemType
     * @param pkRange
     * @return
     */
    List<BdWaresSpecsSkuExt> queryWaresSpecsRangeSku(@Param("specialArea") Integer specialArea,
                                                     @Param("waresCode") String waresCode,
                                                     @Param("systemType") Integer systemType,
                                                     @Param("pkRange") Integer pkRange);

    /**
     * 根据商品id查询规格价格最小值 排除赠品
     *
     * @param pkWaresIds
     * @return
     */
    List<BdWaresSpecsSkuExt> selectByMinWaresSpecsSkuByPkWaresList(@Param("pkWaresIds") List<Integer> pkWaresIds);


    /**
     * 查询SKU价格等信息
     *
     * @param skuIdList skuID列表
     * @return
     */
    List<BdWaresSpecsSkuExt> queryWaresSpecsSkuList(@Param("skuIdList") List<Long> skuIdList);
}
