feat(admin): add routed task evidence details

This commit is contained in:
QiuSW
2026-08-04 19:42:35 +08:00
parent 9a4d11f74b
commit 89648880bc
28 changed files with 2997 additions and 26 deletions
+34
View File
@@ -246,6 +246,27 @@ CREATE TABLE order_submissions (
UNIQUE (authorization_id),
UNIQUE (attempt_id)
);
-- INTERNAL_RAW 原始截图;原文件名和客户端路径不进入数据库
CREATE TABLE evidence_assets (
id TEXT PRIMARY KEY,
upload_key TEXT NOT NULL,
task_id TEXT NOT NULL,
attempt_id TEXT NOT NULL,
kind TEXT NOT NULL, -- T-204 仅 SKU_PANEL_GATE_1
privacy_tier TEXT NOT NULL, -- 仅 INTERNAL_RAW
sha256 TEXT NOT NULL, -- 64 位小写十六进制
byte_size INTEGER NOT NULL,
content_type TEXT NOT NULL, -- 仅 image/png
width_px INTEGER NOT NULL,
height_px INTEGER NOT NULL,
storage_key TEXT NOT NULL, -- 由 SHA-256 唯一派生
uploaded_by_device_id TEXT NOT NULL,
captured_at TEXT NOT NULL,
created_at TEXT NOT NULL,
UNIQUE (uploaded_by_device_id, upload_key),
FOREIGN KEY (task_id, attempt_id) REFERENCES purchase_attempts(task_id, id)
);
```
MVP 不再用 `spec_trials` 作为审批记录,也不存在 `authorized_unit_price`。实际读价属于
@@ -306,6 +327,19 @@ DRAFT / PENDING / NEEDS_MANUAL ─管理员取消(围栏前)→ CANCELED
截图上传器只能接收调用方显式指定的截图,不能枚举证据目录或顺带上传 XML/manifest。证据响应
使用 `Cache-Control: no-store`,不能暴露为免登录静态目录。
内部截图存储采用以下固定边界:
- 单个 PNG 最大 10 MiB、单边最大 8192 px、总像素最大 16,777,216;同时验证 multipart MIME、
PNG 魔数、完整解码、字节数、尺寸和调用方声明的 SHA-256。
- 上传 handler 必须先通过设备认证,再解析 Content-Type 或读取 body。T-301 前生产认证器固定拒绝,
不创建临时 token,也不把管理员 session 当设备身份。
- 文件写入显式配置的私有证据根目录:同目录随机临时文件 → 流式 hash → 校验 → `fsync` → 原子
rename 到 SHA-256 内容地址 → 最后事务写数据库。数据库永远不指向半文件或缺失文件。
- SQLite 与文件系统不能组成跨资源事务;极端故障最多留下不可达孤儿文件。不得为清理孤儿而删除
可能被其他资产记录并发复用的内容文件,自动保留/删除策略留给部署任务。
- SHA-256 只用于物理内容寻址,不是业务资产唯一键;不同合法证据可以引用相同内容。同设备主体与
`upload_key` 同载荷重放原资产,任一规范字段变化即冲突。
## 六、关键技术难点
| 难点 | 风险 | 应对 |