diff --git a/导出数据.py b/导出数据.py index d045855..8395fee 100644 --- a/导出数据.py +++ b/导出数据.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: