"""独立的每日清算脚本。服务进程里的定时任务也会调用同一套结算函数。 示例: python -m app.settle python -m app.settle --date 2026-10-09 """ from __future__ import annotations import argparse import logging from datetime import date import app.models # noqa: F401 from app.database import Base, engine from app.jobs.daily_yield import run_daily_yield_cron def main(argv: list[str] | None = None) -> None: logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s %(message)s") parser = argparse.ArgumentParser(description="按 UTC 日清算节点积分产出") parser.add_argument("--date", dest="yield_date", help="清算日期 YYYY-MM-DD,默认上一个已结束的 UTC 日") args = parser.parse_args(argv) target = date.fromisoformat(args.yield_date) if args.yield_date else None Base.metadata.create_all(bind=engine) summary = run_daily_yield_cron(yield_date=target) print( f"yield_date={summary.yield_date} created={summary.created} " f"skipped={summary.skipped} total_points={format(summary.total_points, 'f')} partial={summary.is_partial}" ) if __name__ == "__main__": main()