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

2.5 KiB
Raw Blame 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 天)且 UserKeyPhoneNumber 都不为空的用户数
    2. TotalConversationsxcx_conversation 表的总记录数
    3. TodayNewConversationsxcx_conversation 表中 CreateTime 在“今天”内的记录数
    4. TotalUsersxcx_users 表中 UserKeyPhoneNumber 都不为空的用户总数
  • 前端首页统计卡片改造管理端首页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) 聚合。