package com.ruoyi.bst.order.service;

import com.ruoyi.bst.order.domain.OrderQuery;
import com.ruoyi.bst.order.domain.query.OrderRefundQuery;
import com.ruoyi.bst.order.domain.vo.*;
import com.ruoyi.bst.refund.domain.RefundQuery;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface OrderDashboard {

    /**
     * 查询订单用户数量
     * @param query 查询条件
     * @return 订单用户数量
     */
    Integer selectUserCount(OrderQuery query);

    /**
     * 查询查询店铺的用户数量
     * @param query 查询条件
     * @return 订单用户数量
     */
    Map<Long,Integer> selectUserCountGroupByStore(OrderQuery query);


    /**
     * 查询订单数量
     *
     * @param query 查询条件
     * @return 订单数量
     */
    Integer selectCount(OrderQuery query);

    /**
     * 查询订单支付金额
     * @param query 查询条件
     * @return 订单支付金额
     */
    BigDecimal selectPayAmount(OrderQuery query);


    /**
     * 查询订单状态数量
     * @param query 查询条件
     * @return 订单状态数量
     */
    Map<String, Integer> selectStatusCount(OrderQuery query);

    /**
     * 查询订单退款金额
     * @param query
     * @param keys
     * @return
     */
    BigDecimal selectRefundAmount(OrderRefundQuery query);

    /**
     * 查询订单退款统计
     * @param query 查询条件
     * @param keys 查询字段
     * @return 订单退款统计
     */
    OrderRefundStatVO selectRefundStat(OrderRefundQuery query, List<String> keys);

    /**
     * 查询订单每日统计
     */
    List<OrderDailyStatVO> selectDailyStat(OrderQuery query, List<String> keys);

    /**
     * 查询订单每日退款统计
     */
    List<OrderDailyRefundStatVO> selectDailyRefundStat(RefundQuery query, List<String> keys);

    /**
     * 查询订单排行榜
     */
    List<OrderRankVO> selectRank(OrderQuery query);

    /**
     * 查询订单实收金额
     */
    BigDecimal selectSumOfActualAmount(OrderQuery query);


    /**
     * 查询订单总金额
     */
    BigDecimal selectSumOfActualTotalAmount(OrderQuery query);

}
