package com.ruoyi.web.modules.screen.mapper;

import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.web.modules.screen.domain.dto.TradeSalesDestinationCountDto;
import com.ruoyi.web.modules.screen.domain.dto.TradeSalesGradeCountDto;
import com.ruoyi.web.modules.screen.domain.dto.TradeSalesMonthTradeDto;
import com.ruoyi.web.modules.screen.domain.dto.TradeSalesOverviewDto;
import com.ruoyi.web.modules.screen.domain.dto.TradeSalesQuoteRawDto;

/**
 * 大屏交易销售统计 Mapper。
 * <p>
 * 牦牛交易均按订单完成时间在 [{@code yearStart}, {@code yearEnd}] 内过滤；SQL 见
 * {@code mapper/screen/TradeSalesScreenMapper.xml}。
 */
public interface TradeSalesScreenMapper
{
    /** 年度已完成订单：笔数、总头数、总金额 */
    TradeSalesOverviewDto selectTradeOverview(
            @Param("yearStart") Date yearStart,
            @Param("yearEnd") Date yearEnd);

    /** 按月汇总交易量/额 */
    List<TradeSalesMonthTradeDto> selectMonthlyTradeByYear(
            @Param("yearStart") Date yearStart,
            @Param("yearEnd") Date yearEnd);

    /** 按承销商销售去向（本市/本省/外省）汇总头数 */
    List<TradeSalesDestinationCountDto> selectSalesDestinationByYear(
            @Param("yearStart") Date yearStart,
            @Param("yearEnd") Date yearEnd);

    /** 按品质等级汇总头数 */
    List<TradeSalesGradeCountDto> selectQualityGradeByYear(
            @Param("yearStart") Date yearStart,
            @Param("yearEnd") Date yearEnd);

    /** 含等级明细的订单行数（品质占比分母） */
    long countGradedLinesInYear(
            @Param("yearStart") Date yearStart,
            @Param("yearEnd") Date yearEnd);

    /** 指定交易市场在日期窗口内的日报原始行 */
    List<TradeSalesQuoteRawDto> selectQuotesInWindow(
            @Param("tradeMarketId") Long tradeMarketId,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate);

    /** 按市场名称查 ID，用于产地行情 */
    Long selectTradeMarketIdByName(@Param("marketName") String marketName);

    /** 有完成订单的年份列表（供年份切换） */
    List<Integer> selectDistinctFinishYears();
}
