package cn.com.ctop.kuaishou.modules.report.mapper;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.annotations.Param;

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

/**
 * @author jeecg-boot
 * 2019年12月5日19:55:14
 */
public interface AccountReportMapper {


    /**
     * 查询 当日最大小时
     *
     * @param nowDate
     * @return
     */
    Integer selectMaxHourByDate(String nowDate);

    /**
     * 今日消耗
     *
     * @param date       日期
     * @param accountIds
     * @return 今日消耗
     */
    JSONObject selectDayReport(@Param("date") String date, @Param("accountIds") JSONArray accountIds);

    JSONObject selectDayReportByAccount(@Param("date") String date, @Param("accountId") Long accountId);

    /**
     * 查询明细
     *
     * @param date       日期
     * @param accountIds
     * @return 查询明细
     */
    List<JSONObject> selectReportDetail(@Param("date") String date, @Param("accountIds") JSONArray accountIds);

    /**
     * 根据开始、结束日期查询消耗
     *
     * @param anotherDay
     * @param accountIds
     * @param endDate
     * @return
     */
    JSONObject selectByDate(@Param("startDate") String anotherDay, @Param("endDate") String endDate, @Param("accountIds") JSONArray accountIds);

    /**
     * 查询全部消耗 包括今日消耗
     *
     * @param accountIds
     * @return
     */
    JSONObject selectAllAccount(@Param("accountIds") JSONArray accountIds);


    /**
     * 根据日期 小时 查询信息
     *
     * @param date
     * @param statHour
     * @param accountIds
     * @return
     */
    JSONObject selectDayHourlyByHourAndDate(@Param("date") String date, @Param("statHour") String statHour, @Param("accountIds") JSONArray accountIds);

    /**
     * 根据日期 最大小时小时 查询信息
     *
     * @param date
     * @param statHour
     * @param accountIds
     * @return
     */
    JSONObject selectSumDayHourlyByHourAndDate(@Param("date") String date, @Param("statHour") String statHour, @Param("accountIds") JSONArray accountIds);


    /**
     * 查询 七天汇总数据
     *
     * @param anotherDay
     * @param endDate
     * @param accountIds
     * @return
     */
    List<JSONObject> selectDayDetailByDate(@Param("startDate") String anotherDay, @Param("endDate") String endDate, @Param("accountIds") JSONArray accountIds);


    /**
     * 查询所有按月统计数据
     *
     * @param accountIds
     * @return
     */
    List<JSONObject> selectAllByAccounts(@Param("accountIds") JSONArray accountIds);


    /**
     * 查询账号维度 分组数据
     *
     * @param date
     * @param accountIds
     * @param statHour
     * @return
     */
    List<JSONObject> selectReportDetailGroupAccountId(@Param("date") String date, @Param("accountIds") JSONArray accountIds, @Param("statHour") Integer statHour);

    /**
     * 根据开始结束时间查询明细
     *
     * @param startDate
     * @param endDate
     * @param accountIds
     * @param discount
     * @return
     */
    List<JSONObject> selectAccountReportByDate(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("accountIds") JSONArray accountIds, @Param("discount") BigDecimal discount);


    /**
     * 用户报表信息
     *
     * @param accountIds
     * @param discount
     * @return
     */

    List<JSONObject> selectAccountReport(@Param("accountIds") JSONArray accountIds, @Param("discount") BigDecimal discount);


    /**
     * 查询 根据日期查询汇总数据
     *
     * @param date
     * @param accountIds
     * @param statHour
     * @param discount
     * @return
     */
    JSONObject selectSummaryByAccountId(@Param("date") String date, @Param("accountIds") JSONArray accountIds, @Param("statHour") Integer statHour, @Param("discount") BigDecimal discount);

    /**
     * 按月统计
     *
     * @param startDate
     * @param endDate
     * @param accountIds
     * @return
     */
    List<JSONObject> selectDayDetailByMonth(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("accountIds") JSONArray accountIds);


    /**
     * 查询分天汇总
     *
     * @param queryMap
     * @return
     */

    JSONObject selectSummaryByMap(Map<String, Object> queryMap);

    List<JSONObject> selectReportDetailGroupAccountIdByDate(@Param("statDate") String anotherDay, @Param("accountIds") JSONArray accountIds);

    JSONObject selectHourSummaryByMap(Map<String, Object> queryMap);
}
