package com.fs.store.service;

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

import com.fs.common.core.domain.R;
import com.fs.store.domain.FsStoreProduct;
import com.fs.store.param.FsStoreProductAddEditParam;
import com.fs.store.param.FsStoreProductQueryParam;
import com.fs.store.vo.*;

/**
 * 商品Service接口
 *
 * @author fs
 * @date 2022-03-15
 */
public interface IFsStoreProductService
{
    /**
     * 查询商品
     *
     * @param productId 商品ID
     * @return 商品
     */
    public FsStoreProduct selectFsStoreProductById(Long productId);

    /**
     * 查询商品列表
     *
     * @param fsStoreProduct 商品
     * @return 商品集合
     */
    public List<FsStoreProduct> selectFsStoreProductList(FsStoreProduct fsStoreProduct);

    /**
     * 新增商品
     *
     * @param fsStoreProduct 商品
     * @return 结果
     */
    public int insertFsStoreProduct(FsStoreProduct fsStoreProduct);

    /**
     * 修改商品
     *
     * @param fsStoreProduct 商品
     * @return 结果
     */
    public int updateFsStoreProduct(FsStoreProduct fsStoreProduct);

    /**
     * 批量删除商品
     *
     * @param productIds 需要删除的商品ID
     * @return 结果
     */
    public int deleteFsStoreProductByIds(Long[] productIds);

    /**
     * 删除商品信息
     *
     * @param productId 商品ID
     * @return 结果
     */
    public int deleteFsStoreProductById(Long productId);

    List<FsStoreProductListVO> selectFsStoreProductListVO(FsStoreProduct fsStoreProduct);

    List<FsStoreProductListVO> selectFsStoreProductBarCodeListVO(FsStoreProduct fsStoreProduct);

    Map<String,Object> getFormatAttr(Long productId, String jsonStr);


    R addOrEdit(FsStoreProductAddEditParam fsStoreProduct);

    List<FsStoreProductListQueryVO> selectFsStoreProductTuiQuery(int count);


    List<FsStoreProductListQueryVO> selectFsStoreProductListQuery(FsStoreProductQueryParam param);

    FsStoreProductQueryVO selectFsStoreProductByIdQuery(Long productId);

    void decProductStock(Long productId, Long productAttrValueId, Integer cartNum);

    void incProductStock(Long num, Long productId, Long productAttrValueId);


    List<FsStoreProductListQueryVO> selectFsStoreProductNewQuery(int count);

    List<FsStoreProductListQueryVO> selectFsStoreProductHotQuery(int count);

    List<FsStoreProductListQueryVO> selectFsStoreProductGoodQuery(int count);

    List<FsStoreProductListQueryVO> selectFsStoreProductTuiListQuery();

    List<FsStoreProductListQueryVO> selectFsStoreProductGoodListQuery();

    Long selectFsStoreProductCount(int type);

    List<FsStoreProductActivityListVO> selectFsStoreProductByIds(String productIds);

    int updateStock(Long productId);

    List<FsStoreProductExportVO> selectFsStoreProductExportList(FsStoreProduct fsStoreProduct);

    String importStoreProduct(List<FsStoreProductExportVO> list, boolean updateSupport);
}
