feat: M9 日报结构化入库(HTML 改为写入 MySQL news_report/news_event,report_type=intl)

- 新增 report_db/ 包(models/schema/db,复用 news 项目实现,幂等 upsert)
- reporter.py: _build_report_data + generate_report 写库返回 report_id
- pipeline/cli 适配 report_id 返回值;HTML 渲染/上传保留 deprecated
- 新增 tests/test_report_db.py;.env.example 增加 NEWS_DB_* 配置
- 已部署 pi5 并验证:真实生成 report_id=184(12 事件)+ 幂等覆盖
This commit is contained in:
2026-08-04 11:09:17 +08:00
parent e1ec5f836d
commit d4a55bcaaa
14 changed files with 669 additions and 69 deletions
+5 -4
View File
@@ -150,16 +150,17 @@ def run_step_index(date_str: str) -> StepResult:
def run_step_report(date_str: str) -> StepResult:
"""日报生成。"""
"""日报生成(M9:结构化入库,不再产出 HTML)"""
started = datetime.now()
try:
from scheduler.reporter import generate_report
path = generate_report()
report_id = generate_report()
elapsed = (datetime.now() - started).total_seconds()
ok = path is not None
ok = report_id is not None
return StepResult(
name="report", success=ok, elapsed_sec=elapsed,
message=str(path) if path else "无数据", started_at=started,
message=f"report_id={report_id}" if report_id is not None else "无数据",
started_at=started,
)
except Exception as e:
elapsed = (datetime.now() - started).total_seconds()