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

import java.util.*;
import javax.validation.*;

import cn.iocoder.yudao.module.basic.controller.admin.dealergoods.vo.DealerGoodsCreateReqVO;
import cn.iocoder.yudao.module.basic.controller.admin.dealerinfo.vo.*;
import cn.iocoder.yudao.module.basic.dal.dataobject.dealergoods.DealerGoodsDO;
import cn.iocoder.yudao.module.basic.dal.dataobject.dealerinfo.DealerInfoDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.basic.dal.dataobject.vendorinfo.VendorInfoDO;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 经销商 Service 接口
 *
 * @author 芋道源码
 */
public interface DealerInfoService {

    /**
     * 创建经销商
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createDealerInfo(@Valid DealerInfoCreateReqVO createReqVO);
    /**
     * 创建经销商
     *
     * @param dealerInfo 经销商信息
     * @param areaGoodsList 新增商品信息（单个商品一组）
     * @return 编号
     */
    Long createDealerGoodsInfo(DealerInfoCreateReqVO dealerInfo, List<DealerGoodsDO> areaGoodsList);
    /**
     * 更新经销商
     *
     * @param updateReqVO 更新信息
     */
    void updateDealerInfo(@Valid DealerInfoUpdateReqVO updateReqVO);
    /**
     * 更新经销商
     *
     * @param dealerInfo 经销商信息
     * @param areaGoodsList 新增商品信息（单个商品一组）
     * @param areaGoodsUpdateList 商品更新信息
     */
    void updateDealerAndAreaGoodsInfo(DealerInfoUpdateReqVO dealerInfo, List<DealerGoodsDO> areaGoodsList
            , List<DealerGoodsDO> areaGoodsUpdateList);
    /**
     * 删除经销商
     *
     * @param id 编号
     */
    void deleteDealerInfo(Long id);

    /**
     * 删除经销商
     *
     * @param id 编号
     */
    void deleteDealerAndAreaGoodsInfo(Long id);

    /**
     * 获得经销商
     *
     * @param id 编号
     * @return 经销商
     */
    DealerInfoDO getDealerInfo(Long id);

    /**
     * 获得经销商分页
     *
     * @param pageReqVO 分页查询
     * @return 经销商分页
     */
    PageResult<DealerInfoDO> getDealerInfoPage(DealerInfoPageReqVO pageReqVO);

    /**
     * 查询所有经销商昵称
     * @return
     */
   List<DealerInfoDO> getPullInfoList();

    /**
     * 根据经销商编码获取经销商信息
     * @param dealerId
     * @return
     */
    DealerInfoDO getDealerGoodsInfoByDealerGoodsId(String dealerId);

    DealerInfoDO getDealerInfoByGoods(String dealerId, Long businessInfoId, String goodsId);

    List<DealerInfoDO> getDealerInfoByGoodsId(String goodsId, Long businessInfoId);

}
