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

48 lines
2.4 KiB
Markdown
Raw Normal View History

# 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
- 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 <> ''
- 返回 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")]` 或使用策略)。