48 lines
2.4 KiB
Markdown
48 lines
2.4 KiB
Markdown
|
|
# 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")]` 或使用策略)。
|