本文引用的文件
本文件面向“使用统计系统”的数据文档,聚焦以下目标:
在当前代码库中,统计相关的关键实现集中在订阅与用量模块、Token使用记录表、TTS生成流程以及性能监控中间件等位置。
围绕使用统计的核心文件分布如下:
前端日志页面:展示请求统计与错误分析
graph TB
subgraph "后端"
A["订阅与用量服务<br/>subscription.service.ts"]
B["中间件<br/>usageLimit.ts / performance.ts"]
C["数据模型<br/>schema.prisma / migration.sql"]
D["TTS 服务<br/>tts.service.ts"]
end
subgraph "前端"
E["日志与统计页面<br/>logs/index.vue"]
end
E --> |"API 调用"| A
A --> |"读写"| C
D --> |"生成完成更新状态/时长"| C
B --> |"限流/配额校验"| A
图表来源
章节来源
章节来源
使用统计系统的整体交互流程如下:
sequenceDiagram
participant Client as "客户端"
participant Logs as "日志统计页面<br/>logs/index.vue"
participant API as "订阅服务<br/>subscription.service.ts"
participant DB as "数据库<br/>TokenUsage/用户表"
participant Perf as "性能中间件<br/>performance.ts"
Client->>Logs : 打开日志统计页
Logs->>API : GET /api/logs/stats
API->>DB : 查询统计聚合
DB-->>API : 返回统计结果
API-->>Logs : 返回统计数据
Logs-->>Client : 展示统计卡片
Client->>API : POST /api/tts/generate
API->>Perf : 记录请求开始
API->>DB : 写入TokenUsage/更新用户用量
API-->>Client : 返回生成任务信息
API->>DB : 生成完成后更新音频时长/状态
图表来源
关键实现位置
Token 余额与消费逻辑
erDiagram
TOKEN_USAGE {
int id PK
int userId
string type
int amount
int contentLength
int orderId
datetime createdAt
}
USER {
int id PK
int usedAudioMinutes
datetime subscriptionResetDate
}
ORDER {
int id PK
}
USER ||--o{ TOKEN_USAGE : "拥有"
ORDER ||--o{ TOKEN_USAGE : "关联"
图表来源
章节来源
关键实现位置
Token 使用记录创建
flowchart TD
Start(["开始:收到生成请求"]) --> Estimate["估算音频时长"]
Estimate --> CheckQuota["检查月度配额与超额策略"]
CheckQuota --> |不足且不允许超额| Deny["拒绝生成并返回原因"]
CheckQuota --> |允许或在配额内| Consume["扣除音频时长并记录Token使用"]
Consume --> UpdateUser["更新用户usedAudioMinutes"]
UpdateUser --> Log["写入TokenUsage记录"]
Log --> End(["结束"])
图表来源
章节来源
关键实现位置
每日重置逻辑
flowchart TD
Enter(["进入请求"]) --> GetUserId["获取用户ID"]
GetUserId --> |未登录| Allow["允许访问无限制"]
GetUserId --> |已登录| LoadUser["加载用户信息"]
LoadUser --> Reset["若日期变更则重置dailyUsage"]
Reset --> CheckDaily["检查每日使用次数"]
CheckDaily --> |超限| Reject["抛出配额超限错误"]
CheckDaily --> |未超限| Allow
图表来源
章节来源
关键实现位置
性能指标结构与更新逻辑
flowchart TD
ReqStart(["请求开始"]) --> Exec["执行业务逻辑"]
Exec --> Resp["计算响应时长"]
Resp --> Update["更新全局与端点级指标"]
Update --> Done(["请求结束"])
图表来源
章节来源
关键实现位置
额度限制判断与供应商切换
sequenceDiagram
participant Caller as "调用方"
participant TTS as "TTS服务"
participant DB as "数据库"
participant WS as "WebSocket"
Caller->>TTS : 调用生成接口
TTS->>DB : 创建处理中记录
TTS->>TTS : 分段/并行合成
TTS->>DB : 完成后更新音频URL/时长/状态
TTS-->>Caller : 返回结果
TTS->>WS : 推送生成完成事件
图表来源
章节来源
关键实现位置
错误分析与自动修复入口
sequenceDiagram
participant Page as "日志页面"
participant API as "后端API"
participant Store as "页面状态"
Page->>API : GET /api/logs?limit=50
API-->>Page : 返回日志列表
Page->>API : GET /api/logs/stats
API-->>Page : 返回统计聚合
Page->>Store : 更新统计卡片与日志列表
图表来源
章节来源
前端日志页面依赖后端统计接口
graph LR
Logs["日志页面<br/>logs/index.vue"] --> SubSvc["订阅服务<br/>subscription.service.ts"]
SubSvc --> Prisma["Prisma 模型<br/>schema.prisma"]
TTS["TTS 服务<br/>tts.service.ts"] --> Prisma
Perf["性能中间件<br/>performance.ts"] --> SubSvc
Usage["使用限制中间件<br/>usageLimit.ts"] --> SubSvc
图表来源
章节来源
章节来源
本使用统计系统以TokenUsage为核心载体,结合订阅与用量服务、中间件与TTS流程,实现了音频生成时长统计、配额控制与基础性能监控。建议在此基础上扩展: