package com.xhpc.order.service;

import com.xhpc.common.core.web.domain.AjaxResult;
import com.xhpc.order.domain.XhpcStatisticsStation;
import com.xhpc.order.domain.XhpcStatisticsTimeInterval;

import javax.servlet.ServletOutputStream;
import java.util.List;
import java.util.Map;

/**
 * @author yuyang
 * @date 2021/8/31 16:21
 * @Version 1.0
 */
public interface IXhpcStatisticsService {

    /**
     * 小时统计
     * @param chargingStationIds         电站id集合
     * @param internetUserId      流量方id
     * @param operatorId          运营商id
     * @param startTime           订单开始时间
     * @param endTime             订单结束时间
     * @param userId              用户id
     * @param type             1 平台 2 运营商 3流量方
     * @return
     */
    List<Map<String, Object>> getTimeIntervalPage(String chargingStationIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type);


    /**
     * 日期统计
     * @param chargingStationIds         电站id集合
     * @param internetUserId      流量方id
     * @param operatorId          运营商id
     * @param startTime           订单开始时间
     * @param endTime             订单结束时间
     * @param userId              用户id
     * @param type             1 平台 2 运营商 3流量方
     * @return
     */
    List<Map<String, Object>> getDateIntervalPage(String chargingStationIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type);

    /**
     * 电站统计
     * @param chargingStationIds  电站集合
     * @param operatorIds        运营集合
     * @param internetUserId      流量方id
     * @param operatorId          运营商id
     * @param startTime           订单开始时间
     * @param endTime             订单结束时间
     * @param userId              用户id
     * @param type             1 平台 2 运营商 3流量方
     * @return
     */
    List<Map<String, Object>> getStationIntervalPage(String chargingStationIds,String operatorIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type);

    /**
     * 运营商统计
     * @param operatorIds        运营商集合
     * @param operatorId          运营商id
     * @param startTime           订单开始时间
     * @param endTime             订单结束时间
     * @param userId              用户id
     * @param type             1 平台 2 运营商 3流量方
     * @return
     */
    List<Map<String, Object>> getOperatorIntervalPage(String operatorIds,Long operatorId, String startTime, String endTime, Long userId, Integer type);


    /**
     * 流量方统计
     * @param internetUserIds    流量方集合
     * @param internetUserId      流量方id
     * @param startTime           订单开始时间
     * @param endTime             订单结束时间
     * @param userId              用户id
     * @param type             1 平台 2 运营商 3流量方
     * @return
     */
    List<Map<String, Object>> getInternetUserIntervalPage(String internetUserIds, Long internetUserId, String startTime, String endTime, Long userId, Integer type);


    /**
     * 终端统计
     * @param chargingStationId   电站id
     * @param terminalId          终端di
     * @param operatorId          运营商id
     * @param startTime           订单开始时间
     * @param endTime             订单结束时间
     * @param userId              用户id
     * @param type             1 平台 2 运营商 3流量方
     * @return
     */
    List<Map<String, Object>> getTerminalIntervalPage(String chargingStationId, String terminalId, Long operatorId, String startTime, String endTime, Long userId, Integer type);

    /**
     * 电站列表
     * @param operatorId      运营商id
     * @param userId          用户id
     * @param type            1 平台 2 运营商 3流量方
     * @return
     */
    AjaxResult getChargingStationList(Long operatorId,Long userId,Integer type);

    /**
     * 运营商列表
     * @param operatorId      运营商id
     * @param userId          用户id
     * @param type            1 平台 2 运营商 3流量方
     * @return
     */
    AjaxResult getOperatorList(Long operatorId,Long userId,Integer type);

    /**
     * 流量方列表
     * @param internetUserId  流量方id
     * @param userId          用户id
     * @param type            1 平台 2 运营商 3流量方
     * @return
     */
    AjaxResult getInternetUserIList(Long internetUserId,Long userId,Integer type);


    /**
     * 终端列表
     * @param chargingStationId  电站id
     * @param userId          用户id
     * @param type            1 平台 2 运营商 3流量方
     * @return
     */
    AjaxResult getTerminalList(Long chargingStationId,Long userId,Integer type);

    /**
     * 添加时段订单统计
     * @param xhpcStatisticsTimeInterval
     */
    void addStatisticsTime(XhpcStatisticsTimeInterval xhpcStatisticsTimeInterval);


    /**
     * 添加订单统计
     *
     * @param xhpcStatisticsStation
     */
    void addStatisticsStation(XhpcStatisticsStation xhpcStatisticsStation);

    void export(ServletOutputStream out, String[] titles, String[] keys, List<Map<String, Object>> data) throws Exception;

    void exportByDay(ServletOutputStream out, String[] titles, String[] keys, List<Map<String, Object>> data) throws Exception;

    void exportByDate(ServletOutputStream out, String[] titles, String[] keys, List<Map<String, Object>> data) throws Exception;

}
