Files
Wx_WxCheck_Prod/openspec/changes/update-login-and-admin-stats/proposal.md

40 lines
2.5 KiB
Markdown
Raw Normal View History

# 修改登录逻辑并新增后台统计接口
## 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` 都不为空的用户总数
- 前端首页统计卡片改造管理端首页HomeSHALL 直接调用 `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) 聚合。