Cai
2026-08-22 2042980bbf75b0eb72b725048536a878ca028ab2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
"""Run approved BATCH-003 conversions in small sub-batches.
 
Writes a separate conversion status file for each sub-batch so long runs can be
resumed without losing status records.
"""
 
from __future__ import annotations
 
import argparse
import csv
import subprocess
import sys
from pathlib import Path
 
 
def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("--project-root", default=".")
    parser.add_argument("--inventory", required=True)
    parser.add_argument("--sub-batch-size", type=int, default=30)
    parser.add_argument("--start", type=int, default=1)
    parser.add_argument("--limit", type=int, default=0)
    args = parser.parse_args()
 
    root = Path(args.project_root).resolve()
    inventory = root / args.inventory
    with inventory.open("r", encoding="utf-8-sig", newline="") as f:
        rows = [r for r in csv.DictReader(f) if r.get("already_in_source_document") == "NO"]
 
    chunks = [
        rows[i : i + args.sub_batch_size]
        for i in range(0, len(rows), args.sub_batch_size)
    ]
    selected = chunks[args.start - 1 :]
    if args.limit:
        selected = selected[: args.limit]
 
    temp_dir = root / "ana-data" / "tmp" / "有色案例" / "ANA-YS-INDUSTRY-001" / "RUN-ANA-YS-INDUSTRY-001-BATCH-003-CONVERT-001"
    temp_dir.mkdir(parents=True, exist_ok=True)
 
    for offset, chunk in enumerate(selected, start=args.start):
        sub_id = f"SB{offset:03d}"
        sub_inventory = temp_dir / f"inventory_{sub_id}.csv"
        with sub_inventory.open("w", encoding="utf-8-sig", newline="") as f:
            writer = csv.DictWriter(f, fieldnames=list(chunk[0].keys()))
            writer.writeheader()
            writer.writerows(chunk)
        status_out = root / "ana-data" / "cases" / "有色案例" / "manifest" / f"conversion_status_batch003_{sub_id}.csv"
        cmd = [
            sys.executable,
            str(root / "ana-data" / "tools" / "convert_nonferrous_raw_batch.py"),
            "--project-root",
            str(root),
            "--inventory",
            str(sub_inventory.relative_to(root)),
            "--converted-dir",
            "ana-data/cases/有色案例/converted",
            "--status-out",
            str(status_out.relative_to(root)),
            "--case-id",
            "ANA-YS-INDUSTRY-001",
            "--batch-id",
            "BATCH-003",
            "--run-id",
            f"RUN-ANA-YS-INDUSTRY-001-BATCH-003-CONVERT-001-{sub_id}",
        ]
        print(f"running {sub_id} rows={len(chunk)}")
        result = subprocess.run(cmd, cwd=root, text=True, capture_output=True)
        print(result.stdout.strip())
        if result.returncode != 0:
            print(result.stderr, file=sys.stderr)
            return result.returncode
    return 0
 
 
if __name__ == "__main__":
    raise SystemExit(main())