2.5 KiB
2.5 KiB
修改登录逻辑并新增后台统计接口
1. 问题描述
当前系统登录逻辑(POST /api/Login/Login):
- 使用微信
code换取openid并以openid作为UserKey。 - 若数据库中不存在该
UserKey,系统会自动插入一条记录。 - 如果用户已存在(count != 0),当前实现不对用户表做任何更新(包括
UpdateTime)。
另外,后台管理侧需要一个简洁的统计接口,用于展示系统关键指标(活跃用户、会话统计等),当前并没有统一的聚合接口。
同时,管理端首页当前通过拉取用户列表与会话列表在前端计算统计数据,调用开销大且不一致。需要改为直接使用聚合统计接口返回的四个指标。
2. 目标与提议
-
修改登录逻辑:当用户存在时,更新该用户的
UpdateTime为本次接口调用时间(UTC/服务器当前时间)。该字段将作为“最近登录/活跃”标准。 -
新增后台统计接口:
GET /api/Admin/QueryStats,返回单行统计数据(JSON),包含:- ActiveUsers:最近 7 天有登录(
UpdateTime在最近 7 天)且UserKey与PhoneNumber都不为空的用户数 - TotalConversations:
xcx_conversation表的总记录数 - TodayNewConversations:
xcx_conversation表中CreateTime在“今天”内的记录数 - TotalUsers:
xcx_users表中UserKey与PhoneNumber都不为空的用户总数
- ActiveUsers:最近 7 天有登录(
-
前端首页统计卡片改造:管理端首页(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) 聚合。