本文引用的文件
本文件面向计费与配额系统,系统采用“Token计费 + 音频时长计费”的双轨计费模型,结合套餐体系与实时扣费机制,确保在保障用户体验的同时实现成本可控与商业可持续。文档涵盖以下主题:
计费与配额相关能力分布在以下模块与文件中:
日志服务:services/log.service.ts
graph TB
subgraph "前端"
FE["前端页面<br/>订单/余额/使用记录"]
end
subgraph "后端"
CTRL_SUB["订阅控制器<br/>subscription.controller.ts"]
SVC_SUB["订阅服务<br/>subscription.service.ts"]
CTRL_PAY["支付控制器<br/>payment.controller.ts"]
SVC_PAY["支付服务<br/>payment.service.ts"]
M_WL["使用限制中间件<br/>usageLimit.ts"]
M_ERR["错误处理中间件<br/>errorHandler.ts"]
SVC_TTS["TTS服务<br/>tts.service.ts"]
PRISMA["Prisma模型<br/>schema.prisma"]
LOG["日志服务<br/>log.service.ts"]
end
FE --> CTRL_SUB
FE --> CTRL_PAY
CTRL_SUB --> SVC_SUB
CTRL_PAY --> SVC_PAY
SVC_SUB --> PRISMA
SVC_PAY --> PRISMA
SVC_TTS --> PRISMA
M_WL --> SVC_TTS
M_ERR --> CTRL_SUB
M_ERR --> CTRL_PAY
LOG --> SVC_SUB
LOG --> SVC_PAY
图表来源
章节来源
章节来源
计费与配额系统围绕“套餐—订阅—配额—扣费—统计”闭环构建,支付成功后激活订阅并初始化Token余额;生成音频前进行配额检查与预估;生成完成后按实际时长扣费并记录使用。
sequenceDiagram
participant U as "用户"
participant FE as "前端"
participant PC as "支付控制器"
participant PS as "支付服务"
participant SC as "订阅控制器"
participant SS as "订阅服务"
participant PR as "Prisma"
participant TS as "TTS服务"
U->>FE : "选择套餐并发起支付"
FE->>PC : "POST /api/payment/create"
PC->>PS : "创建订单"
PS->>PR : "写入订单"
PS-->>PC : "返回支付链接/二维码"
PC-->>FE : "返回支付信息"
FE->>PC : "支付回调/同步返回"
PC->>PS : "处理回调"
PS->>PR : "更新订单状态"
PS->>PR : "激活订阅/更新用户等级"
PS->>PR : "初始化/更新Token余额"
U->>FE : "发起音频生成"
FE->>SC : "GET /api/subscription/audio-estimate"
SC->>SS : "预估费用"
SS-->>SC : "返回预估结果"
SC-->>FE : "显示预估费用"
FE->>TS : "POST /api/tts/generate"
TS->>SS : "检查配额/预估"
TS->>PR : "生成音频并更新状态"
TS->>SS : "扣除音频时长"
SS->>PR : "更新用户usedAudioMinutes/记录TokenUsage"
TS-->>FE : "返回音频URL/时长"
图表来源
音频时长余额与扣费
提供音频生成预估接口,返回配额内/外分钟数与预估费用。
flowchart TD
Start(["开始:生成音频"]) --> CalcDur["计算音频时长<br/>textLength -> minutes"]
CalcDur --> GetQuota["获取用户配额与余额"]
GetQuota --> CheckUnlimited{"是否无限配额?"}
CheckUnlimited --> |是| Deduct["直接扣费按量"]
CheckUnlimited --> |否| Compare{"剩余分钟是否足够?"}
Compare --> |否| Reject["拒绝生成:余额不足"]
Compare --> |是| Deduct["扣费:按配额内/外分别计费"]
Deduct --> Log["记录TokenUsage"]
Log --> End(["结束"])
Reject --> End
图表来源
章节来源
订单查询与列表
提供订单列表与详情查询,便于财务对账与审计。
sequenceDiagram
participant C as "客户端"
participant PC as "支付控制器"
participant PS as "支付服务"
participant SDK as "支付SDK"
participant DB as "数据库"
C->>PC : "POST /api/payment/create"
PC->>PS : "创建订单"
PS->>SDK : "生成支付链接/二维码"
SDK-->>PS : "返回支付信息"
PS->>DB : "写入订单"
PS-->>PC : "返回支付信息"
PC-->>C : "返回支付链接/二维码"
note over SDK,DB : "支付回调"
SDK-->>PC : "异步通知/同步返回"
PC->>PS : "处理回调"
PS->>DB : "更新订单状态/激活订阅"
PS->>DB : "初始化/更新Token余额"
图表来源
章节来源
章节来源
章节来源
章节来源
章节来源
章节来源
日志服务贯穿各模块,提供请求与错误日志记录与分析。
graph LR
SVC_SUB["订阅服务"] --> PRISMA["Prisma模型"]
SVC_PAY["支付服务"] --> PRISMA
SVC_TTS["TTS服务"] --> SVC_SUB
M_WL["使用限制中间件"] --> SVC_TTS
M_ERR["错误处理中间件"] --> SVC_SUB
M_ERR --> SVC_PAY
LOG["日志服务"] --> SVC_SUB
LOG --> SVC_PAY
图表来源
章节来源
[本节为通用指导,无需特定文件引用]
章节来源
本计费与配额系统通过清晰的双轨计费模型(Token与音频时长)、完善的套餐与订阅机制、严格的配额检查与实时扣费流程,实现了成本可控与用户体验的平衡。配合支付回调、日志审计与错误处理机制,系统具备良好的可维护性与扩展性。建议在后续迭代中完善Token扣费与TTS生成流程的深度集成,并持续优化性能与可观测性。
[本节为总结性内容,无需特定文件引用]
章节来源
章节来源