5.18脚本更新
This commit is contained in:
@@ -63,7 +63,7 @@ def ceshi(formData) -> str:
|
||||
print("生成失败预警!")
|
||||
|
||||
|
||||
cookies_str ="marketingSESSIONID=0ac63d8a-75d0-498f-b8fe-a878331c7489; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215932094283302236249%22%2C%22first_id%22%3A%2219b11da5605dba-09ce585a75d9ef-26011a51-2073600-19b11da5606f14%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219b11da5605dba-09ce585a75d9ef-26011a51-2073600-19b11da5606f14%22%7D; erpLanguage=zh-CN; unp=15932094283302236249; un=15932094283302236249; _up=-NillNN-qyBEJ--t3vnSknvoOF52zvONuckH23g8WuVfVffDo5DQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_ATrYol1AAP_PVRv-ZNHu3M-GTc15uzFX6srOVWiusYklXFPBdmrEj9zR-69s-xcmc.; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1773372154,1773382507,1773713140,1773741734; HMACCOUNT=350677B71627FB45; prodOrg=16015140731148603474; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1773743099"
|
||||
cookies_str ="macanSESSIONID=6a135db3-5515-4acf-abf0-6c903afc9391; erpLanguage=zh-CN; prodOrg=11240984669916808518; unp=10907434497511789553; un=10907434497511789553; _up=-NillNN-qyBEJ--t3vnSknvoOFt2zfaJs8kB2nw6W-ZaXvjEoprQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_oUr4wj1gUK-_hRv-ZNHu3M-GTZ15i2EXSsquRSjOobl17KOxZsrEj9mB66_c6yTmA.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2210907434497511789553%22%2C%22first_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%7D; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1778119278,1778823299,1778838735,1779067120; HMACCOUNT=A6A0585E8C70051D; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1779067429"
|
||||
cookies_str = cookies_str.encode('utf-8').decode('latin-1')
|
||||
|
||||
cookie_dict = {item.split('=')[0]: item.split('=')[1]
|
||||
@@ -75,10 +75,10 @@ headers = {
|
||||
'origin': 'https://yunxiu.f6car.cn'
|
||||
}
|
||||
# 读取excel文件
|
||||
# data = xlrd.open_workbook(r"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\模板\套餐卡退卡.xls")
|
||||
data = xlrd.open_workbook(r"C:\Users\hp_z66\OneDrive\Desktop\钉钉文件\退卡.xls")
|
||||
data = xlrd.open_workbook(r"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\模板\套餐卡退卡.xls")
|
||||
# data = xlrd.open_workbook(r"C:\Users\hp_z66\OneDrive\Desktop\钉钉文件\退卡.xls")
|
||||
|
||||
table = data.sheet_by_index(1) # 通过索引顺序获取
|
||||
table = data.sheet_by_index(0) # 通过索引顺序获取
|
||||
|
||||
h = table.nrows
|
||||
|
||||
@@ -132,7 +132,7 @@ for i in tqdm(range(1, h)):
|
||||
"czkList": [],
|
||||
"paymentList": [
|
||||
{
|
||||
"paymentTypeId": "6932687", # 各门店不同 手动更新
|
||||
"paymentTypeId": "19080776", # 各门店不同 手动更新
|
||||
"paymentType": "现金",
|
||||
"paymentAmount": idMember2,
|
||||
"gatheringType": 0,
|
||||
|
||||
+212
-51
@@ -1,12 +1,12 @@
|
||||
import pandas as pd
|
||||
import requests
|
||||
from module import F6_module
|
||||
import time
|
||||
from tqdm import tqdm
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
import json
|
||||
import traceback
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
from datetime import datetime
|
||||
from tqdm import tqdm
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
#+
|
||||
# f6_module = F6_module()
|
||||
@@ -15,23 +15,23 @@ import traceback
|
||||
# username = "13799889725"
|
||||
# password = "Lc1234"
|
||||
# store_name = "禹城榕桦"
|
||||
module = 2
|
||||
module = 1
|
||||
#
|
||||
# res = f6_module.login_in(username, password, store_name)
|
||||
# # cookies = requests.utils.dict_from_cookiejar(res.cookies)
|
||||
|
||||
cookies = {
|
||||
'memberSESSIONID': '38d027b4-1f86-44fe-a8d2-2211fbd46394',
|
||||
'memberSESSIONID': '639e52b2-1260-47a9-8d0b-d0cd41054738',
|
||||
'erpLanguage': 'zh-CN',
|
||||
'tmall': 'false',
|
||||
'Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1775553704,1775799422,1776043595,1776153876',
|
||||
'Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1776909170,1776923216,1777270359,1777277857',
|
||||
'HMACCOUNT': 'A6A0585E8C70051D',
|
||||
'prodOrg': '11240984669918128522',
|
||||
'unp': '15851362811188895763',
|
||||
'un': '15851362811188895763',
|
||||
'_up': '-NillNN-qyBEJ--t3vnSknvoOF53yPCOts8N0no-Uu9VX_TGoZrQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_UXoIgm0QIF_PBRv-ZNHu3M-GTc1p2wFnGqpuxUiOMSmF_GORVsrEj92RzBn7rDYmA.',
|
||||
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2215851362811188895763%22%2C%22first_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%7D',
|
||||
'Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1776393475',
|
||||
'unp': '16023446149142708289',
|
||||
'un': '16023446149142708289',
|
||||
'_up': '-NillNN-qyBEJ--t3vnSknvoOF1_z_KJtMsE13I-XuVaVvnDr5DQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_QQq4Ml3wcK_PBRv-ZNHu3M-GTf3pqyEXOur-lciO8Yl1bLPBtmrEj90x3BhsH6PGY.',
|
||||
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2216023446149142708289%22%2C%22first_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219b6df76a22f46-04a98afdd2a11d8-4c657b58-1327104-19b6df76a2312c7%22%7D',
|
||||
'prodOrg': '16070511835941490720',
|
||||
'Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1777428810',
|
||||
}
|
||||
|
||||
print("cookies loaded")
|
||||
@@ -41,36 +41,98 @@ script_dir = Path(__file__).resolve().parent
|
||||
output_base = script_dir / f"请求结果_{datetime.now():%Y%m%d_%H%M%S}"
|
||||
|
||||
|
||||
df = pd.read_excel(fr"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\文件输出\车辆信息.xlsx",sheet_name="Sheet2").astype(str)
|
||||
df = pd.read_excel(fr"C:\Users\hp_z66\Desktop\客户信息.xlsx",sheet_name="客户信息").astype(str)
|
||||
|
||||
|
||||
if module == 1: # 客户信息删除
|
||||
if module == 1: # 客户信息删除
|
||||
# --- 初始化日志列表 ---
|
||||
delete_logs = [] # 删除操作日志
|
||||
query_logs = [] # 查询日志
|
||||
|
||||
# --- 1. 数据准备 ---
|
||||
df['手机号码'] = df['手机号码'].astype(str).str.strip().str.replace('.0$', '', regex=True)
|
||||
df['手机号码'].dropna(inplace=True)
|
||||
url = "https://yunxiu.f6car.cn/member/customer/listForPermission?pageSize=50000&pageNo=1" # 获取客户信息列表
|
||||
res = requests.get(url, cookies=cookies)
|
||||
row = {"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "module": module, "action": "customer_list", "url": url}
|
||||
row["status_code"] = getattr(res, "status_code", None)
|
||||
row["ok"] = getattr(res, "ok", None)
|
||||
try:
|
||||
row["response_json"] = json.dumps(res.json(), ensure_ascii=False)
|
||||
except Exception:
|
||||
# 将需要删除的手机号转为集合,查询速度更快
|
||||
phones_to_delete = set(df['手机号码'].values)
|
||||
print(f"待删除手机号数量: {len(phones_to_delete)}")
|
||||
|
||||
# --- 2. 分页查询所有客户 ---
|
||||
base_url = "https://yunxiu.f6car.cn/member/customer/listForPermission"
|
||||
id_own_org = "16070511835941490720"
|
||||
page_size = 100
|
||||
page_no = 1
|
||||
|
||||
all_customers = []
|
||||
|
||||
print("正在获取所有客户数据...")
|
||||
while True:
|
||||
params = {
|
||||
"idOwnOrg": id_own_org,
|
||||
"pageSize": page_size,
|
||||
"pageNo": page_no
|
||||
}
|
||||
try:
|
||||
row["response_text"] = res.text
|
||||
except Exception:
|
||||
row["response_text"] = None
|
||||
request_results.append(row)
|
||||
data = res.json()
|
||||
for item in tqdm(data['data']['data']):
|
||||
res = requests.get(base_url, params=params, cookies=cookies)
|
||||
query_log = {
|
||||
"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"module": module,
|
||||
"action": "customer_list_page",
|
||||
"url": res.url,
|
||||
"page_no": page_no
|
||||
}
|
||||
query_log["status_code"] = getattr(res, "status_code", None)
|
||||
query_log["ok"] = getattr(res, "ok", None)
|
||||
|
||||
data = res.json()
|
||||
query_log["response_json"] = json.dumps(data, ensure_ascii=False)
|
||||
request_results.append(query_log)
|
||||
query_logs.append(query_log)
|
||||
|
||||
# 获取当前页的数据列表
|
||||
page_data = data.get('data', {}).get('data', [])
|
||||
|
||||
# 如果当前页没有数据了,说明已经取完,跳出循环
|
||||
if not page_data:
|
||||
print(f"第 {page_no} 页没有数据了,获取完毕。")
|
||||
break
|
||||
|
||||
all_customers.extend(page_data)
|
||||
print(f"已获取第 {page_no} 页,共 {len(page_data)} 条数据。累计获取: {len(all_customers)} 条")
|
||||
|
||||
page_no += 1
|
||||
time.sleep(0.5)
|
||||
|
||||
except Exception as e:
|
||||
print(f"获取第 {page_no} 页数据时出错: {e}")
|
||||
error_log = {
|
||||
"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"module": module,
|
||||
"action": "customer_list_error",
|
||||
"page_no": page_no,
|
||||
"error": str(e)
|
||||
}
|
||||
query_logs.append(error_log)
|
||||
break
|
||||
|
||||
# --- 3. 遍历所有客户并执行删除 ---
|
||||
print(f"开始处理删除操作,共需检查 {len(all_customers)} 个客户...")
|
||||
|
||||
success_count = 0
|
||||
failed_count = 0
|
||||
|
||||
for item in tqdm(all_customers):
|
||||
try:
|
||||
idCustomer = item['idCustomer']
|
||||
phone = item['cellPhone']
|
||||
phone_clean = str(phone).strip().replace('.0', '')
|
||||
if phone in df['手机号码'].values:
|
||||
print("删除:", phone)
|
||||
url = f"https://yunxiu.f6car.cn/member/customer/{idCustomer}" # 客户信息删除url
|
||||
res = requests.delete(url, cookies=cookies) # 客户信息删除
|
||||
row = {
|
||||
|
||||
# 检查手机号是否在待删除列表中
|
||||
if phone_clean in phones_to_delete:
|
||||
print(f"\n正在删除: {phone_clean}")
|
||||
url = f"https://yunxiu.f6car.cn/member/customer/{idCustomer}"
|
||||
|
||||
# 记录删除开始
|
||||
delete_log = {
|
||||
"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"module": module,
|
||||
"action": "customer_delete",
|
||||
@@ -78,23 +140,122 @@ if module == 1: # 客户信息删除
|
||||
"idCustomer": idCustomer,
|
||||
"cellPhone": phone_clean,
|
||||
}
|
||||
row["status_code"] = getattr(res, "status_code", None)
|
||||
row["ok"] = getattr(res, "ok", None)
|
||||
|
||||
res = requests.delete(url, cookies=cookies)
|
||||
|
||||
delete_log["status_code"] = getattr(res, "status_code", None)
|
||||
delete_log["ok"] = getattr(res, "ok", None)
|
||||
|
||||
# 解析响应
|
||||
try:
|
||||
row["response_json"] = json.dumps(res.json(), ensure_ascii=False)
|
||||
response_data = res.json()
|
||||
delete_log["response_json"] = json.dumps(response_data, ensure_ascii=False)
|
||||
delete_log["response_code"] = response_data.get('code', '')
|
||||
delete_log["response_msg"] = response_data.get('msg', '')
|
||||
except Exception:
|
||||
try:
|
||||
row["response_text"] = res.text
|
||||
except Exception:
|
||||
row["response_text"] = None
|
||||
request_results.append(row)
|
||||
print(res.json(), idCustomer, phone)
|
||||
delete_log["response_text"] = res.text
|
||||
delete_log["response_code"] = ''
|
||||
delete_log["response_msg"] = '响应解析失败'
|
||||
|
||||
# 判断删除是否成功
|
||||
if res.ok and delete_log.get("response_code") == 200:
|
||||
delete_log["delete_status"] = "成功"
|
||||
success_count += 1
|
||||
print(f"✓ 成功删除: {phone_clean}")
|
||||
else:
|
||||
delete_log["delete_status"] = "失败"
|
||||
failed_count += 1
|
||||
print(f"✗ 删除失败: {phone_clean}")
|
||||
|
||||
request_results.append(delete_log)
|
||||
delete_logs.append(delete_log)
|
||||
|
||||
# 打印详细结果
|
||||
try:
|
||||
print(response_data)
|
||||
except:
|
||||
print(res.text[:200]) # 只打印前200个字符
|
||||
|
||||
time.sleep(3)
|
||||
else:
|
||||
# print("不删除:", phone)
|
||||
pass
|
||||
except:
|
||||
idCustomer = item['idCustomer']
|
||||
|
||||
except Exception as e:
|
||||
# 记录异常情况
|
||||
error_log = {
|
||||
"ts": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"module": module,
|
||||
"action": "customer_delete_error",
|
||||
"idCustomer": item.get('idCustomer', '未知'),
|
||||
"cellPhone": phone_clean if 'phone_clean' in locals() else item.get('cellPhone', '未知'),
|
||||
"error": str(e),
|
||||
"delete_status": "异常"
|
||||
}
|
||||
delete_logs.append(error_log)
|
||||
failed_count += 1
|
||||
print(f"处理客户 {item.get('idCustomer', '未知')} 时出错: {e}")
|
||||
|
||||
# --- 4. 保存日志到Excel文件 ---
|
||||
print("\n正在保存日志文件...")
|
||||
|
||||
# 创建日志目录
|
||||
log_dir = "delete_logs"
|
||||
if not os.path.exists(log_dir):
|
||||
os.makedirs(log_dir)
|
||||
|
||||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||||
|
||||
# 保存删除操作日志
|
||||
if delete_logs:
|
||||
df_delete_logs = pd.DataFrame(delete_logs)
|
||||
|
||||
# 选择要保存的列(可根据需要调整)
|
||||
columns_to_save = [
|
||||
"ts", "action", "idCustomer", "cellPhone",
|
||||
"delete_status", "status_code", "ok",
|
||||
"response_code", "response_msg", "error"
|
||||
]
|
||||
|
||||
# 只保存存在的列
|
||||
existing_columns = [col for col in columns_to_save if col in df_delete_logs.columns]
|
||||
df_delete_logs = df_delete_logs[existing_columns]
|
||||
|
||||
delete_log_file = f"{log_dir}/删除操作日志_{timestamp}.xlsx"
|
||||
df_delete_logs.to_excel(delete_log_file, index=False, engine='openpyxl')
|
||||
print(f"删除操作日志已保存到: {delete_log_file}")
|
||||
|
||||
# 保存查询日志
|
||||
if query_logs:
|
||||
df_query_logs = pd.DataFrame(query_logs)
|
||||
query_log_file = f"{log_dir}/查询日志_{timestamp}.xlsx"
|
||||
df_query_logs.to_excel(query_log_file, index=False, engine='openpyxl')
|
||||
print(f"查询日志已保存到: {query_log_file}")
|
||||
|
||||
# 保存汇总信息
|
||||
summary_data = {
|
||||
"项目": ["待删除手机号数量", "查询到的客户总数", "实际执行删除数", "删除成功", "删除失败", "执行时间"],
|
||||
"数值": [
|
||||
len(phones_to_delete),
|
||||
len(all_customers),
|
||||
success_count + failed_count,
|
||||
success_count,
|
||||
failed_count,
|
||||
datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
]
|
||||
}
|
||||
df_summary = pd.DataFrame(summary_data)
|
||||
summary_file = f"{log_dir}/删除汇总_{timestamp}.xlsx"
|
||||
df_summary.to_excel(summary_file, index=False, engine='openpyxl')
|
||||
print(f"删除汇总已保存到: {summary_file}")
|
||||
|
||||
# 打印最终统计
|
||||
print("\n" + "=" * 50)
|
||||
print("删除操作完成!")
|
||||
print(f"待删除手机号: {len(phones_to_delete)} 个")
|
||||
print(f"查询到客户总数: {len(all_customers)} 个")
|
||||
print(f"实际执行删除: {success_count + failed_count} 次")
|
||||
print(f"删除成功: {success_count} 个")
|
||||
print(f"删除失败/异常: {failed_count} 个")
|
||||
print(f"日志文件保存在: {log_dir}/ 目录下")
|
||||
print("=" * 50)
|
||||
|
||||
if module == 2: # 客户车辆信息删除
|
||||
for index, row in tqdm(df.iterrows(), total=len(df)):
|
||||
|
||||
+282
-126
@@ -9,7 +9,7 @@ token = "Bearer qygHulymo1fekJk4CIZyNKjyQAzG8CFN"
|
||||
|
||||
|
||||
class API:
|
||||
def entry_data_list(self, data: dict, replace: bool = False, max_retries: int = 20) -> Dict: # 获取多条表单数据
|
||||
def entry_data_list(self, data: dict, replace: bool = False, max_retries: int = 5) -> Dict: # 获取多条表单数据
|
||||
"""
|
||||
获取多条表单数据
|
||||
:param max_retries: 最大重试次数
|
||||
@@ -69,7 +69,7 @@ class API:
|
||||
return final_data
|
||||
|
||||
@staticmethod
|
||||
def workflow_instance_get(data: dict, max_retries: int = 20) -> dict:
|
||||
def workflow_instance_get(data: dict, max_retries: int = 5) -> dict:
|
||||
"""
|
||||
查询实例流程信息
|
||||
:param max_retries:
|
||||
@@ -185,7 +185,7 @@ class API:
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def entry_data_update(data: dict, max_retries: int = 20) -> dict: # 修改数据
|
||||
def entry_data_update(data: dict, max_retries: int = 5) -> dict: # 修改数据
|
||||
"""
|
||||
修改数据
|
||||
:param max_retries: 最大重试次数,此处设置100次
|
||||
@@ -324,14 +324,10 @@ class BossPermissionAutoApproval:
|
||||
# 在df1中查找匹配的所有功能
|
||||
matched_functions = df1[df1['权限功能'] == perm_functions] # 假设df1中有'权限功能'列
|
||||
|
||||
# 如果没有匹配项,至少添加权限功能本身
|
||||
# 如果没有匹配项,跳过这条记录
|
||||
if matched_functions.empty:
|
||||
all_data.append({
|
||||
"数据id": data_id,
|
||||
"门店编码": org_code,
|
||||
"权限功能": perm_functions,
|
||||
"一级分类": None # 或者可以设为perm本身
|
||||
})
|
||||
print(f"跳过:权限功能 '{perm_functions}' 在映射表中找不到匹配")
|
||||
continue
|
||||
else:
|
||||
# 添加所有匹配的功能
|
||||
for _, func_row in matched_functions.iterrows():
|
||||
@@ -424,6 +420,12 @@ class BossPermissionAutoApproval:
|
||||
'containTest': True,
|
||||
}
|
||||
|
||||
# 跳过空门店编码
|
||||
if not code or str(code).strip() == "" or pd.isna(code):
|
||||
print(f"跳过空门店编码")
|
||||
code_to_company_id[code] = None
|
||||
continue
|
||||
|
||||
try:
|
||||
response = requests.post(
|
||||
'https://manage.f6yc.com/hive-admin/org/getAllOrgList',
|
||||
@@ -434,8 +436,12 @@ class BossPermissionAutoApproval:
|
||||
)
|
||||
response.raise_for_status() # 检查请求是否成功
|
||||
|
||||
response_json = response.json()
|
||||
data = response_json.get("data", {})
|
||||
records = data.get("records", [])
|
||||
|
||||
# 兼容废弃与停用门店
|
||||
if len(response.json().get("data").get("records",[]))==0:
|
||||
if len(records) == 0:
|
||||
json_data['orgStatus'] = 1 # 停用
|
||||
response = requests.post(
|
||||
'https://manage.f6yc.com/hive-admin/org/getAllOrgList',
|
||||
@@ -444,7 +450,11 @@ class BossPermissionAutoApproval:
|
||||
json=json_data,
|
||||
timeout=10
|
||||
)
|
||||
if len(response.json().get("data").get("records",[]))==0:
|
||||
response_json = response.json()
|
||||
data = response_json.get("data", {})
|
||||
records = data.get("records", [])
|
||||
|
||||
if len(records) == 0:
|
||||
json_data['orgStatus'] = 2 # 废弃
|
||||
response = requests.post(
|
||||
'https://manage.f6yc.com/hive-admin/org/getAllOrgList',
|
||||
@@ -453,11 +463,22 @@ class BossPermissionAutoApproval:
|
||||
json=json_data,
|
||||
timeout=10
|
||||
)
|
||||
response_json = response.json()
|
||||
data = response_json.get("data", {})
|
||||
records = data.get("records", [])
|
||||
|
||||
# 提取company_id并存储到字典
|
||||
company_id = response.json()['data']['records'][0]['groupId']
|
||||
code_to_company_id[code] = company_id
|
||||
print(f"成功查询: 门店编码 {code} -> company_id {company_id}")
|
||||
if len(records) > 0:
|
||||
company_id = records[0].get('groupId')
|
||||
if company_id:
|
||||
code_to_company_id[code] = company_id
|
||||
print(f"成功查询: 门店编码 {code} -> company_id {company_id}")
|
||||
else:
|
||||
print(f"查询结果异常: 门店编码 {code}, groupId为空")
|
||||
code_to_company_id[code] = None
|
||||
else:
|
||||
print(f"查询失败: 门店编码 {code}, 未找到匹配的公司(可能已注销)")
|
||||
code_to_company_id[code] = None
|
||||
|
||||
except Exception as e:
|
||||
print(f"查询失败: 门店编码 {code}, 错误: {str(e)}")
|
||||
@@ -583,10 +604,20 @@ class BossPermissionAutoApproval:
|
||||
print(e)
|
||||
|
||||
def update_permission(self, df):
|
||||
"""优化版:按门店聚合,减少请求频率"""
|
||||
if df is None or df.empty:
|
||||
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
|
||||
|
||||
# 检查 cookies 数据是否存在
|
||||
if not self.get_cookies or len(self.get_cookies) == 0:
|
||||
print("错误:cookies 数据为空")
|
||||
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
|
||||
|
||||
cookie_str = self.get_cookies[0].get("_widget_1757558743223")
|
||||
if not cookie_str:
|
||||
print("错误:cookie 字符串为空")
|
||||
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
|
||||
|
||||
cookies = {}
|
||||
items = cookie_str.split('; ')
|
||||
for item in items:
|
||||
@@ -607,146 +638,271 @@ class BossPermissionAutoApproval:
|
||||
'sec-fetch-site': 'same-origin',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0',
|
||||
'x-requested-with': 'XMLHttpRequest',
|
||||
# 'cookie': 'hive-adminSESSIONID=531d2ecb-893b-471c-8cf9-e76a9dcfa789; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%224210192048793363%22%2C%22first_id%22%3A%221989d4783646e1-07c9f1a149173e8-4c657b58-2073600-1989d4783651ade%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221989d4783646e1-07c9f1a149173e8-4c657b58-2073600-1989d4783651ade%22%7D; _yg_prod=EkX_f7K7eYt61spccZtpCE7FGQAxK5DfP_4PB6A0jCrCT1LYfszIPQQqjcJjPPEZL0J2pO07cfp8VG-4XSfqBfYzvRdjXVIjT2D3fZ7X80GeyA8J24qvVma_W4j__vTE3I3zSTbNFRCPiizeGHdACpZXbli5aTRA; _oauth2_proxy=GdOm_1P1BJAoCcjMngUI40McDBpFqkL2vO_GTniJq-QGX6z9l3MieVkOjJJVJiDbEh5U-j6h3SmxsEjWuaOlfsJyWPx6muVdQOPavFTnd8TCr5-0Hz5xYOQncD1IqIGILgkejOJ3127iUvvu--dYjyqKiDwbtEGCN-Gb21Ik6hkb61C4OBppUra1XbJQ7kOXJnZdlBMe8FiMnlkYVOL8zJ1ZDLIzUcsyzq2s1ACRdVZFT8WU7JLhXKRvoiQSSm6qkCYPsuxGLudtHMeJibtvT8IGNp-jdvv8SF5gzomGhd1Abt_4YfCjiGznNbu421biQI866hEiPTjAZPai0EC-5E0VOi8NmfrBIxaqWx4ecIEGM6Z_8G-4ZWJVBNIv3v9AfUPANYR37yC-w8rOYYv9X2FV0YMkGqFoOKJWBnw4JbdxtdI-8UodAIQGUYVeJGLt6zOWWRNdzKeK57Z8X3Aki0CmLaP0SSUjoGW1pMJayMar94eQpzXszBVQxX_-_buXoDtXYg-u5q5jnQrXX3SLXC8W5JNY_sbDWm2ix7H2ezcxp2gypyyPnFMA5gRneE9wcLAWFtkb_YwT3Q_1KD4rUltqNBBV85KCOR77lxGXMYSEANPvJRW8mC9jg9ARD0JyvA1ZHWefjNU_Y_6RsKSiHrH5Cg5k8QU8skF-KgQrFUKGVfjWfpRfDO6IpR_z2lD-6qfwAshliwrFKyqJi1M91bdZuLR1dXubkgSNVXzyKkgjnGZ-4Ma9K8M3iLQwgBE1DoCRv92C-ie7sI3MmJ58vwu3OllkcOkiz7NjYzv1LKIIKTVEU7wgGe0SGKuEoRO2vRBOZcw_NUUW6s9SbwKleCXdsHkth2EFigiF9E7CGGdyw2G5qO1nx5nKIgEhhqPEBs6yq1uPEcza_BT_J5BauG_ffjpWrRR8TaoMFrmJFPdOf4JDON6FPukb4sbo_uANPG3tSpwNiefTv0E4QV7jNyNNOeGlhLxhcWyN2E6LZTOWH8lnVNUl6oLbSnrkcDGAV9Q76nebHhn5Yf6qJY4S1CceJwFlpIlooiz1bUWzt906c1UUcrFgxEydHMKbmScaG2S_dSjvfB76ZFgozWIGQiiZnd1bt8G7pc2VxMVW-szebBoeUf0HzPpzkej-ILRunt-E9Mpq-3afCOtbda0RfZWqR8cQsAt-cABPIdi4WT5v-Cg_jrjxBb8mueXbWZ5Q4gNPjsVmkfnpW5svBf8bKdChTbNyq_KOm2NV9itI6RSAVkIo6ANUBe9npnCs66v6hSQmmqjqbZ3H4GX1HiyT6VlFpTxT1xDry3tZsTZqw9lzvnT7Tin1lIxArQc0LnlZAoVbbLDJJlbfrXXcIF1kcClfXw5d_Smy_tfGOo5kYE9iTmfMOMh-8ZfhhjA43P4kMgSrYdQAvW1fHFMVQtqtHTmUiCSsKQ78Phh3-ampoI83iJooVzH34Yg21cv5wHpAJAn_wVC_Weto-bol3XXZkDHG0DWmoMGROViNkxc0vKxpMubwiG36E-U-1tQXsyhqqa6VqE_Vnn3fizk9m-ZgozyN-VlS5ALV6djm1wa-ISaLv9juHjQlfA0joY6ZLOxM6mcGsZliw9ZQ-mhiy1C9c3vOuPLW3ZWRCeJUX96BaA-5am-3Z3bjK1mp391cXle3idTEPFlMCKNVUUANNFwxeH0W6CKL4rcRkgiEnhWuBEADySvpfCFuYxojH2uOSfS8mCERpZ7KNEgPCIVs9VumX68w8QonxClCQLWG6JRAmfmCfYKi6UeeWWvsqQDPqQiMkowThSv_TmLgFh5baZsB9bJwFqojc6pOzM3ogHuHuY_67VsA8E_cmeeWvBzqWBV9umeciWq5fbC3Cqe_fAsHxtKb39D2vQyqWVjRk9qukzxBmcd8bXzKUV1r6lg0QgVm2PG8dyfAV_ymsR6Y4b_gtPWcVx83J5H8RgN43ofGXwdUFsqi5xnc_Bf-KO_psGgYImKnqU25ftV8eX0ss0K7jsyhafsWDwPSg2k7qHPNK2AbtLGZIQcRcjXe7efTICAeHOn9AJ4vUbU1UpO53WsY8gic1I7tEH0LKkg7Pz7rR7drDuYkDg200gXiO7y5FXl1dqGa-tilF9IL57hx3UcuM7mLZa5zU0bPprhmCelSA4CwG8la5yGUdpvBqBSz22-X-DgkrwCzLpchi_LnpAkx2_jza2yTO5PtCSjn7hFbvuNFm6Neb_AuRg6-TpolwGfl-Bu3nUySmnCoCH8IvAoA4BpXzFH7o21cAlEHdKAndnoEljtyoyxa6DAZoG5Osttn71tbudyEFh26eOiA-wGAbpHJnsg3Slp35gicLgAepJ8oDFAaqdhtyP7-jizBCCB-Bt29hqvWwH22J30wgoXKnJgjFl6F9L4hxmvRi2QHWKV35ITGA1JqrS0VayT9DIrbTUKoRIKzTme0Z5deBxB8YFmiINAEqdS86PCbQi28-tK2RYuvFJ4O_RWxrMxD1fnDhbPWhnDGiY9dGmDjPgWB70vtIVaikGr_M_Bwm_3oa7ec00eTaSnjmX1qzLCLdvX_Ie6hBFgDii7ZU-KrQndqcbLYU9KtkI2yVwXWMihlLzdxNukzuxnU4IK334Mtebpz6ykLX8e8UfvbHJx4D_JgQQKB7Gfoxb-O02owUY6bvR-tgTp8n9-Mic9osDWeBgmmPHmvyNjcWbi4SXdBSVVIML12iS7qvjHlekG01r_EalttUe000hU1MLqE_Kd1XcINRq0vZaed5m6fXEUVcPchVYN9GC7e36HMo7ZlgE0fGNsWY6pFr-seXI2_23UJW9l_edhMqpvJJh5CAJYMRQ-Rtvzfbe8n|1757554489|NPRgqlI6umo48ScNrekwcxSuAvgFZbVOWWnkmHcAJww=',
|
||||
}
|
||||
|
||||
result_list = []
|
||||
df.to_csv(fr"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\文件输出\门店含id权限功能映射.csv", index=False)
|
||||
|
||||
print(f"=== update_permission 调试信息 ===")
|
||||
print(f"原始数据行数: {len(df)}")
|
||||
print(f"数据列名: {df.columns.tolist()}")
|
||||
|
||||
if "开关" not in df.columns:
|
||||
print("错误:数据中没有'开关'列")
|
||||
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
|
||||
df.dropna(subset=['开关'], inplace=True)
|
||||
for index, row in df.iterrows():
|
||||
print(row)
|
||||
if row["company_id"] is None:
|
||||
continue
|
||||
if row["门店编码"] == "空门店编码" or row["门店编码"] is None:
|
||||
result_list.append(
|
||||
{
|
||||
|
||||
df_filtered = df.dropna(subset=['开关']).copy()
|
||||
print(f"过滤空开关后的数据行数: {len(df_filtered)}")
|
||||
|
||||
if len(df_filtered) == 0:
|
||||
print("警告:过滤后没有数据需要处理")
|
||||
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
|
||||
|
||||
# ========== 核心优化:按company_id聚合 ==========
|
||||
# 过滤掉company_id为空的行
|
||||
df_valid = df_filtered[df_filtered['company_id'].notna()].copy()
|
||||
|
||||
if len(df_valid) == 0:
|
||||
print("没有有效的company_id,跳过所有处理")
|
||||
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
|
||||
|
||||
# 按 company_id 分组
|
||||
grouped = df_valid.groupby('company_id')
|
||||
|
||||
print(f"开始处理 {len(grouped)} 个门店的权限...")
|
||||
|
||||
for company_id, group in grouped:
|
||||
print(f"\n===== 处理门店 company_id: {company_id},共 {len(group)} 条权限 =====")
|
||||
|
||||
# 1. 获取当前门店的菜单状态(只请求一次)
|
||||
params = {'groupId': company_id}
|
||||
|
||||
try:
|
||||
response = requests.get(
|
||||
'https://manage.f6yc.com/hive-admin/company/role/getGroupAdminRoleMenusScope',
|
||||
params=params,
|
||||
cookies=cookies,
|
||||
headers=headers,
|
||||
timeout=10
|
||||
)
|
||||
|
||||
if response.status_code != 200:
|
||||
print(f"错误:获取菜单状态失败,状态码: {response.status_code}")
|
||||
# 该门店所有权限都标记为失败
|
||||
for _, row in group.iterrows():
|
||||
result_list.append({
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": f"获取菜单状态失败 {response.status_code}",
|
||||
})
|
||||
continue # 跳过这个门店,处理下一个
|
||||
|
||||
response_json = response.json()
|
||||
data = response_json.get("data")
|
||||
if not data:
|
||||
# 可能是cookie过期,发送预警
|
||||
payload = {
|
||||
"api_key": "6694d3c4fcb69ca9a111a6c4",
|
||||
"entry_id": "68cb745753594c2570ba4f70",
|
||||
"data": {
|
||||
"_widget_1758164058473": {"value": "Boss权限自动审批"},
|
||||
"_widget_1758164058474": {"value": f"cookies信息失效,请更新cookie"}
|
||||
},
|
||||
"is_start_workflow": "true"
|
||||
}
|
||||
API().data_batch_create(payload)
|
||||
|
||||
# 标记所有行为cookie失效
|
||||
for _, row in group.iterrows():
|
||||
result_list.append({
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": "cookies失效",
|
||||
})
|
||||
continue
|
||||
|
||||
menus_list = data.get("menus", [])
|
||||
print(f"菜单项数: {len(menus_list)}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"获取菜单状态异常: {str(e)}")
|
||||
for _, row in group.iterrows():
|
||||
result_list.append({
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": "空门店编码跳过执行",
|
||||
}
|
||||
)
|
||||
"状态": f"获取菜单异常: {str(e)}",
|
||||
})
|
||||
continue
|
||||
if row["一级分类"] is not None:
|
||||
params = {
|
||||
'groupId': row["company_id"],
|
||||
}
|
||||
|
||||
response = requests.get(
|
||||
'https://manage.f6yc.com/hive-admin/company/role/getGroupAdminRoleMenusScope',
|
||||
params=params,
|
||||
cookies=cookies,
|
||||
headers=headers,
|
||||
)
|
||||
# print(response.json())
|
||||
if response.status_code == 200:
|
||||
pkId = response.json().get("data").get("role").get("id")
|
||||
user_name = response.json().get("data").get("role").get("name")
|
||||
menus_list = response.json().get("data").get("menus")
|
||||
for menu in menus_list:
|
||||
if menu.get("name") == row["一级分类"]:
|
||||
nodes_list = menu.get("nodes")
|
||||
if row["开关"] == "开": # 确保一级权限为开
|
||||
menu["isChecked"] = 1
|
||||
# 2. 在同一个menus_list上应用该门店的所有权限变更
|
||||
has_modification = False # 标记是否有实际修改
|
||||
|
||||
for node in nodes_list:
|
||||
if node.get("name") == row["二级分类"]:
|
||||
child_nodes_list = node.get("nodes", [])
|
||||
print(row["二级分类"], row["权限"], row["开关"])
|
||||
if row["开关"] == "开": # 确保二级权限为开
|
||||
for _, row in group.iterrows():
|
||||
print(f" 应用权限: {row['一级分类']} > {row['二级分类']} > {row['权限']} = {row['开关']}")
|
||||
|
||||
if row['一级分类'] is None:
|
||||
continue
|
||||
|
||||
for menu in menus_list:
|
||||
if menu.get("name") == row["一级分类"]:
|
||||
# 处理一级分类
|
||||
if row["开关"] == "开":
|
||||
menu["isChecked"] = 1
|
||||
has_modification = True
|
||||
print(f" 开启一级分类: {row['一级分类']}")
|
||||
|
||||
for node in menu.get("nodes", []):
|
||||
if node.get("name") == row["二级分类"]:
|
||||
# 处理二级分类
|
||||
if row["开关"] == "开":
|
||||
if node.get("isChecked") != 1:
|
||||
node["isChecked"] = 1
|
||||
has_modification = True
|
||||
print(f" 开启二级分类: {row['二级分类']}")
|
||||
|
||||
if row["权限"] != "无":
|
||||
# 处理有三级权限的情况
|
||||
for child_node in child_nodes_list:
|
||||
if child_node.get("name") == row["权限"]:
|
||||
if row["开关"] == "开":
|
||||
print("更新权限:", child_node["id"], "为开")
|
||||
child_node["isChecked"] = 1
|
||||
else:
|
||||
child_node["isChecked"] = 0
|
||||
break # 找到对应的权限后跳出循环
|
||||
else:
|
||||
print(row["二级分类"], row["权限"], row["开关"], 11111111111)
|
||||
# 处理只有二级权限的情况
|
||||
if row["开关"] == "开":
|
||||
node["isChecked"] = 1
|
||||
else:
|
||||
node["isChecked"] = 0
|
||||
# 同时更新所有子节点的状态
|
||||
for child_node in child_nodes_list:
|
||||
child_node["isChecked"] = node["isChecked"]
|
||||
if row["权限"] != "无":
|
||||
# 处理三级权限
|
||||
for child_node in node.get("nodes", []):
|
||||
if child_node.get("name") == row["权限"]:
|
||||
new_value = 1 if row["开关"] == "开" else 0
|
||||
if child_node.get("isChecked") != new_value:
|
||||
child_node["isChecked"] = new_value
|
||||
has_modification = True
|
||||
print(f" {'开启' if new_value else '关闭'}三级权限: {row['权限']}")
|
||||
break
|
||||
else:
|
||||
# 无三级权限时,统一设置二级及子节点
|
||||
new_value = 1 if row["开关"] == "开" else 0
|
||||
if node.get("isChecked") != new_value:
|
||||
node["isChecked"] = new_value
|
||||
has_modification = True
|
||||
for child_node in node.get("nodes", []):
|
||||
if child_node.get("isChecked") != new_value:
|
||||
child_node["isChecked"] = new_value
|
||||
has_modification = True
|
||||
break # 找到匹配的二级分类后跳出
|
||||
break # 找到匹配的一级分类后跳出
|
||||
|
||||
# 查询isChecked为1的id
|
||||
checked_ids = []
|
||||
# 3. 如果没有实际修改,直接标记该门店所有权限为成功
|
||||
if not has_modification:
|
||||
print(f" 门店 {company_id} 无实际权限变更,跳过更新请求")
|
||||
for _, row in group.iterrows():
|
||||
result_list.append({
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": "无需更新(权限已生效)",
|
||||
})
|
||||
continue
|
||||
|
||||
def collect_checked_ids(items):
|
||||
for item in items:
|
||||
if item.get("isChecked") == 1:
|
||||
checked_ids.append(str(item.get("id")))
|
||||
if "nodes" in item:
|
||||
collect_checked_ids(item["nodes"])
|
||||
# 4. 收集所有选中ID并发送更新请求(只发送一次)
|
||||
checked_ids = []
|
||||
|
||||
collect_checked_ids(menus_list)
|
||||
def collect_checked_ids(items):
|
||||
for item in items:
|
||||
if item.get("isChecked") == 1:
|
||||
checked_ids.append(str(item.get("id")))
|
||||
if "nodes" in item:
|
||||
collect_checked_ids(item["nodes"])
|
||||
|
||||
checked_ids_str = ",".join(checked_ids)
|
||||
print(f"更新后选中项的ID: {checked_ids_str}")
|
||||
collect_checked_ids(menus_list)
|
||||
checked_ids_str = ",".join(checked_ids)
|
||||
print(f" 选中ID数量: {len(checked_ids)}")
|
||||
|
||||
new_json_data = {
|
||||
"pkId": pkId,
|
||||
"name": user_name,
|
||||
'isValid': 1,
|
||||
"menuStr": checked_ids_str,
|
||||
}
|
||||
# 5. 发送POST更新请求
|
||||
role = data.get("role", {})
|
||||
pk_id = role.get("id")
|
||||
user_name = role.get("name")
|
||||
|
||||
if not pk_id or not user_name:
|
||||
print(f" 错误:无法获取pkId或user_name")
|
||||
for _, row in group.iterrows():
|
||||
result_list.append({
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": "响应数据异常",
|
||||
})
|
||||
continue
|
||||
|
||||
new_json_data = {
|
||||
"pkId": pk_id,
|
||||
"name": user_name,
|
||||
'isValid': 1,
|
||||
"menuStr": checked_ids_str,
|
||||
}
|
||||
|
||||
# 添加重试机制
|
||||
max_retries = 3
|
||||
update_success = False
|
||||
update_error_msg = ""
|
||||
|
||||
for retry in range(max_retries):
|
||||
try:
|
||||
response = requests.post(
|
||||
'https://manage.f6yc.com/hive-admin/company/role/update',
|
||||
cookies=cookies,
|
||||
headers=headers,
|
||||
json=new_json_data,
|
||||
timeout=30 # 增加超时时间,因为参数可能很长
|
||||
)
|
||||
time.sleep(0.5)
|
||||
print(f"请求结果:{response.json()}")
|
||||
if response.json().get("code", 1000) == 200:
|
||||
result_list.append(
|
||||
{
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": "更新成功",
|
||||
}
|
||||
)
|
||||
result = response.json()
|
||||
print(f" 更新请求结果 (重试{retry + 1}/{max_retries}): {result}")
|
||||
|
||||
if result.get("code") == 200:
|
||||
update_success = True
|
||||
break
|
||||
elif result.get("code") == 500:
|
||||
update_error_msg = f"服务器内部错误 (500)"
|
||||
if retry < max_retries - 1:
|
||||
wait_time = (retry + 1) * 2 # 递增等待时间:2s, 4s, 6s
|
||||
print(f" 500错误,{wait_time}秒后重试...")
|
||||
time.sleep(wait_time)
|
||||
else:
|
||||
result_list.append(
|
||||
{
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": "更新失败",
|
||||
}
|
||||
)
|
||||
else:
|
||||
payload = {
|
||||
"api_key": "6694d3c4fcb69ca9a111a6c4",
|
||||
"entry_id": "68cb745753594c2570ba4f70",
|
||||
"data": {"_widget_1758164058473": {"value": "Boss权限自动审批"}, # 预警类型
|
||||
"_widget_1758164058474": {"value": f"cookies信息失效,请更新cookie"}
|
||||
# 预警内容
|
||||
},
|
||||
"is_start_workflow": "true"
|
||||
}
|
||||
res = API().data_batch_create(payload)
|
||||
update_error_msg = f"更新失败 code={result.get('code')}: {result.get('message')}"
|
||||
break
|
||||
|
||||
except Exception as e:
|
||||
update_error_msg = f"更新异常: {str(e)}"
|
||||
if retry < max_retries - 1:
|
||||
wait_time = (retry + 1) * 2
|
||||
print(f" 请求异常,{wait_time}秒后重试...")
|
||||
time.sleep(wait_time)
|
||||
|
||||
# 6. 记录该门店所有权限的结果
|
||||
status = "更新成功" if update_success else f"更新失败: {update_error_msg}"
|
||||
|
||||
for _, row in group.iterrows():
|
||||
result_list.append({
|
||||
"数据id": row["数据id"],
|
||||
"门店编码": row["门店编码"],
|
||||
"一级分类": row["一级分类"],
|
||||
"二级分类": row["二级分类"],
|
||||
"权限": row["权限"],
|
||||
"开关": row["开关"],
|
||||
"状态": status,
|
||||
})
|
||||
|
||||
# 7. 门店之间添加延时,避免请求过快
|
||||
time.sleep(1)
|
||||
|
||||
result_df = pd.DataFrame(result_list)
|
||||
return result_df
|
||||
|
||||
|
||||
+290
-177
@@ -6,8 +6,8 @@
|
||||
"metadata": {
|
||||
"collapsed": true,
|
||||
"ExecuteTime": {
|
||||
"end_time": "2026-01-29T03:44:29.227796600Z",
|
||||
"start_time": "2026-01-29T03:44:28.870218900Z"
|
||||
"end_time": "2026-04-22T07:31:42.910929700Z",
|
||||
"start_time": "2026-04-22T07:31:37.243473300Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
@@ -37,8 +37,8 @@
|
||||
"\n",
|
||||
"# 示例:读取 Excel 文件\n",
|
||||
"def process_excel_file(file_path):\n",
|
||||
" df = pd.read_excel(file_path, engine='openpyxl') # 支持 .xlsx\n",
|
||||
" # df = pd.read_excel(file_path, engine='xlrd') # 支持 .xlsx\n",
|
||||
" # df = pd.read_excel(file_path, engine='openpyxl') # 支持 .xlsx\n",
|
||||
" df = pd.read_excel(file_path, engine='xlrd') # 支持 .xlsx\n",
|
||||
" print(\"原始数据:\")\n",
|
||||
" print(df.head())\n",
|
||||
"\n",
|
||||
@@ -68,40 +68,81 @@
|
||||
" print(\"\\n已保存清洗后的文件:cleaned_output.csv\")\n",
|
||||
" return df_cleaned\n",
|
||||
"\n",
|
||||
"file_path = fr\"C:\\Users\\hp_z66\\Desktop\\钉钉文件\\储值卡信息匹配后文件.xlsx\"\n",
|
||||
"file_path = fr\"C:\\Users\\hp_z66\\OneDrive\\Desktop\\钉钉文件\\客户车辆信息老六_可导入.xls\"\n",
|
||||
"process_excel_file(file_path)"
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"原始数据:\n",
|
||||
" 客户姓名 性别 车牌号 手机号码 标签 VIN码 车身颜色 备注 车辆所有人 发动机号 \\\n",
|
||||
"0 1 NaN 豫S38065 13174646666 NaN NaN NaN NaN NaN NaN \n",
|
||||
"1 先生 NaN 黑A92RS8 15004617481 NaN LMGAA1C51F1096393 NaN NaN NaN NaN \n",
|
||||
"2 先生 NaN 黑F05145 15244670275 NaN LSJW56761KG020310 NaN NaN NaN NaN \n",
|
||||
"3 先生 NaN 黑AV101M 18904650318 NaN LFV3A23C6G3051709 NaN NaN NaN NaN \n",
|
||||
"4 1 NaN 黑A1G3U7 13069966234 NaN NaN NaN NaN NaN NaN \n",
|
||||
"\n",
|
||||
" ... 会员号 可用积分 累计获取积分 专属门店 专属顾问 客户推广员工 注册日期 发证日期 车辆来源 车辆推广员工 \n",
|
||||
"0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"1 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"2 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"3 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"4 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"\n",
|
||||
"[5 rows x 37 columns]\n",
|
||||
"\n",
|
||||
"清洗后数据(已移除 4 字节字符):\n",
|
||||
" 客户姓名 性别 车牌号 手机号码 标签 VIN码 车身颜色 备注 车辆所有人 发动机号 \\\n",
|
||||
"0 1 NaN 豫S38065 13174646666 NaN NaN NaN NaN NaN NaN \n",
|
||||
"1 先生 NaN 黑A92RS8 15004617481 NaN LMGAA1C51F1096393 NaN NaN NaN NaN \n",
|
||||
"2 先生 NaN 黑F05145 15244670275 NaN LSJW56761KG020310 NaN NaN NaN NaN \n",
|
||||
"3 先生 NaN 黑AV101M 18904650318 NaN LFV3A23C6G3051709 NaN NaN NaN NaN \n",
|
||||
"4 1 NaN 黑A1G3U7 13069966234 NaN NaN NaN NaN NaN NaN \n",
|
||||
"\n",
|
||||
" ... 会员号 可用积分 累计获取积分 专属门店 专属顾问 客户推广员工 注册日期 发证日期 车辆来源 车辆推广员工 \n",
|
||||
"0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"1 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"2 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"3 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"4 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"\n",
|
||||
"[5 rows x 37 columns]\n",
|
||||
"\n",
|
||||
"已保存清洗后的文件:cleaned_output.xlsx\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
" 卡名称 关联模板ID 持卡人姓名 持卡人手机号 绑定车牌号 卡号 可用门店 \\\n",
|
||||
"0 储值卡 12147360560970768475 刘斌 18299152198 新A9KW77 18299152198 全部 \n",
|
||||
"1 储值卡 12147360560970768475 张怀彬 13319992628 新F54991 8883939 全部 \n",
|
||||
"2 储值卡 12147360560970768475 刘君君 15292780801 新F1861P 8883933 全部 \n",
|
||||
"3 储值卡 12147360560970768475 热那提 18699990750 新FD2D08 18699990750 全部 \n",
|
||||
"4 储值卡 12147360560970768475 安斌 13779519897 新F9010Q 13779519897 全部 \n",
|
||||
".. ... ... ... ... ... ... ... \n",
|
||||
"721 储值卡 12147360560970768475 陈轲 13095118455 新A125YK 9990223 全部 \n",
|
||||
"722 储值卡 12147360560970768475 姜海南 18999586345 新F7V551 9990232 全部 \n",
|
||||
"723 储值卡 12147360560970768475 买力侧 13679950078 新F16J72 13679950078 全部 \n",
|
||||
"724 储值卡 12147360560970768475 王子煜 15109991005 新FF32122 8883965 全部 \n",
|
||||
"725 储值卡 12147360560970768475 贵小军 18999588628 新F6616L 8889762 全部 \n",
|
||||
" 客户姓名 性别 车牌号 手机号码 标签 VIN码 车身颜色 备注 车辆所有人 \\\n",
|
||||
"0 1 NaN 豫S38065 13174646666 NaN NaN NaN NaN NaN \n",
|
||||
"1 先生 NaN 黑A92RS8 15004617481 NaN LMGAA1C51F1096393 NaN NaN NaN \n",
|
||||
"2 先生 NaN 黑F05145 15244670275 NaN LSJW56761KG020310 NaN NaN NaN \n",
|
||||
"3 先生 NaN 黑AV101M 18904650318 NaN LFV3A23C6G3051709 NaN NaN NaN \n",
|
||||
"4 1 NaN 黑A1G3U7 13069966234 NaN NaN NaN NaN NaN \n",
|
||||
"... ... .. ... ... .. ... ... .. ... \n",
|
||||
"9917 陈双 NaN 黑AQ293H 13019712562 NaN LSYBCAAA4CW070101 NaN NaN NaN \n",
|
||||
"9918 奇瑞 NaN 黑AG21X5 18346069680 NaN LS5A3DBE5GA136962 NaN NaN NaN \n",
|
||||
"9919 奇瑞 NaN 黑A8DC02 18346069680 NaN LVVDA11A3AD070555 NaN NaN NaN \n",
|
||||
"9920 戴洪太 NaN 黑A579B1 18346262816 NaN LSVGX46R7E2049499 NaN NaN NaN \n",
|
||||
"9921 高先生 NaN 黑AH2R02 13796072678 NaN LGBP12E04CY105879 NaN NaN NaN \n",
|
||||
"\n",
|
||||
" 卡有效期 剩余面额 剩余实额 服务顾问 售卡门店 售卡日期 卡说明 使用条款 \n",
|
||||
"0 2025-03-24 200.0 200.0 NaN 伊宁车友 2024-03-24 NaN NaN \n",
|
||||
"1 2025-02-12 10.0 10.0 NaN 伊宁车友 2021-05-07 NaN NaN \n",
|
||||
"2 2024-05-09 260.0 260.0 NaN 伊宁车友 2021-03-28 NaN NaN \n",
|
||||
"3 2026-01-25 500.0 500.0 NaN 伊宁车友 2021-01-25 NaN NaN \n",
|
||||
"4 2025-12-31 29.8 29.8 NaN 伊宁车友 2020-12-30 NaN NaN \n",
|
||||
".. ... ... ... ... ... ... ... ... \n",
|
||||
"721 2026-03-06 334.0 334.0 NaN 伊宁车友 2017-10-29 NaN NaN \n",
|
||||
"722 2026-07-17 430.0 430.0 NaN 伊宁车友 2017-04-09 NaN NaN \n",
|
||||
"723 2027-12-14 200.0 0.0 NaN 伊宁车友 2022-12-14 NaN NaN \n",
|
||||
"724 2027-07-02 1000.0 0.0 NaN 伊宁车友 2022-07-02 NaN NaN \n",
|
||||
"725 2026-11-24 230.0 0.0 NaN 伊宁车友 2021-05-22 NaN NaN \n",
|
||||
" 发动机号 ... 会员号 可用积分 累计获取积分 专属门店 专属顾问 客户推广员工 注册日期 发证日期 车辆来源 车辆推广员工 \n",
|
||||
"0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"1 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"2 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"3 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"4 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"... ... ... .. ... ... ... ... ... ... ... ... ... \n",
|
||||
"9917 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"9918 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"9919 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"9920 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"9921 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
|
||||
"\n",
|
||||
"[726 rows x 15 columns]"
|
||||
"[9922 rows x 37 columns]"
|
||||
],
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
@@ -122,111 +163,147 @@
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>卡名称</th>\n",
|
||||
" <th>关联模板ID</th>\n",
|
||||
" <th>持卡人姓名</th>\n",
|
||||
" <th>持卡人手机号</th>\n",
|
||||
" <th>绑定车牌号</th>\n",
|
||||
" <th>卡号</th>\n",
|
||||
" <th>可用门店</th>\n",
|
||||
" <th>卡有效期</th>\n",
|
||||
" <th>剩余面额</th>\n",
|
||||
" <th>剩余实额</th>\n",
|
||||
" <th>服务顾问</th>\n",
|
||||
" <th>售卡门店</th>\n",
|
||||
" <th>售卡日期</th>\n",
|
||||
" <th>卡说明</th>\n",
|
||||
" <th>使用条款</th>\n",
|
||||
" <th>客户姓名</th>\n",
|
||||
" <th>性别</th>\n",
|
||||
" <th>车牌号</th>\n",
|
||||
" <th>手机号码</th>\n",
|
||||
" <th>标签</th>\n",
|
||||
" <th>VIN码</th>\n",
|
||||
" <th>车身颜色</th>\n",
|
||||
" <th>备注</th>\n",
|
||||
" <th>车辆所有人</th>\n",
|
||||
" <th>发动机号</th>\n",
|
||||
" <th>...</th>\n",
|
||||
" <th>会员号</th>\n",
|
||||
" <th>可用积分</th>\n",
|
||||
" <th>累计获取积分</th>\n",
|
||||
" <th>专属门店</th>\n",
|
||||
" <th>专属顾问</th>\n",
|
||||
" <th>客户推广员工</th>\n",
|
||||
" <th>注册日期</th>\n",
|
||||
" <th>发证日期</th>\n",
|
||||
" <th>车辆来源</th>\n",
|
||||
" <th>车辆推广员工</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>储值卡</td>\n",
|
||||
" <td>12147360560970768475</td>\n",
|
||||
" <td>刘斌</td>\n",
|
||||
" <td>18299152198</td>\n",
|
||||
" <td>新A9KW77</td>\n",
|
||||
" <td>18299152198</td>\n",
|
||||
" <td>全部</td>\n",
|
||||
" <td>2025-03-24</td>\n",
|
||||
" <td>200.0</td>\n",
|
||||
" <td>200.0</td>\n",
|
||||
" <td>1</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>豫S38065</td>\n",
|
||||
" <td>13174646666</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>伊宁车友</td>\n",
|
||||
" <td>2024-03-24</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>储值卡</td>\n",
|
||||
" <td>12147360560970768475</td>\n",
|
||||
" <td>张怀彬</td>\n",
|
||||
" <td>13319992628</td>\n",
|
||||
" <td>新F54991</td>\n",
|
||||
" <td>8883939</td>\n",
|
||||
" <td>全部</td>\n",
|
||||
" <td>2025-02-12</td>\n",
|
||||
" <td>10.0</td>\n",
|
||||
" <td>10.0</td>\n",
|
||||
" <td>先生</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>黑A92RS8</td>\n",
|
||||
" <td>15004617481</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>LMGAA1C51F1096393</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>伊宁车友</td>\n",
|
||||
" <td>2021-05-07</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>储值卡</td>\n",
|
||||
" <td>12147360560970768475</td>\n",
|
||||
" <td>刘君君</td>\n",
|
||||
" <td>15292780801</td>\n",
|
||||
" <td>新F1861P</td>\n",
|
||||
" <td>8883933</td>\n",
|
||||
" <td>全部</td>\n",
|
||||
" <td>2024-05-09</td>\n",
|
||||
" <td>260.0</td>\n",
|
||||
" <td>260.0</td>\n",
|
||||
" <td>先生</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>黑F05145</td>\n",
|
||||
" <td>15244670275</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>LSJW56761KG020310</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>伊宁车友</td>\n",
|
||||
" <td>2021-03-28</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>储值卡</td>\n",
|
||||
" <td>12147360560970768475</td>\n",
|
||||
" <td>热那提</td>\n",
|
||||
" <td>18699990750</td>\n",
|
||||
" <td>新FD2D08</td>\n",
|
||||
" <td>18699990750</td>\n",
|
||||
" <td>全部</td>\n",
|
||||
" <td>2026-01-25</td>\n",
|
||||
" <td>500.0</td>\n",
|
||||
" <td>500.0</td>\n",
|
||||
" <td>先生</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>黑AV101M</td>\n",
|
||||
" <td>18904650318</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>LFV3A23C6G3051709</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>伊宁车友</td>\n",
|
||||
" <td>2021-01-25</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>储值卡</td>\n",
|
||||
" <td>12147360560970768475</td>\n",
|
||||
" <td>安斌</td>\n",
|
||||
" <td>13779519897</td>\n",
|
||||
" <td>新F9010Q</td>\n",
|
||||
" <td>13779519897</td>\n",
|
||||
" <td>全部</td>\n",
|
||||
" <td>2025-12-31</td>\n",
|
||||
" <td>29.8</td>\n",
|
||||
" <td>29.8</td>\n",
|
||||
" <td>1</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>黑A1G3U7</td>\n",
|
||||
" <td>13069966234</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>伊宁车友</td>\n",
|
||||
" <td>2020-12-30</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
@@ -247,128 +324,164 @@
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>721</th>\n",
|
||||
" <td>储值卡</td>\n",
|
||||
" <td>12147360560970768475</td>\n",
|
||||
" <td>陈轲</td>\n",
|
||||
" <td>13095118455</td>\n",
|
||||
" <td>新A125YK</td>\n",
|
||||
" <td>9990223</td>\n",
|
||||
" <td>全部</td>\n",
|
||||
" <td>2026-03-06</td>\n",
|
||||
" <td>334.0</td>\n",
|
||||
" <td>334.0</td>\n",
|
||||
" <th>9917</th>\n",
|
||||
" <td>陈双</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>黑AQ293H</td>\n",
|
||||
" <td>13019712562</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>LSYBCAAA4CW070101</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>伊宁车友</td>\n",
|
||||
" <td>2017-10-29</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>722</th>\n",
|
||||
" <td>储值卡</td>\n",
|
||||
" <td>12147360560970768475</td>\n",
|
||||
" <td>姜海南</td>\n",
|
||||
" <td>18999586345</td>\n",
|
||||
" <td>新F7V551</td>\n",
|
||||
" <td>9990232</td>\n",
|
||||
" <td>全部</td>\n",
|
||||
" <td>2026-07-17</td>\n",
|
||||
" <td>430.0</td>\n",
|
||||
" <td>430.0</td>\n",
|
||||
" <th>9918</th>\n",
|
||||
" <td>奇瑞</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>黑AG21X5</td>\n",
|
||||
" <td>18346069680</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>LS5A3DBE5GA136962</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>伊宁车友</td>\n",
|
||||
" <td>2017-04-09</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>723</th>\n",
|
||||
" <td>储值卡</td>\n",
|
||||
" <td>12147360560970768475</td>\n",
|
||||
" <td>买力侧</td>\n",
|
||||
" <td>13679950078</td>\n",
|
||||
" <td>新F16J72</td>\n",
|
||||
" <td>13679950078</td>\n",
|
||||
" <td>全部</td>\n",
|
||||
" <td>2027-12-14</td>\n",
|
||||
" <td>200.0</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" <th>9919</th>\n",
|
||||
" <td>奇瑞</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>黑A8DC02</td>\n",
|
||||
" <td>18346069680</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>LVVDA11A3AD070555</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>伊宁车友</td>\n",
|
||||
" <td>2022-12-14</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>724</th>\n",
|
||||
" <td>储值卡</td>\n",
|
||||
" <td>12147360560970768475</td>\n",
|
||||
" <td>王子煜</td>\n",
|
||||
" <td>15109991005</td>\n",
|
||||
" <td>新FF32122</td>\n",
|
||||
" <td>8883965</td>\n",
|
||||
" <td>全部</td>\n",
|
||||
" <td>2027-07-02</td>\n",
|
||||
" <td>1000.0</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" <th>9920</th>\n",
|
||||
" <td>戴洪太</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>黑A579B1</td>\n",
|
||||
" <td>18346262816</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>LSVGX46R7E2049499</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>伊宁车友</td>\n",
|
||||
" <td>2022-07-02</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>725</th>\n",
|
||||
" <td>储值卡</td>\n",
|
||||
" <td>12147360560970768475</td>\n",
|
||||
" <td>贵小军</td>\n",
|
||||
" <td>18999588628</td>\n",
|
||||
" <td>新F6616L</td>\n",
|
||||
" <td>8889762</td>\n",
|
||||
" <td>全部</td>\n",
|
||||
" <td>2026-11-24</td>\n",
|
||||
" <td>230.0</td>\n",
|
||||
" <td>0.0</td>\n",
|
||||
" <th>9921</th>\n",
|
||||
" <td>高先生</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>黑AH2R02</td>\n",
|
||||
" <td>13796072678</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>LGBP12E04CY105879</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>伊宁车友</td>\n",
|
||||
" <td>2021-05-22</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"<p>726 rows × 15 columns</p>\n",
|
||||
"<p>9922 rows × 37 columns</p>\n",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"execution_count": 7
|
||||
"execution_count": 2
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"display_name": "F6+宜搭+其它",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 2
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython2",
|
||||
"version": "2.7.6"
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.13.11"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
||||
+219
-47
File diff suppressed because one or more lines are too long
@@ -14,8 +14,8 @@
|
||||
"metadata": {
|
||||
"collapsed": true,
|
||||
"ExecuteTime": {
|
||||
"end_time": "2026-03-24T03:12:19.747274800Z",
|
||||
"start_time": "2026-03-24T02:42:20.660416400Z"
|
||||
"end_time": "2026-04-23T08:20:44.296733100Z",
|
||||
"start_time": "2026-04-23T08:16:24.431928500Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
@@ -26,17 +26,16 @@
|
||||
"\n",
|
||||
"# Cookie 和 Headers 配置\n",
|
||||
"cookies = {\n",
|
||||
" 'acw_tc': '76b20f7917743149845914058ebc47559507cd60c8642e0d54dbe45b6da222',\n",
|
||||
" 'Hm_lvt_684c22b31d0037eca5a691cde16370ad': '1773130169,1774314982',\n",
|
||||
" 'Hm_lpvt_684c22b31d0037eca5a691cde16370ad': '1774314982',\n",
|
||||
" 'HMACCOUNT': 'A6A0585E8C70051D',\n",
|
||||
" 'e_token': 'f44423067c184689a19eb9dc564bf33e',\n",
|
||||
" 'acw_tc': '76b20ff917769316546828414e03f43fa61f25e670b6f93f0480d1876ff447',\n",
|
||||
" 'e_token': '3734b115f75f41ba8534f6780317e904',\n",
|
||||
" 'weixin_token': 'Y',\n",
|
||||
" 'e_c': 'NTQ0MzQ1MDE0MTA3ODA1Mg==',\n",
|
||||
" 'e_i_o_c_n': 'JTIyJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU4JThEJUEzJUU5JUFBJThGJUU2JUIxJUJEJUU4JUJEJUE2JUU3JUJCJUI0JUU0JUJGJUFFJUU0JUI4JUFEJUU1JUJGJTgzJTVCKzIwMDM5MDYrJTVEJTIy',\n",
|
||||
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU2JUEzJTk1JUU2JUE2JTg4JUU1JTlCJUFEJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk5MDkrJTVEJTIy',\n",
|
||||
" 'e_c': 'MjEwNjQxMDIzMTY2ODczNjc0',\n",
|
||||
" 'e_i_o_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU2JUIxJTlGJUU1JThDJTk3JUU1JThDJUJBJUU2JTlGJUIzJUU1JUIyJUI4JUU4JUI3JUFGJUU1JUJBJTk3JTVCKzIwMDU2MzQrJTVEJTIy',\n",
|
||||
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU2JUIxJTlGJUU1JThDJTk3JUU1JThDJUJBJUU2JTlGJUIzJUU1JUIyJUI4JUU4JUI3JUFGJUU1JUJBJTk3JUU1JUJBJTk3JUU5JTk1JUJGJTVCKzIwMjg3NTcrJTVEJTIy',\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"headers = {\n",
|
||||
" 'Accept': 'application/json, text/plain, */*',\n",
|
||||
" 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n",
|
||||
@@ -56,7 +55,7 @@
|
||||
"\n",
|
||||
"\n",
|
||||
"all_data = []\n",
|
||||
"for i in tqdm(range(1, 2019)):\n",
|
||||
"for i in tqdm(range(1, 372)):\n",
|
||||
" json_data = {\n",
|
||||
" 'pageStart': i,\n",
|
||||
" 'pageNums': 10,\n",
|
||||
@@ -81,11 +80,11 @@
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"100%|██████████| 2018/2018 [29:27<00:00, 1.14it/s]\n"
|
||||
"100%|██████████| 371/371 [04:12<00:00, 1.47it/s]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"execution_count": 2
|
||||
"execution_count": 1
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -100,8 +99,8 @@
|
||||
"id": "51f8f4b21505280a",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2026-03-24T07:37:35.090160900Z",
|
||||
"start_time": "2026-03-24T05:31:09.783019900Z"
|
||||
"end_time": "2026-04-23T08:36:56.349271400Z",
|
||||
"start_time": "2026-04-23T08:20:44.300734900Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
@@ -113,15 +112,13 @@
|
||||
"# ================= 配置区域 =================\n",
|
||||
"# Cookie 和 Headers 配置\n",
|
||||
"cookies = {\n",
|
||||
" 'acw_tc': '76b20f7917743149845914058ebc47559507cd60c8642e0d54dbe45b6da222',\n",
|
||||
" 'Hm_lvt_684c22b31d0037eca5a691cde16370ad': '1773130169,1774314982',\n",
|
||||
" 'Hm_lpvt_684c22b31d0037eca5a691cde16370ad': '1774314982',\n",
|
||||
" 'HMACCOUNT': 'A6A0585E8C70051D',\n",
|
||||
" 'e_token': 'f44423067c184689a19eb9dc564bf33e',\n",
|
||||
" 'acw_tc': '76b20ff917769316546828414e03f43fa61f25e670b6f93f0480d1876ff447',\n",
|
||||
" 'e_token': '3734b115f75f41ba8534f6780317e904',\n",
|
||||
" 'weixin_token': 'Y',\n",
|
||||
" 'e_c': 'NTQ0MzQ1MDE0MTA3ODA1Mg==',\n",
|
||||
" 'e_i_o_c_n': 'JTIyJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU4JThEJUEzJUU5JUFBJThGJUU2JUIxJUJEJUU4JUJEJUE2JUU3JUJCJUI0JUU0JUJGJUFFJUU0JUI4JUFEJUU1JUJGJTgzJTVCKzIwMDM5MDYrJTVEJTIy',\n",
|
||||
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU2JUEzJTk1JUU2JUE2JTg4JUU1JTlCJUFEJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk5MDkrJTVEJTIy',\n",
|
||||
" 'e_c': 'MjEwNjQxMDIzMTY2ODczNjc0',\n",
|
||||
" 'e_i_o_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU2JUIxJTlGJUU1JThDJTk3JUU1JThDJUJBJUU2JTlGJUIzJUU1JUIyJUI4JUU4JUI3JUFGJUU1JUJBJTk3JTVCKzIwMDU2MzQrJTVEJTIy',\n",
|
||||
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU2JUIxJTlGJUU1JThDJTk3JUU1JThDJUJBJUU2JTlGJUIzJUU1JUIyJUI4JUU4JUI3JUFGJUU1JUJBJTk3JUU1JUJBJTk3JUU5JTk1JUJGJTVCKzIwMjg3NTcrJTVEJTIy',\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"headers = {\n",
|
||||
@@ -145,9 +142,9 @@
|
||||
"\n",
|
||||
"# 业务参数配置\n",
|
||||
"TARGET_URL = 'https://teds.tyreplus.com.cn/api/aftersales/payment/queryPaymentSettlementListByCondition'\n",
|
||||
"STORE_CODES = [\"330522\", \"343280\"] # 门店列表\n",
|
||||
"STORE_CODES = [\"350085\"] # 门店列表\n",
|
||||
"PAGE_SIZE = 10\n",
|
||||
"OUTPUT_PATH = r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\13822673880结算单.xlsx\"\n",
|
||||
"OUTPUT_PATH = r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\15888527505结算单.xlsx\"\n",
|
||||
"MAX_RETRIES = 3\n",
|
||||
"\n",
|
||||
"# ================= 功能函数 =================\n",
|
||||
@@ -272,43 +269,15 @@
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"正在获取第 1 页数据以计算总记录数...\n",
|
||||
"✅ 获取成功。总记录数: 43728\n",
|
||||
"📄 预计总页数: 4373 (每页 10 条)\n"
|
||||
"✅ 获取成功。总记录数: 8310\n",
|
||||
"📄 预计总页数: 831 (每页 10 条)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"正在爬取结算单: 33%|███▎ | 1441/4373 [38:12<1:29:11, 1.83s/it]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"第1442页请求失败 (尝试 1/3): ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"正在爬取结算单: 51%|█████ | 2241/4373 [1:02:36<1:01:42, 1.74s/it]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"第2242页请求失败 (尝试 1/3): ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"正在爬取结算单: 100%|██████████| 4373/4373 [2:05:27<00:00, 1.72s/it] \n"
|
||||
"正在爬取结算单: 100%|██████████| 831/831 [16:01<00:00, 1.16s/it]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -316,12 +285,12 @@
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\n",
|
||||
"🎉 数据已成功保存至: D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\13822673880结算单.xlsx\n",
|
||||
"📊 共保存 43730 条记录 (期望: 43728)\n"
|
||||
"🎉 数据已成功保存至: D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\15888527505结算单.xlsx\n",
|
||||
"📊 共保存 8310 条记录 (期望: 8310)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"execution_count": 3
|
||||
"execution_count": 2
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -336,8 +305,8 @@
|
||||
"id": "b7e0d7a4da6c9b03",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2026-03-25T10:15:04.125375900Z",
|
||||
"start_time": "2026-03-24T12:31:05.631170600Z"
|
||||
"end_time": "2026-04-23T12:43:38.281667400Z",
|
||||
"start_time": "2026-04-23T08:36:56.424636200Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
@@ -347,15 +316,13 @@
|
||||
"import time\n",
|
||||
"\n",
|
||||
"cookies = {\n",
|
||||
" 'acw_tc': '76b20f7917743149845914058ebc47559507cd60c8642e0d54dbe45b6da222',\n",
|
||||
" 'Hm_lvt_684c22b31d0037eca5a691cde16370ad': '1773130169,1774314982',\n",
|
||||
" 'Hm_lpvt_684c22b31d0037eca5a691cde16370ad': '1774314982',\n",
|
||||
" 'HMACCOUNT': 'A6A0585E8C70051D',\n",
|
||||
" 'e_token': 'f44423067c184689a19eb9dc564bf33e',\n",
|
||||
" 'acw_tc': '76b20ff917769316546828414e03f43fa61f25e670b6f93f0480d1876ff447',\n",
|
||||
" 'e_token': '3734b115f75f41ba8534f6780317e904',\n",
|
||||
" 'weixin_token': 'Y',\n",
|
||||
" 'e_c': 'NTQ0MzQ1MDE0MTA3ODA1Mg==',\n",
|
||||
" 'e_i_o_c_n': 'JTIyJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU4JThEJUEzJUU5JUFBJThGJUU2JUIxJUJEJUU4JUJEJUE2JUU3JUJCJUI0JUU0JUJGJUFFJUU0JUI4JUFEJUU1JUJGJTgzJTVCKzIwMDM5MDYrJTVEJTIy',\n",
|
||||
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU2JUEzJTk1JUU2JUE2JTg4JUU1JTlCJUFEJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk5MDkrJTVEJTIy',\n",
|
||||
" 'e_c': 'MjEwNjQxMDIzMTY2ODczNjc0',\n",
|
||||
" 'e_i_o_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU2JUIxJTlGJUU1JThDJTk3JUU1JThDJUJBJUU2JTlGJUIzJUU1JUIyJUI4JUU4JUI3JUFGJUU1JUJBJTk3JTVCKzIwMDU2MzQrJTVEJTIy',\n",
|
||||
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU2JUIxJTlGJUU1JThDJTk3JUU1JThDJUJBJUU2JTlGJUIzJUU1JUIyJUI4JUU4JUI3JUFGJUU1JUJBJTk3JUU1JUJBJTk3JUU5JTk1JUJGJTVCKzIwMjg3NTcrJTVEJTIy',\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"headers = {\n",
|
||||
@@ -376,7 +343,7 @@
|
||||
" # 'Cookie': 'acw_tc=76b20f7917743149845914058ebc47559507cd60c8642e0d54dbe45b6da222; Hm_lvt_684c22b31d0037eca5a691cde16370ad=1773130169,1774314982; Hm_lpvt_684c22b31d0037eca5a691cde16370ad=1774314982; HMACCOUNT=A6A0585E8C70051D; e_token=f44423067c184689a19eb9dc564bf33e; weixin_token=Y; e_c=NTQ0MzQ1MDE0MTA3ODA1Mg==; e_i_o_c_n=JTIyJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU4JThEJUEzJUU5JUFBJThGJUU2JUIxJUJEJUU4JUJEJUE2JUU3JUJCJUI0JUU0JUJGJUFFJUU0JUI4JUFEJUU1JUJGJTgzJTVCKzIwMDM5MDYrJTVEJTIy; e_i_p_c_n=JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU2JUEzJTk1JUU2JUE2JTg4JUU1JTlCJUFEJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk5MDkrJTVEJTIy',\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"df = pd.read_excel(fr\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\13822673880结算单.xlsx\", sheet_name='Sheet1')\n",
|
||||
"df = pd.read_excel(fr\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\15888527505结算单.xlsx\", sheet_name='Sheet1')\n",
|
||||
"\n",
|
||||
"all_data_list = []\n",
|
||||
"all_service_data = []\n",
|
||||
@@ -464,12 +431,12 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
" 0%| | 0/43730 [00:00<?, ?it/s]"
|
||||
" 0%| | 0/8310 [00:00<?, ?it/s]"
|
||||
],
|
||||
"application/vnd.jupyter.widget-view+json": {
|
||||
"version_major": 2,
|
||||
"version_minor": 0,
|
||||
"model_id": "2475aaf2f08b4f3f9b6915bcbc30a4fc"
|
||||
"model_id": "f91b10f941ab425bb47b2b50c721ccd3"
|
||||
}
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -482,21 +449,13 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"请求异常: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)) (paymentNo: SI2511031810785166)\n",
|
||||
"请求异常: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)) (paymentNo: SI2510121646331912)\n",
|
||||
"请求异常: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)) (paymentNo: SI2504251333197830)\n",
|
||||
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Read timed out. (read timeout=10) (paymentNo: SI2504251333197185)\n",
|
||||
"HTTP 请求失败,状态码: 504 (paymentNo: SI2504251328192860)\n",
|
||||
"请求异常: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)) (paymentNo: SI2504251327191463)\n",
|
||||
"HTTP 请求失败,状态码: 502 (paymentNo: SI2504251326190989)\n",
|
||||
"请求异常: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)) (paymentNo: SI2504251320185538)\n",
|
||||
"请求异常: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)) (paymentNo: SI2504251319184980)\n",
|
||||
"HTTP 请求失败,状态码: 502 (paymentNo: SI2504251316180693)\n",
|
||||
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Read timed out. (read timeout=10) (paymentNo: SI2504251302159764)\n"
|
||||
"HTTP 请求失败,状态码: 502 (paymentNo: SI2511041053790586)\n",
|
||||
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Max retries exceeded with url: /api/v2/aftersales/payment/queryPaymentSettlementDetail (Caused by ConnectTimeoutError(<HTTPSConnection(host='teds.tyreplus.com.cn', port=443) at 0x194ab953c50>, 'Connection to teds.tyreplus.com.cn timed out. (connect timeout=10)')) (paymentNo: SI2511011255731172)\n",
|
||||
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Max retries exceeded with url: /api/v2/aftersales/payment/queryPaymentSettlementDetail (Caused by ConnectTimeoutError(<HTTPSConnection(host='teds.tyreplus.com.cn', port=443) at 0x194ab9539d0>, 'Connection to teds.tyreplus.com.cn timed out. (connect timeout=10)')) (paymentNo: SI2504160329323760)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"execution_count": 5
|
||||
"execution_count": 3
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
"metadata": {
|
||||
"collapsed": true,
|
||||
"ExecuteTime": {
|
||||
"end_time": "2026-01-06T01:50:04.573176600Z",
|
||||
"start_time": "2026-01-06T01:41:33.836804400Z"
|
||||
"end_time": "2026-05-12T06:14:49.072001900Z",
|
||||
"start_time": "2026-05-12T06:08:51.739974700Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
@@ -22,13 +22,13 @@
|
||||
"from tqdm import tqdm\n",
|
||||
"\n",
|
||||
"cookies = {\n",
|
||||
" 'MD_accessToken': '6864ddf5-fa96-466f-b228-f2621516a2bf',\n",
|
||||
" 'MD_accessToken': '2701b3d9-c959-4bfc-ad17-0a9b3f237f75',\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"headers = {\n",
|
||||
" 'Accept': 'application/json, text/plain, */*',\n",
|
||||
" 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n",
|
||||
" 'Authorization': 'Bearer6864ddf5-fa96-466f-b228-f2621516a2bf',\n",
|
||||
" 'Authorization': 'Bearer2701b3d9-c959-4bfc-ad17-0a9b3f237f75',\n",
|
||||
" 'Connection': 'keep-alive',\n",
|
||||
" 'Content-Type': 'application/json;charset=UTF-8',\n",
|
||||
" 'Origin': 'https://store.fuchuang.com',\n",
|
||||
@@ -36,20 +36,18 @@
|
||||
" 'Sec-Fetch-Dest': 'empty',\n",
|
||||
" 'Sec-Fetch-Mode': 'cors',\n",
|
||||
" 'Sec-Fetch-Site': 'same-origin',\n",
|
||||
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0',\n",
|
||||
" 'X-FC-TRACE-ID': '0924ec43dfae4ba48176700dee39833b',\n",
|
||||
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0',\n",
|
||||
" 'X-FC-TRACE-ID': '3b644c0201c34c6cbb4333f57367e40b',\n",
|
||||
" 'loginPlatform': 'store_pc',\n",
|
||||
" 'platform': 'store_pc',\n",
|
||||
" 'searchInfo': '%E5%AE%A2%E6%88%B7%E8%BD%A6%E8%BE%86,%E5%AE%A2%E6%88%B7%E7%AE%A1%E7%90%86,%E6%9F%A5%E8%AF%A2',\n",
|
||||
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"',\n",
|
||||
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\"',\n",
|
||||
" 'sec-ch-ua-mobile': '?0',\n",
|
||||
" 'sec-ch-ua-platform': '\"Windows\"',\n",
|
||||
" 'user-info-wms': '{\"token\":\"Bearer6864ddf5-fa96-466f-b228-f2621516a2bf\",\"platform\":\"store_pc\"}',\n",
|
||||
" 'user-info-wms': '{\"token\":\"Bearer2701b3d9-c959-4bfc-ad17-0a9b3f237f75\",\"platform\":\"store_pc\"}',\n",
|
||||
" 'x-fc-client': 'web',\n",
|
||||
" # 'Cookie': 'MD_accessToken=6864ddf5-fa96-466f-b228-f2621516a2bf',\n",
|
||||
" # 'Cookie': 'MD_accessToken=2701b3d9-c959-4bfc-ad17-0a9b3f237f75',\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"json_data = {\n",
|
||||
" 'phone': '',\n",
|
||||
" 'name': '',\n",
|
||||
@@ -63,7 +61,7 @@
|
||||
"}\n",
|
||||
"\n",
|
||||
"all_data = []\n",
|
||||
"for i in tqdm(range(1, 758)):\n",
|
||||
"for i in tqdm(range(1, 486)):\n",
|
||||
" json_data['pageNum'] = i\n",
|
||||
" response = requests.post(\n",
|
||||
" 'https://store.fuchuang.com/api/store-crm/crm/customer/query',\n",
|
||||
@@ -88,13 +86,13 @@
|
||||
"text": [
|
||||
"<>:63: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
"<>:63: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
"C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_31392\\364108658.py:63: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
"C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_14680\\526967017.py:63: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
" df.to_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息.xlsx', index=False)\n",
|
||||
"100%|██████████| 757/757 [08:25<00:00, 1.50it/s]\n"
|
||||
"100%|██████████| 485/485 [05:54<00:00, 1.37it/s]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"execution_count": 1
|
||||
"execution_count": 13
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
@@ -105,8 +103,8 @@
|
||||
{
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2026-01-06T06:59:53.687706100Z",
|
||||
"start_time": "2026-01-06T05:40:36.873045Z"
|
||||
"end_time": "2026-05-12T07:23:39.540370100Z",
|
||||
"start_time": "2026-05-12T06:31:05.220043700Z"
|
||||
}
|
||||
},
|
||||
"cell_type": "code",
|
||||
@@ -116,34 +114,36 @@
|
||||
"from tqdm.notebook import tqdm\n",
|
||||
"import pandas as pd\n",
|
||||
"cookies = {\n",
|
||||
" 'MD_accessToken': '6864ddf5-fa96-466f-b228-f2621516a2bf',\n",
|
||||
" 'acw_tc': '0a0572c017785673680518302e62de2d436dcebb15d1ca5dd604f3df26743b',\n",
|
||||
" 'MD_accessToken': 'fc95ef0c-1929-4fa3-95b9-2fdfd56af0eb',\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"headers = {\n",
|
||||
" 'Accept': 'application/json, text/plain, */*',\n",
|
||||
" 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n",
|
||||
" 'Authorization': 'Bearer6864ddf5-fa96-466f-b228-f2621516a2bf',\n",
|
||||
" 'Accept-Language': 'zh-CN,zh;q=0.9',\n",
|
||||
" 'Authorization': 'Bearerfc95ef0c-1929-4fa3-95b9-2fdfd56af0eb',\n",
|
||||
" 'Connection': 'keep-alive',\n",
|
||||
" 'Content-Type': 'application/json;charset=UTF-8',\n",
|
||||
" 'Origin': 'https://store.fuchuang.com',\n",
|
||||
" 'Referer': 'https://store.fuchuang.com/store/',\n",
|
||||
" 'Referer': 'https://store.fuchuang.com/store/index.html',\n",
|
||||
" 'Sec-Fetch-Dest': 'empty',\n",
|
||||
" 'Sec-Fetch-Mode': 'cors',\n",
|
||||
" 'Sec-Fetch-Site': 'same-origin',\n",
|
||||
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0',\n",
|
||||
" 'X-FC-TRACE-ID': 'a26acd1fe3c5460e890e80c8ad88a6da',\n",
|
||||
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0',\n",
|
||||
" 'X-FC-TRACE-ID': '29cb0c9ab8904d85b54f1b1bb3ae33b5',\n",
|
||||
" 'loginPlatform': 'store_pc',\n",
|
||||
" 'platform': 'store_pc',\n",
|
||||
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"',\n",
|
||||
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\"',\n",
|
||||
" 'sec-ch-ua-mobile': '?0',\n",
|
||||
" 'sec-ch-ua-platform': '\"Windows\"',\n",
|
||||
" 'user-info-wms': '{\"token\":\"Bearer6864ddf5-fa96-466f-b228-f2621516a2bf\",\"platform\":\"store_pc\"}',\n",
|
||||
" 'user-info-wms': '{\"token\":\"Bearerfc95ef0c-1929-4fa3-95b9-2fdfd56af0eb\",\"platform\":\"store_pc\"}',\n",
|
||||
" 'x-fc-client': 'web',\n",
|
||||
" # 'Cookie': 'MD_accessToken=6864ddf5-fa96-466f-b228-f2621516a2bf',\n",
|
||||
" # 'Cookie': 'acw_tc=0a0572c017785673680518302e62de2d436dcebb15d1ca5dd604f3df26743b; MD_accessToken=fc95ef0c-1929-4fa3-95b9-2fdfd56af0eb',\n",
|
||||
"}\n",
|
||||
"df1 = pd.read_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息.xlsx', sheet_name =0)\n",
|
||||
"\n",
|
||||
"df1 = pd.read_excel(r'D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息.xlsx', sheet_name =0)\n",
|
||||
"detail_list = []\n",
|
||||
"start_index = 2658\n",
|
||||
"start_index = 0\n",
|
||||
"for index, row in tqdm(df1.iterrows(), total=len(df1)):\n",
|
||||
" params = {\n",
|
||||
" 'id': row[\"id\"],\n",
|
||||
@@ -158,6 +158,7 @@
|
||||
" headers=headers,\n",
|
||||
" json=json_data,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" detail_list.append(response.json()['data'])\n",
|
||||
" except Exception as e:\n",
|
||||
" print(e)\n",
|
||||
@@ -173,25 +174,21 @@
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"<>:31: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
"<>:55: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
"<>:31: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
"<>:55: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
"C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_31392\\1770658545.py:31: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
" df1 = pd.read_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息.xlsx', sheet_name =0)\n",
|
||||
"C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_31392\\1770658545.py:55: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
"<>:58: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
"<>:58: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
"C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_14680\\3627701310.py:58: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
" df2.to_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息明细1.xlsx', index=False)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
" 0%| | 0/7567 [00:00<?, ?it/s]"
|
||||
" 0%| | 0/4847 [00:00<?, ?it/s]"
|
||||
],
|
||||
"application/vnd.jupyter.widget-view+json": {
|
||||
"version_major": 2,
|
||||
"version_minor": 0,
|
||||
"model_id": "755b9172bf87470583e777ee60281e95"
|
||||
"model_id": "02a2225e158a4c208c837d37c2a525c1"
|
||||
}
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -204,38 +201,39 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
|
||||
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
|
||||
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
|
||||
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
|
||||
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
|
||||
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
|
||||
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n",
|
||||
"('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"execution_count": 10
|
||||
"execution_count": 20
|
||||
},
|
||||
{
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2026-01-06T05:35:20.575883300Z",
|
||||
"start_time": "2026-01-06T05:35:18.435503400Z"
|
||||
"end_time": "2026-05-12T06:31:03.033486600Z",
|
||||
"start_time": "2026-05-12T06:31:02.977494Z"
|
||||
}
|
||||
},
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"df2 = pd.DataFrame(detail_list)\n",
|
||||
"df2.to_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息明细2.xlsx', index=False)"
|
||||
],
|
||||
"source": "print(response.json())",
|
||||
"id": "71fe765d89e1fc8d",
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"<>:2: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
"<>:2: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
"C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_31392\\2944444433.py:2: SyntaxWarning: invalid escape sequence '\\I'\n",
|
||||
" df2.to_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\美孚客户信息明细2.xlsx', index=False)\n"
|
||||
"{'code': 10000, 'message': '操作成功', 'data': {'labelConsumptionType': 2, 'labelActivityType': 1, 'labelEquityCard': 0, 'labelScCard': 0, 'labelTcCard': 0, 'fcCustomerLabels': [{'labelId': 2, 'labelType': 1, 'labelTypeName': '客户类型标签', 'labelValue': 2, 'labelName': '新客'}, {'labelId': 4, 'labelType': 2, 'labelTypeName': '客户活跃度标签', 'labelValue': 1, 'labelName': '活跃'}], 'storeCustomerLabels': [], 'storeCustomerLabelNames': [], 'id': '177849100876200134310619337', 'name': '长安', 'phoneNumber': '15566441231', 'gender': 1, 'birthday': None, 'customerType': 'person', 'customerSource': 'ZRJD', 'sourceChannel': '', 'driverLicenseNumber': '', 'driverLicenseType': 'C1', 'provinceId': None, 'cityId': None, 'countyDistrictId': None, 'provinceName': '', 'cityName': '', 'countyDistrictName': '', 'driverLicenseExpiryDate': None, 'driverLicensePhoto': '', 'address': '', 'customerRemark': '', 'isMember': 0, 'mallUser': 0, 'commonUserId': 4919522, 'updateTime': '2026-05-11 17:18:18', 'creditCycle': 30, 'creditLine': 0.0, 'vehicleResps': [{'id': '177849100876900134310619338', 'customerId': '177849100876200134310619337', 'carNum': '赣E116Q0', 'drivenDistance': 0, 'licensePlateFlag': '赣', 'licensePlateNumber': 'E116Q0', 'vehicleModel': '长安 长安汽车 CS75 2014款 2.0L 手动 2015年产', 'color': '', 'vin': '', 'vehicleType': 'B', 'engine': '', 'lastMaintenanceDate': '2026-05-11 17:18:33', 'nextMaintenanceDate': None, 'nextMaintainMileage': None, 'insuranceCompany': '', 'effectiveDate': None, 'expiryDate': None, 'description': None, 'remark': '', 'carPhoto': 'https://image.fuchuang.com/prod/f29f067f_%E9%95%BF%E5%AE%8920230901112941.png', 'brand': '长安', 'brandType': '', 'carName': '', 'saleName': '长安 CS75 2.0L 手动', 'paiLiang': '', 'avgPrice': 12.58, 'tireSize': '', 'annualInspectionDate': None, 'commonVehicleId': 3690941, 'storeMallVehicleId': None, 'fid': 0, 'fidCode': '', 'year': '2015', 'gearboxCode': '1', 'gearboxType': '手动', 'levelName': 'CS75', 'seriesId': 216, 'seriesName': 'CS75', 'updateTime': '2026-05-11 17:18:18', 'vid': 95750, 'modelYear': 2014, 'powerVersion': '', 'energyVersion': '', 'saleModel': '', 'displacementType': '2.0L', 'brandId': 207, 'vendorName': '长安汽车', 'vendorId': 204, 'carInfo': '2014款 2.0L 手动 2015年产', 'yearText': '2015年产', 'isVip': None, 'insuranceVehicleId': None, 'energyType': 1, 'energyTypeName': '汽油', 'status': 1}], 'storeMallUser': 0}, 'detail': None, 'trace': None, 'success': True}\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"execution_count": 7
|
||||
"execution_count": 19
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
|
||||
+155
-142
@@ -10,120 +10,13 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"id": "479a84ce",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"🔍 正在扫描所有文件...\n",
|
||||
"✅ 共找到 66 个实例,总计 90 个文件\n",
|
||||
"📁 正在生成批次 1: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_1\n",
|
||||
"[Batch 1] ✅ FINST-0CC662718BILO83CEX5TJ4OXZP2C3X1PCLRWLFGL.png\n",
|
||||
"[Batch 1] ✅ FINST-0D866I81JANY5WG8A2DT15S63HZH20YFR68FMQJA.png\n",
|
||||
"[Batch 1] ✅ FINST-0HD66Z81DFXYBP816VRKD6S2HA2H3RYCBYKFMR6.jpg\n",
|
||||
"[Batch 1] ✅ FINST-3MF66MB1C62UYQ70B6VFWCC72LWD3WFATRQ8MJF1.jpg\n",
|
||||
"[Batch 1] ✅ FINST-3RB66I91KLXKFLFLFENM3DP0BQER2D0BEAXVLS11.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-3SC66EA1POUU8OOK7YW2GDJEKD972XTSC1V9MCB1.png\n",
|
||||
"[Batch 1] ✅ FINST-42766EA129TVP57F6HGFPAATXT4K2J17LS7BMPS2.png\n",
|
||||
"[Batch 1] ✅ FINST-54A66HC1426KP5L87MXEA682I67O23YKVXUUL9U9.jpg\n",
|
||||
"[Batch 1] ✅ FINST-54A66HC1BDILGOIO8D24RCKSUXOU2641DLRWLFY5.png\n",
|
||||
"[Batch 1] ✅ FINST-54A66HC1NBQSMDDUEDQU4CSW0OJI27EQ2TV6MHV.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-5B866X816C0WLA139FUCS6ISBUCK3KXV3UIBMX22.jpg\n",
|
||||
"[Batch 1] ✅ FINST-5W966981KWJJ06WS8VXCYC10RV7U31E6282ULAHS.png\n",
|
||||
"[Batch 1] ✅ FINST-5X866U8169BBPU9BFDL61ASKGDPW3RJM5LIILSNA.png\n",
|
||||
"[Batch 1] ✅ FINST-65D66X71VHAPFNPZ9OFURCIREZAS28FI7P12MJS.png\n",
|
||||
"[Batch 1] ✅ FINST-69E66NA11AKXLE2R7DOP3AOZM8SD3R64OXNDM7G.png\n",
|
||||
"[Batch 1] ✅ FINST-69E66NA1ATDYE53ADVQ8DCX122G53OQC1ETEM62.png\n",
|
||||
"[Batch 1] ✅ FINST-6B966W917QETCTT5ARDDR8J2IOJD26ZQYVT7M3I.png\n",
|
||||
"[Batch 1] ✅ FINST-8AD662D1X8VOJJUGCZ7NFCI1XLDM3EUX97H1MKJ1.png\n",
|
||||
"[Batch 1] ✅ FINST-8EC66FA15UNNQPWWBOPENDDJ6EQM2MDGX4SZLOP4.jpg\n",
|
||||
"[Batch 1] ✅ FINST-8O866AA142HTFEQ18XDVG5SQ0Y7Z14EVF6Y7MBHB.jpg\n",
|
||||
"[Batch 1] ✅ FINST-9FA66WC1LDJNFROD7HJUI4OJ6C2J22UP25SZLUQA.jpg\n",
|
||||
"[Batch 1] ✅ FINST-AZC667816Z9TV9Z4DD1PDD4OLN5825J8S4O7MOJ1.png\n",
|
||||
"[Batch 1] ✅ FINST-BL866S61XU8DOZG5BZ6E4DZ2UOIV3B6CEHALL3QI.jpg\n",
|
||||
"[Batch 1] ✅ FINST-ETA66681ZAHDHL2OA0MQR6UB9W5N2MZM2DGLLU2.png\n",
|
||||
"[Batch 1] ✅ FINST-FX7660A1N11VJB6IBDBRE8N012ZQ2HVJIWBAMYL2.jpg\n",
|
||||
"[Batch 1] ✅ FINST-G7B66QC1U162UFRMHJFJ59Q5VZZD3VQ1MS4KM0F.png\n",
|
||||
"[Batch 1] ✅ FINST-HI766JB1ORJFF6STEI8PR6E3YJTF2B87VNDOLSM5.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-HRD66W919462UFW0NG4PODHZZUW63074RZAKM1DK.png\n",
|
||||
"[Batch 1] ✅ FINST-IO766F81JX9VU83Z6OR927WUWBUJ3FDQKEGAM0X.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-IQC66GC18W4YQ8GSCL23T582HU1H3960PVGEML8.png\n",
|
||||
"[Batch 1] ✅ FINST-IRD66GC15CA2MFOFM8MHCBN7OSWA3PKSUZAKMKS.png\n",
|
||||
"[Batch 1] ✅ FINST-IRD66PB1X8I2R8DLJKVF9667G4LC3TWHHZLKM0J.png\n",
|
||||
"[Batch 1] ✅ FINST-IUF66391KP8W6U35CG7JL8UC2GK52JXZA6TBM6P.png\n",
|
||||
"[Batch 1] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"[Batch 1] ✅ FINST-J3D66LA13NTHEZAICABNRCD3KVCY222Q7IORL7UD.jpg\n",
|
||||
"[Batch 1] ✅ FINST-JB966E91FW8YJMLMD52WCCZCXO5V28E0JHMEMM.jpg\n",
|
||||
"[Batch 1] ✅ FINST-JXA66PB1ONATQBEIBDMEZ45MLMVB3M0CO6O7MH01.png\n",
|
||||
"[Batch 1] ✅ FINST-JZE66UC1Q8H2F0E3M38EX853TR242SGJFJKKMK8.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-K7E66Z91F5NYOC0UD20BO775JN8C3D763K6FM16.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-KW866QB13VPZ5OSE9CE0LAWVKEO23QA4XVOGM92.jpg\n",
|
||||
"[Batch 1] ✅ FINST-L3D66981YN31J5O8MGQCCCPF6FE82J0EBZMIMQ61.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-LCC66CA1BTTCK1HQ9S8TP91UHORX3JHYWOQKLO65.pptx\n",
|
||||
"[Batch 1] ✅ FINST-LLA66D71DDUN56UUBRVZVD2EO3TS291ZDU00M734.png\n",
|
||||
"[Batch 1] ✅ FINST-NLD66NA171BT4QDDCKR6HBD8XSHG3UJ1FSP7MJ39.png\n",
|
||||
"[Batch 1] ✅ FINST-OPA665A1KV9TAY9UA78YID6X4S4Y2HPA03N7MO3.png\n",
|
||||
"[Batch 1] ✅ FINST-P6D66F71YYMY4D4PE6FL58E9BU8X3JUP0G6FM6R.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-PF866EA1IKDECQEC8I8IECI2W3YI38JSXOPMLP8.jpg\n",
|
||||
"[Batch 1] ✅ FINST-PJE66J91RJNZ1RSPBUYJB5ZF2PTI2TGY7PLGMAN.jpg\n",
|
||||
"[Batch 1] ✅ FINST-PQ5669911JFP4W356K5HS98S8MZC2MUHMO82MX5.png\n",
|
||||
"[Batch 1] ✅ FINST-PRF66GB105ZWQSK7CUNWR97ZV6LG3050I9UCMAY.png\n",
|
||||
"[Batch 1] ✅ FINST-QJG66FC1JCE085Q3N439VAMLKVFF3GUQFMOHMEF2.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-QJG66IB1GWQZN4GVAGZCW8NQ61VB3AK3KSRGMWY1.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-QKC666919BQY70PZ8G3T57AX7UNA29H3N0BFMSC.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-QW8665B1XE41XSIJK01GJCNZ5YNQ2CRLVXNIMZW.png\n",
|
||||
"[Batch 1] ✅ FINST-RAC66GD197JYBI9Q9WU4B731F3O52QOQQ42FMFR5.jpg\n",
|
||||
"[Batch 1] ✅ FINST-UAD66591M1KJAXF6CROAFDK9Y4PD3IFY2QZTLUR1.jpg\n",
|
||||
"[Batch 1] ✅ FINST-UH9665D1TLYDLO5TDNPV0CEJTFGX2AMSWP4MLGP.png\n",
|
||||
"[Batch 1] ✅ FINST-USC66V6144XYJV79FR19G4JRKPA52X6OX8LFMWU3.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-UZA66QC18I9WZM23F0GIC4UMA25B2C14SHUBM742.png\n",
|
||||
"[Batch 1] ✅ FINST-WM6666B10OZIDIA9C6K6R8A6NXEU3UON1HETL2ZJ.jpg\n",
|
||||
"[Batch 1] ✅ FINST-WSF66J812FUXCO5ZCWI70C2TW7TG2OMS0F2EMAP1.png\n",
|
||||
"[Batch 1] ✅ FINST-WSF66J818UYXDCKS8IZ7K50QAGNH2K3MJG8EMJP1.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-WYG66T718EQ0Z4TMNO8P2CRTS6NE3EUF016IMSDA.pptx\n",
|
||||
"[Batch 1] ✅ FINST-Z6966NB14IDEWL268Y71A8FOS0HD2ROSG3QMLGZ3.mp4\n",
|
||||
"[Batch 1] ✅ FINST-ZH866O918DRFX8WWEBEDSBMRTNU93TRYXNNOLVY.jpg\n",
|
||||
"[Batch 1] ✅ FINST-ZKD66Q71XPBRGBVI8Z5FGCIWR2KS2NCI9TZ4MQ5L.xlsx\n",
|
||||
"📁 正在生成批次 2: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_2\n",
|
||||
"[Batch 2] ✅ FINST-0D866I81JANY5WG8A2DT15S63HZH20YFR68FMQJA.png\n",
|
||||
"[Batch 2] ✅ FINST-0HD66Z81DFXYBP816VRKD6S2HA2H3RYCBYKFMR6.jpg\n",
|
||||
"[Batch 2] ✅ FINST-54A66HC1426KP5L87MXEA682I67O23YKVXUUL9U9.jpg\n",
|
||||
"[Batch 2] ✅ FINST-65D66X71VHAPFNPZ9OFURCIREZAS28FI7P12MJS.jpg\n",
|
||||
"[Batch 2] ✅ FINST-9FA66WC1LDJNFROD7HJUI4OJ6C2J22UP25SZLUQA.jpg\n",
|
||||
"[Batch 2] ✅ FINST-BL866S61XU8DOZG5BZ6E4DZ2UOIV3B6CEHALL3QI.png\n",
|
||||
"[Batch 2] ✅ FINST-ETA66681ZAHDHL2OA0MQR6UB9W5N2MZM2DGLLU2.xlsx\n",
|
||||
"[Batch 2] ✅ FINST-HRD66W919462UFW0NG4PODHZZUW63074RZAKM1DK.png\n",
|
||||
"[Batch 2] ✅ FINST-IQC66GC18W4YQ8GSCL23T582HU1H3960PVGEML8.png\n",
|
||||
"[Batch 2] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"[Batch 2] ✅ FINST-J3D66LA13NTHEZAICABNRCD3KVCY222Q7IORL7UD.xlsx\n",
|
||||
"[Batch 2] ✅ FINST-K7E66Z91F5NYOC0UD20BO775JN8C3D763K6FM16.xlsx\n",
|
||||
"[Batch 2] ✅ FINST-KW866QB13VPZ5OSE9CE0LAWVKEO23QA4XVOGM92.jpg\n",
|
||||
"[Batch 2] ✅ FINST-LLA66D71DDUN56UUBRVZVD2EO3TS291ZDU00M734.png\n",
|
||||
"[Batch 2] ✅ FINST-NLD66NA171BT4QDDCKR6HBD8XSHG3UJ1FSP7MJ39.png\n",
|
||||
"[Batch 2] ✅ FINST-PF866EA1IKDECQEC8I8IECI2W3YI38JSXOPMLP8.jpg\n",
|
||||
"📁 正在生成批次 3: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_3\n",
|
||||
"[Batch 3] ✅ FINST-65D66X71VHAPFNPZ9OFURCIREZAS28FI7P12MJS.png\n",
|
||||
"[Batch 3] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"📁 正在生成批次 4: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_4\n",
|
||||
"[Batch 4] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"📁 正在生成批次 5: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_5\n",
|
||||
"[Batch 5] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"📁 正在生成批次 6: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_6\n",
|
||||
"[Batch 6] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"📁 正在生成批次 7: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_7\n",
|
||||
"[Batch 7] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"📁 正在生成批次 8: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_8\n",
|
||||
"[Batch 8] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"📁 正在生成批次 9: C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\\输出_9\n",
|
||||
"[Batch 9] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"\n",
|
||||
"🎉 处理完成!共生成 9 个批次文件夹。\n"
|
||||
]
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2026-04-18T03:34:19.039797100Z",
|
||||
"start_time": "2026-04-18T03:34:18.737330Z"
|
||||
}
|
||||
],
|
||||
},
|
||||
"source": [
|
||||
"import os\n",
|
||||
"import shutil\n",
|
||||
@@ -131,7 +24,7 @@
|
||||
"import hashlib\n",
|
||||
"\n",
|
||||
"# 配置\n",
|
||||
"root_path = r\"C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\FPO提交_20260207112107_resources_1\"\n",
|
||||
"root_path = r\"C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\"\n",
|
||||
"\n",
|
||||
"# 存储:{finst_id: [file_path1, file_path2, ...]}\n",
|
||||
"instance_files = {}\n",
|
||||
@@ -207,7 +100,122 @@
|
||||
" print(f\"[Batch {batch_index}] ❌ 复制失败: {e}\")\n",
|
||||
"\n",
|
||||
"print(f\"\\n🎉 处理完成!共生成 {max_rounds} 个批次文件夹。\")"
|
||||
]
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"🔍 正在扫描所有文件...\n",
|
||||
"✅ 共找到 68 个实例,总计 93 个文件\n",
|
||||
"📁 正在生成批次 1: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_1\n",
|
||||
"[Batch 1] ✅ FINST-0CC662718BILO83CEX5TJ4OXZP2C3X1PCLRWLFGL.png\n",
|
||||
"[Batch 1] ✅ FINST-0D866I81JANY5WG8A2DT15S63HZH20YFR68FMQJA.png\n",
|
||||
"[Batch 1] ✅ FINST-0HD66Z81DFXYBP816VRKD6S2HA2H3RYCBYKFMR6.jpg\n",
|
||||
"[Batch 1] ✅ FINST-3MF66MB1C62UYQ70B6VFWCC72LWD3WFATRQ8MJF1.jpg\n",
|
||||
"[Batch 1] ✅ FINST-3RB66I91KLXKFLFLFENM3DP0BQER2D0BEAXVLS11.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-3SC66EA1POUU8OOK7YW2GDJEKD972XTSC1V9MCB1.png\n",
|
||||
"[Batch 1] ✅ FINST-42766EA129TVP57F6HGFPAATXT4K2J17LS7BMPS2.png\n",
|
||||
"[Batch 1] ✅ FINST-54A66HC1426KP5L87MXEA682I67O23YKVXUUL9U9.jpg\n",
|
||||
"[Batch 1] ✅ FINST-54A66HC1BDILGOIO8D24RCKSUXOU2641DLRWLFY5.png\n",
|
||||
"[Batch 1] ✅ FINST-54A66HC1NBQSMDDUEDQU4CSW0OJI27EQ2TV6MHV.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-5B866X816C0WLA139FUCS6ISBUCK3KXV3UIBMX22.jpg\n",
|
||||
"[Batch 1] ✅ FINST-5W966981KWJJ06WS8VXCYC10RV7U31E6282ULAHS.png\n",
|
||||
"[Batch 1] ✅ FINST-5X866U8169BBPU9BFDL61ASKGDPW3RJM5LIILSNA.png\n",
|
||||
"[Batch 1] ✅ FINST-65D66X71VHAPFNPZ9OFURCIREZAS28FI7P12MJS.png\n",
|
||||
"[Batch 1] ✅ FINST-69E66NA11AKXLE2R7DOP3AOZM8SD3R64OXNDM7G.png\n",
|
||||
"[Batch 1] ✅ FINST-69E66NA1ATDYE53ADVQ8DCX122G53OQC1ETEM62.png\n",
|
||||
"[Batch 1] ✅ FINST-6B966W917QETCTT5ARDDR8J2IOJD26ZQYVT7M3I.png\n",
|
||||
"[Batch 1] ✅ FINST-8AD662D1X8VOJJUGCZ7NFCI1XLDM3EUX97H1MKJ1.png\n",
|
||||
"[Batch 1] ✅ FINST-8EC66FA15UNNQPWWBOPENDDJ6EQM2MDGX4SZLOP4.jpg\n",
|
||||
"[Batch 1] ✅ FINST-8O866AA142HTFEQ18XDVG5SQ0Y7Z14EVF6Y7MBHB.jpg\n",
|
||||
"[Batch 1] ✅ FINST-9FA66WC1LDJNFROD7HJUI4OJ6C2J22UP25SZLUQA.jpg\n",
|
||||
"[Batch 1] ✅ FINST-AZC667816Z9TV9Z4DD1PDD4OLN5825J8S4O7MOJ1.png\n",
|
||||
"[Batch 1] ✅ FINST-BL866S61XU8DOZG5BZ6E4DZ2UOIV3B6CEHALL3QI.jpg\n",
|
||||
"[Batch 1] ✅ FINST-BOC66X814P44ZFRANA18R9SUKA8Y2FVPZSYMM8BN.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-ETA66681ZAHDHL2OA0MQR6UB9W5N2MZM2DGLLU2.png\n",
|
||||
"[Batch 1] ✅ FINST-F1A66381S5V32I1PLLIAICDBX2EW3SS3NUIMMJX4.png\n",
|
||||
"[Batch 1] ✅ FINST-FX7660A1N11VJB6IBDBRE8N012ZQ2HVJIWBAMYL2.jpg\n",
|
||||
"[Batch 1] ✅ FINST-G7B66QC1U162UFRMHJFJ59Q5VZZD3VQ1MS4KM0F.png\n",
|
||||
"[Batch 1] ✅ FINST-HI766JB1ORJFF6STEI8PR6E3YJTF2B87VNDOLSM5.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-HRD66W919462UFW0NG4PODHZZUW63074RZAKM1DK.png\n",
|
||||
"[Batch 1] ✅ FINST-IO766F81JX9VU83Z6OR927WUWBUJ3FDQKEGAM0X.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-IQC66GC18W4YQ8GSCL23T582HU1H3960PVGEML8.png\n",
|
||||
"[Batch 1] ✅ FINST-IRD66GC15CA2MFOFM8MHCBN7OSWA3PKSUZAKMKS.png\n",
|
||||
"[Batch 1] ✅ FINST-IRD66PB1X8I2R8DLJKVF9667G4LC3TWHHZLKM0J.png\n",
|
||||
"[Batch 1] ✅ FINST-IUF66391KP8W6U35CG7JL8UC2GK52JXZA6TBM6P.png\n",
|
||||
"[Batch 1] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"[Batch 1] ✅ FINST-J3D66LA13NTHEZAICABNRCD3KVCY222Q7IORL7UD.jpg\n",
|
||||
"[Batch 1] ✅ FINST-JB966E91FW8YJMLMD52WCCZCXO5V28E0JHMEMM.jpg\n",
|
||||
"[Batch 1] ✅ FINST-JXA66PB1ONATQBEIBDMEZ45MLMVB3M0CO6O7MH01.png\n",
|
||||
"[Batch 1] ✅ FINST-JZE66UC1Q8H2F0E3M38EX853TR242SGJFJKKMK8.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-K7E66Z91F5NYOC0UD20BO775JN8C3D763K6FM16.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-KW866QB13VPZ5OSE9CE0LAWVKEO23QA4XVOGM92.jpg\n",
|
||||
"[Batch 1] ✅ FINST-L3D66981YN31J5O8MGQCCCPF6FE82J0EBZMIMQ61.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-LCC66CA1BTTCK1HQ9S8TP91UHORX3JHYWOQKLO65.pptx\n",
|
||||
"[Batch 1] ✅ FINST-LLA66D71DDUN56UUBRVZVD2EO3TS291ZDU00M734.png\n",
|
||||
"[Batch 1] ✅ FINST-NLD66NA171BT4QDDCKR6HBD8XSHG3UJ1FSP7MJ39.png\n",
|
||||
"[Batch 1] ✅ FINST-OPA665A1KV9TAY9UA78YID6X4S4Y2HPA03N7MO3.png\n",
|
||||
"[Batch 1] ✅ FINST-P6D66F71YYMY4D4PE6FL58E9BU8X3JUP0G6FM6R.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-PF866EA1IKDECQEC8I8IECI2W3YI38JSXOPMLP8.jpg\n",
|
||||
"[Batch 1] ✅ FINST-PJE66J91RJNZ1RSPBUYJB5ZF2PTI2TGY7PLGMAN.jpg\n",
|
||||
"[Batch 1] ✅ FINST-PQ5669911JFP4W356K5HS98S8MZC2MUHMO82MX5.png\n",
|
||||
"[Batch 1] ✅ FINST-PRF66GB105ZWQSK7CUNWR97ZV6LG3050I9UCMAY.png\n",
|
||||
"[Batch 1] ✅ FINST-QJG66FC1JCE085Q3N439VAMLKVFF3GUQFMOHMEF2.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-QJG66IB1GWQZN4GVAGZCW8NQ61VB3AK3KSRGMWY1.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-QKC666919BQY70PZ8G3T57AX7UNA29H3N0BFMSC.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-QW8665B1XE41XSIJK01GJCNZ5YNQ2CRLVXNIMZW.png\n",
|
||||
"[Batch 1] ✅ FINST-RAC66GD197JYBI9Q9WU4B731F3O52QOQQ42FMFR5.jpg\n",
|
||||
"[Batch 1] ✅ FINST-UAD66591M1KJAXF6CROAFDK9Y4PD3IFY2QZTLUR1.jpg\n",
|
||||
"[Batch 1] ✅ FINST-UH9665D1TLYDLO5TDNPV0CEJTFGX2AMSWP4MLGP.png\n",
|
||||
"[Batch 1] ✅ FINST-USC66V6144XYJV79FR19G4JRKPA52X6OX8LFMWU3.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-UZA66QC18I9WZM23F0GIC4UMA25B2C14SHUBM742.png\n",
|
||||
"[Batch 1] ✅ FINST-WM6666B10OZIDIA9C6K6R8A6NXEU3UON1HETL2ZJ.jpg\n",
|
||||
"[Batch 1] ✅ FINST-WSF66J812FUXCO5ZCWI70C2TW7TG2OMS0F2EMAP1.png\n",
|
||||
"[Batch 1] ✅ FINST-WSF66J818UYXDCKS8IZ7K50QAGNH2K3MJG8EMJP1.xlsx\n",
|
||||
"[Batch 1] ✅ FINST-WYG66T718EQ0Z4TMNO8P2CRTS6NE3EUF016IMSDA.pptx\n",
|
||||
"[Batch 1] ✅ FINST-Z6966NB14IDEWL268Y71A8FOS0HD2ROSG3QMLGZ3.mp4\n",
|
||||
"[Batch 1] ✅ FINST-ZH866O918DRFX8WWEBEDSBMRTNU93TRYXNNOLVY.jpg\n",
|
||||
"[Batch 1] ✅ FINST-ZKD66Q71XPBRGBVI8Z5FGCIWR2KS2NCI9TZ4MQ5L.xlsx\n",
|
||||
"📁 正在生成批次 2: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_2\n",
|
||||
"[Batch 2] ✅ FINST-0D866I81JANY5WG8A2DT15S63HZH20YFR68FMQJA.png\n",
|
||||
"[Batch 2] ✅ FINST-0HD66Z81DFXYBP816VRKD6S2HA2H3RYCBYKFMR6.jpg\n",
|
||||
"[Batch 2] ✅ FINST-54A66HC1426KP5L87MXEA682I67O23YKVXUUL9U9.jpg\n",
|
||||
"[Batch 2] ✅ FINST-65D66X71VHAPFNPZ9OFURCIREZAS28FI7P12MJS.jpg\n",
|
||||
"[Batch 2] ✅ FINST-9FA66WC1LDJNFROD7HJUI4OJ6C2J22UP25SZLUQA.jpg\n",
|
||||
"[Batch 2] ✅ FINST-BL866S61XU8DOZG5BZ6E4DZ2UOIV3B6CEHALL3QI.png\n",
|
||||
"[Batch 2] ✅ FINST-ETA66681ZAHDHL2OA0MQR6UB9W5N2MZM2DGLLU2.xlsx\n",
|
||||
"[Batch 2] ✅ FINST-F1A66381S5V32I1PLLIAICDBX2EW3SS3NUIMMJX4.png\n",
|
||||
"[Batch 2] ✅ FINST-HRD66W919462UFW0NG4PODHZZUW63074RZAKM1DK.png\n",
|
||||
"[Batch 2] ✅ FINST-IQC66GC18W4YQ8GSCL23T582HU1H3960PVGEML8.png\n",
|
||||
"[Batch 2] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"[Batch 2] ✅ FINST-J3D66LA13NTHEZAICABNRCD3KVCY222Q7IORL7UD.xlsx\n",
|
||||
"[Batch 2] ✅ FINST-K7E66Z91F5NYOC0UD20BO775JN8C3D763K6FM16.xlsx\n",
|
||||
"[Batch 2] ✅ FINST-KW866QB13VPZ5OSE9CE0LAWVKEO23QA4XVOGM92.jpg\n",
|
||||
"[Batch 2] ✅ FINST-LLA66D71DDUN56UUBRVZVD2EO3TS291ZDU00M734.png\n",
|
||||
"[Batch 2] ✅ FINST-NLD66NA171BT4QDDCKR6HBD8XSHG3UJ1FSP7MJ39.png\n",
|
||||
"[Batch 2] ✅ FINST-PF866EA1IKDECQEC8I8IECI2W3YI38JSXOPMLP8.jpg\n",
|
||||
"📁 正在生成批次 3: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_3\n",
|
||||
"[Batch 3] ✅ FINST-65D66X71VHAPFNPZ9OFURCIREZAS28FI7P12MJS.png\n",
|
||||
"[Batch 3] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"📁 正在生成批次 4: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_4\n",
|
||||
"[Batch 4] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"📁 正在生成批次 5: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_5\n",
|
||||
"[Batch 5] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"📁 正在生成批次 6: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_6\n",
|
||||
"[Batch 6] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"📁 正在生成批次 7: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_7\n",
|
||||
"[Batch 7] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"📁 正在生成批次 8: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_8\n",
|
||||
"[Batch 8] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"📁 正在生成批次 9: C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\FPO提交_20260418093857_resources_1\\输出_9\n",
|
||||
"[Batch 9] ✅ FINST-J0A66981DAZDOPI7EF20N91K9UM72O8N526MLZO2.png\n",
|
||||
"\n",
|
||||
"🎉 处理完成!共生成 9 个批次文件夹。\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"execution_count": 2
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -219,34 +227,13 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"id": "90309f69",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"🔍 正在扫描所有文件...\n",
|
||||
"✅ 共找到 9 个文件,分属:附件、图片、其他\n",
|
||||
"\n",
|
||||
"📦 处理类别: 附件 (共 1 批)\n",
|
||||
"[附件 Batch 1] ✅ FINST-56B66Q91XU6TMONCFZBLBCVK9MS03SSG3SI7MR1.pdf\n",
|
||||
"[附件 Batch 1] ✅ FINST-C98664A1A8XJTVAW9W0256C4AF5S2JIWPBIULNM3.pdf\n",
|
||||
"[附件 Batch 1] ✅ FINST-JZ766R91YWUW0FZ6CXRXSBAVXQ0J2ZOZEEOCMGA.pdf\n",
|
||||
"[附件 Batch 1] ✅ FINST-R3D664B1B7ZYYR569QITJB9VCZXT2B8WIUNFM4X2.xlsx\n",
|
||||
"[附件 Batch 1] ✅ FINST-RC966V713AMLLTHG8M1UBD6OK7EG3M3PWTYWLQYL.pdf\n",
|
||||
"[附件 Batch 1] ✅ FINST-SUC66KA1UDIL18KXAMFCK9PW64XN375YHFQWLLC.pdf\n",
|
||||
"[附件 Batch 1] ✅ FINST-TM966BD1Y9HK1YK1BFUOL9IO9TSI3WK4G6CVLS45.xlsx\n",
|
||||
"[附件 Batch 1] ✅ FINST-ZKD66Q719O2TZRLY5HZJNAFGJW2F2IE4JYC7M0F.jpg\n",
|
||||
"\n",
|
||||
"📦 处理类别: 图片 (共 1 批)\n",
|
||||
"[图片 Batch 1] ✅ FINST-SUC66KA1C5YJQ4NNAKAGHBOOPPFQ3QX7EJQULEKV1.jpg\n",
|
||||
"\n",
|
||||
"🎉 所有类别处理完成!\n"
|
||||
]
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2026-04-18T07:04:36.512416200Z",
|
||||
"start_time": "2026-04-18T07:04:36.466302Z"
|
||||
}
|
||||
],
|
||||
},
|
||||
"source": [
|
||||
"import os\n",
|
||||
"import shutil\n",
|
||||
@@ -254,7 +241,7 @@
|
||||
"import hashlib\n",
|
||||
"\n",
|
||||
"# 配置\n",
|
||||
"root_path = r\"C:\\Users\\hp_z66\\OneDrive\\Desktop\\新建文件夹\\商机提交_20260209161647_resources_1\"\n",
|
||||
"root_path = r\"C:\\Users\\hp_z66\\Desktop\\2026-4-18智数\\商机提交_20260418093735_resources_1\"\n",
|
||||
"\n",
|
||||
"# 分类存储:{\"附件\": {finst_id: [file1, file2, ...]}, \"图片\": {...}, \"其他\": {...}}\n",
|
||||
"categorized_files = {\n",
|
||||
@@ -361,7 +348,33 @@
|
||||
" print(f\"[{category_name} Batch {batch_index}] ❌ 复制失败: {e}\")\n",
|
||||
"\n",
|
||||
"print(f\"\\n🎉 所有类别处理完成!\")"
|
||||
]
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"🔍 正在扫描所有文件...\n",
|
||||
"✅ 共找到 9 个文件,分属:附件、图片、其他\n",
|
||||
"\n",
|
||||
"📦 处理类别: 附件 (共 1 批)\n",
|
||||
"[附件 Batch 1] ✅ FINST-56B66Q91XU6TMONCFZBLBCVK9MS03SSG3SI7MR1.pdf\n",
|
||||
"[附件 Batch 1] ✅ FINST-C98664A1A8XJTVAW9W0256C4AF5S2JIWPBIULNM3.pdf\n",
|
||||
"[附件 Batch 1] ✅ FINST-JZ766R91YWUW0FZ6CXRXSBAVXQ0J2ZOZEEOCMGA.pdf\n",
|
||||
"[附件 Batch 1] ✅ FINST-R3D664B1B7ZYYR569QITJB9VCZXT2B8WIUNFM4X2.xlsx\n",
|
||||
"[附件 Batch 1] ✅ FINST-RC966V713AMLLTHG8M1UBD6OK7EG3M3PWTYWLQYL.pdf\n",
|
||||
"[附件 Batch 1] ✅ FINST-SUC66KA1UDIL18KXAMFCK9PW64XN375YHFQWLLC.pdf\n",
|
||||
"[附件 Batch 1] ✅ FINST-TM966BD1Y9HK1YK1BFUOL9IO9TSI3WK4G6CVLS45.xlsx\n",
|
||||
"[附件 Batch 1] ✅ FINST-ZKD66Q719O2TZRLY5HZJNAFGJW2F2IE4JYC7M0F.jpg\n",
|
||||
"\n",
|
||||
"📦 处理类别: 图片 (共 1 批)\n",
|
||||
"[图片 Batch 1] ✅ FINST-SUC66KA1C5YJQ4NNAKAGHBOOPPFQ3QX7EJQULEKV1.jpg\n",
|
||||
"\n",
|
||||
"🎉 所有类别处理完成!\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"execution_count": 6
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
|
||||
Reference in New Issue
Block a user