package com.sptg.statistics.biz.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.sptg.statistics.api.dto.StatisticsAdWatchDto;
import com.sptg.statistics.api.entity.StatisticsAdWatch;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * title: StatisticsAdWatchServiceInterface
 * package: com.sptg.statistics.biz.security
 * description: 统计广告观看-服务层接口
 *
 *                
 *                 
 */
public interface StatisticsAdWatchServiceInterface extends IService<StatisticsAdWatch> {

    /**
     * 功能描述: 展示广告观看列表
     * @param   statisticsAdWatchDto  分页
     * @return   Page<StatisticsAdWatch>
     *                
     *                      
     */
    Page<StatisticsAdWatch> showStatisticsAdWatchList(StatisticsAdWatchDto statisticsAdWatchDto);

    /**
     * 功能描述:根据条件查询广告观看列表
     * @param statisticsAdWatchDto
     * @return List<StatisticsAdWatch>
     *                
     *                      
     */
    List<StatisticsAdWatch> getAdWatchList(StatisticsAdWatchDto statisticsAdWatchDto);

    /**
     * 功能描述: 展示广告观看排名列表
     * @param statisticsAdWatchDto
     * @return Page<StatisticsAdWatch>
     *                
     *                       
     */
    public  Page<StatisticsAdWatch> showStatisticsAdWatchRankList(StatisticsAdWatchDto statisticsAdWatchDto);

    /**
     * 功能描述:根据条件查询广告观看排行榜列表
     * @param statisticsAdWatchDto
     * @return List<StatisticsAdWatch>
     *                
     *                      
     */
    List<StatisticsAdWatch> getAdWatchRankList(StatisticsAdWatchDto statisticsAdWatchDto);

    /**
     * 功能描述:统计 总观看次数 总住户观看人数 陌生人观看次数
     * @param statisticsAdWatchDto
     * @return Map<String,Object>
     *                
     *                       
     */
    Map<String,Object> statisticsAdWatchCount(StatisticsAdWatchDto statisticsAdWatchDto);

    /**
     * 功能描述:统计观看访客人数
     * @param statisticsAdWatchDto
     * @return long
     *                
     *                       
     */
    long statisticsAdWatchVisitorCount(StatisticsAdWatchDto statisticsAdWatchDto);

    /**
     * 功能描述:统计 某年12个月(或某月约30天)观看次数 住户观看人数 住户观看次数 (用与统计图)
     * @param statisticsAdWatchDto
     * @return List<Map<String,Object>>
     *                
     *                       
     */
    List<Map<String,Object>> statisticsAdWatchForChart(StatisticsAdWatchDto statisticsAdWatchDto);

    /**
     * 统计广告月度观看趋势(或每日观看趋势)
     * @param statisticsAdWatchDto
     * @return
     */
    List<Map<String,Object>> statisticsAdWatchCountChartByDateType(StatisticsAdWatchDto statisticsAdWatchDto);

    /**
     * 功能描述:统计省(或城市)广告观看次数
     * @param statisticsAdWatchDto
     * @return List<Map<String,Object>>
     *                
     *                      
     */
    List<Map<String,Object>> statisticsAdWatchRankForArea(StatisticsAdWatchDto statisticsAdWatchDto);

    /**
     * 功能描述:更新记录机构位置
     * @param oldPosition 旧机构位置
     * @param newPosition 新机构位置
     * @return void
     *                
     *                       
     */
    void updateOrgPosition(String oldPosition, String newPosition);

    /**
     * 功能描述:添加统计观看记录
     * @param statisticsAdWatch
     * @return boolean
     *                
     *                       
     */
    @Transactional(rollbackFor = Exception.class)
    void addAdWatch(StatisticsAdWatch statisticsAdWatch);

    /**
     * 功能描述:获取观看次数
     * @param statisticsAdWatchDto
     * @return long
     *                
     *                      
     */
    long getAdWatchCount(StatisticsAdWatchDto statisticsAdWatchDto);

    /**
     * 功能描述:统计广告分类观看次数
     * @param statisticsAdWatchDto
     * @return  List<Map<String,Object>>
     *                
     *                      
     */
    List<Map<String,Object>> statisticsAdWatchRankForAdType(StatisticsAdWatchDto statisticsAdWatchDto);

    /**
     * 功能描述:统计某月每日广告观看人数
     * @param statisticsAdWatchDto
     * {
     *     watchDate 查询时间
     *     regionProvince 省
     *     regionCity  市
     *     adTypeId 广告类别id
     *     orgPosition 机构位置
     *
     * }
     * @return  List<Map<String,Object>>
     *                
     *                      
     */
    List<Map<String,Object>> statisticsAdWatchPersonForDay(StatisticsAdWatchDto statisticsAdWatchDto);

    /**
     * 功能描述:统计广告观看次数
     * @param statisticsAdWatchDto
     * @return  ResultBean<List<Map<String,Object>>>
     *             
     *                     
     */
    List<Map<String,Object>> getAdWatchCountList(StatisticsAdWatchDto statisticsAdWatchDto);
}
