package cn.iocoder.yudao.module.im.service.statistics;
import java.time.LocalDateTime;
import java.util.Map;
/**
* IM 数据看板 Service 接口
*
* 仅服务于 manager 后台统计页,独立于业务 Service,避免污染。
* 返回的均为聚合后的简单结构,由 Controller 负责 VO 装配与昵称回填。
*
* @author 芋道源码
*/
public interface ImStatisticsManagerService {
// ==================== 用户 ====================
/**
* 获取用户总数
*/
Long getTotalUserCount();
/**
* 获取区间内新增用户数
*/
Long getNewUserCount(LocalDateTime beginTime, LocalDateTime endTime);
/**
* 获取区间内活跃用户数(私聊+群聊去重)
*/
Long getActiveUserCount(LocalDateTime beginTime, LocalDateTime endTime);
/**
* 获取区间内每日新增用户数 Map(key 为 yyyy-MM-dd 日期)
*/
Map getNewUserDailyCountMap(LocalDateTime beginTime, LocalDateTime endTime);
/**
* 获取区间内每日活跃用户数 Map
*/
Map getActiveUserDailyCountMap(LocalDateTime beginTime, LocalDateTime endTime);
// ==================== 群 ====================
/**
* 获取群总数
*/
Long getTotalGroupCount();
/**
* 获取区间内新建群数
*/
Long getNewGroupCount(LocalDateTime beginTime, LocalDateTime endTime);
/**
* 获取群规模分布 Map(key 为分桶名)
*/
Map getGroupSizeCountMap();
// ==================== 消息 ====================
/**
* 获取区间内私聊消息数
*/
Long getPrivateMessageCount(LocalDateTime beginTime, LocalDateTime endTime);
/**
* 获取区间内群聊消息数
*/
Long getGroupMessageCount(LocalDateTime beginTime, LocalDateTime endTime);
/**
* 获取区间内每日私聊消息数 Map
*/
Map getPrivateMessageDailyCountMap(LocalDateTime beginTime, LocalDateTime endTime);
/**
* 获取区间内每日群聊消息数 Map
*/
Map getGroupMessageDailyCountMap(LocalDateTime beginTime, LocalDateTime endTime);
/**
* 获取区间内内容类型分布 Map(key 为消息类型)
*/
Map getMessageTypeCountMap(LocalDateTime beginTime, LocalDateTime endTime);
/**
* 获取区间内 TOP 发送者 Map(key 为 userId,value 为消息数;按消息数倒序)
*/
Map getTopSenderCountMap(LocalDateTime beginTime, LocalDateTime endTime, int limit);
}