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

2.4 KiB
Raw Blame History

Implementation — 修改登录并新增后台统计接口

已完成改动

  1. 登录逻辑:WxCheckMvc/Controllers/LoginController.cs
  • 修改点:在 Login 方法中,原来的存在用户分支不做更改;现在在判断 count != 0(用户存在)分支下新增:
using (MySqlCommand updateCmd = new MySqlCommand("UPDATE xcx_users SET UpdateTime = NOW() WHERE UserKey = @UserKey", _connection))
{
    updateCmd.Parameters.AddWithValue("@UserKey", openId);
    await updateCmd.ExecuteNonQueryAsync();
}
  • 目的:显式写入 UpdateTime,表示用户在本次登录调用中活跃。
  1. 新增统计接口:WxCheckMvc/Controllers/AdminController.cs
  • 新增方法 QueryStats()GET

    • ActiveUsersSELECT COUNT(1) FROM xcx_users WHERE UpdateTime >= DATE_SUB(NOW(), INTERVAL 7 DAY) AND UserKey <> '' AND PhoneNumber <> ''
    • TotalConversationsSELECT COUNT(1) FROM xcx_conversation
    • TodayNewConversationsSELECT COUNT(1) FROM xcx_conversation WHERE CreateTime >= CURDATE() AND CreateTime < DATE_ADD(CURDATE(), INTERVAL 1 DAY)
    • TotalUsersSELECT COUNT(1) FROM xcx_users WHERE UserKey <> '' AND PhoneNumber <> ''
  • 返回 DTOAdminStatsResponse { long ActiveUsers, long TotalConversations, long TodayNewConversations, long TotalUsers }

  1. 前端首页统计卡片改造:admin-web/src/views/Home.vue
  • 修改点:首页不再通过 QueryUsers / QueryConversations 拉全量数据后在前端计算统计值;改为直接调用 GET /api/Admin/QueryStats
  • 映射关系:
    • 活跃用户卡片:ActiveUsers
    • 会话记录卡片:TotalConversations
    • 总用户数卡片:TotalUsers
    • 今日新增会话卡片:TodayNewConversations

测试与验证建议

  • 本地运行 dotnet build:确认编译通过。
  • 使用 Postman / curl 调用 POST /api/Login/Login(传入可换取 openid 的 code 或在测试中直接模拟 openid确认在用户存在时 UpdateTime 被修改。
  • 调用 GET /api/Admin/QueryStats 验证返回结构并和数据库结果比对。
  • 访问管理端首页,确认四张统计卡片展示值与接口返回一致。

备注

  • xcx_users.UpdateTime 已在数据库 schema 中定义为 DEFAULT current_timestamp() ON UPDATE CURRENT_TIMESTAMP,因此显式 UPDATE 是可行且语义明确的(无迁移需求)。
  • 建议后续将统计接口限制为管理员访问(加入 [Authorize(Roles = "Admin")] 或使用策略)。