# Implementation — 修改登录并新增后台统计接口 ## 已完成改动 1. 登录逻辑:`WxCheckMvc/Controllers/LoginController.cs` - 修改点:在 `Login` 方法中,原来的存在用户分支不做更改;现在在判断 `count != 0`(用户存在)分支下新增: ```csharp using (MySqlCommand updateCmd = new MySqlCommand("UPDATE xcx_users SET UpdateTime = NOW() WHERE UserKey = @UserKey", _connection)) { updateCmd.Parameters.AddWithValue("@UserKey", openId); await updateCmd.ExecuteNonQueryAsync(); } ``` - 目的:显式写入 `UpdateTime`,表示用户在本次登录调用中活跃。 2. 新增统计接口:`WxCheckMvc/Controllers/AdminController.cs` - 新增方法 `QueryStats()`(GET): - ActiveUsers:SELECT COUNT(1) FROM xcx_users WHERE UpdateTime >= DATE_SUB(NOW(), INTERVAL 7 DAY) AND UserKey <> '' AND PhoneNumber <> '' - TotalConversations:SELECT COUNT(1) FROM xcx_conversation - TodayNewConversations:SELECT COUNT(1) FROM xcx_conversation WHERE CreateTime >= CURDATE() AND CreateTime < DATE_ADD(CURDATE(), INTERVAL 1 DAY) - TotalUsers:SELECT COUNT(1) FROM xcx_users WHERE UserKey <> '' AND PhoneNumber <> '' - 返回 DTO:`AdminStatsResponse { long ActiveUsers, long TotalConversations, long TodayNewConversations, long TotalUsers }`。 3. 前端首页统计卡片改造:`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")]` 或使用策略)。