init: AIGC-Hub/AVCC 方案文档 + TCS-IPTV 内容可信锁定系统 MVP

- 方案文档: AVCC 体系建设、IPTV TCS 需求(0-req)/PRD(1-prd)/任务(2-task)/二三四期任务
- tcs-iptv: Go 后端(哈希SDK/MA码生成/可信数据空间mock/业务编排/HTTP API+HMAC鉴权)
- web-console: React+AntD 监管大屏(角色工作台/全流程演示/监管片库)
- 一剧一码+集级哈希, 集级下架/恢复, 全栈测试通过
This commit is contained in:
selfrelease
2026-06-14 16:50:31 +08:00
commit a329d4906b
103 changed files with 20052 additions and 0 deletions
@@ -0,0 +1,193 @@
# 第八章 核心业务时序图与状态机设计
> 版本:V1.0
> 基于文档:《AIGC-Hub智视码(AVCC)体系建设方案 V2.0》
本章主要面向研发团队,提供核心业务场景的交互时序图(Sequence Diagram)以及核心实体的状态机(State Machine)定义,支持开发阶段的接口对接与流程编码。
---
## 8.1 核心业务时序图
### 8.1.1 赋码全链路时序图(含审核与上链)
描述从创作者提交申请,到完成 AI 预审、版权上链并最终签发 AVCC 证书的全过程。
```mermaid
sequenceDiagram
autonumber
actor Creator as 创作者(工作台)
participant CodeSvc as 赋码引擎(CodeSvc)
participant Kafka as 消息队列(Kafka)
participant ReviewSvc as 审核引擎(ReviewSvc)
participant ChainSvc as 版权链引擎(ChainSvc)
participant DB as 主数据库(PG)
Creator->>CodeSvc: 1. 提交赋码申请(视频+版权材料)
CodeSvc->>CodeSvc: 2. 预检(重复/黑名单/材料完整性)
CodeSvc->>DB: 3. 创建赋码记录(status=pre_checking)
CodeSvc-->>Creator: 4. 返回受理成功(202 Accepted)
CodeSvc->>Kafka: 5. 发布事件[topic.avcc.apply.created]
Kafka-->>ReviewSvc: 6. 消费事件,创建审核任务
ReviewSvc->>DB: 7. 更新状态(status=ai_reviewing)
rect rgb(240, 248, 255)
Note over ReviewSvc: 执行 AI 多模态审核
ReviewSvc->>ReviewSvc: 切片、多模型并行推理、融合决策
end
ReviewSvc->>DB: 8. 保存审核报告(review_reports)
ReviewSvc->>Kafka: 9. 发布事件[topic.review.task.finished]
Kafka-->>ChainSvc: 10. 消费事件,准备上链
ChainSvc->>ChainSvc: 11. 调用智能合约 RegisterCopyright
ChainSvc->>DB: 12. 保存链交易记录(chain_records)
ChainSvc->>Kafka: 13. 发布事件[topic.chain.tx.confirmed]
Kafka-->>CodeSvc: 14. 消费上链成功事件
CodeSvc->>CodeSvc: 15. 执行 GenerateAVCC 算法生成六段式编码
CodeSvc->>DB: 16. 更新赋码记录(status=approved, 填入AVCC)
Creator->>CodeSvc: 17. 轮询/查询进度
CodeSvc-->>Creator: 18. 返回 AVCC 证书信息
```
### 8.1.2 跨平台解析与鉴权时序图
描述第三方平台在分发作品前,如何通过 MA 网关验证流通权限。
```mermaid
sequenceDiagram
autonumber
participant App as 平台客户端(App)
participant Platform as 平台后端
participant Gateway as MA网关(Gateway)
participant Redis as 缓存(Redis)
participant ZIIOT as MA全球根系统
App->>Platform: 1. 请求播放/分发某视频(附带AVCC)
Platform->>Gateway: 2. POST /api/v1/avcc/parse (附带API Key)
Gateway->>Gateway: 3. API Key 鉴权与限流检查
Gateway->>Redis: 4. 查询 AVCC 缓存
alt 缓存未命中
Gateway->>ZIIOT: 5. 调用根解析接口(可选, 严格模式)
ZIIOT-->>Gateway: 6. 返回根解析验证结果
Gateway->>Gateway: 7. 计算流通权限(如 P类/G类)
Gateway->>Redis: 8. 写入解析结果缓存(TTL=1h)
end
Gateway-->>Platform: 9. 返回解析结果与 circulation_rights
alt 权限校验通过
Platform-->>App: 10. 允许播放,下发视频流
else 权限校验失败(如:O类跨平台)
Platform-->>App: 11. 拒绝播放,下架处理
end
```
### 8.1.3 跨平台播放分账时序图
描述播放行为如何转化为链上的分账清算记录。
```mermaid
sequenceDiagram
autonumber
participant Platform as 平台后端
participant Gateway as 广电云网关
participant ClickHouse as 时序数据库
participant Settlement as 清算引擎
participant ChainSvc as 智能合约(联盟链)
Platform->>Gateway: 1. 批量回传播放数据(Event: play)
Gateway->>Kafka: 2. 投递到[topic.playback.event]
Kafka-->>ClickHouse: 3. 消费入库,实时聚合
loop 每日/每月定时调度
Settlement->>ClickHouse: 4. 提取周期内各 AVCC 播放与收益汇总
Settlement->>ChainSvc: 5. 触发合约 ExecuteSettlement
ChainSvc->>ChainSvc: 6. 链上按比例分配(创作者/模型/IP/平台)
ChainSvc-->>Settlement: 7. 返回链上交易回执(tx_hash)
Settlement->>Settlement: 8. 更新 PostgreSQL(settlement_records)
end
```
---
## 8.2 核心状态机定义
### 8.2.1 审核状态机 (`review_status`)
控制作品在赋码审批流程中的流转。
```mermaid
stateDiagram-v2
[*] --> pending: 提交申请
pending --> pre_checking: 开始预检
pre_checking --> ai_reviewing: 预检通过
pre_checking --> rejected: 预检失败(重复/黑名单)
ai_reviewing --> human_reviewing: 需人工复核(P类/合规边缘)
ai_reviewing --> approved: AI秒批通过(O类/合规高分)
ai_reviewing --> rejected: AI判定违规且不可修改
human_reviewing --> approved: 人工终审通过
human_reviewing --> rejected: 人工终审驳回
approved --> revoked: 事后发现侵权/违规(吊销)
rejected --> [*]
revoked --> [*]
```
**状态流转说明:**
- `pending` -> `pre_checking`:赋码引擎 (`code-pre-check`) 执行
- `pre_checking` -> `ai_reviewing`:触发 Kafka 消息交由审核引擎执行
- `ai_reviewing` -> `human_reviewing`:融合决策层判定 `suggested_level=P` 或置信度处于边缘区间时触发
- `approved`:触发生成 AVCC 和上链操作
### 8.2.2 流通状态机 (`circulation_status`)
控制已赋码作品在全网的合法流通权限。
```mermaid
stateDiagram-v2
[*] --> active: 获得AVCC证书
active --> suspended: 收到侵权投诉/配合调查
suspended --> active: 调查澄清,恢复流通
active --> revoked: 严重违规/黑名单/伪造授权
suspended --> revoked: 侵权坐实
active --> expired: 网标有效期结束
expired --> active: 续期申请通过
revoked --> [*]: 永久失效,MA根节点同步注销
```
**触发机制:**
- `active` -> `suspended`:由管理后台运营人员手工触发(对应 API `/api/v1/avcc/suspend`
- `active` -> `expired`:定时任务每日扫描 `expires_at` 字段自动触发
- `active` -> `revoked`:广电总局下发黑名单指令,或 ZIIOT 根节点触发码资源回收
---
## 8.3 并发与异常处理策略
### 8.3.1 分布式锁(防止并发重复赋码)
`CodeSvc` 分配 MA 码段时,必须加锁:
- **锁 Key**`lock:allocate:{platform_node}`
- **机制**Redis Redlock,持有锁期间从数据库/缓存中原子性获取最大序列号并 +1,生成完毕后释放锁。
### 8.3.2 失败补偿与 Saga 模式
针对图 8.1.1 中的长事务(跨越 Code, Review, Chain),采用 **基于事件的 Saga 模式**
- 如果步骤 10-13(版权上链)失败,Kafka 会基于死信队列(DLQ)重试 3 次。
- 若 3 次均失败,触发**补偿事务**:`ChainSvc` 发布 `topic.chain.tx.failed``CodeSvc` 消费后将 `review_status` 置为 `failed`,并通知创作者重新提交。
### 8.3.3 幂等性设计
- 所有涉及到数据库更新(状态流转)的 Kafka 消费者,必须检查记录的 `version` 或当前状态。
- 例如:`UPDATE avcc_records SET status = 'approved' WHERE id = ? AND status = 'human_reviewing'`,避免重复消费导致状态错乱。