
package com.tmerclub.cloud.flow.service;

import com.tmerclub.cloud.api.product.dto.ProdEffectDTO;
import com.tmerclub.cloud.common.database.dto.PageDTO;
import com.tmerclub.cloud.common.database.vo.PageVO;
import com.tmerclub.cloud.flow.bo.FlowSpuBO;
import com.tmerclub.cloud.flow.vo.ProductFlowInfoVO;
import com.tmerclub.cloud.flow.vo.ShopFlowInfoVO;

import java.util.Date;
import java.util.List;

/**
 * 流量分析—页面数据统计表
 *
 * @author YXF
 * @date 2021-05-21 15:25:19
 */
public interface SpuAnalyseMongoService {

    /**
     * 统计当天商品数据
     *
     * 统计数据存储表：flow_spu_user
     * 数据统计来源表：flow_user_log
     * @param beginDate
     * @param endDate
     */
    void statisticsAndSaveSpuUserOfDay(Date beginDate, Date endDate);

    /**
     * 统计当天的商品数据
     *
     * 统计数据存储表：flow_spu_user
     * 数据统计来源表：flow_user_log
     * @param dateType
     * @param beginDate
     * @param endDate
     */
    void statisticsAndSaveSpuOfDay(Integer dateType, Date beginDate, Date endDate);

    /**
     * 获取当天时间段内的商品统计数据列表
     *
     * 数据统计来源表：flow_user_log
     * @param beginDate
     * @param endDate
     * @param spuIds
     * @return
     */
    List<FlowSpuBO> listSpuStatisticsOfDay(Date beginDate, Date endDate, List<Long> spuIds);

    /**
     * 保存
     *
     * 统计数据存储表：flow_spu
     * 数据统计来源表：flow_spu、flow_spu_user
     * @param dateType
     * @param beginDate
     * @param endDate
     */
    void statisticsAndSaveSpuOfTime(int dateType, Date beginDate, Date endDate);

    /**
     * 获取商品洞察分页数据
     * @param pageDTO
     * @param prodEffectDTO
     * @return
     */
    PageVO<FlowSpuBO> pageSpuEffect(PageDTO pageDTO, ProdEffectDTO prodEffectDTO);

    /**
     * 统计实时的商品数据
     */
    void statisticsRealSpuData();

    /**
     * 获取店铺近10天的访客用户Id
     * @param startTime
     * @param endTime
     * @param supplierId
     * @return
     */
    ShopFlowInfoVO countVisitUserInPastTenDays(Date startTime, Date endTime, Long supplierId);

    /**
     * 统计商品浏览量
     * @param startTime
     * @param endTime
     * @param supplierId
     * @return
     */
    Long countProductVisitCount(Date startTime, Date endTime, Long supplierId);

    /**
     * 获取店铺流量排行榜
     * @param startTime
     * @param endTime
     * @param limit
     * @return
     */
    List<ShopFlowInfoVO> listShopRankIngByFlow(Date startTime, Date endTime, Integer limit);

    /**
     * 获取供应商商品访问流量排行榜
     * @param startTime
     * @param endTime
     * @param supplierId
     * @return
     */
    List<ProductFlowInfoVO> listSupplierProdRankIngByFlow(Date startTime, Date endTime, Long supplierId);
}
