seed_cell_product_specs.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/usr/bin/env python3
  2. """批量初始化细胞产品规格(biz_cell_product_spec),已存在编码则跳过。"""
  3. from __future__ import annotations
  4. import sys
  5. from datetime import datetime
  6. from pathlib import Path
  7. ROOT = Path(__file__).resolve().parents[1]
  8. if str(ROOT) not in sys.path:
  9. sys.path.insert(0, str(ROOT))
  10. from app.core.database import SessionLocal
  11. from app.crud import pilot_service as ps_svc
  12. from app.models.models import BizCellProductSpec
  13. # 旧版仅细胞数规格,执行时软删除
  14. LEGACY_SPEC_CODES = [
  15. "CPS-100W",
  16. "CPS-200W",
  17. "CPS-500W",
  18. "CPS-1000W",
  19. "CPS-2000W",
  20. "CPS-5000W",
  21. ]
  22. # (spec_code, spec_name, order_num, remark) — 规格名称:细胞数/体积
  23. CELL_PRODUCT_SPECS = [
  24. ("CPS-1.1E6-5ML", "1.1×10⁶/5ml", 1, "低剂量规格"),
  25. ("CPS-2.2E6-10ML", "2.2×10⁶/10ml", 2, "低剂量规格"),
  26. ("CPS-5.5E6-20ML", "5.5×10⁶/20ml", 3, "标准规格"),
  27. ("CPS-1.0E7-50ML", "1.0×10⁷/50ml", 4, "标准规格"),
  28. ("CPS-2.5E7-50ML", "2.5×10⁷/50ml", 5, "高剂量规格"),
  29. ("CPS-5.5E7-100ML", "5.5×10⁷/100ml", 6, "高剂量规格"),
  30. ]
  31. def cleanup_legacy_specs(db, tenant_no: str = "zkxw") -> int:
  32. rows = (
  33. db.query(BizCellProductSpec)
  34. .filter(
  35. BizCellProductSpec.spec_code.in_(LEGACY_SPEC_CODES),
  36. BizCellProductSpec.tenant_no == tenant_no,
  37. BizCellProductSpec.del_flag == 0,
  38. )
  39. .all()
  40. )
  41. for row in rows:
  42. row.del_flag = 1
  43. row.update_time = datetime.now()
  44. if rows:
  45. db.commit()
  46. return len(rows)
  47. def seed(tenant_no: str = "zkxw", user_id: str = "d3000000000000000000000000000001") -> None:
  48. db = SessionLocal()
  49. created = 0
  50. skipped = 0
  51. try:
  52. removed = cleanup_legacy_specs(db, tenant_no)
  53. if removed:
  54. print(f"已软删除旧版规格 {removed} 条。")
  55. for code, name, order_num, remark in CELL_PRODUCT_SPECS:
  56. if ps_svc.cell_product_spec_code_exists(db, code, tenant_no):
  57. skipped += 1
  58. continue
  59. ps_svc.create_cell_product_spec(
  60. db,
  61. spec_code=code,
  62. spec_name=name,
  63. tenant_no=tenant_no,
  64. order_num=order_num,
  65. remark=remark,
  66. user_id=user_id,
  67. )
  68. created += 1
  69. print(f"细胞产品规格初始化完成:新增 {created} 条,跳过 {skipped} 条(编码已存在)。")
  70. finally:
  71. db.close()
  72. if __name__ == "__main__":
  73. seed()