package com.ruoyi.mall.mapper;

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

import com.github.pagehelper.PageInfo;
import com.ruoyi.mall.domain.MallAppGoodsVo;
import com.ruoyi.mall.domain.MallGoodsGoods;
import com.ruoyi.mall.domain.MallGoodsGoodsDTO;
import com.ruoyi.mall.domain.vo.IndexGoodsVO;
import com.ruoyi.mall.domain.MallAppGoodsVo;
import com.ruoyi.mall.domain.vo.MallGoodsGoodsExportVO;
import org.apache.ibatis.annotations.Param;

/**
 * 商品Mapper接口
 *
 * @author chang
 * @date 2021-11-25
 */
public interface MallGoodsGoodsMapper
{
    /**
     * 查询商品
     *
     * @param id 商品主键
     * @return 商品
     */
    public MallGoodsGoods selectMallGoodsGoodsById(Long id);

    /**
     * 商品id查询
     * @param id
     * @return
     */
    public MallGoodsGoods selectGoodsById(Long id);

    /**
     * 查询商品列表
     *
     * @param mallGoodsGoods 商品
     * @return 商品集合
     */
    public List<MallGoodsGoods> selectMallGoodsGoodsList(MallGoodsGoods mallGoodsGoods);

    /**
     * 查询其他商品列表
     * @param mallGoodsGoods
     * @return
     */
    public List<MallGoodsGoods> selectOtherGoodsList(MallGoodsGoods mallGoodsGoods);

    /**
     * 新增商品
     *
     * @param mallGoodsGoods 商品
     * @return 结果
     */
    public int insertMallGoodsGoods(MallGoodsGoods mallGoodsGoods);

    /**
     * 修改商品
     *
     * @param mallGoodsGoods 商品
     * @return 结果
     */
    public int updateMallGoodsGoods(MallGoodsGoods mallGoodsGoods);

    /**
     * 删除商品
     *
     * @param id 商品主键
     * @return 结果
     */
    public int deleteMallGoodsGoodsById(Long id);

    /**
     * 批量删除商品
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMallGoodsGoodsByIds(Long[] ids);

    /**
     * 修改销量
     *
     * @return 结果
     */
    public int updateMallGoodsGoodsSaleNum(@Param("goodsId") Integer goodsId,@Param("count") Integer count);

    /**
     * 修改库存
     *
     * @return 结果
     */
    public int updateMallGoodsGoodsStock(@Param("goodsId") Integer goodsId,@Param("count") Integer count);

    /*
     * 销量查询商品
     * */
    public List<IndexGoodsVO> selectMallGoodsBySales();

    /*
     * 新品
     * */
    public List<IndexGoodsVO> selectMallGoodsByCreatTime();

    /*
     * 热门
     * */
    public List<IndexGoodsVO> selectMallGoodsByhot();

    /*
     * 根据专区查询商品
     * */
    public List<IndexGoodsVO> selectMallGoodsByTag(@Param("tagId") Integer tagId);

    /*
     * 根据专区查询商品
     * */
    public List<IndexGoodsVO> selectIndexMallGoodsByTag(@Param("tagId") Integer tagId, @Param("pageSize") Integer pageSize);

    public List<IndexGoodsVO> selectMallGoodsGoodsListVO(MallGoodsGoods mallGoodsGoods);

    /**
     * 常用清单
     *
     * @return 商品集合
     */
    public List<IndexGoodsVO> commonGoodsList(@Param("userId") String userId);

    public IndexGoodsVO selectMallGoodsGoodsByIdVO(Long aLong);

    /**
     * 业务员查询所有商品
     *
     * @param params sort 排序：0-默认排序，1-价格从高到低，2-价格从低到高，3-提成从高到低，4-提成从低到高
     * @return 商品集合
     */
    public List<Map<String, Object>> getSalesmanAllGoodsList(Map<String, Object> params);

    /**
     * 增加库存
     * @param total
     * @param goodsId
     * @return
     */
    public int updateGoodsStock(@Param("total")Integer total, @Param("goodsId")Long goodsId);

    /**
     * 查询筛选商品列表（商品导出）
     *
     * @param mallGoodsGoods 商品
     * @return 商品集合
     */
    public List<MallGoodsGoodsExportVO> selectExportScreenGoodsList(MallGoodsGoods mallGoodsGoods);

    /**
     * 查询勾选商品列表（商品导出）
     *
     * @param goodsIds 商品ID
     * @return 商品集合
     */
    public List<MallGoodsGoodsExportVO> selectExportCheckGoodsList(Long[] goodsIds);

    /**
     * 小程序上架审核隐藏商品
     *
     * @param showStatus 小程序上架审核状态：0-未审核，1-审核中
     * @return 结果
     */
    public int updateXcxReviewHiddenGoods(Integer showStatus);

    /**
     * 小程序上架审核隐藏分类
     *
     * @param showStatus 小程序上架审核状态：0-未审核，1-审核中
     * @return 结果
     */
    public int updateXcxReviewHiddenGoodsClass(Integer showStatus);

    /**
     * 根据复制商品ID查询商品列表
     *
     * @param copyId 复制商品ID
     * @return 商品集合
     */
    public List<MallGoodsGoods> selectMallGoodsGoodsListByCopyId(Long copyId);

    /**
     * 修改复制商品商品
     *
     * @param mallGoodsGoods 商品
     * @return 结果
     */
    public int updateCopyMallGoodsGoods(MallGoodsGoods mallGoodsGoods);

    /**
     * 复制商品copyId未设置的商品列表
     *
     * @return 商品集合
     */
    public List<MallGoodsGoods> selectMallGoodsGoodsListCopyIdIsNull();

    /**
     * 批量修改复制商品
     *
     * @param list 商品
     * @return 结果
     */
    public int batchUpdateCopyMallGoodsGoods(@Param("list") List<MallGoodsGoods> list);

    /**
     * 批量删除复制商品
     *
     * @param ids 需要删除的商品主键集合
     * @return 结果
     */
    public int deleteCopyMallGoodsGoodsByCopyIds(Long[] ids);

    List<IndexGoodsVO> selectMallGoodsGoodsListDTO(MallGoodsGoodsDTO mallGoodsGoods);

    int selectgoodssort();

    List<MallAppGoodsVo> selectallGoods();
}
