package com.fs.his.service;

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

import com.fs.common.core.domain.R;
import com.fs.his.domain.FsStoreProduct;
import com.fs.his.domain.FsStoreProductRule;
import com.fs.his.param.FsProductAttrValueParam;
import com.fs.his.param.FsStoreProductAddEditParam;
import com.fs.his.param.FsStoreProductListSParam;
import com.fs.his.vo.*;

/**
 * 商品Service接口
 *
 * @author fs
 * @date 2023-06-08
 */
public interface IFsStoreProductService
{
    /**
     * 查询商品
     *
     * @param productId 商品主键
     * @return 商品
     */
    public FsStoreProduct selectFsStoreProductByProductId(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 需要删除的商品主键集合
     * @return 结果
     */
    public int deleteFsStoreProductByProductIds(Long[] productIds);

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

    List<FsStoreProductVO> selectFsStoreProductListVO(FsStoreProduct fsStoreProduct);

    List<FsStoreProductListSVO> selectFsStoreProductListSVO(FsStoreProductListSParam fsStoreProduct);

    List<OptionsVO> selectFsStoreProductStoreList();

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

    List<FsStoreProductRule> selectFsStoreProductRuleList();

    R addOrEdit(FsStoreProductAddEditParam fsStoreProduct);

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

    String importSrorePeoduct(List<FsStoreProductExcelVO> userList, boolean updateSupport);

    int updateFsStoreProductPrice(FsStoreProduct fsStoreProduct, Integer price);

    List<FsStoreProductExcelVO> selectFsStoreProductExcelVO(FsStoreProduct fsStoreProduct);

    List<FsStoreProductAttrValueVO> selectFsStoreProductAttrValueListVO(FsProductAttrValueParam param);
}
