package com.ghy.goods.mapper;

import com.ghy.goods.domain.Goods;
import com.ghy.goods.request.AppGoodsRequest;
import org.apache.ibatis.annotations.Param;

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

/**
 * @author clunt
 * 商品的mapper层
 */
public interface GoodsMapper {

    /**
     * @param goods 商品信息
     * @return 校验是否满足库存
     */
    List<Goods> checkAGoodsStore(AppGoodsRequest goods);

    /**
     * @param goods 商品属性
     * @return 成功条数
     */
    int insertGoods(Goods goods);

    /**
     * @param goods 商品属性
     * @return 成功条数
     */
    int updateGoods(Goods goods);

    /**
     * @param goods 商品入参
     * @return 商品集合
     */
    List<Goods> selectGoodsList(Goods goods);


    /**
     * @param goodsId 商品id
     * @return 商品
     */
    Goods selectById(Long goodsId);

    /**
     * 批量删除商品信息
     *
     * @param goodsId 需要删除的数据ID
     * @return 结果
     */
    int deleteGoodsByIds(Long[] goodsId);

    /**
     * @param goodsName 商品名称
     * @return 商品信息
     */
    Goods checkGoodsNameUnique(String goodsName);

    /**
     * @param goodsCode 商品编码
     * @return 商品信息
     */
    Goods checkGoodsCodeUnique(String goodsCode);

    /**
     * 用商品类别ID查询一条商品信息
     * 一般用于校验商品类别是否正在被使用
     *
     * @param goodsCategoryId 设备类别ID
     * @return 商品信息
     */
    Goods selectOneByGoodsCategoryId(Long goodsCategoryId);

    /**
     * 设置商品编号
     *
     * @param goodsId   商品ID
     * @param goodsCode 商品编号
     * @return
     */
    int setCode(@Param("goodsId") Long goodsId, @Param("goodsCode") String goodsCode);

    /**
     * 用商品ID批量查询
     *
     * @param ids 商品ID
     */
    List<Goods> selectByIds(Collection<Long> ids);

    /**
     * 用类目ID批量查询
     *
     * @param ids 第三级类目ID
     */
    List<Goods> selectByCategoryIds(Collection<Long> ids);

}
