190 lines
5.8 KiB
Markdown
190 lines
5.8 KiB
Markdown
# 管理后台用户统计功能增强
|
||
|
||
## 概述
|
||
|
||
对管理后台的用户统计接口 `/admin/users/statistics` 进行了全面升级,提供更详细的会员分类统计,特别是区分付费VIP/SVIP和兑换VIP/SVIP,并考虑会员有效期状态。
|
||
|
||
## 新增统计字段
|
||
|
||
### 1. 基础用户统计
|
||
- `totalUsers` - 总用户数
|
||
- `todayNewUsers` - 今日新增用户数
|
||
- `weekNewUsers` - 本周新增用户数
|
||
- `monthNewUsers` - 本月新增用户数
|
||
- `normalUsers` - 普通用户数
|
||
|
||
### 2. VIP用户详细统计 ⭐
|
||
- `vipUsers` - VIP用户总数
|
||
- `paidVipUsers` - **当前有效付费VIP用户数**
|
||
- `exchangeVipUsers` - **当前有效兑换VIP用户数**
|
||
- `expiredVipUsers` - **过期VIP用户数**
|
||
|
||
### 3. SVIP用户详细统计 ⭐
|
||
- `svipUsers` - SVIP用户总数
|
||
- `paidSvipUsers` - **当前有效付费SVIP用户数**
|
||
- `exchangeSvipUsers` - **当前有效兑换SVIP用户数**
|
||
- `expiredSvipUsers` - **过期SVIP用户数**
|
||
|
||
### 4. 特殊会员类型统计 🆕
|
||
- `giftMembers` - **赠送会员数**(注册2天内的VIP,无付费和兑换记录)
|
||
- `pureExchangeMembers` - **纯兑换会员数**(只使用兑换码,从未付费)
|
||
- `exchangeThenPaidMembers` - **兑换后付费会员数**(先兑换后付费)
|
||
|
||
### 5. 认证和推广统计
|
||
- `verifiedUsers` - 已实名认证用户数
|
||
- `unverifiedUsers` - 未实名认证用户数
|
||
- `promotionUsers` - 有推广等级用户数
|
||
|
||
### 6. 会员有效性统计 🆕
|
||
- `activeMembersTotal` - **当前有效会员总数**(VIP+SVIP,未过期)
|
||
- `expiredMembersTotal` - **过期会员总数**
|
||
|
||
## 统计逻辑说明
|
||
|
||
### 付费会员识别
|
||
```sql
|
||
-- 当前有效付费VIP:角色为VIP + 会员未过期 + 有成功的订单记录
|
||
AND u.role = 2
|
||
AND u.membership_expires_at IS NOT NULL AND u.membership_expires_at > NOW()
|
||
AND EXISTS (
|
||
SELECT 1 FROM `order` o
|
||
WHERE o.user_id = u.id AND o.status = 1 AND o.is_deleted = 0
|
||
)
|
||
```
|
||
|
||
### 兑换会员识别
|
||
```sql
|
||
-- 当前有效兑换VIP:角色为VIP + 会员未过期 + 有兑换记录
|
||
AND u.role = 2
|
||
AND u.membership_expires_at IS NOT NULL AND u.membership_expires_at > NOW()
|
||
AND EXISTS (
|
||
SELECT 1 FROM gift_code_usage gcu
|
||
WHERE gcu.user_id = u.id AND gcu.type = 2 AND gcu.status = 1 AND gcu.is_deleted = 0
|
||
)
|
||
```
|
||
|
||
### 过期会员识别
|
||
```sql
|
||
-- 过期VIP:角色为VIP + 会员已过期
|
||
AND u.role = 2
|
||
AND (u.membership_expires_at IS NULL OR u.membership_expires_at <= NOW())
|
||
```
|
||
|
||
### 赠送会员识别
|
||
```sql
|
||
-- 赠送会员:VIP + 会员有效 + 注册2天内 + 无付费记录 + 无兑换记录
|
||
AND u.role > 1
|
||
AND u.membership_expires_at IS NOT NULL AND u.membership_expires_at > NOW()
|
||
AND u.create_time >= DATE_SUB(NOW(), INTERVAL 2 DAY)
|
||
AND NOT EXISTS (订单记录)
|
||
AND NOT EXISTS (兑换记录)
|
||
```
|
||
|
||
### 纯兑换会员识别
|
||
```sql
|
||
-- 纯兑换会员:VIP + 有兑换记录 + 无付费记录
|
||
AND u.role > 1
|
||
AND EXISTS (兑换记录)
|
||
AND NOT EXISTS (订单记录)
|
||
```
|
||
|
||
## API接口
|
||
|
||
### 请求
|
||
```
|
||
GET /admin/users/statistics
|
||
```
|
||
|
||
### 响应示例
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "操作成功",
|
||
"data": {
|
||
"totalUsers": 1250,
|
||
"todayNewUsers": 15,
|
||
"weekNewUsers": 89,
|
||
"monthNewUsers": 324,
|
||
"normalUsers": 890,
|
||
|
||
"vipUsers": 280,
|
||
"paidVipUsers": 180,
|
||
"exchangeVipUsers": 65,
|
||
"expiredVipUsers": 35,
|
||
|
||
"svipUsers": 80,
|
||
"paidSvipUsers": 50,
|
||
"exchangeSvipUsers": 20,
|
||
"expiredSvipUsers": 10,
|
||
|
||
"giftMembers": 12,
|
||
"pureExchangeMembers": 45,
|
||
"exchangeThenPaidMembers": 38,
|
||
|
||
"verifiedUsers": 450,
|
||
"unverifiedUsers": 800,
|
||
"promotionUsers": 125,
|
||
|
||
"activeMembersTotal": 315,
|
||
"expiredMembersTotal": 45
|
||
}
|
||
}
|
||
```
|
||
|
||
## 业务价值
|
||
|
||
### 1. 精确的收益分析
|
||
- **区分付费和兑换**:清楚了解真实的付费用户数量
|
||
- **收益贡献分析**:付费用户是主要收益来源
|
||
- **成本控制**:兑换用户的运营成本分析
|
||
|
||
### 2. 用户生命周期管理
|
||
- **过期用户挽回**:针对过期会员制定回购策略
|
||
- **续费提醒**:基于有效期状态进行精准营销
|
||
- **用户分层**:不同类型用户的差异化服务
|
||
|
||
### 3. 运营决策支持
|
||
- **兑换码效果评估**:通过兑换用户数量分析推广效果
|
||
- **赠送策略优化**:监控赠送会员的转化情况
|
||
- **产品定价策略**:基于付费用户分布调整价格
|
||
|
||
### 4. 数据透明度
|
||
- **管理层报告**:提供清晰的用户结构分析
|
||
- **趋势监控**:跟踪各类用户数量的变化趋势
|
||
- **异常检测**:及时发现用户数据异常
|
||
|
||
## 数据一致性验证
|
||
|
||
### 验证规则
|
||
1. `vipUsers` = `paidVipUsers` + `exchangeVipUsers` + `expiredVipUsers`
|
||
2. `svipUsers` = `paidSvipUsers` + `exchangeSvipUsers` + `expiredSvipUsers`
|
||
3. `activeMembersTotal` = `paidVipUsers` + `exchangeVipUsers` + `paidSvipUsers` + `exchangeSvipUsers`
|
||
4. `expiredMembersTotal` = `expiredVipUsers` + `expiredSvipUsers`
|
||
|
||
### 特殊情况说明
|
||
- **兑换后付费用户**:可能在多个分类中出现(既有兑换记录又有付费记录)
|
||
- **时间边界**:会员到期时间精确到秒,统计时点会影响结果
|
||
- **数据更新**:统计数据实时计算,反映当前最新状态
|
||
|
||
## 性能考虑
|
||
|
||
### SQL优化
|
||
- 使用EXISTS子查询而非JOIN,提高查询效率
|
||
- 合理使用索引(user.role, user.membership_expires_at, order.user_id, gift_code_usage.user_id)
|
||
- 统计查询建议在业务低峰期执行
|
||
|
||
### 缓存策略
|
||
- 考虑将统计结果缓存5-10分钟
|
||
- 在用户状态变更时清除相关缓存
|
||
- 提供强制刷新选项供管理员使用
|
||
|
||
## 监控和报警
|
||
|
||
### 建议监控指标
|
||
- 当日付费用户数量异常下降
|
||
- 过期用户数量异常增长
|
||
- 总用户数与分类用户数不一致
|
||
- 统计查询执行时间过长
|
||
|
||
这个增强的统计功能为管理层提供了全面、精确的用户分析数据,支持更好的业务决策和运营优化。
|