本文引用的文件
本文件面向AI有声书生成平台的业务数据模型,聚焦于订单(Order)、订阅(Subscription)、积分余额(TokenBalance)等关键商业实体的数据设计与业务规则。文档从数据模型定义出发,结合订单状态流转、订阅周期管理、使用配额控制等核心业务逻辑,给出支付流程、会员升级、积分消费等典型业务场景的API使用路径与数据流说明,并提供统计分析与报表生成的思路。
后端采用Prisma进行数据库建模与ORM访问,业务模块分布在server/src/modules下,前端页面位于my-uniapp-vue3/src/pages中。数据库结构与业务模型在schema.prisma中集中定义,支付、订阅、会员等业务通过对应的controller/service层对外提供接口。
graph TB
subgraph "前端"
OrdersPage["订单页面<br/>orders/index.vue"]
PaymentConfirm["支付确认页面<br/>payment-confirm/index.vue"]
PaymentResult["支付结果页面<br/>payment-result/index.vue"]
MemberCenter["会员中心页面<br/>member/index.vue"]
end
subgraph "后端"
AuthCtrl["认证控制器<br/>auth.controller.ts"]
PaymentCtrl["支付控制器<br/>payment.controller.ts"]
SubCtrl["订阅控制器<br/>subscription.controller.ts"]
MemberCtrl["会员控制器<br/>member.controller.ts"]
AuthSvc["认证服务<br/>auth.service.ts"]
PaymentSvc["支付服务<br/>payment.service.ts"]
SubSvc["订阅服务<br/>subscription.service.ts"]
MemberSvc["会员服务<br/>member.service.ts"]
end
OrdersPage --> PaymentCtrl
PaymentConfirm --> PaymentCtrl
PaymentResult --> PaymentCtrl
MemberCenter --> SubCtrl
OrdersPage --> AuthCtrl
PaymentCtrl --> AuthCtrl
SubCtrl --> AuthCtrl
MemberCtrl --> AuthCtrl
PaymentCtrl --> PaymentSvc
SubCtrl --> SubSvc
MemberCtrl --> MemberSvc
AuthCtrl --> AuthSvc
图表来源
章节来源
本节对Order、Subscription、TokenBalance三个核心业务模型进行深入解析,包括字段含义、约束关系、索引策略与业务规则。
用户(User)
订单(Order)
订阅(Subscription)
订阅套餐(SubscriptionPlan)
积分余额(TokenBalance)
积分使用(TokenUsage)
章节来源
下图展示业务数据模型在系统中的位置与交互关系,突出订单、订阅、积分余额三者如何共同支撑支付、会员升级与消费配额控制。
erDiagram
USER ||--o{ ORDER : "拥有"
USER ||--o{ SUBSCRIPTION : "持有"
USER ||--o{ TOKEN_BALANCE : "拥有"
USER ||--o{ TOKEN_USAGE : "产生"
ORDER }o--|| SUBSCRIPTION_PLAN : "对应"
SUBSCRIPTION }o--|| SUBSCRIPTION_PLAN : "基于"
TOKEN_USAGE }o--|| ORDER : "关联"
SUBSCRIPTION_PLAN ||--o{ ORDER : "被购买"
SUBSCRIPTION ||--|| USER : "归属"
TOKEN_BALANCE ||--|| USER : "归属"
图表来源
数据结构要点
业务规则
状态流转
stateDiagram-v2
[*] --> 待支付
待支付 --> 已支付 : "支付成功"
待支付 --> 已取消 : "用户取消/超时"
已支付 --> [*]
已取消 --> [*]
图表来源
章节来源
数据结构要点
业务规则
周期管理
flowchart TD
Start(["开始订阅"]) --> Active["状态=激活"]
Active --> RenewCheck{"到期前检查"}
RenewCheck --> |需要续费| AutoRenew["自动续费尝试"]
RenewCheck --> |无需续费| Active
AutoRenew --> RenewSuccess{"续费成功?"}
RenewSuccess --> |是| Active
RenewSuccess --> |否| Expired["状态=过期"]
Expired --> ManualRenew["手动续费"]
ManualRenew --> Active
图表来源
章节来源
数据结构要点
业务规则
配额控制
flowchart TD
Init(["初始化/重置"]) --> Balance["读取用户余额与套餐配额"]
Balance --> Consume{"消费请求?"}
Consume --> |是| Check["校验可用余额>=消费数量"]
Check --> |是| Deduct["扣减已用令牌并写入TokenUsage"]
Check --> |否| Reject["拒绝请求并提示不足"]
Consume --> |否| Wait["等待消费请求"]
Deduct --> Wait
图表来源
章节来源
订单与订阅
订单与积分
用户与配额
用户的会员等级、到期时间、订阅状态共同决定其可用的生成次数、单次上限、月度令牌与分钟数。
graph LR
Order["订单(Order)"] -- "关联" --> Plan["订阅套餐(SubscriptionPlan)"]
Order -- "关联" --> Usage["积分使用(TokenUsage)"]
Subscription["订阅(Subscription)"] -- "关联" --> Plan
TokenBalance["积分余额(TokenBalance)"] -- "关联" --> User["用户(User)"]
Order -- "关联" --> User
Subscription -- "关联" --> User
图表来源
章节来源
索引策略
查询优化
写入优化
订单状态异常
订阅未生效
积分不足
章节来源
本文档基于Prisma schema定义,系统梳理了订单、订阅、积分余额三大业务模型的数据结构与业务规则,明确了状态流转、周期管理与配额控制的关键实现点,并给出了支付流程、会员升级、积分消费等场景的API使用路径与数据流图。建议在生产环境中配合完善的索引策略、异步任务与监控告警,确保订单支付、订阅续费与积分消费的稳定性与可扩展性。
订单管理
订阅服务
积分消费
前端页面参考
章节来源