package com.cyksj.mapper.manage.statistics;

import cn.hutool.core.date.DateTime;
import com.cyksj.model.dto.MonthlyUserOrderDetailDto;
import com.cyksj.model.dto.NatureOrderDataDto;
import com.cyksj.model.excel.statistics.ExcelAppleOneData;
import org.apache.ibatis.annotations.Param;

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

/*
 *项目名: netflix
 *文件名: StatisticsExportMapper
 *创建者: JavaZou
 *创建时间:2023/7/26 17:57
 */
public interface StatisticsExportMapper{
	Integer getMonthNfExNumOfUser(@Param("goodsId") Long goodsId, @Param("lastYearMonth") String lastYearMonth, @Param("lastElevMonth") String lastElevMonth, @Param("lastThreeMonth") String lastThreeMonth, @Param("lastTwoMonth") String lastTwoMonth, @Param("lastMonth") String lastMonth, @Param("thisMonth") String thisMonth);

	Integer getMonthNfExNumOfUserByType(@Param("goodsId") Long goodsId, @Param("type") Integer type, @Param("lastYearMonth") String lastYearMonth, @Param("lastElevMonth") String lastElevMonth, @Param("lastThreeMonth") String lastThreeMonth, @Param("lastTwoMonth") String lastTwoMonth, @Param("lastMonth") String lastMonth, @Param("thisMonth") String thisMonth, @Param("nextMonth") String nextMonth);

	Integer getMonthNfRenewNumOfUser(@Param("goodsId") Long goodsId, @Param("thisMonth") DateTime thisMonth, @Param("nextMonth") DateTime nextMonth);

	Integer getMonthAiExNumOfUser(@Param("skuIds") List<Long> aiMonthSkuIds, @Param("lastMonth") String lastMonth, @Param("thisMonth") DateTime thisMonth);

	Integer getMonthAiExNumOfUserByType(@Param("skuIds") List<Long> aiMonthSkuIds, @Param("type") Integer type, @Param("lastMonth") String lastMonth, @Param("thisMonth") DateTime thisMonth, @Param("nextMonth") String nextMonth);


	List<Long> getAiMonthPlus(Long goodsId);

	Integer getMonthAiRenewNumOfUser(@Param("skuIds") List<Long> aiMonthSkuIds, @Param("thisMonth") DateTime thisMonth, @Param("nextMonth") DateTime nextMonth);

	Integer getMonthStreamingNewNumOfUser(@Param("thisMonth") DateTime thisMonth, @Param("nextMonth") DateTime nextMonth);

	Integer getMonthStreamingNewPayOtherNumOfUser(@Param("thisMonth") DateTime thisMonth, @Param("nextMonth") DateTime nextMonth);

	Integer getMonthStreamingNewPayAiNumOfUser(@Param("thisMonth") DateTime thisMonth, @Param("nextMonth") DateTime nextMonth);

	Integer getMonthAiNewNumOfUser(@Param("thisMonth") DateTime thisMonth, @Param("nextMonth") DateTime nextMonth);

	Integer getMonthAiNewPayOtherNumOfUser(@Param("thisMonth") DateTime thisMonth, @Param("nextMonth") DateTime nextMonth);

	Integer getMonthAiNewPayStreamingNumOfUser(@Param("thisMonth") DateTime thisMonth, @Param("nextMonth") DateTime nextMonth);

	Integer getMonthPrivateCorpNumOfUser(@Param("type") Integer type, @Param("category") Long category);

	BigDecimal getShouldApplyMoney(String endDate);

	BigDecimal getRealApplyMoney(String endDate);

	Integer getMonthUserSourceNumByType(@Param("type") Integer type, @Param("startDate") String startDate, @Param("endDate") String endDate);

	Integer getNfTicketNumOfUser(Long goodsId);

	Integer getAiTicketNumOfUser();

	Integer getNfAiTicketNumOfUser(Long goodsId);

	BigDecimal getMonthAmountOfOrderByType(@Param("type") Integer type, @Param("startDate") String startDate, @Param("endDate") String endDate);

	BigDecimal getMonthGoodsTypeAmountOfOrderByType(@Param("type") Integer type, @Param("goodsType") Integer goodsType, @Param("category") Long category, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("isBind") Boolean isBind);

	Integer getMonthUserSourceNumOrderByType(@Param("type") Integer type, @Param("startDate") String startDate, @Param("endDate") String endDate);

	ExcelAppleOneData getAppleOneDataThisMonth(@Param("skuIds") Set<Long> skuIds, @Param("startDate") String startDate, @Param("endDate") String endDate);

	Integer getAppleOnePayMonthTypeOrderThisMonth(@Param("skuId") Long skuId, @Param("startDate") String startDate, @Param("endDate") String endDate);

	Map<String, BigDecimal> getTransferData(@Param("startDate") String startDate, @Param("endDate") String endDate);

	List<NatureOrderDataDto> getGroupsOrderData(@Param("startDate") String startDate, @Param("endDate") String endDate);

	List<MonthlyUserOrderDetailDto> getMonthlyUserOrderDetail(@Param("thisMonth") DateTime thisMonth, @Param("nextMonth") DateTime nextMonth);

	Map<String, Long> getEpOrderNumsGroupSource(@Param("startDate") String startDate, @Param("endDate") String endDate);

	Integer getOverPayByGoodsId(@Param("goodsId") Long goodsId, @Param("skuIds") List<Long> skuIds, @Param("lastMonth") String lastMonth, @Param("thisMonth") DateTime thisMonth, @Param("nextMonth") DateTime nextMonth);

	Integer getYearNumOfRenewalsByGoodsId(@Param("goodsId") Long goodsId, @Param("lastElevMonth") String lastElevMonth, @Param("lastYearMonth") String lastYearMonth);

	Integer getActualNumberOfRenewalsByGoodsId(@Param("goodsId") Long goodsId, @Param("lastElevMonth") String lastElevMonth, @Param("lastYearMonth") String lastYearMonth);

	BigDecimal getWholesaleOrderMoney(@Param("startDate") String startDate, @Param("endDate") String endDate);
}
