From 10cd561b9f9864a750f7124b85579cddc3e1553c Mon Sep 17 00:00:00 2001 From: xsx <825657193@qq.com> Date: Mon, 29 Sep 2025 16:38:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BB=9F=E8=AE=A1=E6=8C=87?= =?UTF-8?q?=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- im-admin-ui/src/api/im/group/index.ts | 11 + im-admin-ui/src/api/im/groupMessage/index.ts | 11 + .../src/api/im/privateMessage/index.ts | 13 + im-admin-ui/src/api/im/user/index.ts | 31 + im-admin-ui/src/views/index.vue | 549 ++++++++++++++++-- .../im/controller/ImGroupController.java | 9 + .../controller/ImGroupMessageController.java | 18 +- .../ImPrivateMessageController.java | 19 +- .../im/controller/ImUserController.java | 35 ++ .../im/mapper/ImGroupMessageMapper.java | 16 + .../im/mapper/ImPrivateMessageMapper.java | 16 + .../org/dromara/im/mapper/ImUserMapper.java | 17 + .../im/service/IImGroupMessageService.java | 11 +- .../dromara/im/service/IImGroupService.java | 5 + .../im/service/IImPrivateMessageService.java | 11 +- .../dromara/im/service/IImUserService.java | 33 ++ .../impl/ImGroupMessageServiceImpl.java | 14 + .../im/service/impl/ImGroupServiceImpl.java | 9 + .../impl/ImPrivateMessageServiceImpl.java | 14 + .../im/service/impl/ImUserServiceImpl.java | 64 ++ 20 files changed, 846 insertions(+), 60 deletions(-) diff --git a/im-admin-ui/src/api/im/group/index.ts b/im-admin-ui/src/api/im/group/index.ts index 0b9a972..e9fbe5c 100644 --- a/im-admin-ui/src/api/im/group/index.ts +++ b/im-admin-ui/src/api/im/group/index.ts @@ -61,3 +61,14 @@ export const findGroupByName = (name?: String): AxiosPromise => { }); }; + +/** + * 获取总群组数量 + */ +export const getTotalGroupCount = (): AxiosPromise => { + return request({ + url: '/im/group/totalCount', + method: 'get' + }); +}; + diff --git a/im-admin-ui/src/api/im/groupMessage/index.ts b/im-admin-ui/src/api/im/groupMessage/index.ts index 0c5cc91..c3a8144 100644 --- a/im-admin-ui/src/api/im/groupMessage/index.ts +++ b/im-admin-ui/src/api/im/groupMessage/index.ts @@ -27,3 +27,14 @@ export const getGroupMessage = (id: string | number): AxiosPromise => { + return request({ + url: '/im/groupMessage/dailyCount', + method: 'get', + params: { days } + }); +}; diff --git a/im-admin-ui/src/api/im/privateMessage/index.ts b/im-admin-ui/src/api/im/privateMessage/index.ts index 45f2f44..6dc70c4 100644 --- a/im-admin-ui/src/api/im/privateMessage/index.ts +++ b/im-admin-ui/src/api/im/privateMessage/index.ts @@ -27,3 +27,16 @@ export const getPrivateMessage = (id: string | number): AxiosPromise => { + return request({ + url: '/im/privateMessage/dailyCount', + method: 'get', + params: { days } + }); +}; diff --git a/im-admin-ui/src/api/im/user/index.ts b/im-admin-ui/src/api/im/user/index.ts index 6af776f..5df0a60 100644 --- a/im-admin-ui/src/api/im/user/index.ts +++ b/im-admin-ui/src/api/im/user/index.ts @@ -61,3 +61,34 @@ export const findUserByName = (name?: String): AxiosPromise => { }); }; +/** + * 按天统计用户注册数量 + * @param days 统计天数 + */ +export const getDailyRegistrationCount = (days?: number): AxiosPromise => { + return request({ + url: '/im/user/dailyRegistrationCount', + method: 'get', + params: { days } + }); +}; + +/** + * 获取总用户数量 + */ +export const getTotalUserCount = (): AxiosPromise => { + return request({ + url: '/im/user/totalCount', + method: 'get' + }); +}; + +/** + * 获取活跃用户统计(日活、周活、月活) + */ +export const getActiveUserStats = (): AxiosPromise => { + return request({ + url: '/im/user/activeStats', + method: 'get' + }); +}; diff --git a/im-admin-ui/src/views/index.vue b/im-admin-ui/src/views/index.vue index 36c0418..f0a2c11 100644 --- a/im-admin-ui/src/views/index.vue +++ b/im-admin-ui/src/views/index.vue @@ -1,81 +1,530 @@ - diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupController.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupController.java index d654268..03faafb 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupController.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupController.java @@ -104,4 +104,13 @@ public class ImGroupController extends BaseController { public TableDataInfo findMembers( ImGroupMemberBo bo, PageQuery pageQuery) { return groupMemberService.queryPageList(bo,pageQuery); } + + /** + * 获取总群组数量 + */ + @SaCheckPermission("im:group:list") + @GetMapping("/totalCount") + public R getTotalGroupCount() { + return R.ok(groupService.getTotalGroupCount()); + } } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupMessageController.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupMessageController.java index f688325..fed37e8 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupMessageController.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImGroupMessageController.java @@ -11,10 +11,10 @@ import org.dromara.im.domain.bo.ImGroupMessageBo; import org.dromara.im.domain.vo.ImGroupMessageVo; import org.dromara.im.service.IImGroupMessageService; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; /** * 群消息 @@ -51,5 +51,15 @@ public class ImGroupMessageController extends BaseController { return R.ok(imGroupMessageService.queryById(id)); } + /** + * 按天统计群聊消息量 + * + * @param days 统计天数,默认7天 + */ + @SaCheckPermission("im:groupMessage:list") + @GetMapping("/dailyCount") + public R>> getDailyGroupMessageCount(@RequestParam(defaultValue = "7") Integer days) { + return R.ok(imGroupMessageService.getDailyGroupMessageCount(days)); + } } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImPrivateMessageController.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImPrivateMessageController.java index f718ec9..c72cefb 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImPrivateMessageController.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImPrivateMessageController.java @@ -11,10 +11,10 @@ import org.dromara.im.domain.bo.ImPrivateMessageBo; import org.dromara.im.domain.vo.ImPrivateMessageVo; import org.dromara.im.service.IImPrivateMessageService; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; /** * 私聊消息 @@ -52,4 +52,15 @@ public class ImPrivateMessageController extends BaseController { return R.ok(imPrivateMessageService.queryById(id)); } + /** + * 按天统计私聊消息量 + * + * @param days 统计天数,默认7天 + */ + @SaCheckPermission("im:privateMessage:list") + @GetMapping("/dailyCount") + public R>> getDailyMessageCount(@RequestParam(value = "days", defaultValue = "7") Integer days) { + return R.ok(imPrivateMessageService.getDailyMessageCount(days)); + } + } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImUserController.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImUserController.java index bbdd84d..cde45aa 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImUserController.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImUserController.java @@ -22,7 +22,9 @@ import org.dromara.im.util.CommaTextUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -101,4 +103,37 @@ public class ImUserController extends BaseController { List vos = userService.findByIds(arrIds); return R.ok(vos); } + + /** + * 按天统计用户注册数量 + * + * @param days 统计天数,默认7天 + */ + @SaCheckPermission("im:user:list") + @GetMapping("/dailyRegistrationCount") + public R>> getDailyRegistrationCount(@RequestParam(value = "days", defaultValue = "7") Integer days) { + return R.ok(userService.getDailyRegistrationCount(days)); + } + + /** + * 获取总用户数量 + */ + @SaCheckPermission("im:user:list") + @GetMapping("/totalCount") + public R getTotalUserCount() { + return R.ok(userService.getTotalUserCount()); + } + + /** + * 获取活跃用户统计(日活、周活、月活) + */ + @SaCheckPermission("im:user:list") + @GetMapping("/activeStats") + public R> getActiveUserStats() { + Map stats = new HashMap<>(); + stats.put("dailyActive", userService.getDailyActiveUserCount()); + stats.put("weeklyActive", userService.getWeeklyActiveUserCount()); + stats.put("monthlyActive", userService.getMonthlyActiveUserCount()); + return R.ok(stats); + } } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImGroupMessageMapper.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImGroupMessageMapper.java index 392241e..44e1613 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImGroupMessageMapper.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImGroupMessageMapper.java @@ -1,9 +1,14 @@ package org.dromara.im.mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.im.domain.ImGroupMessage; import org.dromara.im.domain.vo.ImGroupMessageVo; +import java.util.List; +import java.util.Map; + /** * 群消息Mapper接口 * @@ -12,4 +17,15 @@ import org.dromara.im.domain.vo.ImGroupMessageVo; */ public interface ImGroupMessageMapper extends BaseMapperPlus { + /** + * 按天统计群聊消息量 + * @param days 统计天数 + * @return 统计结果 + */ + @Select("SELECT DATE(send_time) as date, COUNT(*) as count " + + "FROM im_group_message " + + "WHERE send_time >= DATE_SUB(CURDATE(), INTERVAL #{days} DAY) " + + "GROUP BY DATE(send_time) " + + "ORDER BY date ASC") + List> getDailyGroupMessageCount(@Param("days") Integer days); } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImPrivateMessageMapper.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImPrivateMessageMapper.java index 06ae0d3..e557a6a 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImPrivateMessageMapper.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImPrivateMessageMapper.java @@ -1,9 +1,14 @@ package org.dromara.im.mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.im.domain.ImPrivateMessage; import org.dromara.im.domain.vo.ImPrivateMessageVo; +import java.util.List; +import java.util.Map; + /** * 私聊消息Mapper接口 * @@ -12,4 +17,15 @@ import org.dromara.im.domain.vo.ImPrivateMessageVo; */ public interface ImPrivateMessageMapper extends BaseMapperPlus { + /** + * 按天统计私聊消息量 + * @param days 统计天数 + * @return 统计结果 + */ + @Select("SELECT DATE(send_time) as date, COUNT(*) as count " + + "FROM im_private_message " + + "WHERE send_time >= DATE_SUB(CURDATE(), INTERVAL #{days} DAY) " + + "GROUP BY DATE(send_time) " + + "ORDER BY date ASC") + List> getDailyMessageCount(@Param("days") Integer days); } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImUserMapper.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImUserMapper.java index 679bc72..99e018b 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImUserMapper.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/mapper/ImUserMapper.java @@ -1,9 +1,14 @@ package org.dromara.im.mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.im.domain.ImUser; import org.dromara.im.domain.vo.ImUserVo; +import java.util.List; +import java.util.Map; + /** * 用户Mapper接口 * @@ -12,4 +17,16 @@ import org.dromara.im.domain.vo.ImUserVo; */ public interface ImUserMapper extends BaseMapperPlus { + /** + * 按天统计用户注册数量 + * @param days 统计天数 + * @return 统计结果 + */ + @Select("SELECT DATE(created_time) as date, COUNT(*) as count " + + "FROM im_user " + + "WHERE created_time >= DATE_SUB(CURDATE(), INTERVAL #{days} DAY) " + + "GROUP BY DATE(created_time) " + + "ORDER BY date ASC") + List> getDailyRegistrationCount(@Param("days") Integer days); + } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupMessageService.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupMessageService.java index 493274c..ff9d5d9 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupMessageService.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupMessageService.java @@ -5,6 +5,9 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.im.domain.bo.ImGroupMessageBo; import org.dromara.im.domain.vo.ImGroupMessageVo; +import java.util.List; +import java.util.Map; + /** * 群消息Service接口 * @@ -30,6 +33,12 @@ public interface IImGroupMessageService { */ TableDataInfo queryPageList(ImGroupMessageBo bo, PageQuery pageQuery); - + /** + * 按天统计群聊消息数量 + * + * @param days 统计天数 + * @return 按天统计数据 + */ + List> getDailyGroupMessageCount(Integer days); } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupService.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupService.java index 24e4055..f957937 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupService.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImGroupService.java @@ -65,6 +65,11 @@ public interface IImGroupService { List findByName(String name); + /** + * 获取总群组数量 + * @return 总群组数量 + */ + Long getTotalGroupCount(); } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImPrivateMessageService.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImPrivateMessageService.java index 2606049..8a530c4 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImPrivateMessageService.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImPrivateMessageService.java @@ -5,6 +5,9 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.im.domain.bo.ImPrivateMessageBo; import org.dromara.im.domain.vo.ImPrivateMessageVo; +import java.util.List; +import java.util.Map; + /** * 私聊消息Service接口 * @@ -31,6 +34,12 @@ public interface IImPrivateMessageService { TableDataInfo queryPageList(ImPrivateMessageBo bo, PageQuery pageQuery); - + /** + * 按天统计私聊消息量 + * + * @param days 统计天数 + * @return 统计结果 + */ + List> getDailyMessageCount(Integer days); } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImUserService.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImUserService.java index 8a55752..84c22fc 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImUserService.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImUserService.java @@ -8,6 +8,7 @@ import org.dromara.im.domain.dto.ImUserUnbanDto; import org.dromara.im.domain.vo.ImUserVo; import java.util.List; +import java.util.Map; /** * 用户Service接口 @@ -70,4 +71,36 @@ public interface IImUserService { */ List findByIds(List ids); + /** + * 按天统计用户注册数量 + * + * @param days 统计天数 + * @return 统计结果 + */ + List> getDailyRegistrationCount(Integer days); + + /** + * 获取总用户数量 + * @return 总用户数量 + */ + Long getTotalUserCount(); + + /** + * 获取日活跃用户数量(最近1天) + * @return 日活跃用户数量 + */ + Long getDailyActiveUserCount(); + + /** + * 获取周活跃用户数量(最近7天) + * @return 周活跃用户数量 + */ + Long getWeeklyActiveUserCount(); + + /** + * 获取月活跃用户数量(最近30天) + * @return 月活跃用户数量 + */ + Long getMonthlyActiveUserCount(); + } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupMessageServiceImpl.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupMessageServiceImpl.java index fe9dd37..e31d61b 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupMessageServiceImpl.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupMessageServiceImpl.java @@ -16,6 +16,7 @@ import org.dromara.im.mapper.ImGroupMessageMapper; import org.dromara.im.service.IImGroupMessageService; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Map; /** @@ -56,6 +57,19 @@ public class ImGroupMessageServiceImpl implements IImGroupMessageService { return TableDataInfo.build(result); } + /** + * 按天统计群聊消息数量 + * + * @param days 统计天数 + * @return 按天统计数据 + */ + @Override + public List> getDailyGroupMessageCount(Integer days) { + if (days == null || days <= 0) { + days = 7; // 默认统计最近7天 + } + return baseMapper.getDailyGroupMessageCount(days); + } private LambdaQueryWrapper buildQueryWrapper(ImGroupMessageBo bo) { Map params = bo.getParams(); diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupServiceImpl.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupServiceImpl.java index de71976..debddc1 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupServiceImpl.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImGroupServiceImpl.java @@ -128,6 +128,15 @@ public class ImGroupServiceImpl implements IImGroupService { return baseMapper.selectVoList(queryWrapper); } + /** + * 获取总群组数量 + * @return 总群组数量 + */ + @Override + public Long getTotalGroupCount() { + return baseMapper.selectCount(null); + } + private LambdaQueryWrapper buildQueryWrapper(ImGroupBo bo) { Map params = bo.getParams(); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImPrivateMessageServiceImpl.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImPrivateMessageServiceImpl.java index 0aa2fdc..fd33be2 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImPrivateMessageServiceImpl.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImPrivateMessageServiceImpl.java @@ -16,6 +16,7 @@ import org.dromara.im.mapper.ImPrivateMessageMapper; import org.dromara.im.service.IImPrivateMessageService; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -57,6 +58,19 @@ public class ImPrivateMessageServiceImpl implements IImPrivateMessageService { return TableDataInfo.build(result); } + /** + * 按天统计私聊消息量 + * + * @param days 统计天数 + * @return 统计结果 + */ + @Override + public List> getDailyMessageCount(Integer days) { + if (days == null || days <= 0) { + days = 7; // 默认统计最近7天 + } + return baseMapper.getDailyMessageCount(days); + } private LambdaQueryWrapper buildQueryWrapper(ImPrivateMessageBo bo) { Map params = bo.getParams(); diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImUserServiceImpl.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImUserServiceImpl.java index 800bfee..3c409a9 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImUserServiceImpl.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImUserServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.time.DateUtils; import org.apache.logging.log4j.util.Strings; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -23,7 +24,9 @@ import org.dromara.im.mq.ImRedisMQTemplate; import org.dromara.im.service.IImUserService; import org.springframework.stereotype.Service; +import java.util.Date; import java.util.List; +import java.util.Map; /** * 用户Service业务层处理 @@ -125,4 +128,65 @@ public class ImUserServiceImpl implements IImUserService { queryWrapper.in(ImUser::getId, ids); return baseMapper.selectVoList(queryWrapper); } + + /** + * 按天统计用户注册数量 + * + * @param days 统计天数 + * @return 统计结果 + */ + @Override + public List> getDailyRegistrationCount(Integer days) { + if (days == null || days <= 0) { + days = 7; // 默认统计最近7天 + } + return baseMapper.getDailyRegistrationCount(days); + } + + /** + * 获取总用户数量 + * + * @return 总用户数量 + */ + @Override + public Long getTotalUserCount() { + return baseMapper.selectCount(null); + } + + + /** + * 获取日活跃用户数量(最近1天) + * + * @return 日活跃用户数量 + */ + @Override + public Long getDailyActiveUserCount() { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.ge(ImUser::getLastLoginTime, DateUtils.addMonths(new Date(), -1)); + return baseMapper.selectCount(wrapper); + } + + /** + * 获取周活跃用户数量(最近7天) + * + * @return 周活跃用户数量 + */ + @Override + public Long getWeeklyActiveUserCount() { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.ge(ImUser::getLastLoginTime, DateUtils.addMonths(new Date(), -7)); + return baseMapper.selectCount(wrapper); + } + + /** + * 获取月活跃用户数量(最近30天) + * + * @return 月活跃用户数量 + */ + @Override + public Long getMonthlyActiveUserCount() { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.ge(ImUser::getLastLoginTime, DateUtils.addMonths(new Date(), -30)); + return baseMapper.selectCount(wrapper); + } }