package com.ruoyi.mall.service;

import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.mall.domain.MallGoodsGoods;
import com.ruoyi.mall.domain.MallGoodsGoodsDTO;
import com.ruoyi.mall.domain.vo.IndexGoodsVO;
import com.ruoyi.mall.domain.vo.MallGoodsGoodsExportVO;

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

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

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

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

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

    /**
     * 常用清单
     *
     * @return 商品集合
     */
    public PageInfo<IndexGoodsVO> commonGoodsList(Integer pageNum, Integer pageSize, String userId);

    /**
     * 查询商品列表
     *
     * @param mallGoodsGoods 商品
     * @return 商品集合
     */
    public PageInfo<IndexGoodsVO> selectMallGoodsGoodsListByPage(Integer pageNum, Integer pageSize, MallGoodsGoodsDTO mallGoodsGoods, String userId);

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

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

    /**
     * 修改审核
     *
     * @param mallGoodsGoods
     * @return
     */
    public AjaxResult updateCheckStatus(MallGoodsGoods mallGoodsGoods);


    public AjaxResult updateSupplier(MallGoodsGoods mallGoodsGoods);

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

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

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

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

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

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

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

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

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

    /*
     * 根据id查商品
     * */
    public IndexGoodsVO selectMallGoodsGoodsByIdVO(Map<String, Object> params);

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

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

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

    /**
     * 小程序上架审核隐藏商品、分类等
     *
     * @param params 参数
     * @return 结果
     */
    public int updateXcxReviewHidden(Map<String, Object> params);

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

    AjaxResult selectgoodssort();

    AjaxResult selectallGoods();
}
