AutoRpa/rpa_cart/main.py

92 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""1 号药城支付落表:导出当天已付订单 → 写入表 2 operate_type=2。不对加购行。"""
from __future__ import annotations
import argparse
import tempfile
from datetime import date
from pathlib import Path
from db import RepoUnavailable
from job import run_yaoex_pay
from parse_xls import parse_order_xls
from repo import EmptyPayRepo, OraclePayRepo
from yaoex_client import day_range, export_orders
from yaoex_login import load_cart_dotenv, resolve_yaoex_auth
PROJECT_ROOT = Path(__file__).resolve().parent
def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
parser = argparse.ArgumentParser(description="1 号药城支付落表")
parser.add_argument("--xls", type=Path, default=None, help="已导出的订单明细 xls,跳过商城导出")
parser.add_argument(
"--days",
type=int,
default=0,
help="导出日期跨度,0=仅当天。与 --xls 互斥时仍用于无 xls 的导出",
)
parser.add_argument("--day", type=str, default=None, help="结束日期 YYYY-MM-DD,默认今天")
parser.add_argument("--dry-run", action="store_true", help="解析但不写库")
parser.add_argument("--fresh-login", action="store_true", help="忽略登录缓存")
parser.add_argument("--secrets", type=Path, default=None)
parser.add_argument("--yaoex-auth", type=Path, default=None)
return parser.parse_args(argv)
def main(argv: list[str] | None = None, repo=None) -> None:
args = parse_args(argv)
load_cart_dotenv()
xls_path = args.xls
tmp_xls: Path | None = None
if xls_path is None:
try:
auth = resolve_yaoex_auth(
secrets_path=args.secrets,
auth_path=args.yaoex_auth,
fresh=args.fresh_login,
)
token = auth.token
print("1号药城认证就绪。")
except SystemExit:
raise
except Exception as exc:
print(f"1号药城登录失败:{exc}")
raise SystemExit(2) from exc
end = date.fromisoformat(args.day) if args.day else date.today()
begin, end_ts = day_range(end, args.days)
print(f"导出 {begin} ~ {end_ts}")
content = export_orders(token, begin=begin, end=end_ts)
tmp_dir = Path(tempfile.mkdtemp(prefix="yaoex_pay_"))
tmp_xls = tmp_dir / "orders.xls"
tmp_xls.write_bytes(content)
xls_path = tmp_xls
print(f"导出文件 {xls_path} ({len(content)} bytes)")
lines = parse_order_xls(xls_path)
print(f"导出行 {len(lines)}")
if repo is None:
try:
repo = OraclePayRepo.from_env()
except RepoUnavailable as exc:
if not args.dry_run:
print(f"数据库不可用:{exc}")
raise SystemExit(2) from exc
print(f"无库,dry-run 只解析:{exc}")
repo = EmptyPayRepo()
summary = run_yaoex_pay(repo, lines, dry_run=args.dry_run)
print(
"落表 "
f"inserted={summary.inserted} "
f"skipped_status={summary.skipped_status} "
f"skipped_dup={summary.skipped_dup} "
f"unmatched={summary.unmatched} "
f"reasons={summary.unmatched_reasons}"
)
if __name__ == "__main__":
main()