新增判断条件,增加出入库单,进货单等,写入的时候新增厂家供货商以及产品类别
This commit is contained in:
52
导出数据.py
52
导出数据.py
@ -24,7 +24,7 @@ MAX_WORKERS = 10
|
||||
|
||||
# --- 文件配置 ---
|
||||
TEMPLATE_FILE = "产品-导入模板.csv"
|
||||
OUTPUT_FILE = "最终导出数据.xlsx"
|
||||
OUTPUT_FILE = "最终导出数据_含供应商厂家.xlsx"
|
||||
|
||||
# ===========================================
|
||||
|
||||
@ -164,32 +164,25 @@ class CRMFetcher:
|
||||
with STATS_LOCK: STATS["skipped_api_error"] += 1
|
||||
return None
|
||||
|
||||
data1 = resp1.json() # 拿到完整的 JSON 字典,例如 {'36': '0', '37': '5', ...}
|
||||
data1 = resp1.json() # 拿到完整的 JSON 字典
|
||||
|
||||
# === 修改核心逻辑 ===
|
||||
# 定义需要检查的 Key 列表
|
||||
target_keys = ["36", "37", "325", "523", "561"]
|
||||
|
||||
# 只要这些 Key 中有一个值不为 "0",就直接判定为“有关联”,立即跳过
|
||||
for key in target_keys:
|
||||
# 获取值(兼容 key 可能是 int 或 str 的情况)
|
||||
val = data1.get(key)
|
||||
if val is None:
|
||||
# 尝试用 int 获取(防止 json 解析自动转 int)
|
||||
try:
|
||||
val = data1.get(int(key))
|
||||
except:
|
||||
pass
|
||||
|
||||
# 如果获取不到,默认为 0 (即 None 视为 0)
|
||||
# 否则转字符串进行比较
|
||||
val_str = str(val) if val is not None else "0"
|
||||
|
||||
if val_str != "0":
|
||||
# 只要有一个不为0,命中规则,直接跳过,无需检查后续 Key
|
||||
with STATS_LOCK: STATS["skipped_has_relations"] += 1
|
||||
return None
|
||||
# === 逻辑结束 ===
|
||||
|
||||
# 4. 【恢复】筛选第三步:检查仓库历史 (必须为空)
|
||||
check2_params = {
|
||||
@ -207,14 +200,31 @@ class CRMFetcher:
|
||||
with STATS_LOCK: STATS["skipped_has_history"] += 1
|
||||
return None
|
||||
|
||||
# === 全部通过 ===
|
||||
# === 全部通过,提取详细数据 ===
|
||||
with STATS_LOCK:
|
||||
STATS["success"] += 1
|
||||
clean_name = re.sub(r'<[^>]+>', '', raw_name).strip()
|
||||
|
||||
# --- 数据清洗与提取 ---
|
||||
|
||||
# 1. 产品名称 (去除 HTML)
|
||||
clean_name = re.sub(r'<[^>]+>', '', str(raw_name)).strip()
|
||||
|
||||
# 2. 厂家 (cf_2128) - 直接获取文本
|
||||
manufacturer = str(item.get("cf_2128", "")).strip()
|
||||
|
||||
# 3. 供应商名称 (vendorid) - 去除 HTML 标签,提取文本
|
||||
raw_vendor = item.get("vendorid", "")
|
||||
clean_vendor = re.sub(r'<[^>]+>', '', str(raw_vendor)).strip()
|
||||
|
||||
# 4. 产品类别 (catalogid) - 根据要求,不含HTML,直接获取文本
|
||||
clean_catalog = str(item.get("catalogid", "")).strip()
|
||||
|
||||
return {
|
||||
"产品名称": clean_name,
|
||||
"产品编码": product_code
|
||||
"产品编码": product_code,
|
||||
"厂家": manufacturer,
|
||||
"供应商名称": clean_vendor,
|
||||
"产品类别": clean_catalog
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
@ -268,9 +278,23 @@ def main():
|
||||
result_dict = future.result()
|
||||
|
||||
if result_dict:
|
||||
# 动态映射:只有模板里有的列,才会被写入
|
||||
row_data = {col: None for col in columns}
|
||||
if "产品名称" in columns: row_data["产品名称"] = result_dict["产品名称"]
|
||||
if "产品编码" in columns: row_data["产品编码"] = result_dict["产品编码"]
|
||||
|
||||
# 映射关系配置 (Excel列名 : 数据字典Key)
|
||||
# 请确保您的CSV模板中包含 "厂家", "供应商名称", "产品类别" 这几列,否则不会写入
|
||||
mapping = {
|
||||
"产品名称": "产品名称",
|
||||
"产品编码": "产品编码",
|
||||
"厂家": "厂家",
|
||||
"供应商名称": "供应商名称",
|
||||
"产品类别": "产品类别"
|
||||
}
|
||||
|
||||
for col_name in columns:
|
||||
if col_name in mapping:
|
||||
row_data[col_name] = result_dict.get(mapping[col_name])
|
||||
|
||||
valid_rows.append(row_data)
|
||||
|
||||
if processed_count % 20 == 0 or processed_count == total_count:
|
||||
|
||||
Reference in New Issue
Block a user