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