package com.ruoyi.app.service;

import com.ruoyi.app.DTO.*;
import com.ruoyi.app.domain.request.SearchTimeRangeParam;
import com.ruoyi.app.domain.request.TimeRangeParam;

import java.util.HashMap;
import java.util.List;

/**
 * 数据分析Service接口
 *
 * @author coede
 * @date 2025-03-28
 */
public interface IDataStatisticsService {
    /**
     * 查询生产数据指标
     *
     * @param timeRangeParam 时间条件
     * @return 指标
     */
    HashMap<String, Object> getProdIndicator(TimeRangeParam timeRangeParam);

    /**
     * 获取供应商供应数量前五排名
     *
     * @param timeRangeParam 时间条件
     * @return 供应商供应数量集合
     */
    List<SupplierAmountRankDTO> selectAmountRankByTime(TimeRangeParam timeRangeParam);

    /**
     * 获取供应商供应数量前五排名
     *
     * @param timeRangeParam 时间条件
     * @return 供应商供应数量集合
     */
    List<PurchaserAmountRankDTO> selectSaleAmountRankByTime(TimeRangeParam timeRangeParam);

    /**
     * 根据时间范围获取不同产地供应商供应数量
     *
     * @param timeRangeParam 时间条件
     * @return 产地供应数量集合
     */
    List<SupplierOriginAmountDTO> selectOriginAmountByTime(TimeRangeParam timeRangeParam);

    /**
     * 根据时间范围获取不同去向肉商销售数量
     *
     * @param timeRangeParam 时间条件
     * @return 去向销售数量集合
     */
    List<PurchaserSaleAmountDTO> selectSaleAmountByTime(TimeRangeParam timeRangeParam);

    /**
     * 根据时间范围获取入场无害化检验统计
     *
     * @param timeRangeParam 时间条件
     * @return 统计结果
     */
    HashMap<String, Object> selectHarmlessSumByTime(TimeRangeParam timeRangeParam);

    /**
     * 根据获取指定时间范围内每日累计计划屠宰
     *
     * @param timeRangeParam 时间条件
     * @return 时间段数量集合
     */
    List<TimeAndNumberDTO> selectEntranceAmountByTime(TimeRangeParam timeRangeParam);

    /**
     * 查询产出数据指标
     *
     * @param timeRangeParam 时间条件
     * @return 指标
     */
    HashMap<String, Object> getOutputIndicator(TimeRangeParam timeRangeParam);

    /**
     * 根据获取指定时间范围内每日累计白条重量
     *
     * @param timeRangeParam 时间条件
     * @return 结果
     */
    List<TimeAndWeightDTO> selectSideWeightByTime(TimeRangeParam timeRangeParam);

    /**
     * 根据获取指定时间范围内每日累计其他产品重量
     *
     * @param searchTimeRangeParam 时间条件
     * @return 结果
     */
    List<TimeAndWeightDTO> selectOtherProductWeightByTime(SearchTimeRangeParam searchTimeRangeParam);

    /**
     * 获取今日昨日指标
     *
     * @return 结果
     */
    HashMap<String, Object> getLatelyIndicator();

    /**
     * 获取近七天每日订单量
     *
     * @return 结果
     */
    List<TimeAndNumberDTO>getWeekEntranceCount();

    /**
     * 获取近七天每日分销订单量
     *
     * @return 指标
     */
    public List<TimeAndNumberDTO>getWeekDistributeCount();


    /**
     * 获取各部位重量对比情况
     *
     * @return 结果
     */
    HashMap<String,Object> getPorkPartWeight();

    /**
     * 获取产地/去向对比情况
     *
     * @return 结果
     */
    HashMap<String,Object> getPlaceAmount();
}
