# 修改登录逻辑并新增后台统计接口

## 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 天）且 `UserKey` 与 `PhoneNumber` 都不为空的用户数
  2. TotalConversations：`xcx_conversation` 表的总记录数
  3. TodayNewConversations：`xcx_conversation` 表中 `CreateTime` 在“今天”内的记录数
  4. TotalUsers：`xcx_users` 表中 `UserKey` 与 `PhoneNumber` 都不为空的用户总数

- 前端首页统计卡片改造：管理端首页（Home）SHALL 直接调用 `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) 聚合。