"""成本核算数据种子:解析 data/ 下三个鲁铭系列成本核算 Excel,全量导入价格库与系列模板。 用法: uv run python -m huamenchuang.scripts.seed_costbook [--company 1] """ import asyncio from pathlib import Path DATA = Path(__file__).resolve().parents[3] / "data" FILES = [ "3.2成本核算鲁铭75框扇齐平系列1.4.xlsx", "3.2成本核算鲁铭85框扇齐平系列1.8.xlsx", "2026.7.28成本核算鲁铭95窗纱一体系列1.8.xlsx", ] async def seed(company_id: int = 1) -> None: import huamenchuang.models # noqa: F401 from huamenchuang.core.database import SessionLocal, init_db from huamenchuang.services import costbook_service as svc await init_db() async with SessionLocal() as db: lib_stats = {"created": 0, "updated": 0} series_ids = [] for fn in FILES: path = DATA / fn if not path.exists(): print(f"跳过(不存在): {fn}") continue parsed = svc.parse_costbook(path) stats = await svc.import_libraries(db, company_id, parsed["libraries"]) tid = await svc.import_series(db, company_id, parsed) series_ids.append((tid, parsed["series_summary"]["window"].get("series"), parsed["file"])) lib_stats["created"] += stats["created"] lib_stats["updated"] += stats["updated"] opt = parsed["optimize_stats"] print(f"[{fn}] 系列{parsed['series_summary']['window'].get('series')} " f"型材{len(parsed['series_summary']['profile'])}行 优化单{opt.get('bars', 0)}支") await db.commit() print(f"价格库: 新增 {lib_stats['created']} / 更新 {lib_stats['updated']}") print(f"系列模板: {series_ids}") if __name__ == "__main__": import sys company = 1 if "--company" in sys.argv: company = int(sys.argv[sys.argv.index("--company") + 1]) asyncio.run(seed(company))