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