package cn.iocoder.yudao.module.basic.service.goodsinfo;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.basic.controller.admin.goodsinfo.vo.*;
import cn.iocoder.yudao.module.basic.dal.dataobject.goodsinfo.GoodsInfoDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 商品 Service 接口
 *
 * @author 芋道源码
 */
public interface GoodsInfoService {

    /**
     * 创建商品
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createGoodsInfo(@Valid GoodsInfoCreateReqVO createReqVO);

    /**
     * 更新商品
     *
     * @param updateReqVO 更新信息
     */
    void updateGoodsInfo(@Valid GoodsInfoUpdateReqVO updateReqVO);

    /**
     * 删除商品
     *
     * @param id 编号
     * @param goodsId 商品编码
     */
    void deleteGoodsInfo(Long id,String goodsId);

    /**
     * 获得商品
     *
     * @param id 编号
     * @return 商品
     */
    GoodsInfoDO getGoodsInfo(Long id);

    /**
     * 获得商品列表
     *
     * @param goodsInfoListReqVO 根据信息内容动态查询
     * @return 商品列表
     */
    List<GoodsInfoDO> getGoodsInfoListQuery(GoodsInfoListReqVO goodsInfoListReqVO);
    /**
     * 获得商品分页
     *
     * @param pageReqVO 分页查询
     * @return 商品分页
     */
    PageResult<GoodsInfoDO> getGoodsInfoPage(GoodsInfoPageReqVO pageReqVO);

    /**
     * 获取所有商品
     * @return
     */
    List<GoodsInfoDO> getGoodsNameList();

    /**
     * 根据指定的商户id 获取所有名下多个商品
     * @param ids
     * @return
     */
    List<GoodsInfoDO> getGoodsNameListByBusinessInfoId(List<Long> ids);

    /**
     * 根据商品编码列表获取商品列表
     * @param goodsIds
     * @return
     */
    List<GoodsInfoDO> getGoodsInfoListByGoodsIds(List<String> goodsIds, Long businessInfoId);

    /**
     * 根据指定的商户id 获取所有名下多个商品
     * @param belongBusinessId
     * @return
     */
    List<GoodsInfoDO> getGoodsListByBelongBusinessId(List<Long> belongBusinessId);

    /**
     * 根据商户id 获得所有商品
     * @param businessInfoId 商户信息id
     * @return 商品
     */
    List<GoodsInfoRespVO> getGoodsListByBusinessInfoId(Long businessInfoId);

    /**
     * 根据商户ID获得商品列表
     * @param belongBusinessId 商户ID
     * @return 出库单商品
     */
    List<GoodsInfoForTransferRespVO> queryListMiniResult(Long belongBusinessId);

    /**
     * 根据商品编码获得商品信息
     * @param goodsId 商品编码
     * @return 商品信息
     */
    GoodsInfoRespVO getByGoodsId(String goodsId);

}
