40 lines
2.5 KiB
Markdown
40 lines
2.5 KiB
Markdown
|
|
# 修改登录逻辑并新增后台统计接口
|
|||
|
|
|
|||
|
|
## 1. 问题描述
|
|||
|
|
|
|||
|
|
当前系统登录逻辑(`POST /api/Login/Login`):
|
|||
|
|
- 使用微信 `code` 换取 `openid` 并以 `openid` 作为 `UserKey`。
|
|||
|
|
- 若数据库中不存在该 `UserKey`,系统会自动插入一条记录。
|
|||
|
|
- 如果用户已存在(count != 0),当前实现不对用户表做任何更新(包括 `UpdateTime`)。
|
|||
|
|
|
|||
|
|
另外,后台管理侧需要一个简洁的统计接口,用于展示系统关键指标(活跃用户、会话统计等),当前并没有统一的聚合接口。
|
|||
|
|
|
|||
|
|
同时,管理端首页当前通过拉取用户列表与会话列表在前端计算统计数据,调用开销大且不一致。需要改为直接使用聚合统计接口返回的四个指标。
|
|||
|
|
|
|||
|
|
## 2. 目标与提议
|
|||
|
|
|
|||
|
|
- 修改登录逻辑:当用户存在时,**更新该用户的 `UpdateTime` 为本次接口调用时间**(UTC/服务器当前时间)。该字段将作为“最近登录/活跃”标准。
|
|||
|
|
|
|||
|
|
- 新增后台统计接口:`GET /api/Admin/QueryStats`,返回单行统计数据(JSON),包含:
|
|||
|
|
1. ActiveUsers:最近 7 天有登录(`UpdateTime` 在最近 7 天)且 `UserKey` 与 `PhoneNumber` 都不为空的用户数
|
|||
|
|
2. TotalConversations:`xcx_conversation` 表的总记录数
|
|||
|
|
3. TodayNewConversations:`xcx_conversation` 表中 `CreateTime` 在“今天”内的记录数
|
|||
|
|
4. TotalUsers:`xcx_users` 表中 `UserKey` 与 `PhoneNumber` 都不为空的用户总数
|
|||
|
|
|
|||
|
|
- 前端首页统计卡片改造:管理端首页(Home)SHALL 直接调用 `GET /api/Admin/QueryStats`,并将返回的四个数字映射到四张统计卡片中(不再通过 QueryUsers/QueryConversations 在前端计算)。
|
|||
|
|
|
|||
|
|
## 3. 兼容性与风险
|
|||
|
|
|
|||
|
|
- 数据库层无需新增字段:`xcx_users.UpdateTime` 已存在且带有 `ON UPDATE CURRENT_TIMESTAMP`。但显式执行 `UPDATE ... SET UpdateTime = NOW()` 可以确保在登录时明确写入(而不是依赖其他 UPDATE 操作触发)。
|
|||
|
|
- 该变更不影响现有注册/资料完善逻辑。
|
|||
|
|
- 需要为统计接口添加合理权限控制(建议在未来迭代中加入鉴权)。
|
|||
|
|
|
|||
|
|
## 4. 数据验证与示例SQL
|
|||
|
|
|
|||
|
|
- 活跃用户(最近7天):
|
|||
|
|
SELECT COUNT(1) FROM xcx_users WHERE UpdateTime >= DATE_SUB(NOW(), INTERVAL 7 DAY) AND UserKey <> '' AND PhoneNumber <> '';
|
|||
|
|
|
|||
|
|
- 今日新增会话:
|
|||
|
|
SELECT COUNT(1) FROM xcx_conversation WHERE CreateTime >= CURDATE() AND CreateTime < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
|
|||
|
|
|
|||
|
|
- 总会话、总用户:分别用 COUNT(1) 聚合。
|