feat(report): 报告 PDF 导出管线(Phase A,WeasyPrint 服务端渲染)
- POST /reports/{id}/export:request_key 幂等 + hd_export 日配额三段式(reserve/commit/refund)+ tier2 熔断场景闸(BudgetGuardDep),仅 succeeded 报告可导
- GET /reports/{id}/export/download:归属校验 + 路径收敛(rendered_asset_key 必须落在 report_export_dir 内),FileResponse 携带 UTF-8 文件名
- celery 任务 meida.report.export(cpu 队列):渲染→落盘 var/exports→回写 rendered_asset_key;业务性拒绝(报告状态变化)结案退款不重试,基础设施异常重试一次后兜底结案退款
- packages/report/pdf:Jinja2 模板 + WeasyPrint 渲染器(url_fetcher 全拒外部资源防 SSRF;维度中文名按 DIMENSION_BY_KEY 回填;色板维度渲染色卡)
- 单测 10 例(资格/幂等/并发同键/下载校验/渲染);scripts/seed_pdf_e2e.sql 供本地 E2E 造数
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
INSERT INTO rp_report (user_id, tier, status, version, result, model_info, content_code, cost_cents, completed_at)
|
||||
VALUES (
|
||||
219679774354706432,
|
||||
'basic',
|
||||
'succeeded',
|
||||
1,
|
||||
'{
|
||||
"diagnosis": {
|
||||
"dimensions": [
|
||||
{"number": 1, "key": "gender", "status": "ok", "value": "女", "confidence": 1.0, "evidence": "问卷填写"},
|
||||
{"number": 2, "key": "height_weight", "status": "ok", "value": "165cm / 52kg", "confidence": 1.0, "evidence": "问卷填写"},
|
||||
{"number": 5, "key": "body_shape", "status": "ok", "value": "沙漏型(X 型)", "confidence": 0.86, "evidence": "肩胯宽度接近,腰线明显,腰臀比约 0.72"},
|
||||
{"number": 8, "key": "face_shape", "status": "ok", "value": "鹅蛋脸", "confidence": 0.9, "evidence": "脸长宽比约 1.4,下颌线条流畅"},
|
||||
{"number": 12, "key": "skin_tone", "status": "ok", "value": "中性二白", "confidence": 0.82, "evidence": "面部 Lab 采样 L*=68.3,色相偏中性"},
|
||||
{"number": 17, "key": "season_code", "status": "ok", "value": "浅春型", "confidence": 0.78, "evidence": "中明度、中低彩度、偏暖,对比度中等"},
|
||||
{"number": 19, "key": "best_colors", "status": "ok", "value": [{"hex": "#F5CBA7", "name_cn": "杏色"}, {"hex": "#A9CCE3", "name_cn": "雾霾蓝"}, {"hex": "#F1948A", "name_cn": "珊瑚粉"}, {"hex": "#D5DBDB", "name_cn": "浅灰"}], "confidence": 0.8, "evidence": "浅春色板映射"},
|
||||
{"number": 21, "key": "avoid_colors", "status": "ok", "value": [{"hex": "#1B2631", "name_cn": "深炭黑"}, {"hex": "#7B241C", "name_cn": "酒红"}], "confidence": 0.75, "evidence": "高对比深色压气色"},
|
||||
{"number": 25, "key": "gene_style", "status": "ok", "value": "少女型", "confidence": 0.72, "evidence": "轮廓偏曲、量感中小、动静偏静"},
|
||||
{"number": 26, "key": "psyche_style", "status": "ok", "value": "优雅知性", "confidence": 0.88, "evidence": "问卷风格偏好聚类"},
|
||||
{"number": 27, "key": "fusion_style_name", "status": "ok", "value": "清甜优雅风", "confidence": 0.8, "evidence": "基因风格 × 心理风格规则融合"},
|
||||
{"number": 28, "key": "core_goals", "status": "ok", "value": ["通勤得体", "约会加分", "显瘦"], "confidence": 0.95, "evidence": "问卷核心诉求"},
|
||||
{"number": 31, "key": "hair_status", "status": "skipped", "value": null, "evidence": "初级版未覆盖"}
|
||||
]
|
||||
},
|
||||
"copy": {
|
||||
"summary": "你是典型的浅春型清甜优雅风:鹅蛋脸配沙漏身形,底色干净、对比柔和。穿搭上抓住「浅色暖调 + 柔线条 + 高腰线」三件事,通勤与约会场景都能稳定出彩。",
|
||||
"sections": [
|
||||
{"title": "色彩建议", "paragraphs": ["最佳色以浅春暖调为主:杏色、珊瑚粉、雾霾蓝都能提亮气色;浅灰作为中性过渡色安全百搭。", "避雷深炭黑与酒红这类高对比深色——它们会让你的面部显得疲惫,如需深色,请用驼色或燕麦色替代。"]},
|
||||
{"title": "版型与搭配", "paragraphs": ["沙漏型身材的重点是「顺腰线」:收腰连衣裙、高腰 A 字裙、短外套配高腰下装都是你的优势版型。", "避免直身廓形与 oversized 上衣完全盖住腰线;若要穿宽松款,用腰带或塞衣角点出腰的位置。"]},
|
||||
{"title": "风格落地", "paragraphs": ["你的融合风格是「清甜优雅风」:少女感来自于柔线条与浅亮色,优雅感来自于简洁剪裁与低饱和配色。", "通勤场景建议:雾霾蓝衬衫 + 浅灰高腰西裤 + 杏色针织外套;约会场景建议:珊瑚粉收腰连衣裙 + 珍珠耳饰。"]}
|
||||
]
|
||||
}
|
||||
}'::jsonb,
|
||||
'{"pipeline": "seed-for-pdf-e2e"}'::jsonb,
|
||||
'PDFE2E01',
|
||||
0,
|
||||
now()
|
||||
);
|
||||
SELECT report_id, status, content_code FROM rp_report;
|
||||
Reference in New Issue
Block a user