214 lines
5.7 KiB
Python
214 lines
5.7 KiB
Python
#!/usr/bin/env python3
|
||
"""市场物料库测试数据(biz_material + 入库批次 + 变动记录),已存在编码/入库编号则跳过。"""
|
||
from __future__ import annotations
|
||
|
||
import sys
|
||
from decimal import Decimal
|
||
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 material as material_svc
|
||
from app.crud import material_stock_batch as batch_svc
|
||
from app.models.material import BizMaterial
|
||
|
||
# (material_code, material_name, category, spec_model, unit, warning_qty, order_num, remark,
|
||
# stock_in_no, stock_in_date, expire_date, catalog_no, batch_no, manufacturer,
|
||
# unit_price, qty)
|
||
MARKET_MATERIAL_SEEDS = [
|
||
(
|
||
"MKT-MAT-001",
|
||
"品牌宣传册",
|
||
"xccyw",
|
||
"A4 彩色 20页",
|
||
"册",
|
||
Decimal("50"),
|
||
1,
|
||
"市场宣传用物料",
|
||
"MKT-RK-20260615-001",
|
||
"2026-06-10",
|
||
"2028-06-10",
|
||
"CAT-BRO-A4-20",
|
||
"BN20260601",
|
||
"安徽印务有限公司",
|
||
Decimal("12.50"),
|
||
Decimal("200"),
|
||
),
|
||
(
|
||
"MKT-MAT-002",
|
||
"细胞存储服务手册",
|
||
"xccyw",
|
||
"A5 精装",
|
||
"本",
|
||
Decimal("30"),
|
||
2,
|
||
"客户咨询配套资料",
|
||
"MKT-RK-20260615-002",
|
||
"2026-06-10",
|
||
"2028-06-10",
|
||
"CAT-MAN-A5",
|
||
"BN20260602",
|
||
"安徽印务有限公司",
|
||
Decimal("18.00"),
|
||
Decimal("100"),
|
||
),
|
||
(
|
||
"MKT-MAT-003",
|
||
"采集专用管套装",
|
||
"ccyw",
|
||
"50ml×6支/套",
|
||
"套",
|
||
Decimal("20"),
|
||
3,
|
||
"采集业务现场使用",
|
||
"MKT-RK-20260615-003",
|
||
"2026-06-11",
|
||
"2027-06-11",
|
||
"CAT-TUBE-50-6",
|
||
"BN20260603",
|
||
"康宁生物耗材",
|
||
Decimal("85.00"),
|
||
Decimal("50"),
|
||
),
|
||
(
|
||
"MKT-MAT-004",
|
||
"知情同意书范本",
|
||
"ccyw",
|
||
"A4 单页",
|
||
"份",
|
||
Decimal("100"),
|
||
4,
|
||
"采集业务合规文件",
|
||
"MKT-RK-20260615-004",
|
||
"2026-06-11",
|
||
"2027-12-31",
|
||
"CAT-ICF-A4",
|
||
"BN20260604",
|
||
"法务文印中心",
|
||
Decimal("0.80"),
|
||
Decimal("500"),
|
||
),
|
||
(
|
||
"MKT-MAT-005",
|
||
"会议展架易拉宝",
|
||
"xccyw",
|
||
"80×200cm 含支架",
|
||
"个",
|
||
Decimal("5"),
|
||
5,
|
||
"展会及会议布置",
|
||
"MKT-RK-20260615-005",
|
||
"2026-06-12",
|
||
"2029-06-12",
|
||
"CAT-ROLL-80200",
|
||
"BN20260605",
|
||
"合肥广告制作",
|
||
Decimal("120.00"),
|
||
Decimal("10"),
|
||
),
|
||
]
|
||
|
||
|
||
def _get_material_by_code(db, code: str, tenant_no: str) -> BizMaterial | None:
|
||
return (
|
||
db.query(BizMaterial)
|
||
.filter(
|
||
BizMaterial.material_code == code,
|
||
BizMaterial.tenant_no == tenant_no,
|
||
BizMaterial.del_flag == 0,
|
||
)
|
||
.first()
|
||
)
|
||
|
||
|
||
def seed(tenant_no: str = "zkxw", user_id: str = "d3000000000000000000000000000001") -> None:
|
||
db = SessionLocal()
|
||
created_material = 0
|
||
skipped_material = 0
|
||
created_batch = 0
|
||
skipped_batch = 0
|
||
try:
|
||
for row in MARKET_MATERIAL_SEEDS:
|
||
(
|
||
code,
|
||
name,
|
||
category,
|
||
spec,
|
||
unit,
|
||
warning_qty,
|
||
order_num,
|
||
remark,
|
||
stock_in_no,
|
||
stock_in_date,
|
||
expire_date,
|
||
catalog_no,
|
||
batch_no,
|
||
manufacturer,
|
||
unit_price,
|
||
qty,
|
||
) = row
|
||
amount = (unit_price * qty).quantize(Decimal("0.01"))
|
||
|
||
material = _get_material_by_code(db, code, tenant_no)
|
||
if material:
|
||
skipped_material += 1
|
||
else:
|
||
material_svc.create_material(
|
||
db,
|
||
{
|
||
"materialCode": code,
|
||
"materialName": name,
|
||
"category": category,
|
||
"specModel": spec,
|
||
"unit": unit,
|
||
"warningQty": warning_qty,
|
||
"orderNum": order_num,
|
||
"remark": remark,
|
||
"status": "1",
|
||
},
|
||
tenant_no=tenant_no,
|
||
user_id=user_id,
|
||
)
|
||
created_material += 1
|
||
material = _get_material_by_code(db, code, tenant_no)
|
||
|
||
if not material:
|
||
print(f"跳过批次 {stock_in_no}:物料 {code} 不存在")
|
||
continue
|
||
|
||
if batch_svc.stock_in_no_exists(db, stock_in_no, tenant_no):
|
||
skipped_batch += 1
|
||
continue
|
||
|
||
batch_svc.stock_in_one(
|
||
db,
|
||
material.id,
|
||
stock_in_no=stock_in_no,
|
||
stock_in_date=stock_in_date,
|
||
expire_date=expire_date,
|
||
catalog_no=catalog_no,
|
||
batch_no=batch_no,
|
||
manufacturer=manufacturer,
|
||
unit_price=unit_price,
|
||
amount=amount,
|
||
qty=qty,
|
||
remark="测试数据初始化",
|
||
tenant_no=tenant_no,
|
||
user_id=user_id,
|
||
)
|
||
created_batch += 1
|
||
|
||
print(
|
||
f"市场物料库测试数据:物料新增 {created_material} 条、跳过 {skipped_material} 条;"
|
||
f"入库批次新增 {created_batch} 条、跳过 {skipped_batch} 条。"
|
||
)
|
||
finally:
|
||
db.close()
|
||
|
||
|
||
if __name__ == "__main__":
|
||
seed()
|