seed_item_units.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. #!/usr/bin/env python3
  2. """批量初始化物品单位(biz_item_unit),已存在编码则跳过。"""
  3. from __future__ import annotations
  4. import sys
  5. from pathlib import Path
  6. ROOT = Path(__file__).resolve().parents[1]
  7. if str(ROOT) not in sys.path:
  8. sys.path.insert(0, str(ROOT))
  9. from app.core.database import SessionLocal
  10. from app.crud import item_unit as item_unit_svc
  11. # (unit_code, unit_name, order_num, remark)
  12. ITEM_UNITS = [
  13. # —— 计数 / 件数 ——
  14. ("ge", "个", 1, "计数"),
  15. ("jian", "件", 2, "计数"),
  16. ("tao", "套", 3, "计数"),
  17. ("tai", "台", 4, "计数"),
  18. ("liang_che", "辆", 5, "计数"),
  19. ("jia", "架", 6, "计数"),
  20. ("bu", "部", 7, "计数"),
  21. ("zhi", "支", 8, "计数"),
  22. ("tiao", "条", 9, "计数"),
  23. ("gen", "根", 10, "计数"),
  24. ("zhang", "张", 11, "计数"),
  25. ("pian", "片", 12, "计数"),
  26. ("kuai", "块", 13, "计数"),
  27. ("ke", "颗", 14, "计数"),
  28. ("li", "粒", 15, "计数"),
  29. ("mei", "枚", 16, "计数"),
  30. ("zhi_zhi", "只", 17, "计数"),
  31. ("tou", "头", 18, "计数"),
  32. ("wei_tail", "尾", 19, "计数"),
  33. ("pi", "匹", 20, "计数"),
  34. ("shuang", "双", 21, "计数"),
  35. ("dui", "对", 22, "计数"),
  36. ("fu", "副", 23, "计数"),
  37. ("zu", "组", 24, "计数"),
  38. ("pi_pi", "批", 25, "计数"),
  39. ("fen", "份", 26, "计数"),
  40. ("ci", "次", 27, "计数"),
  41. ("hui", "回", 28, "计数"),
  42. ("lun", "轮", 29, "计数"),
  43. ("ba", "把", 30, "计数"),
  44. ("kun", "捆", 31, "计数"),
  45. ("chuan", "串", 32, "计数"),
  46. ("shu", "束", 33, "计数"),
  47. ("pai", "排", 34, "计数"),
  48. ("kong", "孔", 35, "计数"),
  49. ("zhu", "株", 36, "计数"),
  50. ("ke_shu", "棵", 37, "计数"),
  51. ("cong", "丛", 38, "计数"),
  52. ("duo", "朵", 39, "计数"),
  53. ("ban_petal", "瓣", 40, "计数"),
  54. ("ren", "人", 41, "计数"),
  55. ("wei_pos", "位", 42, "计数"),
  56. ("hu_hu", "户", 43, "计数"),
  57. ("jia_hu", "家", 44, "计数"),
  58. ("kou", "口", 45, "计数"),
  59. ("dun", "顿", 46, "计数"),
  60. ("xiang_mu", "项", 47, "计数"),
  61. ("ben", "本", 48, "计数"),
  62. ("ce", "册", 49, "计数"),
  63. ("zhang_page", "页", 50, "计数"),
  64. # —— 质量 ——
  65. ("ug", "微克", 100, "质量"),
  66. ("mg", "毫克", 101, "质量"),
  67. ("g", "克", 102, "质量"),
  68. ("kg", "千克", 103, "质量"),
  69. ("t", "吨", 104, "质量"),
  70. ("jin", "斤", 105, "质量"),
  71. ("liang_w", "两", 106, "质量"),
  72. ("lb", "磅", 107, "质量"),
  73. ("oz", "盎司", 108, "质量"),
  74. ("dan", "担", 109, "质量"),
  75. ("gongjin", "公斤", 110, "质量"),
  76. # —— 体积 ——
  77. ("ul", "微升", 200, "体积"),
  78. ("ml", "毫升", 201, "体积"),
  79. ("l", "升", 202, "体积"),
  80. ("dl", "分升", 203, "体积"),
  81. ("cl", "厘升", 204, "体积"),
  82. ("m3", "立方米", 205, "体积"),
  83. ("dm3", "立方分米", 206, "体积"),
  84. ("cm3", "立方厘米", 207, "体积"),
  85. ("mm3", "立方毫米", 208, "体积"),
  86. ("gal", "加仑", 209, "体积"),
  87. # —— 长度 / 面积 ——
  88. ("mm", "毫米", 300, "长度"),
  89. ("cm", "厘米", 301, "长度"),
  90. ("dm", "分米", 302, "长度"),
  91. ("m", "米", 303, "长度"),
  92. ("km", "千米", 304, "长度"),
  93. ("inch", "英寸", 305, "长度"),
  94. ("ft", "英尺", 306, "长度"),
  95. ("chi", "尺", 307, "长度"),
  96. ("cun", "寸", 308, "长度"),
  97. ("mm2", "平方毫米", 320, "面积"),
  98. ("cm2", "平方厘米", 321, "面积"),
  99. ("m2", "平方米", 322, "面积"),
  100. ("km2", "平方千米", 323, "面积"),
  101. ("mu_area", "亩", 324, "面积"),
  102. ("ha", "公顷", 325, "面积"),
  103. # —— 包装 ——
  104. ("he", "盒", 400, "包装"),
  105. ("xiang", "箱", 401, "包装"),
  106. ("dai", "袋", 402, "包装"),
  107. ("bao", "包", 403, "包装"),
  108. ("ping", "瓶", 404, "包装"),
  109. ("guan", "罐", 405, "包装"),
  110. ("tong", "桶", 406, "包装"),
  111. ("tong_tube", "筒", 407, "包装"),
  112. ("juan", "卷", 408, "包装"),
  113. ("ban_board", "板", 409, "包装"),
  114. ("tuo", "托", 410, "包装"),
  115. ("pan", "盘", 411, "包装"),
  116. ("kuang", "筐", 412, "包装"),
  117. ("lan", "篮", 413, "包装"),
  118. ("lou", "篓", 414, "包装"),
  119. ("long", "笼", 415, "包装"),
  120. ("bei", "杯", 416, "包装"),
  121. ("wan", "碗", 417, "包装"),
  122. ("hu_pot", "壶", 418, "包装"),
  123. ("pen", "盆", 419, "包装"),
  124. ("guan_tube", "管", 420, "包装"),
  125. ("nang", "囊", 421, "包装"),
  126. ("tie", "贴", 422, "包装"),
  127. ("za", "扎", 423, "包装"),
  128. ("ceng", "层", 424, "包装"),
  129. ("ge_pack", "格", 425, "包装"),
  130. ("xi_tou", "吸头", 426, "包装"),
  131. ("qiang_tou", "枪头", 427, "包装"),
  132. ("kong_ban", "孔板", 428, "包装"),
  133. ("yang_ben_guan", "样本管", 429, "包装"),
  134. ("dong_cun_guan", "冻存管", 430, "包装"),
  135. ("pei_yang_ping", "培养瓶", 431, "包装"),
  136. ("pei_yang_min", "培养皿", 432, "包装"),
  137. ("liu_guan", "六孔板", 433, "包装"),
  138. ("shi_er_guan", "十二孔板", 434, "包装"),
  139. ("ershi_si_guan", "二十四孔板", 435, "包装"),
  140. ("jiu_shi_liu_guan", "九十六孔板", 436, "包装"),
  141. ("san_bai_ba_shi_guan", "三百八十四孔板", 437, "包装"),
  142. # —— 实验室 / 生物 ——
  143. ("u", "单位", 500, "实验室"),
  144. ("iu", "IU", 501, "实验室"),
  145. ("ku", "KU", 502, "实验室"),
  146. ("mu_act", "MU", 503, "实验室"),
  147. ("cells_ml", "cells/mL", 504, "实验室"),
  148. ("cells_ul", "cells/μL", 505, "实验室"),
  149. ("cfu", "CFU", 506, "实验室"),
  150. ("cfu_ml", "CFU/mL", 507, "实验室"),
  151. ("pfu", "PFU", 508, "实验室"),
  152. ("pfu_ml", "PFU/mL", 509, "实验室"),
  153. ("od", "OD", 510, "实验室"),
  154. ("copies_ml", "copies/mL", 511, "实验室"),
  155. ("copies_ul", "copies/μL", 512, "实验室"),
  156. ("mol", "摩尔", 513, "实验室"),
  157. ("mmol", "毫摩尔", 514, "实验室"),
  158. ("umol", "微摩尔", 515, "实验室"),
  159. ("nmol", "纳摩尔", 516, "实验室"),
  160. ("mol_l", "mol/L", 517, "实验室"),
  161. ("mmol_l", "mmol/L", 518, "实验室"),
  162. ("umol_l", "μmol/L", 519, "实验室"),
  163. ("nmol_l", "nmol/L", 520, "实验室"),
  164. ("m_l", "M", 521, "实验室"),
  165. ("percent", "%", 522, "实验室"),
  166. ("ppm", "ppm", 523, "实验室"),
  167. ("ppb", "ppb", 524, "实验室"),
  168. ("mg_ml", "mg/mL", 525, "实验室"),
  169. ("ug_ml", "μg/mL", 526, "实验室"),
  170. ("ng_ml", "ng/mL", 527, "实验室"),
  171. ("pg_ml", "pg/mL", 528, "实验室"),
  172. ("mg_l", "mg/L", 529, "实验室"),
  173. ("ug_l", "μg/L", 530, "实验室"),
  174. ("ng_l", "ng/L", 531, "实验室"),
  175. ("iu_ml", "IU/mL", 532, "实验室"),
  176. ("u_ml", "U/mL", 533, "实验室"),
  177. ("x_be", "×", 534, "实验室"),
  178. ("ren_fen", "人份", 535, "实验室"),
  179. ("yang_ben", "样本", 536, "实验室"),
  180. ("ji_yin", "基因", 537, "实验室"),
  181. ("tiao_dai", "条带", 538, "实验室"),
  182. ("kuai_jiao", "块胶", 539, "实验室"),
  183. # —— 时间 ——
  184. ("s", "秒", 600, "时间"),
  185. ("min", "分钟", 601, "时间"),
  186. ("h", "小时", 602, "时间"),
  187. ("d", "天", 603, "时间"),
  188. ("week", "周", 604, "时间"),
  189. ("month", "月", 605, "时间"),
  190. ("year", "年", 606, "时间"),
  191. ("ji", "季", 607, "时间"),
  192. # —— 其他 ——
  193. ("yuan", "元", 700, "其他"),
  194. ("kwh", "千瓦时", 701, "其他"),
  195. ("du", "度", 702, "其他"),
  196. ("zhi_plant", "枝", 703, "其他"),
  197. ("dai_pack", "袋装", 704, "其他"),
  198. ("xiang_pack", "箱装", 705, "其他"),
  199. ("he_pack", "盒装", 706, "其他"),
  200. ]
  201. def seed(tenant_no: str = "zkxw", user_id: str = "d3000000000000000000000000000001") -> None:
  202. db = SessionLocal()
  203. created = 0
  204. skipped = 0
  205. try:
  206. for code, name, order_num, remark in ITEM_UNITS:
  207. if item_unit_svc.unit_code_exists(db, code, tenant_no):
  208. skipped += 1
  209. continue
  210. item_unit_svc.create_item_unit(
  211. db,
  212. unit_code=code,
  213. unit_name=name,
  214. tenant_no=tenant_no,
  215. order_num=order_num,
  216. remark=remark,
  217. user_id=user_id,
  218. )
  219. created += 1
  220. print(f"物品单位初始化完成:新增 {created} 条,跳过 {skipped} 条(编码已存在)。")
  221. finally:
  222. db.close()
  223. if __name__ == "__main__":
  224. seed()