reset_process_categories.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/usr/bin/env python3
  2. """重置工艺工序分类(biz_process_category):清空指定租户数据后插入 5 条初始数据。
  3. 用法(在 backend 目录):
  4. source venv/bin/activate
  5. python scripts/reset_process_categories.py
  6. python scripts/reset_process_categories.py --tenant-no zkxw
  7. 注意:biz_process / biz_process_route_step / biz_production_task_step 等表
  8. 通过 category_id 引用本表,重置后上述关联 id 会失效(字段可空,不会阻断脚本)。
  9. """
  10. from __future__ import annotations
  11. import argparse
  12. import sys
  13. from pathlib import Path
  14. ROOT = Path(__file__).resolve().parents[1]
  15. if str(ROOT) not in sys.path:
  16. sys.path.insert(0, str(ROOT))
  17. from sqlalchemy import text
  18. from app.core.database import SessionLocal, engine
  19. from app.crud import process_category as process_category_svc
  20. ADMIN_ID = "d3000000000000000000000000000001"
  21. # (category_code, category_name, order_num, remark)
  22. PROCESS_CATEGORIES = [
  23. ("PC-XBYP", "细胞培养", 1, "细胞扩增与培养相关工序"),
  24. ("PC-YBJS", "样本接收", 2, "样本接收、登记与初检"),
  25. ("PC-ZJJC", "质检检测", 3, "过程质控与放行检测"),
  26. ("PC-DCGL", "冻存管理", 4, "冻存、复苏与出入库"),
  27. ("PC-BZZF", "包装发运", 5, "成品包装与发运"),
  28. ]
  29. def reset_process_categories(tenant_no: str = "zkxw", user_id: str = ADMIN_ID) -> None:
  30. with engine.begin() as conn:
  31. result = conn.execute(
  32. text("DELETE FROM `biz_process_category` WHERE `tenant_no` = :tenant_no"),
  33. {"tenant_no": tenant_no},
  34. )
  35. deleted = result.rowcount or 0
  36. db = SessionLocal()
  37. created = 0
  38. try:
  39. for code, name, order_num, remark in PROCESS_CATEGORIES:
  40. process_category_svc.create_process_category(
  41. db,
  42. category_code=code,
  43. category_name=name,
  44. tenant_no=tenant_no,
  45. order_num=order_num,
  46. remark=remark,
  47. user_id=user_id,
  48. )
  49. created += 1
  50. print(
  51. f"工艺工序分类重置完成(租户 {tenant_no}):"
  52. f"删除 {deleted} 条,新增 {created} 条。"
  53. )
  54. for code, name, _, _ in PROCESS_CATEGORIES:
  55. print(f" - {code} / {name}")
  56. finally:
  57. db.close()
  58. def main() -> None:
  59. parser = argparse.ArgumentParser(description="重置 biz_process_category 表数据")
  60. parser.add_argument("--tenant-no", default="zkxw", help="租户编号,默认 zkxw")
  61. parser.add_argument("--user-id", default=ADMIN_ID, help="create_by / update_by 用户 id")
  62. args = parser.parse_args()
  63. reset_process_categories(tenant_no=args.tenant_no, user_id=args.user_id)
  64. if __name__ == "__main__":
  65. main()