102 lines
3.6 KiB
Python
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'完成 ✅')
|