This commit is contained in:
2026-04-09 10:19:09 +08:00
parent eaf83c6f85
commit cc445c405a
25 changed files with 8165 additions and 3155 deletions
@@ -63,7 +63,7 @@ def ceshi(formData) -> str:
print("生成失败预警!")
cookies_str ="marketingSESSIONID=1458e261-f7a5-44ab-813e-5112e3b54222; sajssdk_2015_cross_new_user=1; erpLanguage=zh-CN; prodOrg=11240984669918390035; unp=15956902486724325447; un=15956902486724325447; _up=-NillNN-qyBEJ--t3vnSknvoOF52yPeEsM8B2304WONeVPTFo57QjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEvEVrIIg0AAJ9_NRv-ZNHu3M-GTc1523HHeqquVTjukek1TGOhdorEj9kxq49c3TRxc.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215956902486724325447%22%2C%22first_id%22%3A%2219a48e066e68e2-067b1e693596828-4c657b58-2073600-19a48e066e71500%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%2219a48e066e68e2-067b1e693596828-4c657b58-2073600-19a48e066e71500%22%7D; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1762159273; HMACCOUNT=55F2182717FD6AE6; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1762159385"
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 = cookies_str.encode('utf-8').decode('latin-1')
cookie_dict = {item.split('=')[0]: item.split('=')[1]
@@ -75,9 +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"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\模板\套餐卡退卡.xls")
data = xlrd.open_workbook(r"C:\Users\hp_z66\OneDrive\Desktop\钉钉文件\退卡.xls")
table = data.sheet_by_index(0) # 通过索引顺序获取
table = data.sheet_by_index(1) # 通过索引顺序获取
h = table.nrows
@@ -131,7 +132,7 @@ for i in tqdm(range(1, h)):
"czkList": [],
"paymentList": [
{
"paymentTypeId": "18525862", # 各门店不同 手动更新
"paymentTypeId": "6932687", # 各门店不同 手动更新
"paymentType": "现金",
"paymentAmount": idMember2,
"gatheringType": 0,
@@ -168,7 +169,7 @@ for i in tqdm(range(1, h)):
res = requests.post(f'https://yunxiu.f6car.cn/financial/advance/payment/singleGathering',
headers=headers, cookies=cookie_dict, json=data)
print("打印出响应信息:", i, cardVersion, cardVersion1, resdata, idMember, res.text)
time.sleep(4)
time.sleep(2)
# break # 测试
except:
formData = {
@@ -20,10 +20,10 @@ def parse_cookie_string(cookie_str):
return {k: v.value for k, v in cookie.items()}
cookies = "maintainSESSIONID=5668579a-89bd-4faf-8bc3-71e045e4c19f; sajssdk_2015_cross_new_user=1; erpLanguage=zh-CN; prodOrg=11240984669917717605; unp=15658191795152506944; un=15658191795152506944; _up=-NillNN-qyBEJ--t3vnSknvoOF55yPmMucwC2n4-X-VYVvfIo53QjaZJ9Q3d-WrAAGgt60MgQHajHWBHMqWxj0OjWylpxpYEXk7xGLY883DqFPoSrYgr3wsF_O1f6PpAWPXU62Df25CwHHavp-hUjOkfkFDKOhd98xbtwx3f_My0TQ..; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215658191795152506944%22%2C%22first_id%22%3A%2219c55b3f719b4d-0c0ba8a14163198-4c657b58-2073600-19c55b3f71a1e63%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%2219c55b3f719b4d-0c0ba8a14163198-4c657b58-2073600-19c55b3f71a1e63%22%7D; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1770964400; HMACCOUNT=592B0DDEAFF7F37D; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1770964405"
cookies = "camaroSESSIONID=a3f9a309-cdbf-4ada-9afd-9fedbbf5a611; erpLanguage=zh-CN; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1772617481,1772846629,1773129610,1773900258; HMACCOUNT=A6A0585E8C70051D; prodOrg=11240984669917749532; unp=15671257394116059163; un=15671257394116059163; _up=-NillNN-qyBEJ--t3vnSknvoOF55yvCPtcoG2n8-W-FdU_jAoZrQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_AdqIsi0QoL__BRv-ZNHu3M-GTc2J-wF3KvreRRiOockFPKPxVsrEj94Xz8q7jyNhY.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215671257394116059163%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=1773910193"
cookies_dict = parse_cookie_string(cookies)
df = pd.read_excel(fr"C:\Users\hp_z66\OneDrive\Desktop\品牌.xlsx",sheet_name=0)
df = pd.read_excel(fr"C:\Users\hp_z66\Downloads\品牌 (1).xlsx",sheet_name=0)
for index,row in tqdm(df.iterrows()):
brandNmae = row["品牌名"]
# cookies = requests.utils.dict_from_cookiejar(cookies)
@@ -1,16 +1,129 @@
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# 材料分类新增",
"id": "24450285119edffc"
},
{
"cell_type": "code",
"execution_count": null,
"id": "initial_id",
"metadata": {
"collapsed": true
"collapsed": true,
"ExecuteTime": {
"end_time": "2026-03-03T03:05:10.661554200Z",
"start_time": "2026-03-03T03:05:10.192818600Z"
}
},
"outputs": [],
"source": [
""
]
"import requests\n",
"import pandas as pd\n",
"cookies = {\n",
" 'f6-ids-goodsSESSIONID': 'bdf9d5f3-4ef8-4877-ba8b-621b10eba091',\n",
" 'erpLanguage': 'zh-CN',\n",
" 'tmall': 'false',\n",
" 'prodOrg': '11240984669917217520',\n",
" 'unp': '15865484595890778191',\n",
" '_up': '-NillNN-qyBEJ--t3vnSknvoOF53y_SJuMkA2n43U-daUfnArpjQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_ERqYsr3gUN9_NRv-ZNHu3M-GTc1p60EX-sq-RQgeIal1HLPxpurEj9nxTH98zEYGg.',\n",
" 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2215865484595890778191%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',\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",
" 'content-type': 'application/json;charset=UTF-8',\n",
" 'origin': 'https://ids-goods.f6car.cn',\n",
" 'priority': 'u=1, i',\n",
" 'referer': 'https://ids-goods.f6car.cn/f6-ids-goods/view/material.html',\n",
" 'sec-ch-ua': '\"Not:A-Brand\";v=\"99\", \"Microsoft Edge\";v=\"145\", \"Chromium\";v=\"145\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\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/145.0.0.0 Safari/537.36 Edg/145.0.0.0',\n",
" # 'cookie': 'f6-ids-goodsSESSIONID=bdf9d5f3-4ef8-4877-ba8b-621b10eba091; erpLanguage=zh-CN; tmall=false; prodOrg=11240984669917217520; unp=15865484595890778191; _up=-NillNN-qyBEJ--t3vnSknvoOF53y_SJuMkA2n43U-daUfnArpjQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_ERqYsr3gUN9_NRv-ZNHu3M-GTc1p60EX-sq-RQgeIal1HLPxpurEj9nxTH98zEYGg.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215865484595890778191%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',\n",
"}\n",
"df = pd.read(fr\"C:\\Users\\hp_z66\\OneDrive\\Desktop\\钉钉文件\\新建 XLS 工作表.xls\",sheet_name='Sheet1')\n",
"for index, row in df.iterrows():\n",
" print(f\"正在创建材料一级分类{df[\"上级分类名称\"]}\")\n",
" json_data = {\n",
" 'partCategory': {\n",
" 'categoryLevel': 1,\n",
" 'name': df[\"上级分类名称\"],\n",
" 'pId': '14438164991364920807',\n",
" 'sort': 999,\n",
" 'kzId': '',\n",
" },\n",
" }\n",
"\n",
" response = requests.post(\n",
" 'https://ids-goods.f6car.cn/f6-ids-goods/part/category/add',\n",
" cookies=cookies,\n",
" headers=headers,\n",
" json=json_data,\n",
" )\n",
"\n",
" pkId = response.json().get(\"data\").get(\"pkId\")\n",
" print(f\"正在创建材料2级分类{df[\"分类名称\"]}\")\n",
" json_data = {\n",
" 'partCategory': {\n",
" 'categoryLevel': 2,\n",
" 'name': df[\"分类名称\"],\n",
" 'sort': '',\n",
" 'pId': pkId,\n",
" 'idFrom': '',\n",
" 'kzId': '',\n",
" },\n",
" }\n",
"\n",
" response = requests.post(\n",
" 'https://ids-goods.f6car.cn/f6-ids-goods/part/category/add',\n",
" cookies=cookies,\n",
" headers=headers,\n",
" json=json_data,\n",
" )\n",
" print(\"材料二级分类完成\")"
],
"outputs": [
{
"data": {
"text/plain": [
"{'code': 200,\n",
" 'data': {'categoryLevel': 1,\n",
" 'code': '',\n",
" 'creationtime': 1772507110598,\n",
" 'creator': '15865484595890778191',\n",
" 'groupId': None,\n",
" 'href': '',\n",
" 'id': None,\n",
" 'idFrom': None,\n",
" 'idMaintainType': '0',\n",
" 'idOwnOrg': '11240984669917217520',\n",
" 'isDel': 0,\n",
" 'kzId': '',\n",
" 'manageStatus': None,\n",
" 'modifiedtime': 1772507110598,\n",
" 'modifier': '15865484595890778191',\n",
" 'name': '23',\n",
" 'nodes': None,\n",
" 'pId': '14438164991364920807',\n",
" 'parentName': '',\n",
" 'partPriceRuleId': None,\n",
" 'pkId': '14582097883198654339',\n",
" 'queryFlag': None,\n",
" 'sort': 999,\n",
" 'text': ''},\n",
" 'message': 'SUCCESS'}"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 3
}
],
"metadata": {
+17 -25
View File
@@ -27,16 +27,14 @@
"import pandas as pd\n",
"import os\n",
"\n",
"\n",
"\n",
"cookies = {\n",
" 'f6-ids-goodsSESSIONID': '32660868-f969-4f7f-9267-db66aafad920',\n",
" 'f6-ids-goodsSESSIONID': 'b013763e-f0ee-4175-bc42-bc3045c56f81',\n",
" 'erpLanguage': 'zh-CN',\n",
" 'prodOrg': '16034652297803894850',\n",
" 'unp': '16034652300295311374',\n",
" '_up': '-NillNN-qyBEJ--t3vnSknvoOF1_zvWLtc8G03s9U-JeV_DCoJ3QjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_MVr4Mq1wsM__VRv-ZNHu3M-GTf3pu1E3Kqre1Vi-Ifk1fCPRRrrEj9m1mw9bCwNGQ.',\n",
" 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2216034652300295311374%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',\n",
" 'tmall': 'false',\n",
" 'prodOrg': '10545724654284683060',\n",
" 'unp': '10907434497537082431',\n",
" '_up': '-NillNN-qyBEJ--t3vnSknvoOFt2zfaJs8kB2nw6WeBdXvPFpJjQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_Adrokr3wcJ-vVRv-ZNHu3M-GTZ15i2EXSsquRSjOgdkF7BOhBurEj9nBrn9JjPSwY.',\n",
" 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2210907434497537082431%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',\n",
"}\n",
"\n",
"headers = {\n",
@@ -46,16 +44,16 @@
" 'origin': 'https://ids-goods.f6car.cn',\n",
" 'priority': 'u=1, i',\n",
" 'referer': 'https://ids-goods.f6car.cn/f6-ids-goods/view/material.html',\n",
" 'sec-ch-ua': '\"Not(A:Brand\";v=\"8\", \"Chromium\";v=\"144\", \"Microsoft Edge\";v=\"144\"',\n",
" 'sec-ch-ua': '\"Chromium\";v=\"146\", \"Not-A.Brand\";v=\"24\", \"Microsoft Edge\";v=\"146\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\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/144.0.0.0 Safari/537.36 Edg/144.0.0.0',\n",
" # 'cookie': 'f6-ids-goodsSESSIONID=32660868-f969-4f7f-9267-db66aafad920; erpLanguage=zh-CN; prodOrg=16034652297803894850; unp=16034652300295311374; _up=-NillNN-qyBEJ--t3vnSknvoOF1_zvWLtc8G03s9U-JeV_DCoJ3QjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_MVr4Mq1wsM__VRv-ZNHu3M-GTf3pu1E3Kqre1Vi-Ifk1fCPRRrrEj9m1mw9bCwNGQ.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2216034652300295311374%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',\n",
" 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0',\n",
" # 'cookie': 'f6-ids-goodsSESSIONID=b013763e-f0ee-4175-bc42-bc3045c56f81; erpLanguage=zh-CN; tmall=false; prodOrg=10545724654284683060; unp=10907434497537082431; _up=-NillNN-qyBEJ--t3vnSknvoOFt2zfaJs8kB2nw6WeBdXvPFpJjQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqE_Adrokr3wcJ-vVRv-ZNHu3M-GTZ15i2EXSsquRSjOgdkF7BOhBurEj9nBrn9JjPSwY.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2210907434497537082431%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',\n",
"}\n",
"org_id = '16034652297803894850'\n",
"org_id = '10545724654284683060'\n",
"# 第一步:获取所有材料列表(分页)\n",
"json_data = {\n",
" 'keyWord': '',\n",
@@ -91,19 +89,12 @@
"\n",
"\n",
"try:\n",
" response = requests.post(\n",
" 'https://ids-goods.f6car.com/f6-ids-goods/part/getExactPartStockInfo',\n",
" cookies=cookies,\n",
" json=json_data,\n",
" )\n",
" response.raise_for_status()\n",
" total_pages = response.json().get(\"data\", {}).get(\"totalPages\", 0)\n",
" print(f\"材料列表页数: {total_pages}\")\n",
"\n",
" df = pd.read_excel(fr\"C:\\Users\\hp_z66\\Desktop\\钉钉文件\\一号车库材料信息需添加条码(宗川涵).xls\",\n",
" engine='xlrd', sheet_name=0)\n",
" all_materials_list = []\n",
" total_pages = int(total_pages)\n",
" for page in tqdm(range(1, total_pages + 1), desc=\"获取材料列表\"):\n",
" json_data['currentPage'] = page\n",
" for index, row in tqdm(df.iterrows(), desc=\"获取材料列表\"):\n",
" json_data['currentPage'] = 1\n",
" json_data['keyWord'] = row[\"规格\"]\n",
" try:\n",
" resp = requests.post(\n",
" 'https://ids-goods.f6car.com/f6-ids-goods/part/getExactPartStockInfo',\n",
@@ -123,7 +114,8 @@
" print(f\"获取材料列表失败: {str(e)}, 堆栈信息: {traceback.format_exc()}\")\n",
" raise\n",
"\n",
"df = pd.read_excel(fr\"C:\\Users\\hp_z66\\Desktop\\钉钉文件\\一号车库材料信息需添加条码(宗川涵).xls\", engine='xlrd',sheet_name=0)\n",
"df = pd.read_excel(fr\"C:\\Users\\hp_z66\\Desktop\\钉钉文件\\一号车库材料信息需添加条码(宗川涵).xls\", engine='xlrd',\n",
" sheet_name=0)\n",
"# 第二步:构建 update_map(只存原始值,不预处理)\n",
"update_map = {}\n",
"skipped_count = 0\n",
@@ -146,7 +138,7 @@
"failure_count = 0\n",
"skip_count = 0\n",
"\n",
"for item in tqdm(all_materials_list, desc=\"处理材料更新\",total = len(all_materials_list)):\n",
"for item in tqdm(all_materials_list, desc=\"处理材料更新\", total=len(all_materials_list)):\n",
" custom_code = item.get(\"customCode\")\n",
" if not custom_code or str(custom_code) not in update_map:\n",
" continue\n",
@@ -23,9 +23,9 @@ logger.addHandler(handler)
# 1.向服务器发送请求登录
username = "15942460506"
password = "Aa123456"
store_name = "安顺专业贴膜导航快修保养"
username = "18838982933"
password = "Ff123456"
store_name = "武汉经济技术开发区沌阳汽车修理有限公司"
module = 1
res = f6_module.login_in(username, password, store_name)
+154 -13
View File
@@ -1,4 +1,4 @@
from datetime import datetime
from datetime import datetime, timezone, timedelta, date, UTC
import time
from typing import Optional, List, Dict, Any
import requests
@@ -230,6 +230,7 @@ class API:
return data_get
class BossPermissionAutoApproval:
"""
Boss权限自动审批
@@ -356,6 +357,13 @@ class BossPermissionAutoApproval:
:param df: 含门店编码的df
:return: df
"""
if df is None or df.empty:
if df is None:
df = pd.DataFrame()
if "company_id" not in df.columns:
df["company_id"] = []
return df
unique_codes = df["门店编码"].unique().tolist()
# 初始化存储结果的字典
@@ -459,7 +467,124 @@ class BossPermissionAutoApproval:
# df.to_csv(fr"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\文件输出\门店含id权限功能映射.csv", index=False)
return df
def send_task_error(self, task_start_time: str, task_name: str, error_message: str,
df: pd.DataFrame = None) -> None:
"""
将任务失败情况发送到简道云(影响业务数据时调用)
:param df: 失败文件
:param task_start_time: 任务开始时间(字符串格式:"%Y-%m-%d %H:%M:%S",表示北京时间 UTC+8
:param task_name: 任务名称
:param error_message: 失败详情
"""
try:
# 1. 获取当前 UTC 时间(时区感知对象)
end_time_utc = datetime.now(UTC) # ✅ 替代 utcnow()
# 2. 解析传入的北京时间(UTC+8)
task_start_naive = datetime.strptime(task_start_time, "%Y-%m-%d %H:%M:%S")
# 3. 转换为 UTC 时间(减去 8 小时,并附加 UTC 时区)
task_start_utc = task_start_naive - timedelta(hours=8)
task_start_utc = task_start_utc.replace(tzinfo=timezone.utc) # 显式标记为 UTC
# 4. 计算运行时间(时区感知对象可直接相减)
run_time = end_time_utc - task_start_utc
run_time_sec = int(run_time.total_seconds())
# 5. 格式化时间为 UTC 的 ISO 8601 格式(带 "Z"
today_utc = end_time_utc.strftime("%Y-%m-%d")
task_end_iso = end_time_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
task_start_iso = task_start_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
# 6.上传附件
UUid = time.strftime("%Y%m%d%H%M%S", time.localtime())
if df is not None:
df.to_excel("upload_file.xlsx", index=False)
file_path = "upload_file.xlsx"
up_data = API().get_upload_token(
{"api_key": "6694d3c4fcb69ca9a111a6c4", "entry_id": "689ae65da00c17578e27cd74",
"transaction_id": UUid})
upload_url = up_data.get("upload_url")
upload_token = up_data.get("upload_token")
upload_result = API().upload_file(
{"upload_url": upload_url, "upload_token": upload_token, "file_path": file_path})
upload_key = upload_result.get("key")
else:
upload_key = ""
# 7. 构造请求数据(所有时间以 UTC 格式发送)
payload = {
"api_key": "6694d3c4fcb69ca9a111a6c4",
"entry_id":"689ae65da00c17578e27cd74",
"data": {
"_widget_1744873387500": {"value": today_utc}, # UTC 日期
"_widget_1743644977694": {"value": task_name},
"_widget_1744873387501": {"value": task_start_iso}, # UTC 开始时间
"_widget_1744873387502": {"value": task_end_iso}, # UTC 结束时间
"_widget_1744873387504": {"value": run_time_sec},
"_widget_1754981992215": {"value": error_message}, # 错误信息
"_widget_1764830825356": {"value": [upload_key]}
},
"transaction_id": UUid
}
# 8. 发送请求
response = API().data_batch_create(payload)
except Exception as e:
print(e)
def send_task_status(self, task_start_time: str, task_name: str) -> None:
"""
将任务状态发送到简道云(开始时间为北京时间,需转换到 UTC)
:param task_start_time: 任务开始时间(字符串格式:"%Y-%m-%d %H:%M:%S",表示北京时间 UTC+8
:param task_name: 任务名称
"""
try:
# 1. 获取当前 UTC 时间(时区感知对象)
end_time_utc = datetime.now(UTC) # ✅ 替代 utcnow()
# 2. 解析传入的北京时间(UTC+8)
task_start_naive = datetime.strptime(task_start_time, "%Y-%m-%d %H:%M:%S")
# 3. 转换为 UTC 时间(减去 8 小时,并附加 UTC 时区)
task_start_utc = task_start_naive - timedelta(hours=8)
task_start_utc = task_start_utc.replace(tzinfo=timezone.utc) # 显式标记为 UTC
# 4. 计算运行时间(时区感知对象可直接相减)
run_time = end_time_utc - task_start_utc
run_time_sec = int(run_time.total_seconds())
# 5. 格式化时间为 UTC 的 ISO 8601 格式(带 "Z"
today_utc = end_time_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
task_end_iso = end_time_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
task_start_iso = task_start_utc.strftime("%Y-%m-%dT%H:%M:%SZ")
# 6. 构造请求数据(所有时间以 UTC 格式发送)
payload = {
"api_key": "6694d3c4fcb69ca9a111a6c4",
"entry_id": "67ede908eb9c22261016466e",
"data": {
"_widget_1744873387500": {"value": today_utc}, # UTC 日期
"_widget_1743644977694": {"value": task_name},
"_widget_1744873387501": {"value": task_start_iso}, # UTC 开始时间
"_widget_1744873387502": {"value": task_end_iso}, # UTC 结束时间
"_widget_1744873387504": {"value": run_time_sec},
}
}
# 7. 发送请求
response = API().data_batch_create(payload)
except Exception as e:
print(e)
def update_permission(self, df):
if df is None or df.empty:
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
cookie_str = self.get_cookies[0].get("_widget_1757558743223")
cookies = {}
@@ -487,6 +612,8 @@ class BossPermissionAutoApproval:
result_list = []
df.to_csv(fr"D:\Idea Project\F6+宜搭+其它(1)\张阳脚本\文件输出\门店含id权限功能映射.csv", index=False)
if "开关" not in df.columns:
return pd.DataFrame(columns=["数据id", "门店编码", "一级分类", "二级分类", "权限", "开关", "状态"])
df.dropna(subset=['开关'], inplace=True)
for index, row in df.iterrows():
print(row)
@@ -583,7 +710,8 @@ class BossPermissionAutoApproval:
headers=headers,
json=new_json_data,
)
# print(response.json())
time.sleep(0.5)
print(f"请求结果:{response.json()}")
if response.json().get("code", 1000) == 200:
result_list.append(
{
@@ -670,22 +798,35 @@ class BossPermissionAutoApproval:
print(f"全部成功的数据id{all_success_ids}")
def main(self):
task_start_time = datetime.now()
task_start_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
try:
# step1 获取简道云上任务列表
self.load_data()
# step1 获取简道云上任务列表
self.load_data()
if not self.task_data:
print("当前没有需要执行的任务,结束。")
self.send_task_status(task_start_time, "boss权限自动审批")
return
# step2 根据权限开通列表获取权限对应功能
payload_df = self.map_switch_data()
# step2 根据权限开通列表获取权限对应功能
payload_df = self.map_switch_data()
if payload_df is None or payload_df.empty:
print("当前没有匹配到需要执行的审批节点数据,结束。")
self.send_task_status(task_start_time, "boss权限自动审批")
return
# step3 根据门店编码查询公司id。
payload_df = self.get_company_id(payload_df)
# step3 根据门店编码查询公司id。
payload_df = self.get_company_id(payload_df)
# step4 批量修改权限
result_df = self.update_permission(payload_df)
# step4 批量修改权限
result_df = self.update_permission(payload_df)
# step5 简道云发送状态与同意
self.send_status_and_approval(result_df)
# step5 简道云发送状态与同意
self.send_status_and_approval(result_df)
self.send_task_status(task_start_time, "boss权限自动审批")
except Exception as e:
self.send_task_error(task_start_time, "boss权限自动审批失败", str(e))
if __name__ == '__main__':
@@ -0,0 +1,143 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "340bac5f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'code': 200, 'data': 'ok', 'message': 'SUCCESS'}\n"
]
}
],
"source": [
"import requests\n",
"\n",
"cookies = {\n",
" 'hive-adminSESSIONID': '25fbadf1-4cb6-408f-9e3a-b73e55c47852',\n",
" 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%224210192048793363%22%2C%22first_id%22%3A%2219b6df4cc821138-0de2a4b89caaa9-4c657b58-1327104-19b6df4cc8319da%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%2219b6df4cc821138-0de2a4b89caaa9-4c657b58-1327104-19b6df4cc8319da%22%7D',\n",
" '_yg_prod': 'EkX_f7K7eYt61spccZtpCE7FGQAxK5DfP_4PB6A0jCrCT1LYfszIPQQqjcJjPPEZL0J2pO07cfp8VG64XiDvBfYzvRdjXVIjT2D1e5La90Kcyw0I2IqvVma_W4j__vTE3I3zSTbNFRCPiizeGHdACpRaLiy_a2VE',\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",
" 'content-type': 'application/json;charset=UTF-8',\n",
" 'origin': 'https://manage.f6yc.com',\n",
" 'priority': 'u=1, i',\n",
" 'referer': 'https://manage.f6yc.com/',\n",
" 'sec-ch-ua': '\"Not:A-Brand\";v=\"99\", \"Microsoft Edge\";v=\"145\", \"Chromium\";v=\"145\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\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/145.0.0.0 Safari/537.36 Edg/145.0.0.0',\n",
" 'x-requested-with': 'XMLHttpRequest',\n",
" # 'cookie': 'hive-adminSESSIONID=25fbadf1-4cb6-408f-9e3a-b73e55c47852; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%224210192048793363%22%2C%22first_id%22%3A%2219b6df4cc821138-0de2a4b89caaa9-4c657b58-1327104-19b6df4cc8319da%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%2219b6df4cc821138-0de2a4b89caaa9-4c657b58-1327104-19b6df4cc8319da%22%7D; _yg_prod=EkX_f7K7eYt61spccZtpCE7FGQAxK5DfP_4PB6A0jCrCT1LYfszIPQQqjcJjPPEZL0J2pO07cfp8VG64XiDvBfYzvRdjXVIjT2D1e5La90Kcyw0I2IqvVma_W4j__vTE3I3zSTbNFRCPiizeGHdACpRaLiy_a2VE',\n",
"}\n",
"\n",
"json_data = {\n",
" 'orgId': '11240984669917217520',\n",
" 'remark': '238888',\n",
" 'endDate': '2027-12-19',\n",
"}\n",
"\n",
"response = requests.post('https://manage.f6yc.com/hive-admin/org/resetEndDate', cookies=cookies, headers=headers, json=json_data)\n",
"\n",
"# Note: json_data will not be serialized by requests\n",
"# exactly as it was in the original request.\n",
"#data = '{\"orgId\":\"11240984669917217520\",\"remark\":\"2333333\",\"endDate\":\"2027-12-30\"}'\n",
"#response = requests.post('https://manage.f6yc.com/hive-admin/org/resetEndDate', cookies=cookies, headers=headers, data=data)\n",
"print(response.json())"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9a6552b0",
"metadata": {},
"outputs": [],
"source": [
"import requests\n",
"\n",
"cookies = {\n",
" 'hive-adminSESSIONID': '7fa76a20-ca37-4a57-b0af-af0dd7c18d58',\n",
" 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%224210192048793363%22%2C%22first_id%22%3A%2219b6df4cc821138-0de2a4b89caaa9-4c657b58-1327104-19b6df4cc8319da%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%2219b6df4cc821138-0de2a4b89caaa9-4c657b58-1327104-19b6df4cc8319da%22%7D',\n",
" '_yg_prod': 'EkX_f7K7eYt61spccZtpCE7FGQAxK5DfP_4PB6A0jCrCT1LYfszIPQQqjcJjPPEZL0J2pO07cfp8VG64XiDvBfYzvRdjXVIjT2D1e5La90Kcyw0I2IqvVma_W4j__vTE3I3zSTbNFRCPiizeGHdACpRaLiy_a2VE',\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",
" 'content-type': 'application/json;charset=UTF-8',\n",
" 'origin': 'https://manage.f6yc.com',\n",
" 'priority': 'u=1, i',\n",
" 'referer': 'https://manage.f6yc.com/',\n",
" 'sec-ch-ua': '\"Not:A-Brand\";v=\"99\", \"Microsoft Edge\";v=\"145\", \"Chromium\";v=\"145\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\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/145.0.0.0 Safari/537.36 Edg/145.0.0.0',\n",
" 'x-requested-with': 'XMLHttpRequest',\n",
" # 'cookie': 'hive-adminSESSIONID=7fa76a20-ca37-4a57-b0af-af0dd7c18d58; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%224210192048793363%22%2C%22first_id%22%3A%2219b6df4cc821138-0de2a4b89caaa9-4c657b58-1327104-19b6df4cc8319da%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%2219b6df4cc821138-0de2a4b89caaa9-4c657b58-1327104-19b6df4cc8319da%22%7D; _yg_prod=EkX_f7K7eYt61spccZtpCE7FGQAxK5DfP_4PB6A0jCrCT1LYfszIPQQqjcJjPPEZL0J2pO07cfp8VG64XiDvBfYzvRdjXVIjT2D1e5La90Kcyw0I2IqvVma_W4j__vTE3I3zSTbNFRCPiizeGHdACpRaLiy_a2VE',\n",
"}\n",
"\n",
"json_data = {\n",
" 'orderId': 150619791,\n",
" 'newEndDate': '2026-11-28T16:00:00.000Z',\n",
" 'oldEndDate': 1795968000000, # 与实际显示日期有差别,加了28天,部分准确\n",
" 'memo': '1234',\n",
" 'type': 2, # 服务类型有关 不同服务对应不同\n",
" 'orderType': '',\n",
" 'clearAllValidPeriod': False,\n",
" 'orgId': '11240984669917090055',\n",
"}\n",
"\n",
"response = requests.post(\n",
" 'https://manage.f6yc.com/hive-admin/order/achievement/modifyEndDate',\n",
" cookies=cookies,\n",
" headers=headers,\n",
" json=json_data,\n",
")\n",
"\n",
"# Note: json_data will not be serialized by requests\n",
"# exactly as it was in the original request.\n",
"#data = '{\"orderId\":150619791,\"newEndDate\":\"2026-11-28T16:00:00.000Z\",\"oldEndDate\":1795968000000,\"memo\":\"1234\",\"type\":2,\"orderType\":\"\",\"clearAllValidPeriod\":false,\"orgId\":\"11240984669917090055\"}'\n",
"#response = requests.post(\n",
"# 'https://manage.f6yc.com/hive-admin/order/achievement/modifyEndDate',\n",
"# cookies=cookies,\n",
"# headers=headers,\n",
"# data=data,\n",
"#)\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6+宜搭+其它",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
+20 -1
View File
@@ -9,7 +9,26 @@
},
"outputs": [],
"source": [
""
"import anthropic\n",
"\n",
"client = anthropic.Anthropic()\n",
"\n",
"message = client.messages.create(\n",
" model=\"MiniMax-M2.5\", # 切换为其他模型,如 MiniMax-M2.1\n",
" max_tokens=1000,\n",
" system=\"You are a helpful assistant.\",\n",
" messages=[\n",
" {\n",
" \"role\": \"user\",\n",
" \"content\": [\n",
" {\n",
" \"type\": \"text\",\n",
" \"text\": \"Hi, how are you?\"\n",
" }\n",
" ]\n",
" }\n",
" ]\n",
")"
]
}
],
+30 -1
View File
@@ -1 +1,30 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
import anthropic
client = anthropic.Anthropic(
api_key="sk-cp-KfOUZiipk1SYliv6n5faaXQXIxRum6jiRdAF_aGiYeCSp12p4amSU94rPAvEp4ZgRAS7d8bwR7rruuGVqVCo9ZysSOewR0xPEOZ_XCPJEBhcqt5vrUWu4ls", # <--- 在这里填入你的 MiniMax 密钥
base_url="https://api.minimaxi.com/anthropic" # <--- MiniMax 的兼容接口地址
)
message = client.messages.create(
model="MiniMax-M2.5",
max_tokens=1000,
system="You are a helpful assistant.",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "你现在使用的是什么模型"
}
]
}
]
)
for block in message.content:
if block.type == "thinking":
print(f"Thinking:\n{block.thinking}\n")
elif block.type == "text":
print(f"Text:\n{block.text}\n")
@@ -21,8 +21,8 @@ class Main:
FORMID1 = "FORM-33666CB1XDU37AU57RKPK990C79S2YMOEEC8LS" # [表单]异常服务跟进待办2023
# 读取excel表格
df = pd.read_excel(r"C:\Users\hp_z66\OneDrive\Desktop\钉钉文件\2026-1回访已回访.xlsx",
sheet_name='Sheet5', dtype='string', header=1) # 此处将表头设置为了第二行
df = pd.read_excel(r"C:\Users\hp_z66\OneDrive\Desktop\钉钉文件\2026-3已导入.xlsx",
sheet_name='刷数据(注意部分字段替换)', dtype='string', header=1) # 此处将表头设置为了第二行
df.fillna('', inplace=True)
@staticmethod
@@ -28,7 +28,7 @@ class Main:
# 读取excel表格获取数据
ceshi_data = pd.read_excel(r"C:\Users\hp_z66\OneDrive\Desktop\钉钉文件\2026-1回访已回访.xlsx",sheet_name='7天')
ceshi_data = pd.read_excel(r"C:\Users\hp_z66\OneDrive\Desktop\钉钉文件\2026-3已导入.xlsx",sheet_name='7天节点且联系上(自动同意)')
print("已读取表格")
# 执行自动化脚本
+105
View File
@@ -0,0 +1,105 @@
{"服务单号":"_widget_1767851302585",
"连锁店数据同步":"_widget_1767851302586",
"服务单评价状态":"_widget_1767851302588",
"订单编码":"_widget_1767851302590",
"订单支付时间":"_widget_1767851302591",
"订单手机号码":"_widget_1767851302592",
"培训负责人":"_widget_1767851302593",
"开户时间":"_widget_1767851302600",
"加盟商信息":"_widget_1768892440188",
"老板姓名":"_widget_1767863644357",
"老板电话":"_widget_1767863644356",
"系统对接人姓名":"_widget_1767863644355",
"系统对接人电话":"_widget_1767863644358",
"是否联系上客户":"_widget_1767863644369",
"无法联系上的原因":"_widget_1767863644373",
"联系不上其他原因备注":"_widget_1767863644384",
"是否需要培训":"_widget_1767863644374",
"不需要培训原因":"_widget_1767863644376",
"不培训其他原因备注":"_widget_1767863644385",
"预计培训时间":"_widget_1767863644396",
"7天后培训原因":"_widget_1767863644397",
"超期培训其他原因说明":"_widget_1767863644400",
"原系统名称":"_widget_1767863644494",
"是否需要处理数据":"_widget_1767863644486",
"数据处理协助人":"_widget_1767863644582",
"是否需要其他人协助":"_widget_1767863644488",
"不需要处理数据原因":"_widget_1767863644490",
"期初不需要导入其他原因":"_widget_1767863644496",
"是否有意向开通企业钱包":"_widget_1767950519138",
"预计开通时间":"_widget_1767950519140",
"不开通原因":"_widget_1767950519141",
"未开通企业钱包其他原因":"_widget_1767950519144",
"本次上线是否为连锁":"_widget_1767950519038",
"调研计划表":"_widget_1767950133552",
"调研计划表.大阶段":"_widget_1767950133552._widget_1767950133553",
"调研计划表.事项":"_widget_1767950133552._widget_1767950133563",
"调研计划表.日期":"_widget_1767950133552._widget_1767950133555",
"调研计划表.完成状态":"_widget_1767950133552._widget_1767950133556",
"调研计划表.资料支持":"_widget_1767950133552._widget_1767950133565",
"调研计划表.说明":"_widget_1767950133552._widget_1767950133567",
"总部人员岗位.说明":"_widget_1767950519061._widget_1767950519095",
"中大店人员岗位":"_widget_1767952153274",
"中大店人员岗位.中大店人员岗位":"_widget_1767952153274._widget_1767952153275",
"中大店人员岗位.资料支持":"_widget_1767952153274._widget_1767952153276",
"中大店人员岗位.说明":"_widget_1767952153274._widget_1767952153277",
"小店系统人员":"_widget_1767952153280",
"小店系统人员.小店系统人员":"_widget_1767952153280._widget_1767952153281",
"小店系统人员.资料支持":"_widget_1767952153280._widget_1767952153282",
"小店系统人员.说明":"_widget_1767952153280._widget_1767952153283",
"门店经营范围":"_widget_1767952153422",
"洗美流程":"_widget_1768208029841",
"维保流程":"_widget_1768208029845",
"其他业务":"_widget_1768208030070",
"会员管理业务":"_widget_1768208030074",
"财务管理业务":"_widget_1768208030076",
"员工业绩管理":"_widget_1768208030078",
"数据统计需求":"_widget_1768208030080",
"管理员培训内容":"_widget_1768290159279",
"A版本岗位培训":"_widget_1768290159317",
"店长培训":"_widget_1768290159319",
"SA培训内容":"_widget_1768290159321",
"库管培训内容":"_widget_1768290159323",
"收银培训内容":"_widget_1768290159325",
"技师培训内容":"_widget_1768290159327",
"门店运营":"_widget_1768290159499",
"供应链":"_widget_1768290159501",
"市场营销":"_widget_1768290159503",
"客服":"_widget_1768290159505",
"财务":"_widget_1768290159507",
"基础设置":"_widget_1768290159656",
"材料编码是否允许自定义":"_widget_1768290159658",
"参数设置":"_widget_1768290159660",
"员工权限设置":"_widget_1768290159662",
"业绩规则是否已设置":"_widget_1768290159664",
"标签规则设置":"_widget_1768290159666",
"会员卡模板设置":"_widget_1768290159668",
"服务提醒规则设置":"_widget_1768290159670",
"客户回访规则设置":"_widget_1768290159672",
"公众号是否已配置":"_widget_1768290159674",
"微信商城配置":"_widget_1768290159676",
"门店名称":"_widget_1767851302597",
"公司名称":"_widget_1767851302598",
"运营专家":"_widget_1767851302595",
"专属运营顾问":"_widget_1767851302594",
"购买版本":"_widget_1767851302602",
"客户等级":"_widget_1767851302599",
"门店编码":"_widget_1767851302596",
"ERP操作模式":"_widget_1767851302604",
"门店类型":"_widget_1767851302606",
"调研完成时间":"_widget_1768290159736",
"服务单跟进时间":"_widget_1768290159737",
"培训完成时间":"_widget_1768290159738",
"距预计培训时间的天数":"_widget_1768292738361",
"距培训完成时间天数":"_widget_1768290159741",
"距调研时间天数":"_widget_1768290159742",
"是否超期未评价":"_widget_1768290159745",
"门店ID":"_widget_1768290159746",
"公司ID":"_widget_1768290159747",
"大区":"_widget_1768290159748",
"区域经理":"_widget_1768290159749",
"关联数据客户资料":"_widget_1768359885413",
"提交人":"creator",
"提交时间":"createTime",
"更新时间":"updateTime",
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
@@ -1,10 +1,12 @@
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# 车辆信息导出",
"id": "a738ca16021a9e3b"
"id": "a738ca16021a9e3b",
"metadata": {},
"source": [
"# 车辆信息导出"
]
},
{
"cell_type": "code",
@@ -12,50 +14,49 @@
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2025-12-22T09:33:52.535439Z",
"start_time": "2025-12-22T09:24:33.820278Z"
"end_time": "2026-03-24T03:12:19.747274800Z",
"start_time": "2026-03-24T02:42:20.660416400Z"
}
},
"source": [
"import time\n",
"\n",
"import pandas as pd\n",
"import requests\n",
"from tqdm import tqdm\n",
"\n",
"# Cookie 和 Headers 配置\n",
"cookies = {\n",
" 'acw_tc': '0a472f4517663729846515826e48e5fe00deb9589551f37ca83749c9ce043f',\n",
" 'Hm_lvt_684c22b31d0037eca5a691cde16370ad': '1765863565,1766372987',\n",
" 'Hm_lpvt_684c22b31d0037eca5a691cde16370ad': '1766372987',\n",
" 'HMACCOUNT': '55F2182717FD6AE6',\n",
" 'e_token': 'd6c91f1dbb754081948988a722287335',\n",
" 'acw_tc': '76b20f7917743149845914058ebc47559507cd60c8642e0d54dbe45b6da222',\n",
" 'Hm_lvt_684c22b31d0037eca5a691cde16370ad': '1773130169,1774314982',\n",
" 'Hm_lpvt_684c22b31d0037eca5a691cde16370ad': '1774314982',\n",
" 'HMACCOUNT': 'A6A0585E8C70051D',\n",
" 'e_token': 'f44423067c184689a19eb9dc564bf33e',\n",
" 'weixin_token': 'Y',\n",
" 'e_c': 'MzY3NTI1OTM0OTg4NzQxMA==',\n",
" 'e_i_o_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU5JUJDJThFJUU2JUI5JTk2JUU1JThDJUJBJUU1JTlEJTkxJUU1JThGJUEzJUU1JUJBJTk3JTVCKzIwMDI3NDUrJTVEJTIy',\n",
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU5JUJDJThFJUU2JUI5JTk2JUU1JThDJUJBJUU1JTlEJTkxJUU1JThGJUEzJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk4NjkrJTVEJTIy',\n",
" 'e_c': 'NTQ0MzQ1MDE0MTA3ODA1Mg==',\n",
" 'e_i_o_c_n': 'JTIyJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU4JThEJUEzJUU5JUFBJThGJUU2JUIxJUJEJUU4JUJEJUE2JUU3JUJCJUI0JUU0JUJGJUFFJUU0JUI4JUFEJUU1JUJGJTgzJTVCKzIwMDM5MDYrJTVEJTIy',\n",
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU2JUEzJTk1JUU2JUE2JTg4JUU1JTlCJUFEJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk5MDkrJTVEJTIy',\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",
" 'Cache-Control': 'no-cache',\n",
" 'Connection': 'keep-alive',\n",
" 'Content-Type': 'application/json;charset=UTF-8',\n",
" 'Irisclient': 'PC-web#tedspc',\n",
" 'Origin': 'https://teds.tyreplus.com.cn',\n",
" 'Pragma': 'no-cache',\n",
" 'Referer': 'https://teds.tyreplus.com.cn/tedspc/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",
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"',\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0',\n",
" 'sec-ch-ua': '\"Chromium\";v=\"146\", \"Not-A.Brand\";v=\"24\", \"Microsoft Edge\";v=\"146\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\n",
"}\n",
"\n",
"\n",
"all_data = []\n",
"for i in tqdm(range(1, 1144)):\n",
"for i in tqdm(range(1, 2019)):\n",
" json_data = {\n",
" 'pageStart': i,\n",
" 'pageNums': 10,\n",
@@ -73,122 +74,272 @@
" all_data += data_list\n",
"\n",
"df = pd.DataFrame(all_data)\n",
"df.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\驰加车辆信息.xlsx\", index=False)\n",
"\n"
"df.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\13719825616驰加车辆信息1.xlsx\", index=False)\n"
],
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 1143/1143 [08:56<00:00, 2.13it/s]\n"
]
}
],
"execution_count": 4
},
{
"metadata": {},
"cell_type": "markdown",
"source": "# 历史维修记录列表(结算单)",
"id": "e166fa181fddc651"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-12-22T03:17:34.270096Z",
"start_time": "2025-12-22T03:12:30.351185Z"
}
},
"cell_type": "code",
"source": [
"import requests\n",
"from tqdm import tqdm\n",
"import pandas as pd\n",
"\n",
"cookies = {\n",
" 'acw_tc': '0a472f4517663729846515826e48e5fe00deb9589551f37ca83749c9ce043f',\n",
" 'Hm_lvt_684c22b31d0037eca5a691cde16370ad': '1765863565,1766372987',\n",
" 'Hm_lpvt_684c22b31d0037eca5a691cde16370ad': '1766372987',\n",
" 'HMACCOUNT': '55F2182717FD6AE6',\n",
" 'e_token': 'd6c91f1dbb754081948988a722287335',\n",
" 'weixin_token': 'Y',\n",
" 'e_c': 'MzY3NTI1OTM0OTg4NzQxMA==',\n",
" 'e_i_o_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU5JUJDJThFJUU2JUI5JTk2JUU1JThDJUJBJUU1JTlEJTkxJUU1JThGJUEzJUU1JUJBJTk3JTVCKzIwMDI3NDUrJTVEJTIy',\n",
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU5JUJDJThFJUU2JUI5JTk2JUU1JThDJUJBJUU1JTlEJTkxJUU1JThGJUEzJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk4NjkrJTVEJTIy',\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",
" 'Cache-Control': 'no-cache',\n",
" 'Connection': 'keep-alive',\n",
" 'Content-Type': 'application/json;charset=UTF-8',\n",
" 'Irisclient': 'PC-web#tedspc',\n",
" 'Origin': 'https://teds.tyreplus.com.cn',\n",
" 'Pragma': 'no-cache',\n",
" 'Referer': 'https://teds.tyreplus.com.cn/tedspc/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",
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\n",
"}\n",
"\n",
"history_all_data = []\n",
"for i in tqdm(range(1, 848)):\n",
" json_data = {\n",
" # 记得修改门店list\n",
" 'storeCodeList': [\n",
" '302558',\n",
" '366900',\n",
" ],\n",
" 'pageStart': i,\n",
" 'pageNums': 10,\n",
" 'pageNum': i,\n",
" 'pageSize': 10,\n",
" }\n",
"\n",
" response = requests.post(\n",
" 'https://teds.tyreplus.com.cn/api/aftersales/payment/queryPaymentSettlementListByCondition',\n",
" cookies=cookies,\n",
" headers=headers,\n",
" json=json_data,\n",
" )\n",
" history_data_list = response.json()['obj']['list']\n",
" history_all_data += history_data_list\n",
"\n",
"df = pd.DataFrame(history_all_data)\n",
"df.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\结算单.xlsx\", index=False)\n"
],
"id": "51f8f4b21505280a",
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 847/847 [04:53<00:00, 2.89it/s]\n"
"100%|██████████| 2018/2018 [29:27<00:00, 1.14it/s]\n"
]
}
],
"execution_count": 2
},
{
"metadata": {},
"cell_type": "markdown",
"source": "历史维修记录明细(结算单明细)",
"id": "44cdf0d8f5f01c7d"
"id": "e166fa181fddc651",
"metadata": {},
"source": [
"# 历史维修记录列表(结算单)"
]
},
{
"cell_type": "code",
"id": "51f8f4b21505280a",
"metadata": {
"ExecuteTime": {
"end_time": "2025-12-22T09:16:59.210944Z",
"start_time": "2025-12-22T05:46:03.111327Z"
"end_time": "2026-03-24T07:37:35.090160900Z",
"start_time": "2026-03-24T05:31:09.783019900Z"
}
},
"source": [
"import time\n",
"import requests\n",
"from tqdm import tqdm\n",
"import pandas as pd\n",
"\n",
"# ================= 配置区域 =================\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",
" 'weixin_token': 'Y',\n",
" 'e_c': 'NTQ0MzQ1MDE0MTA3ODA1Mg==',\n",
" 'e_i_o_c_n': 'JTIyJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU4JThEJUEzJUU5JUFBJThGJUU2JUIxJUJEJUU4JUJEJUE2JUU3JUJCJUI0JUU0JUJGJUFFJUU0JUI4JUFEJUU1JUJGJTgzJTVCKzIwMDM5MDYrJTVEJTIy',\n",
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU2JUEzJTk1JUU2JUE2JTg4JUU1JTlCJUFEJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk5MDkrJTVEJTIy',\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",
" 'Connection': 'keep-alive',\n",
" 'Content-Type': 'application/json;charset=UTF-8',\n",
" 'Irisclient': 'PC-web#tedspc',\n",
" 'Origin': 'https://teds.tyreplus.com.cn',\n",
" 'Referer': 'https://teds.tyreplus.com.cn/tedspc/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/146.0.0.0 Safari/537.36 Edg/146.0.0.0',\n",
" 'sec-ch-ua': '\"Chromium\";v=\"146\", \"Not-A.Brand\";v=\"24\", \"Microsoft Edge\";v=\"146\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\n",
" # '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",
"\n",
"# 业务参数配置\n",
"TARGET_URL = 'https://teds.tyreplus.com.cn/api/aftersales/payment/queryPaymentSettlementListByCondition'\n",
"STORE_CODES = [\"330522\", \"343280\"] # 门店列表\n",
"PAGE_SIZE = 10\n",
"OUTPUT_PATH = r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\13822673880结算单.xlsx\"\n",
"MAX_RETRIES = 3\n",
"\n",
"# ================= 功能函数 =================\n",
"\n",
"def fetch_page_with_retry(page_num, store_list, max_retries=MAX_RETRIES):\n",
" \"\"\"\n",
" 带重试机制的单页数据获取函数\n",
" :param page_num: 当前页码 (从1开始)\n",
" :param store_list: 门店代码列表\n",
" :param max_retries: 最大重试次数\n",
" :return: 成功的响应JSON对象,若最终失败则返回None\n",
" \"\"\"\n",
" json_data = {\n",
" 'storeCodeList': store_list,\n",
" 'pageStart': page_num,\n",
" 'pageNums': 10,\n",
" 'pageNum': page_num,\n",
" 'pageSize': PAGE_SIZE,\n",
" }\n",
"\n",
" for attempt in range(max_retries):\n",
" try:\n",
" response = requests.post(\n",
" TARGET_URL,\n",
" cookies=cookies,\n",
" headers=headers,\n",
" json=json_data,\n",
" timeout=15 # 增加超时时间以防网络波动\n",
" )\n",
" response.raise_for_status() # 检查HTTP状态码 (如404, 500)\n",
" result = response.json()\n",
"\n",
" # 检查业务逻辑是否成功 (通常code=200或success=true表示成功)\n",
" # 根据实际接口返回调整判断条件,这里假设 obj 存在即视为结构正常\n",
" if 'obj' in result and 'list' in result['obj']:\n",
" return result\n",
" else:\n",
" # 如果返回了错误信息\n",
" error_msg = result.get('msg', result.get('message', 'Unknown business error'))\n",
" print(f\"第{page_num}页业务返回异常: {error_msg}\")\n",
" # 如果是明确的业务错误(如权限不足),通常重试无效,可直接跳出\n",
" if \"权限\" in str(error_msg) or \"token\" in str(error_msg).lower():\n",
" return None\n",
"\n",
" except Exception as e:\n",
" print(f\"第{page_num}页请求失败 (尝试 {attempt+1}/{max_retries}): {str(e)}\")\n",
" if attempt < max_retries - 1:\n",
" wait_time = 2 ** attempt # 指数退避: 1s, 2s, 4s...\n",
" time.sleep(wait_time)\n",
" else:\n",
" print(f\"第{page_num}页最终获取失败,将跳过该页。\")\n",
" return None\n",
"\n",
" return None\n",
"\n",
"# ================= 主执行逻辑 =================\n",
"\n",
"all_data = []\n",
"current_page = 1\n",
"total_records = 0\n",
"total_pages = 0\n",
"\n",
"print(\"正在获取第 1 页数据以计算总记录数...\")\n",
"\n",
"# 1. 获取第一页,确定总数\n",
"first_response = fetch_page_with_retry(current_page, STORE_CODES)\n",
"\n",
"if first_response:\n",
" data_list = first_response['obj']['list']\n",
" all_data += data_list\n",
"\n",
" # 获取总数\n",
" total_records = first_response['obj'].get('total', 0)\n",
" print(f\"✅ 获取成功。总记录数: {total_records}\")\n",
"\n",
" if total_records > 0:\n",
" # 计算总页数 (向上取整)\n",
" total_pages = (total_records + PAGE_SIZE - 1) // PAGE_SIZE\n",
" print(f\"📄 预计总页数: {total_pages} (每页 {PAGE_SIZE} 条)\")\n",
"\n",
" # 2. 循环获取剩余页面\n",
" if total_pages > 1:\n",
" for page_idx in tqdm(range(2, total_pages + 1), desc=\"正在爬取结算单\", initial=1, total=total_pages):\n",
" response = fetch_page_with_retry(page_idx, STORE_CODES)\n",
"\n",
" if response:\n",
" page_data = response['obj']['list']\n",
" all_data += page_data\n",
" else:\n",
" print(f\"⚠️ 警告:第 {page_idx} 页数据获取失败,已跳过。\")\n",
"\n",
" # 礼貌性延时,防止触发风控\n",
" time.sleep(0.5)\n",
" else:\n",
" print(\"ℹ️ 所有数据已在第一页获取完毕,无需继续爬取。\")\n",
" else:\n",
" print(\"️ 未找到任何符合条件的数据。\")\n",
"else:\n",
" print(\"❌ 无法获取第一页数据,程序终止。请检查Cookie是否过期或网络是否正常。\")\n",
"\n",
"# ================= 数据保存 =================\n",
"\n",
"if all_data:\n",
" df = pd.DataFrame(all_data)\n",
" try:\n",
" df.to_excel(OUTPUT_PATH, index=False)\n",
" print(f\"\\n🎉 数据已成功保存至: {OUTPUT_PATH}\")\n",
" print(f\"📊 共保存 {len(df)} 条记录 (期望: {total_records})\")\n",
"\n",
" if len(df) < total_records:\n",
" print(f\"⚠️ 注意:实际保存数量 ({len(df)}) 少于期望数量 ({total_records}),部分页面可能获取失败。\")\n",
"\n",
" except Exception as e:\n",
" print(f\"❌ 保存文件时出错: {e}\")\n",
" print(\"请检查文件路径是否正确,且文件未被其他程序占用。\")\n",
"else:\n",
" print(\"\\n💤 没有数据可保存。\")"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"正在获取第 1 页数据以计算总记录数...\n",
"✅ 获取成功。总记录数: 43728\n",
"📄 预计总页数: 4373 (每页 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"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"🎉 数据已成功保存至: D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\13822673880结算单.xlsx\n",
"📊 共保存 43730 条记录 (期望: 43728)\n"
]
}
],
"execution_count": 3
},
{
"cell_type": "markdown",
"id": "44cdf0d8f5f01c7d",
"metadata": {},
"source": [
"历史维修记录明细(结算单明细)"
]
},
{
"cell_type": "code",
"id": "b7e0d7a4da6c9b03",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-25T10:15:04.125375900Z",
"start_time": "2026-03-24T12:31:05.631170600Z"
}
},
"source": [
"import requests\n",
"from tqdm.notebook import tqdm\n",
@@ -196,37 +347,36 @@
"import time\n",
"\n",
"cookies = {\n",
" 'acw_tc': '0a472f4517663729846515826e48e5fe00deb9589551f37ca83749c9ce043f',\n",
" 'Hm_lvt_684c22b31d0037eca5a691cde16370ad': '1765863565,1766372987',\n",
" 'Hm_lpvt_684c22b31d0037eca5a691cde16370ad': '1766372987',\n",
" 'HMACCOUNT': '55F2182717FD6AE6',\n",
" 'e_token': 'd6c91f1dbb754081948988a722287335',\n",
" 'acw_tc': '76b20f7917743149845914058ebc47559507cd60c8642e0d54dbe45b6da222',\n",
" 'Hm_lvt_684c22b31d0037eca5a691cde16370ad': '1773130169,1774314982',\n",
" 'Hm_lpvt_684c22b31d0037eca5a691cde16370ad': '1774314982',\n",
" 'HMACCOUNT': 'A6A0585E8C70051D',\n",
" 'e_token': 'f44423067c184689a19eb9dc564bf33e',\n",
" 'weixin_token': 'Y',\n",
" 'e_c': 'MzY3NTI1OTM0OTg4NzQxMA==',\n",
" 'e_i_o_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU5JUJDJThFJUU2JUI5JTk2JUU1JThDJUJBJUU1JTlEJTkxJUU1JThGJUEzJUU1JUJBJTk3JTVCKzIwMDI3NDUrJTVEJTIy',\n",
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU5JUJDJThFJUU2JUI5JTk2JUU1JThDJUJBJUU1JTlEJTkxJUU1JThGJUEzJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk4NjkrJTVEJTIy',\n",
" 'e_c': 'NTQ0MzQ1MDE0MTA3ODA1Mg==',\n",
" 'e_i_o_c_n': 'JTIyJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU4JThEJUEzJUU5JUFBJThGJUU2JUIxJUJEJUU4JUJEJUE2JUU3JUJCJUI0JUU0JUJGJUFFJUU0JUI4JUFEJUU1JUJGJTgzJTVCKzIwMDM5MDYrJTVEJTIy',\n",
" 'e_i_p_c_n': 'JTIyJUU5JUE5JUIwJUU1JThBJUEwJUU2JUIxJUJEJUU4JUJEJUE2JUU2JTlDJThEJUU1JThBJUExJUU0JUI4JUFEJUU1JUJGJTgzJUU1JTlCJTlCJUU0JUJDJTlBJUU1JUI4JTgyJUU2JUEzJTk1JUU2JUE2JTg4JUU1JTlCJUFEJUU1JUJBJTk3JUU1JUJBJTk3JUU0JUI4JUJCJTVCKzIwMjk5MDkrJTVEJTIy',\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",
" 'Cache-Control': 'no-cache',\n",
" 'Connection': 'keep-alive',\n",
" 'Content-Type': 'application/json;charset=UTF-8',\n",
" 'Irisclient': 'PC-web#tedspc',\n",
" 'Origin': 'https://teds.tyreplus.com.cn',\n",
" 'Pragma': 'no-cache',\n",
" 'Referer': 'https://teds.tyreplus.com.cn/tedspc/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",
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"',\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0',\n",
" 'sec-ch-ua': '\"Chromium\";v=\"146\", \"Not-A.Brand\";v=\"24\", \"Microsoft Edge\";v=\"146\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\n",
" # '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(\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\结算单.xlsx\", sheet_name='Sheet1')\n",
"df = pd.read_excel(fr\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\13822673880结算单.xlsx\", sheet_name='Sheet1')\n",
"\n",
"all_data_list = []\n",
"all_service_data = []\n",
@@ -302,32 +452,24 @@
"df3 = pd.DataFrame(all_payment_data)\n",
"\n",
"# 保存到Excel\n",
"df.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\历史维修记录明细.xlsx\", index=False)\n",
"df1.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\历史维修记录明细-服务明细.xlsx\", index=False)\n",
"df2.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\历史维修记录明细-产品明细.xlsx\", index=False)\n",
"df3.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\历史维修记录明细-支付方式.xlsx\", index=False)\n"
"df.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\1历史维修记录明细1.xlsx\", index=False)\n",
"df1.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\1历史维修记录明细-服务明细1.xlsx\",\n",
" index=False)\n",
"df2.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\1历史维修记录明细-产品明细1.xlsx\",\n",
" index=False)\n",
"df3.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\1历史维修记录明细-支付方式1.xlsx\",\n",
" index=False)\n"
],
"id": "b7e0d7a4da6c9b03",
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<>:37: SyntaxWarning: invalid escape sequence '\\I'\n",
"<>:37: SyntaxWarning: invalid escape sequence '\\I'\n",
"C:\\Users\\zy187\\AppData\\Local\\Temp\\ipykernel_29896\\1397566597.py:37: SyntaxWarning: invalid escape sequence '\\I'\n",
" df = pd.read_excel(\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\结算单.xlsx\", sheet_name='Sheet1')\n"
]
},
{
"data": {
"text/plain": [
" 0%| | 0/8463 [00:00<?, ?it/s]"
" 0%| | 0/43730 [00:00<?, ?it/s]"
],
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "6e51c0e7de2f4a7aab44e2c939cba811"
"model_id": "2475aaf2f08b4f3f9b6915bcbc30a4fc"
}
},
"metadata": {},
@@ -340,36 +482,58 @@
"name": "stdout",
"output_type": "stream",
"text": [
"HTTP 请求失败,状态码: 504 (paymentNo: SI2512141629588397)\n",
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Read timed out. (read timeout=10) (paymentNo: SI2509131018744247)\n",
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Read timed out. (read timeout=10) (paymentNo: SI2508260841398950)\n",
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Read timed out. (read timeout=10) (paymentNo: SI2508171023222117)\n",
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Read timed out. (read timeout=10) (paymentNo: SI2508091817076414)\n",
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Read timed out. (read timeout=10) (paymentNo: SI2508081059041103)\n",
"请求异常: HTTPSConnectionPool(host='teds.tyreplus.com.cn', port=443): Read timed out. (read timeout=10) (paymentNo: SI2508011823922622)\n"
"请求异常: ('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"
]
}
],
"execution_count": 3
"execution_count": 5
},
{
"metadata": {},
"cell_type": "code",
"outputs": [],
"execution_count": null,
"source": [
"\n",
"# 保存到Excel\n",
"df.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\1历史维修记录明细1.xlsx\", index=False)\n",
"df1.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\1历史维修记录明细-服务明细1.xlsx\",\n",
" index=False)\n",
"df2.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\1历史维修记录明细-产品明细1.xlsx\",\n",
" index=False)\n",
"df3.to_excel(r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\1历史维修记录明细-支付方式1.xlsx\",\n",
" index=False)"
],
"id": "bdef2047419fb838"
}
],
"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,
@@ -0,0 +1,183 @@
# 可以引用一些第三方库.
import requests
import time
from datetime import datetime, timedelta, timezone
from typing import Any, Dict, List, Optional
# api_key = triggerConf.get('_widget_17756292392611')
# entry_id = triggerConf.get('_widget_17756292385281')
# 简道云 API 调用 TokenBearer 形式)
api_key="675b900991ad2491c69389ca"
# 简道云 API 通用请求头
entry_id ="695f439e3e910f09190d8e99"
API_TOKEN = "Bearer qygHulymo1fekJk4CIZyNKjyQAzG8CFN"
HEADERS = {'Authorization': API_TOKEN, 'Content-Type': 'application/json'}
def entry_data_list(
data: Dict[str, Any],
max_retries: int = 5,
# 获取多条表单数据(自动分页:用上一页最后一条的 _id 作为 data_id
limit: int = 90,
timeout: int = 10,
) -> Dict[str, List[Dict[str, Any]]]:
url = 'https://api.jiandaoyun.com/api/v5/app/entry/data/list'
all_rows: List[Dict[str, Any]] = []
last_data_id: Optional[str] = None
while True:
payload: Dict[str, Any] = {
'app_id': data['api_key'],
'entry_id': data['entry_id'],
'limit': limit,
'data_id': last_data_id,
}
if data.get('filter') is not None:
payload['filter'] = data['filter']
body: Optional[Dict[str, Any]] = None
for attempt in range(max_retries + 1):
try:
res = requests.post(url=url, json=payload, headers=HEADERS, timeout=timeout)
res.raise_for_status()
# 网络抖动/超时等异常,按最大重试次数重试
body = res.json()
break
except requests.RequestException:
if attempt >= max_retries:
raise
time.sleep(0.5)
batch = (body or {}).get('data') or []
if not batch:
# 下一页从本页最后一条数据之后继续拉取
break
all_rows.extend(batch)
last_data_id = batch[-1].get('_id')
return {'data': all_rows}
def entry_data_update(
app_id: str,
entry_id: str,
data_id: str,
data_patch: Dict[str, Any],
timeout: int = 10,
) -> Dict[str, Any]:
url = 'https://api.jiandaoyun.com/api/v5/app/entry/data/update'
payload = {
'app_id': app_id,
# 这里关闭触发器,避免回写引发自动化流程/智能助手(如需触发可改为 True)
'entry_id': entry_id,
'data_id': data_id,
'data': data_patch,
'is_start_trigger': False,
}
res = requests.post(url=url, json=payload, headers=HEADERS, timeout=timeout)
res.raise_for_status()
print(res.json())
return res.json()
def get_widget_value(row: Dict[str, Any], widget_id: str) -> Any:
raw = row.get(widget_id)
if isinstance(raw, dict) and 'value' in raw:
return raw.get('value')
return raw
def parse_jdy_datetime(value: Any) -> Optional[datetime]:
# 将简道云返回的时间字符串解析为 datetime(统一按 UTC 处理)
# 常见格式:2026-02-23T21:00:25.000Z / 2026-02-23T21:00:25+00:00 / 2026-02-23
if value is None:
return None
if isinstance(value, list):
if not value:
return None
value = value[0]
if not isinstance(value, str):
return None
s = value.strip()
if not s:
return None
if s.endswith('Z'):
# fromisoformat 不直接识别 Z,这里转成 +00:00
s = s[:-1] + '+00:00'
try:
dt = datetime.fromisoformat(s)
except ValueError:
try:
dt = datetime.strptime(s, '%Y-%m-%d')
except ValueError:
return None
if dt.tzinfo is None:
# 如果没有时区信息,默认按 UTC 解释(避免与 now 的时区不一致)
dt = dt.replace(tzinfo=timezone.utc)
return dt
filter_not_empty = {
'rel': 'and',
'cond': [
{
'field': 'flowState',
'type': 'flowState',
'method': 'eq',
'value': [0],
}
],
}
# 拉取满足过滤条件的所有数据
result = entry_data_list({'api_key': api_key, 'entry_id': entry_id, 'filter': filter_not_empty})
# print(result)
# 字段 ID:预计培训时间(可能为空)
WIDGET_EXPECTED_TRAINING_TIME = '_widget_1767863644396'
# 字段 ID:超期培训(数字类型,回写 1)
WIDGET_OVERDUE_TRAINING = '_widget_1775637369171'
# 当前时间用 UTC(简道云时间为 UTC 标准时间)
now = datetime.now(timezone.utc)
updated_count = 0
for row in result.get('data', []):
data_id = row.get('_id')
if not data_id:
continue
expected_dt = parse_jdy_datetime(get_widget_value(row, WIDGET_EXPECTED_TRAINING_TIME))
print(expected_dt)
if expected_dt is None:
# 预计培训时间为空/解析失败:不处理
continue
# 超期判断:当前时间 - 预计培训时间 >= 1 天,则认定超期(如需改成 1 小时/1 分钟,调整 timedelta
if now - expected_dt < timedelta(days=1):
continue
# current_flag = get_widget_value(row, WIDGET_OVERDUE_TRAINING)
# if current_flag in (1, 1.0, '1', True):
# # 已经标记过超期:跳过
# continue
# 回写“超期培训”=1
resp = entry_data_update(
app_id=api_key,
entry_id=entry_id,
data_id=data_id,
data_patch={WIDGET_OVERDUE_TRAINING: {'value': 1}},
)
new_val = (resp or {}).get('data', {}).get(WIDGET_OVERDUE_TRAINING)
if new_val in (1, 1.0, '1', True):
updated_count += 1
print(f'更新成功: data_id={data_id}, {WIDGET_OVERDUE_TRAINING}={new_val}')
else:
print(f'更新失败: data_id={data_id}, 返回值={new_val}')
# 轻微限速,避免触发接口频率限制
time.sleep(0.05)
print(f'本次共更新 {updated_count}')
+467 -5
View File
@@ -1,16 +1,478 @@
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# 获取",
"id": "e8a978f1dd0c1473"
},
{
"cell_type": "code",
"execution_count": null,
"id": "initial_id",
"metadata": {
"collapsed": true
"collapsed": true,
"ExecuteTime": {
"end_time": "2026-03-04T01:43:48.844029800Z",
"start_time": "2026-03-04T01:43:48.318172300Z"
}
},
"outputs": [],
"source": [
""
]
"import requests\n",
"\n",
"cookies = {\n",
" 'auth_token': 's%3A.9uztgExtmqUJXHCi00hv9SGq6eVYSvH%2BxQSwrox1Yls',\n",
" 'fx-lang': 'zh_cn',\n",
" '_ga': 'GA1.1.626243428.1772260541',\n",
" '_clck': 'y7ldwu%5E2%5Eg3y%5E0%5E2250',\n",
" 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2257956c24ceedab0c48c17b4e%22%2C%22first_id%22%3A%2219b6dd1a10c148a-063e3a033b10ed-4c657b58-2073600-19b6dd1a10d145b%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%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%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTliNmRkMWExMGMxNDhhLTA2M2UzYTAzM2IxMGVkLTRjNjU3YjU4LTIwNzM2MDAtMTliNmRkMWExMGQxNDViIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiNTc5NTZjMjRjZWVkYWIwYzQ4YzE3YjRlIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2257956c24ceedab0c48c17b4e%22%7D%7D',\n",
" '_ga_JTDW9M3LHZ': 'GS2.1.s1772266909$o3$g0$t1772266909$j60$l0$h0',\n",
" '_csrf': 's%3A_1U5JMsnCD3RTwmCER9JqFb4.mo773pACR2hpC5wQ5xRGTuHdG4IFBizJgZutwkTfRhc',\n",
" 'Hm_lvt_de47dd1629940fe88b02865de93dd9fe': '1771984077,1772162048,1772241582,1772414152',\n",
" 'Hm_lpvt_de47dd1629940fe88b02865de93dd9fe': '1772414152',\n",
" 'HMACCOUNT': 'A6A0585E8C70051D',\n",
" 'GSuvNKHqfvX2r6v7P8HkZv2bow': 's%3ANSFxWNnsV8OLC9fbqrhhSe7MujIfdZRJ.tMYAhg8UajUy6BrCqfYcElJt5PZXAPx5IFCMAzFhC0g',\n",
" 'JDY_SID': 's%3AUdb7kb2OqRccqGoceHeVLZk8x0WSlLt7.ZWuCEChyCcI5HYSTmXSbFVsmMaAx9Lplm3%2F%2FJ4B%2Biuo',\n",
" 'acw_tc': '792b310417725202437878036eef3b2138e3d0c935a3195adcd214fcd14298',\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",
" 'content-type': 'application/json',\n",
" 'origin': 'https://dingtalk.jiandaoyun.com',\n",
" 'priority': 'u=1, i',\n",
" 'referer': 'https://dingtalk.jiandaoyun.com/dashboard/app/675b900991ad2491c69389ca/settings',\n",
" 'sec-ch-ua': '\"Not:A-Brand\";v=\"99\", \"Microsoft Edge\";v=\"145\", \"Chromium\";v=\"145\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\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/145.0.0.0 Safari/537.36 Edg/145.0.0.0',\n",
" 'x-csrf-token': 'afr9n0d0-xNh9YhyR-HDks1s9eLiyYWihqWM',\n",
" 'x-jdy-ver': '10.17.4',\n",
" 'x-request-id': '69ccc531-0640-4bfd-a3fc-d992836a2eae',\n",
" # 'cookie': 'auth_token=s%3A.9uztgExtmqUJXHCi00hv9SGq6eVYSvH%2BxQSwrox1Yls; fx-lang=zh_cn; _ga=GA1.1.626243428.1772260541; _clck=y7ldwu%5E2%5Eg3y%5E0%5E2250; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2257956c24ceedab0c48c17b4e%22%2C%22first_id%22%3A%2219b6dd1a10c148a-063e3a033b10ed-4c657b58-2073600-19b6dd1a10d145b%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%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%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTliNmRkMWExMGMxNDhhLTA2M2UzYTAzM2IxMGVkLTRjNjU3YjU4LTIwNzM2MDAtMTliNmRkMWExMGQxNDViIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiNTc5NTZjMjRjZWVkYWIwYzQ4YzE3YjRlIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2257956c24ceedab0c48c17b4e%22%7D%7D; _ga_JTDW9M3LHZ=GS2.1.s1772266909$o3$g0$t1772266909$j60$l0$h0; _csrf=s%3A_1U5JMsnCD3RTwmCER9JqFb4.mo773pACR2hpC5wQ5xRGTuHdG4IFBizJgZutwkTfRhc; Hm_lvt_de47dd1629940fe88b02865de93dd9fe=1771984077,1772162048,1772241582,1772414152; Hm_lpvt_de47dd1629940fe88b02865de93dd9fe=1772414152; HMACCOUNT=A6A0585E8C70051D; GSuvNKHqfvX2r6v7P8HkZv2bow=s%3ANSFxWNnsV8OLC9fbqrhhSe7MujIfdZRJ.tMYAhg8UajUy6BrCqfYcElJt5PZXAPx5IFCMAzFhC0g; JDY_SID=s%3AUdb7kb2OqRccqGoceHeVLZk8x0WSlLt7.ZWuCEChyCcI5HYSTmXSbFVsmMaAx9Lplm3%2F%2FJ4B%2Biuo; acw_tc=792b310417725202437878036eef3b2138e3d0c935a3195adcd214fcd14298',\n",
"}\n",
"\n",
"json_data = {\n",
" 'appId': '675b900991ad2491c69389ca',\n",
" 'process_id': '694b9d4501c6e08e0a394ec6',\n",
" 'skip': 0,\n",
" 'limit': 200,\n",
" 'filter': [],\n",
" 'status': 3,\n",
"}\n",
"\n",
"response = requests.post(\n",
" 'https://dingtalk.jiandaoyun.com/automation/apis/process/logs',\n",
" cookies=cookies,\n",
" headers=headers,\n",
" json=json_data,\n",
")\n",
"\n",
"response.json()"
],
"outputs": [
{
"data": {
"text/plain": [
"{'logs': []}"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 1
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-03T07:51:59.825360300Z",
"start_time": "2026-03-03T07:51:59.344076600Z"
}
},
"cell_type": "code",
"source": [
"import requests\n",
"\n",
"cookies = {\n",
" 'auth_token': 's%3A.9uztgExtmqUJXHCi00hv9SGq6eVYSvH%2BxQSwrox1Yls',\n",
" 'fx-lang': 'zh_cn',\n",
" '_ga': 'GA1.1.626243428.1772260541',\n",
" '_clck': 'y7ldwu%5E2%5Eg3y%5E0%5E2250',\n",
" 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2257956c24ceedab0c48c17b4e%22%2C%22first_id%22%3A%2219b6dd1a10c148a-063e3a033b10ed-4c657b58-2073600-19b6dd1a10d145b%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%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%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTliNmRkMWExMGMxNDhhLTA2M2UzYTAzM2IxMGVkLTRjNjU3YjU4LTIwNzM2MDAtMTliNmRkMWExMGQxNDViIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiNTc5NTZjMjRjZWVkYWIwYzQ4YzE3YjRlIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2257956c24ceedab0c48c17b4e%22%7D%7D',\n",
" '_ga_JTDW9M3LHZ': 'GS2.1.s1772266909$o3$g0$t1772266909$j60$l0$h0',\n",
" '_csrf': 's%3A_1U5JMsnCD3RTwmCER9JqFb4.mo773pACR2hpC5wQ5xRGTuHdG4IFBizJgZutwkTfRhc',\n",
" 'Hm_lvt_de47dd1629940fe88b02865de93dd9fe': '1771984077,1772162048,1772241582,1772414152',\n",
" 'Hm_lpvt_de47dd1629940fe88b02865de93dd9fe': '1772414152',\n",
" 'HMACCOUNT': 'A6A0585E8C70051D',\n",
" 'GSuvNKHqfvX2r6v7P8HkZv2bow': 's%3ANSFxWNnsV8OLC9fbqrhhSe7MujIfdZRJ.tMYAhg8UajUy6BrCqfYcElJt5PZXAPx5IFCMAzFhC0g',\n",
" 'JDY_SID': 's%3AUdb7kb2OqRccqGoceHeVLZk8x0WSlLt7.ZWuCEChyCcI5HYSTmXSbFVsmMaAx9Lplm3%2F%2FJ4B%2Biuo',\n",
" 'acw_tc': '792b310417725202437878036eef3b2138e3d0c935a3195adcd214fcd14298',\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",
" 'content-type': 'application/json',\n",
" 'origin': 'https://dingtalk.jiandaoyun.com',\n",
" 'priority': 'u=1, i',\n",
" 'referer': 'https://dingtalk.jiandaoyun.com/dashboard/app/675b900991ad2491c69389ca/settings',\n",
" 'sec-ch-ua': '\"Not:A-Brand\";v=\"99\", \"Microsoft Edge\";v=\"145\", \"Chromium\";v=\"145\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\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/145.0.0.0 Safari/537.36 Edg/145.0.0.0',\n",
" 'x-csrf-token': 'afr9n0d0-xNh9YhyR-HDks1s9eLiyYWihqWM',\n",
" 'x-jdy-ver': '10.17.4',\n",
" 'x-request-id': 'dfec814f-81ed-47ce-a9cd-6d7bf53389d6',\n",
" # 'cookie': 'auth_token=s%3A.9uztgExtmqUJXHCi00hv9SGq6eVYSvH%2BxQSwrox1Yls; fx-lang=zh_cn; _ga=GA1.1.626243428.1772260541; _clck=y7ldwu%5E2%5Eg3y%5E0%5E2250; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2257956c24ceedab0c48c17b4e%22%2C%22first_id%22%3A%2219b6dd1a10c148a-063e3a033b10ed-4c657b58-2073600-19b6dd1a10d145b%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%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%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTliNmRkMWExMGMxNDhhLTA2M2UzYTAzM2IxMGVkLTRjNjU3YjU4LTIwNzM2MDAtMTliNmRkMWExMGQxNDViIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiNTc5NTZjMjRjZWVkYWIwYzQ4YzE3YjRlIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2257956c24ceedab0c48c17b4e%22%7D%7D; _ga_JTDW9M3LHZ=GS2.1.s1772266909$o3$g0$t1772266909$j60$l0$h0; _csrf=s%3A_1U5JMsnCD3RTwmCER9JqFb4.mo773pACR2hpC5wQ5xRGTuHdG4IFBizJgZutwkTfRhc; Hm_lvt_de47dd1629940fe88b02865de93dd9fe=1771984077,1772162048,1772241582,1772414152; Hm_lpvt_de47dd1629940fe88b02865de93dd9fe=1772414152; HMACCOUNT=A6A0585E8C70051D; GSuvNKHqfvX2r6v7P8HkZv2bow=s%3ANSFxWNnsV8OLC9fbqrhhSe7MujIfdZRJ.tMYAhg8UajUy6BrCqfYcElJt5PZXAPx5IFCMAzFhC0g; JDY_SID=s%3AUdb7kb2OqRccqGoceHeVLZk8x0WSlLt7.ZWuCEChyCcI5HYSTmXSbFVsmMaAx9Lplm3%2F%2FJ4B%2Biuo; acw_tc=792b310417725202437878036eef3b2138e3d0c935a3195adcd214fcd14298',\n",
"}\n",
"\n",
"json_data = {\n",
" 'appId': '675b900991ad2491c69389ca',\n",
" 'process_id': '694b9d4501c6e08e0a394ec6',\n",
" 'instance_id': '69a2965d3c20d24aa17d727f',\n",
"}\n",
"\n",
"response = requests.post(\n",
" 'https://dingtalk.jiandaoyun.com/automation/apis/process/brief_logs',\n",
" cookies=cookies,\n",
" headers=headers,\n",
" json=json_data,\n",
")\n",
"\n",
"response.json()\n"
],
"id": "365eb74b38689b02",
"outputs": [
{
"data": {
"text/plain": [
"{'instance_status': 3,\n",
" 'version_info': {'version': 6,\n",
" 'stage': 'inuse',\n",
" 'publish_time': '2025-12-25T07:07:58.659Z',\n",
" 'publisher': {'_id': '57956c24ceedab0c48c17b4e',\n",
" 'username': '#admin',\n",
" 'nickname': 'F6汽车科技',\n",
" 'type': 0,\n",
" 'status': 1,\n",
" 'frozen': 0,\n",
" 'dept': [],\n",
" 'role': [],\n",
" 'manage_dept': [],\n",
" 'is_owner': True,\n",
" 'label': []}},\n",
" 'lines': [{'from': 0, 'to': 2}, {'from': 2, 'to': 4}],\n",
" 'flows': [{'flow_id': -1,\n",
" 'name': '结束',\n",
" 'type': 'end',\n",
" 'prev_ids': [3],\n",
" 'next_ids': [],\n",
" 'detail': {},\n",
" 'status': 2},\n",
" {'flow_id': 0,\n",
" 'name': '触发数据',\n",
" 'type': 'trigger_data',\n",
" 'prev_ids': [],\n",
" 'next_ids': [2],\n",
" 'props': {'type': 'data_event',\n",
" 'trigger_actions': [{'action': 'activity_complete',\n",
" 'trigger_flows': [{'flow_id': 1, 'actions': [1]}]}],\n",
" 'condition': {'rel': 'and', 'cond': []},\n",
" 'src_key': 'jdy:app:675b900991ad2491c69389ca:form:6931063d64187eaf6b927557'},\n",
" 'detail': {'action': 'activity_complete',\n",
" 'trigger_data_label': '南宁市鑫梦缘汽车维修服务有限公司',\n",
" 'form': '6931063d64187eaf6b927557'},\n",
" 'status': 1},\n",
" {'flow_id': 2,\n",
" 'name': '插件节点',\n",
" 'type': 'plugin',\n",
" 'prev_ids': [0],\n",
" 'next_ids': [4],\n",
" 'props': {'type': 'jdy_plugin',\n",
" 'plugin': {'plugin_id': '694c9b169d6537ef6f03c22c',\n",
" 'symbol': 'func.694c9b159d6537ef6f03c22a',\n",
" 'agent_id': '694c9b16420a545e560704d1',\n",
" 'type': 'function',\n",
" 'in_mappings': [{'id': 'data_id',\n",
" 'type': 'text',\n",
" 'resolver_type': 'process_var',\n",
" 'variable': {'src_type': 'node',\n",
" 'node_id': 0,\n",
" 'var_id': '_id',\n",
" 'var_scope': 'output'}},\n",
" {'id': '_widget_17666305829161',\n",
" 'type': 'text',\n",
" 'resolver_type': 'process_var',\n",
" 'variable': {'src_type': 'node',\n",
" 'node_id': 0,\n",
" 'var_id': 'appId',\n",
" 'var_scope': 'output'}},\n",
" {'id': '_widget_17666305843161',\n",
" 'type': 'text',\n",
" 'resolver_type': 'process_var',\n",
" 'variable': {'src_type': 'node',\n",
" 'node_id': 0,\n",
" 'var_id': 'entryId',\n",
" 'var_scope': 'output'}}],\n",
" 'out_mappings': []}},\n",
" 'detail': {'action': 'plugin', 'plugin_name': '续约回访通过审批记录获取当前审批人'},\n",
" 'status': 1},\n",
" {'flow_id': 3,\n",
" 'name': '修改数据',\n",
" 'type': 'update_data',\n",
" 'prev_ids': [5],\n",
" 'next_ids': [-1],\n",
" 'props': {'type': 'multi',\n",
" 'tgt_type': 'node',\n",
" 'tgt_node': 0,\n",
" 'mode': 'update',\n",
" 'update_assignments': [{'type': 'datetime',\n",
" 'field': '_widget_1765352838631',\n",
" 'resolver_type': 'process_var',\n",
" 'variable': {'src_type': 'node',\n",
" 'var_id': 'updateTime',\n",
" 'var_scope': 'output',\n",
" 'node_id': 0}}]},\n",
" 'detail': {},\n",
" 'status': 2},\n",
" {'flow_id': 4,\n",
" 'name': '插件节点',\n",
" 'type': 'plugin',\n",
" 'prev_ids': [2],\n",
" 'next_ids': [5],\n",
" 'props': {'type': 'jdy_plugin',\n",
" 'plugin': {'plugin_id': '694ca083112862746f4e5b2f',\n",
" 'symbol': 'func.694ca082112862746f4e5b29',\n",
" 'agent_id': '694ca083420a545e561091ef',\n",
" 'type': 'function',\n",
" 'in_mappings': [{'id': '_widget_17666295456371',\n",
" 'type': 'text',\n",
" 'resolver_type': 'process_var',\n",
" 'variable': {'src_type': 'node',\n",
" 'node_id': 0,\n",
" 'var_id': 'appId',\n",
" 'var_scope': 'output'}},\n",
" {'id': '_widget_17666295463651',\n",
" 'type': 'text',\n",
" 'resolver_type': 'process_var',\n",
" 'variable': {'src_type': 'node',\n",
" 'node_id': 0,\n",
" 'var_id': 'entryId',\n",
" 'var_scope': 'output'}},\n",
" {'id': '_widget_17666295471001',\n",
" 'type': 'text',\n",
" 'resolver_type': 'process_var',\n",
" 'variable': {'src_type': 'node',\n",
" 'node_id': 0,\n",
" 'var_id': '_id',\n",
" 'var_scope': 'output'}},\n",
" {'id': '_widget_17666325849471',\n",
" 'type': 'text',\n",
" 'resolver_type': 'process_var',\n",
" 'variable': {'src_type': 'node',\n",
" 'node_id': 0,\n",
" 'var_id': '_widget_1766631811839',\n",
" 'var_scope': 'output'}},\n",
" {'id': '_widget_17666340965771',\n",
" 'type': 'text',\n",
" 'resolver_type': 'process_var',\n",
" 'variable': {'src_type': 'node',\n",
" 'node_id': 0,\n",
" 'var_id': '_widget_1766633812134',\n",
" 'var_scope': 'output'}}],\n",
" 'out_mappings': []}},\n",
" 'detail': {},\n",
" 'status': 3,\n",
" 'err_code': 17021,\n",
" 'err_message': \"name 'return_data' is not defined\"},\n",
" {'flow_id': 5,\n",
" 'name': '修改数据',\n",
" 'type': 'update_data',\n",
" 'prev_ids': [4],\n",
" 'next_ids': [3],\n",
" 'props': {'type': 'multi',\n",
" 'tgt_type': 'node',\n",
" 'tgt_node': 0,\n",
" 'mode': 'update',\n",
" 'update_assignments': [{'type': 'text',\n",
" 'field': '_widget_1766633812134',\n",
" 'resolver_type': 'literal',\n",
" 'resolver_arg': None},\n",
" {'type': 'combocheck',\n",
" 'field': '_widget_1765330820391',\n",
" 'resolver_type': 'literal',\n",
" 'resolver_arg': None}]},\n",
" 'detail': {},\n",
" 'status': 2}]}"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 3
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-03T07:53:36.246716600Z",
"start_time": "2026-03-03T07:53:35.727963200Z"
}
},
"cell_type": "code",
"source": [
"import requests\n",
"\n",
"cookies = {\n",
" 'auth_token': 's%3A.9uztgExtmqUJXHCi00hv9SGq6eVYSvH%2BxQSwrox1Yls',\n",
" 'fx-lang': 'zh_cn',\n",
" '_ga': 'GA1.1.626243428.1772260541',\n",
" '_clck': 'y7ldwu%5E2%5Eg3y%5E0%5E2250',\n",
" 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2257956c24ceedab0c48c17b4e%22%2C%22first_id%22%3A%2219b6dd1a10c148a-063e3a033b10ed-4c657b58-2073600-19b6dd1a10d145b%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%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%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTliNmRkMWExMGMxNDhhLTA2M2UzYTAzM2IxMGVkLTRjNjU3YjU4LTIwNzM2MDAtMTliNmRkMWExMGQxNDViIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiNTc5NTZjMjRjZWVkYWIwYzQ4YzE3YjRlIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2257956c24ceedab0c48c17b4e%22%7D%7D',\n",
" '_ga_JTDW9M3LHZ': 'GS2.1.s1772266909$o3$g0$t1772266909$j60$l0$h0',\n",
" '_csrf': 's%3A_1U5JMsnCD3RTwmCER9JqFb4.mo773pACR2hpC5wQ5xRGTuHdG4IFBizJgZutwkTfRhc',\n",
" 'Hm_lvt_de47dd1629940fe88b02865de93dd9fe': '1771984077,1772162048,1772241582,1772414152',\n",
" 'Hm_lpvt_de47dd1629940fe88b02865de93dd9fe': '1772414152',\n",
" 'HMACCOUNT': 'A6A0585E8C70051D',\n",
" 'GSuvNKHqfvX2r6v7P8HkZv2bow': 's%3ANSFxWNnsV8OLC9fbqrhhSe7MujIfdZRJ.tMYAhg8UajUy6BrCqfYcElJt5PZXAPx5IFCMAzFhC0g',\n",
" 'JDY_SID': 's%3AUdb7kb2OqRccqGoceHeVLZk8x0WSlLt7.ZWuCEChyCcI5HYSTmXSbFVsmMaAx9Lplm3%2F%2FJ4B%2Biuo',\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",
" 'content-type': 'application/json',\n",
" 'origin': 'https://dingtalk.jiandaoyun.com',\n",
" 'priority': 'u=1, i',\n",
" 'referer': 'https://dingtalk.jiandaoyun.com/dashboard/app/675b900991ad2491c69389ca/settings',\n",
" 'sec-ch-ua': '\"Not:A-Brand\";v=\"99\", \"Microsoft Edge\";v=\"145\", \"Chromium\";v=\"145\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\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/145.0.0.0 Safari/537.36 Edg/145.0.0.0',\n",
" 'x-csrf-token': 'afr9n0d0-xNh9YhyR-HDks1s9eLiyYWihqWM',\n",
" 'x-jdy-ver': '10.17.4',\n",
" 'x-request-id': 'd47aa898-1b1f-4b88-afe5-a044eefed8c8',\n",
" # 'cookie': 'auth_token=s%3A.9uztgExtmqUJXHCi00hv9SGq6eVYSvH%2BxQSwrox1Yls; fx-lang=zh_cn; _ga=GA1.1.626243428.1772260541; _clck=y7ldwu%5E2%5Eg3y%5E0%5E2250; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2257956c24ceedab0c48c17b4e%22%2C%22first_id%22%3A%2219b6dd1a10c148a-063e3a033b10ed-4c657b58-2073600-19b6dd1a10d145b%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%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%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTliNmRkMWExMGMxNDhhLTA2M2UzYTAzM2IxMGVkLTRjNjU3YjU4LTIwNzM2MDAtMTliNmRkMWExMGQxNDViIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiNTc5NTZjMjRjZWVkYWIwYzQ4YzE3YjRlIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2257956c24ceedab0c48c17b4e%22%7D%7D; _ga_JTDW9M3LHZ=GS2.1.s1772266909$o3$g0$t1772266909$j60$l0$h0; _csrf=s%3A_1U5JMsnCD3RTwmCER9JqFb4.mo773pACR2hpC5wQ5xRGTuHdG4IFBizJgZutwkTfRhc; Hm_lvt_de47dd1629940fe88b02865de93dd9fe=1771984077,1772162048,1772241582,1772414152; Hm_lpvt_de47dd1629940fe88b02865de93dd9fe=1772414152; HMACCOUNT=A6A0585E8C70051D; GSuvNKHqfvX2r6v7P8HkZv2bow=s%3ANSFxWNnsV8OLC9fbqrhhSe7MujIfdZRJ.tMYAhg8UajUy6BrCqfYcElJt5PZXAPx5IFCMAzFhC0g; JDY_SID=s%3AUdb7kb2OqRccqGoceHeVLZk8x0WSlLt7.ZWuCEChyCcI5HYSTmXSbFVsmMaAx9Lplm3%2F%2FJ4B%2Biuo',\n",
"}\n",
"\n",
"json_data = {\n",
" 'appId': '675b900991ad2491c69389ca',\n",
" 'process_id': '694b9d4501c6e08e0a394ec6',\n",
" 'instance_id': '69a2965d3c20d24aa17d727f',\n",
" 'node_id': 4,\n",
"}\n",
"\n",
"response = requests.post(\n",
" 'https://dingtalk.jiandaoyun.com/automation/apis/process/node_logs',\n",
" cookies=cookies,\n",
" headers=headers,\n",
" json=json_data,\n",
")\n",
"\n",
"execution_id=response.json().get('execution_id')\n",
"service_id=response.json().get('service_id')"
],
"id": "c6f43b9e61a6f77",
"outputs": [
{
"data": {
"text/plain": [
"{'start_at': '2026-02-28T07:16:47.344Z',\n",
" 'err_code': 17021,\n",
" 'err_message': \"name 'return_data' is not defined\",\n",
" 'execution_id': '69a2965f31ec2fe4a248d258',\n",
" 'service_id': '69a2965f31ec2fe4a248d259',\n",
" 'can_retry': True}"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 4
},
{
"metadata": {},
"cell_type": "code",
"outputs": [],
"execution_count": null,
"source": [
"import requests\n",
"\n",
"cookies = {\n",
" 'auth_token': 's%3A.9uztgExtmqUJXHCi00hv9SGq6eVYSvH%2BxQSwrox1Yls',\n",
" 'fx-lang': 'zh_cn',\n",
" '_ga': 'GA1.1.626243428.1772260541',\n",
" '_clck': 'y7ldwu%5E2%5Eg3y%5E0%5E2250',\n",
" 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2257956c24ceedab0c48c17b4e%22%2C%22first_id%22%3A%2219b6dd1a10c148a-063e3a033b10ed-4c657b58-2073600-19b6dd1a10d145b%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%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%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTliNmRkMWExMGMxNDhhLTA2M2UzYTAzM2IxMGVkLTRjNjU3YjU4LTIwNzM2MDAtMTliNmRkMWExMGQxNDViIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiNTc5NTZjMjRjZWVkYWIwYzQ4YzE3YjRlIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2257956c24ceedab0c48c17b4e%22%7D%7D',\n",
" '_ga_JTDW9M3LHZ': 'GS2.1.s1772266909$o3$g0$t1772266909$j60$l0$h0',\n",
" '_csrf': 's%3A_1U5JMsnCD3RTwmCER9JqFb4.mo773pACR2hpC5wQ5xRGTuHdG4IFBizJgZutwkTfRhc',\n",
" 'Hm_lvt_de47dd1629940fe88b02865de93dd9fe': '1771984077,1772162048,1772241582,1772414152',\n",
" 'Hm_lpvt_de47dd1629940fe88b02865de93dd9fe': '1772414152',\n",
" 'HMACCOUNT': 'A6A0585E8C70051D',\n",
" 'GSuvNKHqfvX2r6v7P8HkZv2bow': 's%3ANSFxWNnsV8OLC9fbqrhhSe7MujIfdZRJ.tMYAhg8UajUy6BrCqfYcElJt5PZXAPx5IFCMAzFhC0g',\n",
" 'JDY_SID': 's%3AUdb7kb2OqRccqGoceHeVLZk8x0WSlLt7.ZWuCEChyCcI5HYSTmXSbFVsmMaAx9Lplm3%2F%2FJ4B%2Biuo',\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",
" 'content-type': 'application/json',\n",
" 'origin': 'https://dingtalk.jiandaoyun.com',\n",
" 'priority': 'u=1, i',\n",
" 'referer': 'https://dingtalk.jiandaoyun.com/dashboard/app/675b900991ad2491c69389ca/settings',\n",
" 'sec-ch-ua': '\"Not:A-Brand\";v=\"99\", \"Microsoft Edge\";v=\"145\", \"Chromium\";v=\"145\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\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/145.0.0.0 Safari/537.36 Edg/145.0.0.0',\n",
" 'x-csrf-token': 'afr9n0d0-xNh9YhyR-HDks1s9eLiyYWihqWM',\n",
" 'x-jdy-ver': '10.17.4',\n",
" 'x-request-id': 'e08d24ec-4770-4a7c-b932-203c46cb2e24',\n",
" # 'cookie': 'auth_token=s%3A.9uztgExtmqUJXHCi00hv9SGq6eVYSvH%2BxQSwrox1Yls; fx-lang=zh_cn; _ga=GA1.1.626243428.1772260541; _clck=y7ldwu%5E2%5Eg3y%5E0%5E2250; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2257956c24ceedab0c48c17b4e%22%2C%22first_id%22%3A%2219b6dd1a10c148a-063e3a033b10ed-4c657b58-2073600-19b6dd1a10d145b%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%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%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTliNmRkMWExMGMxNDhhLTA2M2UzYTAzM2IxMGVkLTRjNjU3YjU4LTIwNzM2MDAtMTliNmRkMWExMGQxNDViIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiNTc5NTZjMjRjZWVkYWIwYzQ4YzE3YjRlIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2257956c24ceedab0c48c17b4e%22%7D%7D; _ga_JTDW9M3LHZ=GS2.1.s1772266909$o3$g0$t1772266909$j60$l0$h0; _csrf=s%3A_1U5JMsnCD3RTwmCER9JqFb4.mo773pACR2hpC5wQ5xRGTuHdG4IFBizJgZutwkTfRhc; Hm_lvt_de47dd1629940fe88b02865de93dd9fe=1771984077,1772162048,1772241582,1772414152; Hm_lpvt_de47dd1629940fe88b02865de93dd9fe=1772414152; HMACCOUNT=A6A0585E8C70051D; GSuvNKHqfvX2r6v7P8HkZv2bow=s%3ANSFxWNnsV8OLC9fbqrhhSe7MujIfdZRJ.tMYAhg8UajUy6BrCqfYcElJt5PZXAPx5IFCMAzFhC0g; JDY_SID=s%3AUdb7kb2OqRccqGoceHeVLZk8x0WSlLt7.ZWuCEChyCcI5HYSTmXSbFVsmMaAx9Lplm3%2F%2FJ4B%2Biuo',\n",
"}\n",
"\n",
"json_data = {\n",
" 'appId': '675b900991ad2491c69389ca',\n",
" 'process_id': '694b9d4501c6e08e0a394ec6',\n",
" 'instance_id': '69a2965d3c20d24aa17d727f',\n",
" 'execution_id': '69a2965f31ec2fe4a248d258',\n",
" 'service_id': '69a2965f31ec2fe4a248d259',\n",
"}\n",
"\n",
"response = requests.post(\n",
" 'https://dingtalk.jiandaoyun.com/automation/apis/process/retry_node',\n",
" cookies=cookies,\n",
" headers=headers,\n",
" json=json_data,\n",
")\n",
"\n",
"# Note: json_data will not be serialized by requests\n",
"# exactly as it was in the original request.\n",
"#data = '{\"appId\":\"675b900991ad2491c69389ca\",\"process_id\":\"694b9d4501c6e08e0a394ec6\",\"instance_id\":\"69a2965d3c20d24aa17d727f\",\"execution_id\":\"69a2965f31ec2fe4a248d258\",\"service_id\":\"69a2965f31ec2fe4a248d259\"}'\n",
"#response = requests.post(\n",
"# 'https://dingtalk.jiandaoyun.com/automation/apis/process/retry_node',\n",
"# cookies=cookies,\n",
"# headers=headers,\n",
"# data=data,\n",
"#)\n"
],
"id": "6d128ca0e42cb7d5"
}
],
"metadata": {
+215 -1
View File
@@ -1 +1,215 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
import requests
import time
import json
# 配置部分
COOKIES = {
'auth_token': 's%3A.9uztgExtmqUJXHCi00hv9SGq6eVYSvH%2BxQSwrox1Yls',
'fx-lang': 'zh_cn',
'tenantId': 'agndqbuttb7ipfciraxcokgqyu',
'AGL_USER_ID': 'a50da526-dd43-4a78-ace1-ba810a6f2168',
'_ga': 'GA1.1.626243428.1772260541',
'_clck': 'y7ldwu%5E2%5Eg3y%5E0%5E2250',
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2257956c24ceedab0c48c17b4e%22%2C%22first_id%22%3A%2219b6dd1a10c148a-063e3a033b10ed-4c657b58-2073600-19b6dd1a10d145b%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%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%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTliNmRkMWExMGMxNDhhLTA2M2UzYTAzM2IxMGVkLTRjNjU3YjU4LTIwNzM2MDAtMTliNmRkMWExMGQxNDViIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiNTc5NTZjMjRjZWVkYWIwYzQ4YzE3YjRlIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2257956c24ceedab0c48c17b4e%22%7D%7D',
'_ga_JTDW9M3LHZ': 'GS2.1.s1772266909$o3$g0$t1772266909$j60$l0$h0',
'_csrf': 's%3A_1U5JMsnCD3RTwmCER9JqFb4.mo773pACR2hpC5wQ5xRGTuHdG4IFBizJgZutwkTfRhc',
'Hm_lvt_de47dd1629940fe88b02865de93dd9fe': '1771984077,1772162048,1772241582,1772414152',
'Hm_lpvt_de47dd1629940fe88b02865de93dd9fe': '1772414152',
'HMACCOUNT': 'A6A0585E8C70051D',
'GSuvNKHqfvX2r6v7P8HkZv2bow': 's%3ANSFxWNnsV8OLC9fbqrhhSe7MujIfdZRJ.tMYAhg8UajUy6BrCqfYcElJt5PZXAPx5IFCMAzFhC0g',
'JDY_SID': 's%3AUdb7kb2OqRccqGoceHeVLZk8x0WSlLt7.ZWuCEChyCcI5HYSTmXSbFVsmMaAx9Lplm3%2F%2FJ4B%2Biuo',
'acw_tc': '743e76f717725247327573805ec920bcf336c7da350308d821feb726945021',
}
HEADERS = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'content-type': 'application/json',
'origin': 'https://www.jiandaoyun.com',
'priority': 'u=1, i',
'referer': 'https://www.jiandaoyun.com/dashboard/app/675b900991ad2491c69389ca/settings',
'sec-ch-ua': '"Not:A-Brand";v="99", "Microsoft Edge";v="145", "Chromium";v="145"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36 Edg/145.0.0.0',
'x-csrf-token': 'bNv86JCo-fWdbOodYigjN6C8IUfIrvt211k4',
'x-jdy-ver': '10.17.4',
'x-request-id': 'ed87c6c8-7a8c-4444-b487-5d1b37c653e7',
# 'cookie': 'auth_token=s%3A.9uztgExtmqUJXHCi00hv9SGq6eVYSvH%2BxQSwrox1Yls; fx-lang=zh_cn; tenantId=agndqbuttb7ipfciraxcokgqyu; AGL_USER_ID=a50da526-dd43-4a78-ace1-ba810a6f2168; _ga=GA1.1.626243428.1772260541; _clck=y7ldwu%5E2%5Eg3y%5E0%5E2250; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2257956c24ceedab0c48c17b4e%22%2C%22first_id%22%3A%2219b6dd1a10c148a-063e3a033b10ed-4c657b58-2073600-19b6dd1a10d145b%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%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%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTliNmRkMWExMGMxNDhhLTA2M2UzYTAzM2IxMGVkLTRjNjU3YjU4LTIwNzM2MDAtMTliNmRkMWExMGQxNDViIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiNTc5NTZjMjRjZWVkYWIwYzQ4YzE3YjRlIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2257956c24ceedab0c48c17b4e%22%7D%7D; _ga_JTDW9M3LHZ=GS2.1.s1772266909$o3$g0$t1772266909$j60$l0$h0; _csrf=s%3A_1U5JMsnCD3RTwmCER9JqFb4.mo773pACR2hpC5wQ5xRGTuHdG4IFBizJgZutwkTfRhc; Hm_lvt_de47dd1629940fe88b02865de93dd9fe=1771984077,1772162048,1772241582,1772414152; Hm_lpvt_de47dd1629940fe88b02865de93dd9fe=1772414152; HMACCOUNT=A6A0585E8C70051D; GSuvNKHqfvX2r6v7P8HkZv2bow=s%3ANSFxWNnsV8OLC9fbqrhhSe7MujIfdZRJ.tMYAhg8UajUy6BrCqfYcElJt5PZXAPx5IFCMAzFhC0g; JDY_SID=s%3AUdb7kb2OqRccqGoceHeVLZk8x0WSlLt7.ZWuCEChyCcI5HYSTmXSbFVsmMaAx9Lplm3%2F%2FJ4B%2Biuo; acw_tc=743e76f717725247327573805ec920bcf336c7da350308d821feb726945021',
}
BASE_URL = "https://dingtalk.jiandaoyun.com"
APP_ID = '675b900991ad2491c69389ca'
PROCESS_ID = "694b9e1a5ef7b2983fe1f922" # 智能助手流程id
NODE_ID = 3 # 根据原代码固定为4# 出現問題的結點
def check_response(resp_or_data, step_name):
"""通用响应校验函数(兼容 Response / 已解析的 JSON 数据)"""
if hasattr(resp_or_data, "status_code") and hasattr(resp_or_data, "json"):
response = resp_or_data
if response.status_code != 200:
print(f"[❌ {step_name}] 请求失败,状态码: {response.status_code}")
print(f" 响应内容: {response.text[:200]}...")
return None
try:
data = response.json()
except ValueError:
print(f"[❌ {step_name}] 响应不是有效的 JSON 格式")
return None
else:
# 允许直接传入 response.json() 的结果(dict/list/...
data = resp_or_data
# 检查常见错误结构:尽量只在“明确失败”时返回 None,避免误伤正常返回
if isinstance(data, dict):
if data.get("error"):
msg = data.get("message") or data.get("msg") or data.get("error") or "未知错误"
print(f"[❌ {step_name}] 业务逻辑错误: {msg}")
return None
if data.get("success") is False:
msg = data.get("message") or data.get("msg") or "success=false"
print(f"[❌ {step_name}] 业务逻辑错误: {msg}")
return None
if "code" in data:
code = data.get("code")
# 常见成功码:0/200;其他情况仅当明确不是成功码才判失败
if code not in (None, 0, 200, "0", "200", True):
msg = data.get("message") or data.get("msg") or data.get("error") or f"code={code}"
print(f"[❌ {step_name}] 业务逻辑错误: {msg}")
return None
return data
def main():
print(f"[*] 开始执行流程,目标应用: {APP_ID}, 流程: {PROCESS_ID}")
# 1. 轮询查询日志列表并依次处理
limit = 20 # 每次最多处理多少条
success_count = 0
fail_count = 0
total_instances = 0
while True:
log_payload = {
'appId': APP_ID,
'process_id': PROCESS_ID,
'skip': 0, # 每次都从第 0 条开始查最新的失败记录
'limit': limit,
'filter': [],
'status': 3, # 假设 3 代表某种特定状态(如失败/待处理)
}
print(f"[*] 正在获取流程日志列表,limit={limit} ...")
resp_logs = requests.post(
f'{BASE_URL}/automation/apis/process/logs',
cookies=COOKIES,
headers=HEADERS,
json=log_payload,
)
logs_data = check_response(resp_logs, "获取日志列表")
if not logs_data:
break
print(logs_data)
# 兼容不同返回字段命名:有的环境是 "logs",有的是 "log"
instance_list = logs_data.get("log") or logs_data.get("logs") or []
if not instance_list:
print("[⚠️] 未找到符合条件的流程实例,任务结束。")
break
batch_count = len(instance_list)
total_instances += batch_count
print(f"[✅] 本批获取 {batch_count} 条实例记录,开始逐个处理...")
for idx, item in enumerate(instance_list, start=1):
instance_id = item.get("instance_id")
if not instance_id:
print(f"[⚠️] 第 {idx} 条记录缺少 instance_id,跳过。")
continue
print(f"\n--- 处理实例 {idx}: {instance_id} ---")
# 2. 获取节点日志 (获取 execution_id 和 service_id)
node_log_payload = {
'appId': APP_ID,
'process_id': PROCESS_ID,
'instance_id': instance_id,
'node_id': NODE_ID,
}
resp_node = requests.post(
f'{BASE_URL}/automation/apis/process/node_logs',
cookies=COOKIES,
headers=HEADERS,
json=node_log_payload,
)
node_data = check_response(resp_node, "获取节点日志")
if not node_data:
print(f"[❌] 实例 {instance_id} 获取节点日志失败,跳过重试。")
fail_count += 1
continue
execution_id = node_data.get('execution_id')
service_id = node_data.get('service_id')
if not execution_id or not service_id:
print(f"[❌] 实例 {instance_id} 返回数据中缺少 execution_id 或 service_id。")
print(f" 返回数据: {json.dumps(node_data)}")
fail_count += 1
continue
print(f" [️] 获取到执行ID: {execution_id}, 服务ID: {service_id}")
# 3. 执行重试 (Retry)
retry_payload = {
'appId': APP_ID,
'process_id': PROCESS_ID,
'instance_id': instance_id,
'execution_id': execution_id,
'service_id': service_id,
}
resp_retry = requests.post(
f'{BASE_URL}/automation/apis/process/retry_node',
cookies=COOKIES,
headers=HEADERS,
json=retry_payload,
)
retry_data = check_response(resp_retry, "执行重试")
if retry_data:
print(f"[✅] 实例 {instance_id} 重试请求发送成功。")
success_count += 1
else:
print(f"[❌] 实例 {instance_id} 重试请求失败。")
fail_count += 1
# 可选:添加短暂延时,避免触发频率限制
time.sleep(0.5)
# 不使用 skip 分页,而是重新查询最新的失败记录,直到接口不再返回失败实例为止
print("\n" + "=" * 30)
print(f"[🏁] 任务完成。总计实例数: {total_instances}, 成功重试: {success_count}, 失败: {fail_count}")
if __name__ == "__main__":
try:
main()
except Exception as e:
print(f"[💥] 程序发生未捕获的异常: {e}")
import traceback
traceback.print_exc()
File diff suppressed because it is too large Load Diff
@@ -1,20 +1,29 @@
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "宜搭导出文件字段对应",
"id": "ccd76344cc98d6e6"
},
{
"cell_type": "code",
"execution_count": null,
"id": "initial_id",
"metadata": {
"collapsed": true
"collapsed": true,
"ExecuteTime": {
"end_time": "2026-03-07T02:04:58.912156600Z",
"start_time": "2026-03-07T02:04:55.474219900Z"
}
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"from datetime import datetime\n",
"\n",
"\n",
"# 读取旧数据,记得排除下有订单的\n",
"old_df = pd.read_excel(\"C:\\Users\\hp_z66\\Desktop\\(流程)续约服务流程进行中.xlsx\") # 或 read_csv\n",
"old_df = pd.read_excel(fr\"C:\\Users\\hp_z66\\OneDrive\\Desktop\\续约服务数据合并报告_20260307.xlsx\",sheet_name = \"今天前30及后120\") # 或 read_csv\n",
"\n",
"# 初始化新 DataFrame(列按新表头)\n",
"new_columns = [\n",
@@ -50,7 +59,7 @@
" \"专属运营顾问\": \"运营顾问\",\n",
" \"订单编码\": \"订单编码\",\n",
" \"订单支付日期\": \"订单支付日期\",\n",
" \"公司等级\": \"公司等级\",\n",
" \"客户等级\": \"公司等级\",\n",
" \"联系情况及问题说明\": \"联系情况及问题说明\",\n",
" \"产品原因\": \"产品问题\",\n",
" \"服务问题\": \"服务问题\",\n",
@@ -65,6 +74,15 @@
" \"最近修改时间\": \"更新时间\",\n",
" \"应续约日\": \"应续约日\",\n",
" \"区域经理\": \"运营专家\", # 假设区域经理作为运营专家\n",
" \"120天处理人\":\"120天是否跟进\",\n",
" \"60天处理人\":\"60天是否跟进\",\n",
" \"30天处理人\":\"30天是否跟进\",\n",
" \"到期前120天联系情况_提交人\":\"120天处理人\",\n",
" \"到期前60天联系情况_提交人\":\"60天处理人\",\n",
" \"到期前30天联系情况_提交人\":\"30天处理人\",\n",
" \"到期前120天联系情况_日期\":\"120天跟进时间\",\n",
" \"到期前60天联系情况_日期\":\"60天跟进时间\",\n",
" \"到期前30天联系情况_日期\":\"30天跟进时间\",\n",
"}\n",
"\n",
"# 处理每一行\n",
@@ -83,21 +101,6 @@
" new_row['0天自动流转时间'] = new_row['过期日'] + pd.Timedelta(days=90)\n",
"\n",
"\n",
" # 是否跟进逻辑(根据处理人是否为空)\n",
" new_row[\"120天处理人\"] = row.get(\"120天处理人\", None)\n",
" new_row[\"60天处理人\"] = row.get(\"60天处理人\", None)\n",
" new_row[\"30天处理人\"] = row.get(\"30天处理人\", None)\n",
"\n",
" new_row[\"120天是否跟进\"] = pd.notna(new_row[\"120天处理人\"])\n",
" new_row[\"60天是否跟进\"] = pd.notna(new_row[\"60天处理人\"])\n",
" new_row[\"30天是否跟进\"] = pd.notna(new_row[\"30天处理人\"])\n",
"\n",
" # 跟进时间:用最近修改时间或留空\n",
" update_time = row.get(\"最近修改时间\", None)\n",
" new_row[\"120天跟进时间\"] = update_time\n",
" new_row[\"60天跟进时间\"] = update_time\n",
" new_row[\"30天跟进时间\"] = update_time\n",
"\n",
" # 是否联系上:旧表有“是否联系上客户”\n",
" contacted = row.get(\"是否联系上客户\", None)\n",
" if pd.notna(contacted):\n",
@@ -148,7 +151,17 @@
"# 保存\n",
"new_df.to_excel(\"new_table_migrated.xlsx\", index=False)\n",
"print(\"迁移完成!\")"
]
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"迁移完成!\n"
]
}
],
"execution_count": 4
}
],
"metadata": {
+79 -5
View File
@@ -2,14 +2,88 @@
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "initial_id",
"execution_count": 3,
"id": "7cdc1ee6c3dae53d",
"metadata": {
"collapsed": true
"ExecuteTime": {
"end_time": "2026-03-17T06:00:09.320172200Z",
"start_time": "2026-03-17T05:59:15.867810200Z"
}
},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"正在保存第 1 张\n",
"正在保存第 2 张\n",
"正在保存第 3 张\n",
"\n",
"✅ 3张照片已全部保存到:D:\\ding_watermark\n"
]
}
],
"source": [
""
"import pyautogui\n",
"import time\n",
"import os\n",
"\n",
"# ====================== 请替换为你实际获取的坐标 ======================\n",
"CARD_POS = (900, 400) # 「张阳[内部群]」卡片消息的位置\n",
"IMG_POS = (820, 320) # 卡片里水印照片的中心位置\n",
"SAVE_BTN_POS = (780, 620) # 另存为窗口里「保存」按钮的位置\n",
"SAVE_FOLDER = r\"D:\\ding_watermark\" # 你想保存的文件夹\n",
"TOTAL = 3 # 先保存3张\n",
"DELAY = 2 # 操作间隔,慢一点更稳\n",
"# =====================================================================\n",
"\n",
"# 创建保存目录\n",
"if not os.path.exists(SAVE_FOLDER):\n",
" os.makedirs(SAVE_FOLDER)\n",
"\n",
"pyautogui.PAUSE = 0.5\n",
"\n",
"input(\"请切到钉钉窗口,确保第一张卡片可见,按回车开始…\")\n",
"\n",
"for i in range(1, TOTAL + 1):\n",
" print(f\"正在保存第 {i} 张\")\n",
"\n",
" # 1. 点击卡片,打开预览\n",
" pyautogui.click(CARD_POS)\n",
" time.sleep(DELAY)\n",
"\n",
" # 2. 右键点击图片,弹出菜单\n",
" pyautogui.rightClick(IMG_POS)\n",
" time.sleep(0.8)\n",
"\n",
" # 3. 选择「另存为」(根据你的右键菜单,可能需要按1次或2次↓)\n",
" pyautogui.press('down') # 试1次,如果不对就改成 presses=2\n",
" pyautogui.press('enter')\n",
" time.sleep(DELAY)\n",
"\n",
" # 4. 输入文件名\n",
" pyautogui.typewrite(f\"watermark_{i}\")\n",
" time.sleep(0.5)\n",
"\n",
" # 5. 定位到保存目录(Alt+D 快速切地址栏)\n",
" pyautogui.hotkey('alt', 'd')\n",
" pyautogui.typewrite(SAVE_FOLDER)\n",
" pyautogui.press('enter')\n",
" time.sleep(0.5)\n",
"\n",
" # 6. 点击「保存」按钮\n",
" pyautogui.click(SAVE_BTN_POS)\n",
" time.sleep(DELAY)\n",
"\n",
" # 7. 关闭卡片预览\n",
" pyautogui.press('esc')\n",
" time.sleep(0.8)\n",
"\n",
" # 8. 滚动到下一张卡片\n",
" pyautogui.scroll(-200, x=CARD_POS[0], y=CARD_POS[1])\n",
" time.sleep(0.8)\n",
"\n",
"print(f\"\\n✅ 3张照片已全部保存到:{SAVE_FOLDER}\")"
]
}
],