dy-dashboard/import_cpdygx.py
2026-10-28 11:14:17 +08:00

102 lines
3.6 KiB
Python

#!/usr/bin/env python3
"""导入产品对应关系数据,合并到产品基础表"""
import csv
import pymysql
import importlib.util
spec = importlib.util.spec_from_file_location("config", "config.py")
config_mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(config_mod)
conn = pymysql.connect(**config_mod.DB_CONFIG, cursorclass=pymysql.cursors.DictCursor)
def safe_int(val):
if not val or val.strip() in ('', '#N/A', 'NA', 'N/A'):
return 0
try:
return int(float(val.strip()))
except:
return 0
with open('tmp_csv/cpdygx.csv', 'r', encoding='utf-8') as f:
rows = list(csv.DictReader(f))
print(f'读取到 {len(rows)} 条产品对应关系')
matched = 0
new_rows = 0
with conn.cursor() as cur:
for row in rows:
product_code = row.get('货品编码', '').strip()
if not product_code:
continue
# 检查是否已存在
cur.execute("SELECT id FROM products WHERE product_code=%s", (product_code,))
existing = cur.fetchone()
# 公共字段提取
type_val = (row.get('产品类型') or '').strip()
spec_val = (row.get('规格') or '').strip()
lt = safe_int(row.get('货期', '0'))
logt = safe_int(row.get('物流时间', '0'))
sup_code = (row.get('供应商编码') or '').strip()
sup_name = (row.get('供应商模糊匹配') or '').strip()
follower = (row.get('采购跟单') or '').strip()
planner = (row.get('采购计划') or '').strip()
plat = (row.get('平台') or '').strip()
op = (row.get('运营') or '').strip()
name = (row.get('名称') or '').strip()
brand = (row.get('品牌') or '').strip()
if existing:
# 更新已有产品
updates = []
uparams = []
for col, val in [
('product_type', type_val),
('specification', spec_val),
('lead_time', lt),
('logistics_time', logt),
('supplier_code', sup_code),
('supplier_name_match', sup_name),
('procurement_follower', follower),
('procurement_planner', planner),
('platform', plat),
('operator', op),
]:
if val:
updates.append(f"{col}=%s")
uparams.append(val)
if updates:
uparams.append(product_code)
sql = f"UPDATE products SET {', '.join(updates)} WHERE product_code=%s"
cur.execute(sql, uparams)
matched += 1
else:
# 新增产品
try:
cur.execute("""
INSERT INTO products
(product_code, product_name, brand, product_type, specification,
lead_time, logistics_time, supplier_code, supplier_name_match,
procurement_follower, procurement_planner, platform, operator, import_date)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, CURDATE())
""", (
product_code, name, brand, type_val, spec_val,
lt, logt, sup_code, sup_name, follower, planner, plat, op
))
new_rows += 1
except Exception as e:
print(f" 新增失败 [{product_code}]: {e}")
conn.commit()
conn.close()
print(f'匹配更新: {matched} 条')
print(f'新增产品: {new_rows} 条')
print(f'完成 ✅')