package com.fjhx.item.service.product;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fjhx.item.entity.product.dto.ProductInfoDto;
import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
import com.fjhx.item.entity.product.po.ProductInfo;
import com.fjhx.item.entity.product.vo.ProductInfoVo;
import com.ruoyi.common.core.service.BaseService;
import org.springframework.web.multipart.MultipartFile;

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


/**
 * <p>
 * 产品库 服务类
 * </p>
 *
 * @author zlj
 * @since 2023-03-17
 */
public interface ProductInfoService extends BaseService<ProductInfo> {

    /**
     * 产品库分页
     */
    Page<ProductInfoVo> getPage(ProductInfoSelectDto dto);

    /**
     * 产品库分页 维多利亚
     */
    Page<ProductInfoVo> getPageByWdly(ProductInfoSelectDto dto);

    /**
     * 获取产品分组
     */
    Page<ProductInfoVo> getCombinationPage(ProductInfoSelectDto dto);

    /**
     * 客户产品库 尔泓扩展
     */
    Page<ProductInfoVo> getCustomerProductList(ProductInfoSelectDto dto);

    /**
     * 公司产品库 尔泓扩展
     */
    Page<ProductInfoVo> getConditionProductList(ProductInfoSelectDto dto);

    /**
     * 产品库明细
     */
    ProductInfoVo detail(Long id);

    ProductInfoVo detailByWdly(Long id);

    /**
     * 产品库新增
     */
    void add(ProductInfoDto productInfoDto);

    /**
     * 产品库新增 尔泓扩展
     */
    void addByEhsd(ProductInfoDto productInfoDto);

    /**
     * 产品库编辑 尔泓扩展
     */
    void editByEhsd(ProductInfoDto productInfoDto);

    /**
     * 产品库明细 尔泓扩展
     */
    ProductInfoVo detailByEhsd(Long id);

    /**
     * 产品库Excel导入 尔泓扩展
     */
    void excelImportByEhsd(MultipartFile file);

    /**
     * 产品库新增 维多利亚
     */
    void addByWdly(ProductInfoDto productInfoDto);

    /**
     * 产品库编辑
     */
    void edit(ProductInfoDto productInfoDto);

    /**
     * 产品库删除
     */
    void delete(Long id);

    /**
     * 根据产品IDS获取产品
     *
     * @param productIds
     * @return
     */
    List<ProductInfoVo> getListByProductIds(List<Long> productIds);

    /**
     * 根据产品类型获取产品
     *
     * @return
     */
    List<ProductInfoVo> getListByProductType(Integer productType, Integer definition,String productName,String productCode);

    /**
     * excel导入
     */
    void excelImport(MultipartFile file);

    /**
     * 产品部门移交 维多利亚
     */
    void transfer(ProductInfoDto productInfoDto);

    /**
     * 产品统计（数据看板-产品分析页面）
     * @param productInfoDto
     */
    Map<String,Object> productStatistics(ProductInfoDto productInfoDto);

    /**
     * 产品分布（数据看板-产品分析页面）
     * @param productInfoDto
     */
    List<Map<String,Object>> productDistribution(ProductInfoDto productInfoDto);

    /**
     * 产品类型排行（数据看板-产品分析页面）
     * @param productInfoDto
     */
    List<Map<String,Object>> productTypeRanking(ProductInfoSelectDto productInfoDto);

    /**
     * 产品排行（数据看板-产品分析页面）
     * @param productInfoDto
     */
    Page<ProductInfoVo> productRanking(ProductInfoSelectDto productInfoDto);

    /**
     * 产品统计
     * @return
     */
    Map<String,Object> statisticsProduct();

    /**
     * 产品库统计(根据产品库类型进行分类统计)
     */
    Map<String,Object> productInfoStatistics(ProductInfoSelectDto dto);
}
