diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..069c93a --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,7 @@ +{ + "permissions": { + "allow": [ + "mcp__zread__read_file" + ] + } +} diff --git a/张阳脚本/F6汽车系统/套餐卡、储值卡退卡.py b/张阳脚本/F6汽车系统/套餐卡、储值卡退卡.py index b1921e1..c9e578b 100644 --- a/张阳脚本/F6汽车系统/套餐卡、储值卡退卡.py +++ b/张阳脚本/F6汽车系统/套餐卡、储值卡退卡.py @@ -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 = { diff --git a/张阳脚本/F6汽车系统/批量创建品牌信息.py b/张阳脚本/F6汽车系统/批量创建品牌信息.py index 79c3a55..7ea2a11 100644 --- a/张阳脚本/F6汽车系统/批量创建品牌信息.py +++ b/张阳脚本/F6汽车系统/批量创建品牌信息.py @@ -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) diff --git a/张阳脚本/F6汽车系统/材料信息批量修改.ipynb b/张阳脚本/F6汽车系统/材料信息批量修改.ipynb index 54f657b..b3aa013 100644 --- a/张阳脚本/F6汽车系统/材料信息批量修改.ipynb +++ b/张阳脚本/F6汽车系统/材料信息批量修改.ipynb @@ -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": { diff --git a/张阳脚本/F6汽车系统/材料条码.ipynb b/张阳脚本/F6汽车系统/材料条码.ipynb index 34f760d..43c2cda 100644 --- a/张阳脚本/F6汽车系统/材料条码.ipynb +++ b/张阳脚本/F6汽车系统/材料条码.ipynb @@ -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", diff --git a/张阳脚本/F6汽车系统/项目信息删除.py b/张阳脚本/F6汽车系统/项目信息删除.py index df8ecf4..0973d3b 100644 --- a/张阳脚本/F6汽车系统/项目信息删除.py +++ b/张阳脚本/F6汽车系统/项目信息删除.py @@ -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) diff --git a/张阳脚本/boss/boss权限自动审批.py b/张阳脚本/boss/boss权限自动审批.py index 3867a69..6df7309 100644 --- a/张阳脚本/boss/boss权限自动审批.py +++ b/张阳脚本/boss/boss权限自动审批.py @@ -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__': diff --git a/张阳脚本/boss/修改门店到期日.ipynb b/张阳脚本/boss/修改门店到期日.ipynb new file mode 100644 index 0000000..1afbddb --- /dev/null +++ b/张阳脚本/boss/修改门店到期日.ipynb @@ -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 +} diff --git a/张阳脚本/minimax调用.ipynb b/张阳脚本/minimax调用.ipynb index 54f657b..d1f20cd 100644 --- a/张阳脚本/minimax调用.ipynb +++ b/张阳脚本/minimax调用.ipynb @@ -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", + ")" ] } ], diff --git a/张阳脚本/minmax.py b/张阳脚本/minmax.py index 7c68785..a388323 100644 --- a/张阳脚本/minmax.py +++ b/张阳脚本/minmax.py @@ -1 +1,30 @@ -# -*- coding: utf-8 -*- \ No newline at end of file +# -*- 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") \ No newline at end of file diff --git a/张阳脚本/宜搭刷数据/批量更新脚本.py b/张阳脚本/宜搭刷数据/批量更新脚本.py index e2a9818..a6f8f2f 100644 --- a/张阳脚本/宜搭刷数据/批量更新脚本.py +++ b/张阳脚本/宜搭刷数据/批量更新脚本.py @@ -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 diff --git a/张阳脚本/宜搭刷数据/新签节点自动化同意.py b/张阳脚本/宜搭刷数据/新签节点自动化同意.py index 5107242..a7553a6 100644 --- a/张阳脚本/宜搭刷数据/新签节点自动化同意.py +++ b/张阳脚本/宜搭刷数据/新签节点自动化同意.py @@ -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("已读取表格") # 执行自动化脚本 diff --git a/张阳脚本/新签宜搭字段对应.py b/张阳脚本/新签宜搭字段对应.py new file mode 100644 index 0000000..23ec0db --- /dev/null +++ b/张阳脚本/新签宜搭字段对应.py @@ -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", +} \ No newline at end of file diff --git a/张阳脚本/竞品系统数据导出/H1车店数据导出.ipynb b/张阳脚本/竞品系统数据导出/H1车店数据导出.ipynb index 82b8c9a..bc2e57f 100644 --- a/张阳脚本/竞品系统数据导出/H1车店数据导出.ipynb +++ b/张阳脚本/竞品系统数据导出/H1车店数据导出.ipynb @@ -10,121 +10,13 @@ }, { "cell_type": "code", - "execution_count": 1, "id": "70a8b0da", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "正在获取总页数...\n", - "总页数:88 页\n", - "正在爬取第 1/88 页...\n", - "正在爬取第 2/88 页...\n", - "正在爬取第 3/88 页...\n", - "正在爬取第 4/88 页...\n", - "正在爬取第 5/88 页...\n", - "正在爬取第 6/88 页...\n", - "正在爬取第 7/88 页...\n", - "正在爬取第 8/88 页...\n", - "正在爬取第 9/88 页...\n", - "正在爬取第 10/88 页...\n", - "正在爬取第 11/88 页...\n", - "正在爬取第 12/88 页...\n", - "正在爬取第 13/88 页...\n", - "正在爬取第 14/88 页...\n", - "正在爬取第 15/88 页...\n", - "正在爬取第 16/88 页...\n", - "正在爬取第 17/88 页...\n", - "正在爬取第 18/88 页...\n", - "正在爬取第 19/88 页...\n", - "正在爬取第 20/88 页...\n", - "正在爬取第 21/88 页...\n", - "正在爬取第 22/88 页...\n", - "正在爬取第 23/88 页...\n", - "正在爬取第 24/88 页...\n", - "正在爬取第 25/88 页...\n", - "正在爬取第 26/88 页...\n", - "正在爬取第 27/88 页...\n", - "正在爬取第 28/88 页...\n", - "正在爬取第 29/88 页...\n", - "正在爬取第 30/88 页...\n", - "正在爬取第 31/88 页...\n", - "正在爬取第 32/88 页...\n", - "正在爬取第 33/88 页...\n", - "正在爬取第 34/88 页...\n", - "正在爬取第 35/88 页...\n", - "正在爬取第 36/88 页...\n", - "正在爬取第 37/88 页...\n", - "正在爬取第 38/88 页...\n", - "正在爬取第 39/88 页...\n", - "正在爬取第 40/88 页...\n", - "正在爬取第 41/88 页...\n", - "正在爬取第 42/88 页...\n", - "正在爬取第 43/88 页...\n", - "正在爬取第 44/88 页...\n", - "正在爬取第 45/88 页...\n", - "正在爬取第 46/88 页...\n", - "正在爬取第 47/88 页...\n", - "正在爬取第 48/88 页...\n", - "正在爬取第 49/88 页...\n", - "正在爬取第 50/88 页...\n", - "正在爬取第 51/88 页...\n", - "正在爬取第 52/88 页...\n", - "正在爬取第 53/88 页...\n", - "正在爬取第 54/88 页...\n", - "正在爬取第 55/88 页...\n", - "正在爬取第 56/88 页...\n", - "正在爬取第 57/88 页...\n", - "正在爬取第 58/88 页...\n", - "正在爬取第 59/88 页...\n", - "正在爬取第 60/88 页...\n", - "正在爬取第 61/88 页...\n", - "正在爬取第 62/88 页...\n", - "正在爬取第 63/88 页...\n", - "正在爬取第 64/88 页...\n", - "正在爬取第 65/88 页...\n", - "正在爬取第 66/88 页...\n", - "正在爬取第 67/88 页...\n", - "正在爬取第 68/88 页...\n", - "正在爬取第 69/88 页...\n", - "正在爬取第 70/88 页...\n", - "正在爬取第 71/88 页...\n", - "正在爬取第 72/88 页...\n", - "正在爬取第 73/88 页...\n", - "正在爬取第 74/88 页...\n", - "正在爬取第 75/88 页...\n", - "正在爬取第 76/88 页...\n", - "正在爬取第 77/88 页...\n", - "正在爬取第 78/88 页...\n", - "正在爬取第 79/88 页...\n", - "正在爬取第 80/88 页...\n", - "正在爬取第 81/88 页...\n", - "正在爬取第 82/88 页...\n", - "正在爬取第 83/88 页...\n", - "正在爬取第 84/88 页...\n", - "正在爬取第 85/88 页...\n", - "正在爬取第 86/88 页...\n", - "正在爬取第 87/88 页...\n", - "正在爬取第 88/88 页...\n", - "\n", - "========== 爬取完成 ==========\n", - "总计数据:1745 行\n", - "\n", - "✅ 文件已保存到桌面:\n", - "📊 Excel文件:C:\\Users\\CW\\Desktop\\车辆数据_已拆分_20260316_151600.csv\n", - "📄 文本文件:C:\\Users\\CW\\Desktop\\车辆数据_已拆分_20260316_151600.txt\n", - "\n", - "前5行数据预览:\n", - "1 ['1', '陕KF39335', '杜源', '', '', '', '/', '', '', '', '', '消费记录 编辑 迁移 删除']\n", - "2 ['2', '陕KB772U', '张子龙', '15686644333', '', '', '1F1FW1R68KFB41218', '', '', '', '', '消费记录 编辑 迁移 删除']\n", - "3 ['3', '陕KUY513', '高', '13474443858', '', '', 'LMGAT1L85P1320223', '', '24048km', '', '', '消费记录 编辑 迁移 删除']\n", - "4 ['4', '陕K55489', '刘永强', '15229629888', '', '', 'JTEJU9FJ5DK058155', '丰田普拉多(进口) > 2013款 4.0 自动 中东版', '', '', '', '消费记录 编辑 迁移 删除']\n", - "5 ['5', '陕K139B8', '郝波', '15929825811', '', '', 'LSVAA4182A2355722', '', '', '', '', '消费记录 编辑 迁移 删除']\n" - ] + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-25T03:51:53.352551400Z", + "start_time": "2026-03-25T03:51:31.198595700Z" } - ], + }, "source": [ "import requests\n", "from bs4 import BeautifulSoup\n", @@ -134,20 +26,24 @@ "from datetime import datetime\n", "\n", "# ===================== 配置区 =====================\n", + "# 已替换为你curl中的最新cookies\n", "COOKIES = (\n", - " 'carOwnerSelects=11847,13014; LOGIN_URL=https%3A%2F%2Fscrm.h1cd.com%2Flogin.html; '\n", - " 'showSmsActivity=1; showEasyMoney=1; PHPSESSID=f5sjp1p18hvgke5oqvfr6q456o; '\n", - " 'adminpd=IMAkQA9qfl0V0bY6hPCcbYdz3rcy0MG2%2FbHz34%2BOWy0%3D; adminun=15529803908; uid=10042'\n", + " 'showSmsActivity=1; '\n", + " 'showEasyMoney=1; '\n", + " 'LOGIN_URL=https%3A%2F%2Fscrm.h1cd.com%2Flogin-h1cd.html; '\n", + " 'adminun=18530760062; '\n", + " 'uid=10407; '\n", + " 'PHPSESSID=7v127mqdfnqa7rgcrlifksrt3t'\n", ")\n", "\n", "BASE_URL = \"https://scrm.h1cd.com/admin/members/carlist\"\n", "HEADERS = {\n", " \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\",\n", - " \"Accept-Language\": \"zh-CN,zh;q=0.9\",\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", " \"Referer\": \"https://scrm.h1cd.com/admin/members/carlist.html\",\n", - " \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36\",\n", - " \"sec-ch-ua\": '\"Not(A:Brand\";v=\"99\", \"Google Chrome\";v=\"133\", \"Chromium\";v=\"133\"',\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", " \"Sec-Fetch-Dest\": \"iframe\",\n", @@ -278,10 +174,10 @@ " # 表头(自动添加)\n", " header = [\n", " \"序号\", \"车牌号\", \"客户名称\", \"客户手机号\",\n", - " \"颜色\", \"发动机号\", \"车架号\", \"其他列1\", \"其他列2\", \"其他列3\"\n", + " \"颜色\", \"发动机号\", \"车架号\", \"里程数\", \"其他列1\", \"其他列2\"\n", " ]\n", " \n", - " csv_file = os.path.join(desktop_path, f\"车辆数据_已拆分_{time_str}.csv\")\n", + " csv_file = os.path.join(desktop_path, f\"车辆数据_已拆分_{time_str}1.csv\")\n", " with open(csv_file, \"w\", newline=\"\", encoding=\"utf-8-sig\") as f:\n", " writer = csv.writer(f)\n", " writer.writerow(header) # 写入标题\n", @@ -319,7 +215,66 @@ " print(\"\\n前5行数据预览:\")\n", " for i, row in enumerate(all_data[:5]):\n", " print(i+1, row)" - ] + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "正在获取总页数...\n", + "总页数:34 页\n", + "正在爬取第 1/34 页...\n", + "正在爬取第 2/34 页...\n", + "正在爬取第 3/34 页...\n", + "正在爬取第 4/34 页...\n", + "正在爬取第 5/34 页...\n", + "正在爬取第 6/34 页...\n", + "正在爬取第 7/34 页...\n", + "正在爬取第 8/34 页...\n", + "正在爬取第 9/34 页...\n", + "正在爬取第 10/34 页...\n", + "正在爬取第 11/34 页...\n", + "正在爬取第 12/34 页...\n", + "正在爬取第 13/34 页...\n", + "正在爬取第 14/34 页...\n", + "正在爬取第 15/34 页...\n", + "正在爬取第 16/34 页...\n", + "正在爬取第 17/34 页...\n", + "正在爬取第 18/34 页...\n", + "正在爬取第 19/34 页...\n", + "正在爬取第 20/34 页...\n", + "正在爬取第 21/34 页...\n", + "正在爬取第 22/34 页...\n", + "正在爬取第 23/34 页...\n", + "正在爬取第 24/34 页...\n", + "正在爬取第 25/34 页...\n", + "正在爬取第 26/34 页...\n", + "正在爬取第 27/34 页...\n", + "正在爬取第 28/34 页...\n", + "正在爬取第 29/34 页...\n", + "正在爬取第 30/34 页...\n", + "正在爬取第 31/34 页...\n", + "正在爬取第 32/34 页...\n", + "正在爬取第 33/34 页...\n", + "正在爬取第 34/34 页...\n", + "\n", + "========== 爬取完成 ==========\n", + "总计数据:666 行\n", + "\n", + "✅ 文件已保存到桌面:\n", + "📊 Excel文件:C:\\Users\\hp_z66\\Desktop\\车辆数据_已拆分_20260325_1151531.csv\n", + "📄 文本文件:C:\\Users\\hp_z66\\Desktop\\车辆数据_已拆分_20260325_115153.txt\n", + "\n", + "前5行数据预览:\n", + "1 ['1', '豫NA477R', '卢忠厚', '', '', '', '/', '', '118933km', '', '', '消费记录 编辑 迁移 删除']\n", + "2 ['2', '豫NF3722', '刘建利', '', '', '', '/', '', '198609km', '', '', '消费记录 编辑 迁移 删除']\n", + "3 ['3', '豫N13B58', '石', '15090629992', '', '', '/', '', '22462km', '', '', '消费记录 编辑 迁移 删除']\n", + "4 ['4', '京PYB297', '科迪黄青春', '', '', '', '/', '', '119584km', '', '', '消费记录 编辑 迁移 删除']\n", + "5 ['5', '豫NN982M', '大众', '', '', '', '/', '', '197504km', '', '', '消费记录 编辑 迁移 删除']\n" + ] + } + ], + "execution_count": 1 }, { "cell_type": "markdown", @@ -331,137 +286,35 @@ }, { "cell_type": "code", - "execution_count": null, "id": "5392bfc0", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==================================================\n", - "开始爬取库存数据...\n", - "==================================================\n", - "✅ 成功获取最大页数:93\n", - "正在爬取第 1/93 页...\n", - "正在爬取第 2/93 页...\n", - "正在爬取第 3/93 页...\n", - "正在爬取第 4/93 页...\n", - "正在爬取第 5/93 页...\n", - "正在爬取第 6/93 页...\n", - "正在爬取第 7/93 页...\n", - "正在爬取第 8/93 页...\n", - "正在爬取第 9/93 页...\n", - "正在爬取第 10/93 页...\n", - "正在爬取第 11/93 页...\n", - "正在爬取第 12/93 页...\n", - "正在爬取第 13/93 页...\n", - "正在爬取第 14/93 页...\n", - "正在爬取第 15/93 页...\n", - "正在爬取第 16/93 页...\n", - "正在爬取第 17/93 页...\n", - "正在爬取第 18/93 页...\n", - "正在爬取第 19/93 页...\n", - "正在爬取第 20/93 页...\n", - "正在爬取第 21/93 页...\n", - "正在爬取第 22/93 页...\n", - "正在爬取第 23/93 页...\n", - "正在爬取第 24/93 页...\n", - "正在爬取第 25/93 页...\n", - "正在爬取第 26/93 页...\n", - "正在爬取第 27/93 页...\n", - "正在爬取第 28/93 页...\n", - "正在爬取第 29/93 页...\n", - "正在爬取第 30/93 页...\n", - "正在爬取第 31/93 页...\n", - "正在爬取第 32/93 页...\n", - "正在爬取第 33/93 页...\n", - "正在爬取第 34/93 页...\n", - "正在爬取第 35/93 页...\n", - "正在爬取第 36/93 页...\n", - "正在爬取第 37/93 页...\n", - "正在爬取第 38/93 页...\n", - "正在爬取第 39/93 页...\n", - "正在爬取第 40/93 页...\n", - "正在爬取第 41/93 页...\n", - "正在爬取第 42/93 页...\n", - "正在爬取第 43/93 页...\n", - "正在爬取第 44/93 页...\n", - "正在爬取第 45/93 页...\n", - "正在爬取第 46/93 页...\n", - "正在爬取第 47/93 页...\n", - "正在爬取第 48/93 页...\n", - "正在爬取第 49/93 页...\n", - "正在爬取第 50/93 页...\n", - "正在爬取第 51/93 页...\n", - "正在爬取第 52/93 页...\n", - "正在爬取第 53/93 页...\n", - "正在爬取第 54/93 页...\n", - "正在爬取第 55/93 页...\n", - "正在爬取第 56/93 页...\n", - "正在爬取第 57/93 页...\n", - "正在爬取第 58/93 页...\n", - "正在爬取第 59/93 页...\n", - "正在爬取第 60/93 页...\n", - "正在爬取第 61/93 页...\n", - "正在爬取第 62/93 页...\n", - "正在爬取第 63/93 页...\n", - "正在爬取第 64/93 页...\n", - "正在爬取第 65/93 页...\n", - "正在爬取第 66/93 页...\n", - "正在爬取第 67/93 页...\n", - "正在爬取第 68/93 页...\n", - "正在爬取第 69/93 页...\n", - "正在爬取第 70/93 页...\n", - "正在爬取第 71/93 页...\n", - "正在爬取第 72/93 页...\n", - "正在爬取第 73/93 页...\n", - "正在爬取第 74/93 页...\n", - "正在爬取第 75/93 页...\n", - "正在爬取第 76/93 页...\n", - "正在爬取第 77/93 页...\n", - "正在爬取第 78/93 页...\n", - "正在爬取第 79/93 页...\n", - "正在爬取第 80/93 页...\n", - "正在爬取第 81/93 页...\n", - "正在爬取第 82/93 页...\n", - "正在爬取第 83/93 页...\n", - "正在爬取第 84/93 页...\n", - "正在爬取第 85/93 页...\n", - "正在爬取第 86/93 页...\n", - "正在爬取第 87/93 页...\n", - "正在爬取第 88/93 页...\n", - "正在爬取第 89/93 页...\n", - "正在爬取第 90/93 页...\n", - "正在爬取第 91/93 页...\n", - "正在爬取第 92/93 页...\n", - "正在爬取第 93/93 页...\n", - "\n", - "🔍 去重完成:原始 1846 条 → 去重后 1823 条\n", - "==================================================\n", - "✅ 爬取 + 去重 完成!\n", - "📊 最终有效条数:1823\n", - "📁 已保存到桌面:库存数据_去重版.xlsx\n", - "==================================================\n" - ] + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-25T03:53:43.600296300Z", + "start_time": "2026-03-25T03:53:18.688209100Z" } - ], + }, "source": [ "import requests\n", "import pandas as pd\n", "from bs4 import BeautifulSoup\n", "import os\n", - "from urllib.parse import urlencode\n", "import re\n", "\n", "# ===================== 【配置区】 =====================\n", - "COOKIE = ('LOGIN_URL=https%3A%2F%2Fscrm.h1cd.com%2Flogin.html; showSmsActivity=1; showEasyMoney=1; '\n", - " 'adminpd=IMAkQA9qfl0V0bY6hPCcbYdz3rcy0MG2%2FbHz34%2BOWy0%3D; adminun=15529803908; uid=10042; '\n", - " 'PHPSESSID=t1fg29l2b29j3nebq4o52tf0o7')\n", + "# 【已更新】根据 curl 命令中的 -b 参数替换为最新 Cookie\n", + "COOKIE = (\n", + " 'showSmsActivity=1; '\n", + " 'showEasyMoney=1; '\n", + " 'LOGIN_URL=https%3A%2F%2Fscrm.h1cd.com%2Flogin-h1cd.html; '\n", + " 'adminun=18530760062; '\n", + " 'uid=10407; '\n", + " 'PHPSESSID=7v127mqdfnqa7rgcrlifksrt3t'\n", + ")\n", "\n", + "# 【已更新】根据 curl 命令中的 URL 参数更新筛选条件\n", "BASE_PARAMS = {\n", - " 'storeId': '12521',\n", - " 'house_id': '8484',\n", + " 'storeId': '13435',\n", + " 'house_id': '9079',\n", " 'repositoryName': '',\n", " 'first_type': '',\n", " 'product_type': '',\n", @@ -470,23 +323,23 @@ " 'product_name': ''\n", "}\n", "\n", - "# 关键修复:分页格式是 stores-search__.html\n", + "# 分页格式保持不动\n", "BASE_URL = \"https://scrm.h1cd.com/admin/billings/stores-search__{}.html\"\n", "# ======================================================\n", "\n", "HEADERS = {\n", " 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',\n", - " 'Accept-Language': 'zh-CN,zh;q=0.9',\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", " 'Cookie': COOKIE,\n", - " 'Referer': 'https://scrm.h1cd.com/admin/billings/stores-search.html',\n", + " 'Referer': 'https://scrm.h1cd.com/admin/billings/stores-search.html?storeId=13435&house_id=9079&repositoryName=&first_type=&product_type=&status=&searchType=1&product_name=',\n", " 'Sec-Fetch-Dest': 'iframe',\n", " 'Sec-Fetch-Mode': 'navigate',\n", " 'Sec-Fetch-Site': 'same-origin',\n", " 'Sec-Fetch-User': '?1',\n", " 'Upgrade-Insecure-Requests': '1',\n", - " 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',\n", - " 'sec-ch-ua': '\"Not(A:Brand\";v=\"99\", \"Google Chrome\";v=\"133\", \"Chromium\";v=\"133\"',\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", @@ -499,9 +352,14 @@ " url = \"https://scrm.h1cd.com/admin/billings/stores-search.html\"\n", " else:\n", " url = BASE_URL.format(page_num)\n", - " \n", - " res = requests.get(url, headers=HEADERS, params=BASE_PARAMS, timeout=10)\n", + "\n", + " res = requests.get(url, headers=HEADERS, params=BASE_PARAMS, timeout=15)\n", " res.raise_for_status()\n", + "\n", + " if 'login.html' in res.url:\n", + " print(f\"⚠️ 第{page_num}页检测到跳转登录,Cookie可能已失效。\")\n", + " return None\n", + "\n", " return res.text\n", " except Exception as e:\n", " print(f\"第{page_num}页请求失败:{e}\")\n", @@ -513,24 +371,34 @@ " soup = BeautifulSoup(html, 'html.parser')\n", " table = soup.find('table', class_='table-hover')\n", " if not table:\n", + " table = soup.find('table')\n", + "\n", + " if not table:\n", " return []\n", "\n", " rows = []\n", - " # 表头\n", - " headers = [th.get_text(strip=True) for th in table.select('thead th')]\n", - " rows.append(headers)\n", + " thead = table.find('thead')\n", + " if thead:\n", + " headers = [th.get_text(strip=True) for th in thead.find_all('th')]\n", + " if headers:\n", + " rows.append(headers)\n", "\n", - " # 表体\n", - " for tr in table.select('tbody tr'):\n", + " tbody = table.find('tbody')\n", + " target_rows = tbody.find_all('tr') if tbody else table.find_all('tr')\n", + "\n", + " for tr in target_rows:\n", " tds = tr.find_all('td')\n", + " if not tds:\n", + " continue\n", " row = [td.get_text(strip=True) for td in tds]\n", " if any(row):\n", " rows.append(row)\n", + "\n", " return rows\n", "\n", "\n", "def get_max_page():\n", - " \"\"\"【已修复】从页面提取最大页数:共 1846 条记录,页 1/93\"\"\"\n", + " \"\"\"从页面提取最大页数\"\"\"\n", " html = get_page_html(1)\n", " if not html:\n", " return 1\n", @@ -538,21 +406,35 @@ " soup = BeautifulSoup(html, 'html.parser')\n", " page_info = soup.find('div', class_='dataTables_paginate')\n", " if not page_info:\n", + " text = soup.get_text()\n", + " match = re.search(r'页\\s*1/(\\d+)', text)\n", + " if match:\n", + " return int(match.group(1))\n", " return 1\n", "\n", " text = page_info.get_text()\n", - " match = re.search(r'页\\s*1/(\\d+)', text) # 匹配 页 1/93\n", + " match = re.search(r'页\\s*1/(\\d+)', text)\n", " if match:\n", " return int(match.group(1))\n", + "\n", + " match = re.search(r'1\\s*/\\s*(\\d+)', text)\n", + " if match:\n", + " return int(match.group(1))\n", + "\n", " return 1\n", "\n", "\n", "def main():\n", " print(\"=\" * 50)\n", " print(\"开始爬取库存数据...\")\n", + " print(f\"当前 StoreID: {BASE_PARAMS['storeId']}\")\n", + " print(f\"当前 HouseID: {BASE_PARAMS['house_id']}\")\n", " print(\"=\" * 50)\n", "\n", - " max_page = get_max_page() * 2\n", + " max_page = get_max_page()\n", + " if max_page == 1:\n", + " print(\"⚠️ 仅检测到 1 页,可能是解析失败或确实只有一页。\")\n", + "\n", " print(f\"✅ 成功获取最大页数:{max_page}\")\n", "\n", " all_data = []\n", @@ -560,230 +442,633 @@ " print(f\"正在爬取第 {page}/{max_page} 页...\")\n", " html = get_page_html(page)\n", " if not html:\n", + " print(f\"❌ 第 {page} 页获取失败,跳过。\")\n", " continue\n", "\n", " rows = parse_table(html)\n", + " if not rows:\n", + " print(f\"⚠️ 第 {page} 页未解析到表格数据。\")\n", + " continue\n", + "\n", " if page == 1:\n", " all_data.extend(rows)\n", " else:\n", - " all_data.extend(rows[1:])\n", + " if len(rows) > 0 and rows[0] == all_data[0]:\n", + " all_data.extend(rows[1:])\n", + " else:\n", + " all_data.extend(rows)\n", + "\n", + " if not all_data:\n", + " print(\"\\n❌ 未获取到任何数据,请检查 Cookie 或网络。\")\n", + " return\n", "\n", - " # 保存到桌面\n", " desktop = os.path.join(os.path.expanduser(\"~\"), \"Desktop\")\n", - " \n", - " # ===================== 核心修改:按配件编码去重 =====================\n", " df = pd.DataFrame(all_data[1:], columns=all_data[0])\n", - " \n", - " # 按【配件编码】列去重,保留第一条数据\n", - " if '配件编码' in df.columns:\n", + "\n", + " # 按配件编码去重\n", + " target_col = None\n", + " for col in df.columns:\n", + " if '配件编码' in col or '编码' in col:\n", + " target_col = col\n", + " break\n", + "\n", + " if target_col:\n", " total_before = len(df)\n", - " df = df.drop_duplicates(subset=['配件编码'], keep='first')\n", + " df = df.drop_duplicates(subset=[target_col], keep='first')\n", " total_after = len(df)\n", - " print(f\"\\n🔍 去重完成:原始 {total_before} 条 → 去重后 {total_after} 条\")\n", + " print(f\"\\n🔍 去重完成 (基于列: {target_col}):原始 {total_before} 条 → 去重后 {total_after} 条\")\n", " else:\n", - " print(\"\\n⚠️ 未找到【配件编码】列,跳过去重\")\n", - " # ==================================================================\n", + " print(f\"\\n⚠️ 未找到包含【配件编码】的列,跳过去重。当前列名:{list(df.columns)}\")\n", "\n", - " path = os.path.join(desktop, \"库存数据_去重版.xlsx\")\n", - " df.to_excel(path, index=False)\n", + " filename = f\"库存数据_{BASE_PARAMS['storeId']}_去重版1.xlsx\"\n", + " path = os.path.join(desktop, filename)\n", "\n", - " print(\"=\" * 50)\n", - " print(f\"✅ 爬取 + 去重 完成!\")\n", - " print(f\"📊 最终有效条数:{len(df)}\")\n", - " print(f\"📁 已保存到桌面:库存数据_去重版.xlsx\")\n", - " print(\"=\" * 50)\n", + " try:\n", + " df.to_excel(path, index=False)\n", + " print(\"=\" * 50)\n", + " print(f\"✅ 爬取 + 去重 完成!\")\n", + " print(f\"📊 最终有效条数:{len(df)}\")\n", + " print(f\"📁 已保存到桌面:{filename}\")\n", + " print(\"=\" * 50)\n", + " except Exception as e:\n", + " print(f\"❌ 保存文件失败:{e}\")\n", + " csv_path = os.path.join(desktop, filename.replace('.xlsx', '.csv'))\n", + " df.to_csv(csv_path, index=False, encoding='utf-8-sig')\n", + " print(f\"💡 已尝试转为 CSV 保存至:{csv_path}\")\n", "\n", "\n", "if __name__ == '__main__':\n", " main()" - ] + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==================================================\n", + "开始爬取库存数据...\n", + "当前 StoreID: 13435\n", + "当前 HouseID: 9079\n", + "==================================================\n", + "✅ 成功获取最大页数:40\n", + "正在爬取第 1/40 页...\n", + "正在爬取第 2/40 页...\n", + "正在爬取第 3/40 页...\n", + "正在爬取第 4/40 页...\n", + "正在爬取第 5/40 页...\n", + "正在爬取第 6/40 页...\n", + "正在爬取第 7/40 页...\n", + "正在爬取第 8/40 页...\n", + "正在爬取第 9/40 页...\n", + "正在爬取第 10/40 页...\n", + "正在爬取第 11/40 页...\n", + "正在爬取第 12/40 页...\n", + "正在爬取第 13/40 页...\n", + "正在爬取第 14/40 页...\n", + "正在爬取第 15/40 页...\n", + "正在爬取第 16/40 页...\n", + "正在爬取第 17/40 页...\n", + "正在爬取第 18/40 页...\n", + "正在爬取第 19/40 页...\n", + "正在爬取第 20/40 页...\n", + "正在爬取第 21/40 页...\n", + "正在爬取第 22/40 页...\n", + "正在爬取第 23/40 页...\n", + "正在爬取第 24/40 页...\n", + "正在爬取第 25/40 页...\n", + "正在爬取第 26/40 页...\n", + "正在爬取第 27/40 页...\n", + "正在爬取第 28/40 页...\n", + "正在爬取第 29/40 页...\n", + "正在爬取第 30/40 页...\n", + "正在爬取第 31/40 页...\n", + "正在爬取第 32/40 页...\n", + "正在爬取第 33/40 页...\n", + "正在爬取第 34/40 页...\n", + "正在爬取第 35/40 页...\n", + "正在爬取第 36/40 页...\n", + "正在爬取第 37/40 页...\n", + "正在爬取第 38/40 页...\n", + "正在爬取第 39/40 页...\n", + "正在爬取第 40/40 页...\n", + "\n", + "🔍 去重完成 (基于列: 配件编码):原始 782 条 → 去重后 782 条\n", + "==================================================\n", + "✅ 爬取 + 去重 完成!\n", + "📊 最终有效条数:782\n", + "📁 已保存到桌面:库存数据_13435_去重版1.xlsx\n", + "==================================================\n" + ] + } + ], + "execution_count": 2 }, { "cell_type": "markdown", "id": "4b11e6fa", "metadata": {}, "source": [ - "# 历史维修记录" + "# 历史维修记录\n", + "开单管理" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "667edbdc", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "🔧 开始导出(100%匹配页面结构)...\n", - "正在读取第 1/1 页\n", - "\n", - "✅ 导出完成!桌面文件:维修记录_完美导出版.xlsx\n" - ] + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-25T03:58:48.443601700Z", + "start_time": "2026-03-25T03:56:48.226330400Z" } - ], + }, + "cell_type": "code", "source": [ "import requests\n", "import pandas as pd\n", "from bs4 import BeautifulSoup\n", "import os\n", "import re\n", + "import time\n", "\n", "# ===================== 固定配置 =====================\n", - "BASE_URL_1 = \"https://scrm.h1cd.com/admin/reports/orderCostDetail.html\"\n", - "BASE_URL_N = \"https://scrm.h1cd.com/admin/reports/orderCostDetail_{}.html\"\n", - "DESKTOP = os.path.join(os.path.expanduser(\"~\"), \"Desktop\")\n", - "OUTPUT_FILE = os.path.join(DESKTOP, \"维修记录_完美导出版.xlsx\")\n", + "# 注意:URL 中的 'Lists' 首字母大写,需与服务器严格一致\n", + "BASE_URL = \"https://scrm.h1cd.com/admin/billings/Lists.html\"\n", + "# 假设分页是通过 URL 参数或路径变化,这里根据你的代码逻辑保留路径变化模式\n", + "# 如果实际是分页参数 (如 ?page=2),请修改 get_html 函数\n", + "BASE_URL_PATTERN = \"https://scrm.h1cd.com/admin/billings/Lists_{}.html\"\n", "\n", + "OUTPUT_DIR = r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\"\n", + "OUTPUT_FILE = os.path.join(OUTPUT_DIR, \"维修记录_完美导出版.xlsx\")\n", + "\n", + "# 请求头 (完全同步你的 curl)\n", "HEADERS = {\n", - " 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',\n", - " 'Accept-Language': 'zh-CN,zh;q=0.9',\n", + " 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',\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", - " 'Referer': 'https://scrm.h1cd.com/admin/reports/orderCostDetail.html?storeId=0&cost_time_type=1&timeStart=2021-03-01&timeEnd=&type=&search=&_action=',\n", - " 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',\n", + " # Referer 已更新\n", + " 'Referer': 'https://scrm.h1cd.com/admin/billings/Lists.html?storeId=0&type=&receive_by=&is_out=&is_end=&timeStart=2022-02-01&timeEnd=&search=&status=0',\n", + " 'Sec-Fetch-Dest': 'iframe',\n", + " 'Sec-Fetch-Mode': 'navigate',\n", + " 'Sec-Fetch-Site': 'same-origin',\n", + " 'Sec-Fetch-User': '?1',\n", + " 'Upgrade-Insecure-Requests': '1',\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", + "# Cookies (直接从 curl 提取,字典格式)\n", "COOKIES = {\n", - " 'LOGIN_URL': 'https%3A%2F%2Fscrm.h1cd.com%2Flogin.html',\n", " 'showSmsActivity': '1',\n", " 'showEasyMoney': '1',\n", - " 'adminpd': 'IMAkQA9qfl0V0bY6hPCcbYdz3rcy0MG2%2FbHz34%2BOWy0%3D',\n", - " 'adminun': '15529803908',\n", - " 'uid': '10042',\n", - " 'PHPSESSID': 't1fg29l2b29j3nebq4o52tf0o7'\n", + " 'LOGIN_URL': 'https%3A%2F%2Fscrm.h1cd.com%2Flogin-h1cd.html',\n", + " 'adminpd': 'BNB%2Bpx2I%2B92MtZBN1vVyPt7A%2B3eKA3uAnIzdLP%2FD%2FBw%3D',\n", + " 'adminun': '18530760062',\n", + " 'uid': '10407',\n", + " 'PHPSESSID': '7v127mqdfnqa7rgcrlifksrt3t'\n", "}\n", "\n", + "# 查询参数 (已同步 curl 中的 timeStart=2022-02-01)\n", "PARAMS = {\n", " 'storeId': '0',\n", - " 'cost_time_type': '1',\n", - " 'timeStart': '2021-03-01',\n", - " 'timeEnd': '',\n", " 'type': '',\n", + " 'receive_by': '',\n", + " 'is_out': '',\n", + " 'is_end': '',\n", + " 'timeStart': '2022-02-01',\n", + " 'timeEnd': '',\n", " 'search': '',\n", - " '_action': ''\n", + " 'status': '0'\n", "}\n", "\n", + "# 定义表头 (根据你代码中的逻辑,共23列)\n", + "HEADERS_LIST = [\n", + " '勾选框', '序号', '工单号', '工单内容', '车辆信息', '车主信息',\n", + " '工单金额', '开单时间', '接车人', '施工人员', '销售人员',\n", + " '预收款', '开单备注', '结算信息', '预计交车时间', '车架号',\n", + " '进厂公里', '下次保养公里', '下次保养时间', '是否出库',\n", + " '是否完工', '状态', '操作'\n", + "]\n", + "\n", "# =====================================================\n", "\n", "def get_html(page):\n", + " \"\"\"获取指定页面的HTML内容\"\"\"\n", " try:\n", " if page == 1:\n", - " r = requests.get(BASE_URL_1, headers=HEADERS, cookies=COOKIES, params=PARAMS, timeout=10)\n", + " url = BASE_URL\n", " else:\n", - " r = requests.get(BASE_URL_N.format(page), headers=HEADERS, cookies=COOKIES, params=PARAMS, timeout=10)\n", + " # 适配分页 URL 格式:Lists_2.html, Lists_3.html ...\n", + " url = BASE_URL_PATTERN.format(page)\n", + "\n", + " print(f\" 正在请求: {url}\")\n", + "\n", + " r = requests.get(\n", + " url,\n", + " headers=HEADERS,\n", + " cookies=COOKIES,\n", + " params=PARAMS, # 参数会自动拼接到 URL 后\n", + " timeout=30,\n", + " verify=True # 默认验证 SSL,如果证书有问题可改为 False\n", + " )\n", + "\n", + " # 检查是否被重定向到登录页 (通过检查 URL 或 内容)\n", + " if 'login' in r.url.lower() or '登录' in r.text[:2000]:\n", + " print(\" ⚠️ 检测到可能已退出登录或 Cookie 过期!\")\n", + " return None\n", + "\n", " r.raise_for_status()\n", + " r.encoding = 'utf-8'\n", " return r.text\n", - " except:\n", + " except Exception as e:\n", + " print(f\" ❌ 获取第{page}页失败: {str(e)}\")\n", " return None\n", "\n", - "def parse_real_table(html):\n", - " \"\"\"\n", - " 终极解析:严格按照你系统的合并单元格结构逐行还原\n", - " 主行:18列完整\n", - " 子行:从第4列开始,前面自动继承\n", - " \"\"\"\n", + "def parse_table(html):\n", + " \"\"\"解析HTML表格,提取所有字段\"\"\"\n", " soup = BeautifulSoup(html, 'html.parser')\n", - " tables = soup.find_all('table', class_='table-hover')\n", - " if not tables:\n", - " return []\n", - " table = tables[0]\n", - " trs = table.find_all('tr')\n", "\n", - " # 固定表头(和网页100%一致)\n", - " headers = [\n", - " '序号', '工单号', '车牌', '车主信息', '所属分类', '工单内容',\n", - " '金额', '折扣', '折后金额', '成本', '利润', '工单金额',\n", - " '优惠金额', '成本总计', '工单毛利', '毛利率', '结算时间', '接车人'\n", - " ]\n", + " # 尝试寻找表格,增加对 tbody 的兼容\n", + " table = soup.find('table', class_='table')\n", + " if not table:\n", + " # 尝试没有 class 的 table 或者 id\n", + " table = soup.find('table')\n", + "\n", + " if not table:\n", + " return []\n", "\n", " result = []\n", - " current_no = ''\n", - " current_order = ''\n", - " current_car = ''\n", - " current_user = ''\n", "\n", - " for tr in trs:\n", - " tds = tr.find_all(['td', 'th'])\n", - " if not tds:\n", + " # 查找数据行,类名可能是 'order_item' 或在 tbody 中\n", + " # 先找 tbody,再找 tr\n", + " tbody = table.find('tbody')\n", + " if tbody:\n", + " rows = tbody.find_all('tr', class_='order_item')\n", + " if not rows:\n", + " rows = tbody.find_all('tr') # 如果没有特定类名,取所有行\n", + " else:\n", + " rows = table.find_all('tr', class_='order_item')\n", + " if not rows:\n", + " rows = table.find_all('tr')\n", + "\n", + " # 过滤掉表头行 (如果包含 th 标签)\n", + " data_rows = []\n", + " for row in rows:\n", + " if row.find('th'):\n", + " continue\n", + " data_rows.append(row)\n", + "\n", + " for row in data_rows:\n", + " tds = row.find_all('td')\n", + "\n", + " # 动态判断列数,如果列数过少则跳过 (可能是空行)\n", + " if len(tds) < 5:\n", " continue\n", "\n", - " row = [td.get_text(strip=True) for td in tds]\n", + " row_data = []\n", + " for i, td in enumerate(tds):\n", + " text = td.get_text(strip=True, separator='\\n')\n", "\n", - " # ===================== 核心逻辑 =====================\n", - " # 这一行是【主行】:有 序号、工单号、车牌、车主\n", - " if len(tds) >= 15:\n", - " current_no = row[0]\n", - " current_order = row[1]\n", - " current_car = row[2]\n", - " current_user = row[3]\n", - " # 完整行\n", - " new_row = row[:18]\n", + " # 特殊处理逻辑\n", + " if i == 4: # 车辆信息:提取车牌号\n", + " car_match = re.search(r'([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼][A-Z][A-Z0-9]{5,6})', text)\n", + " if car_match:\n", + " row_data.append(car_match.group(1))\n", + " else:\n", + " row_data.append(text)\n", + " elif i == 2: # 工单号:尝试提取纯数字\n", + " order_match = re.search(r'(\\d{8,})', text) # 放宽数字长度限制\n", + " if order_match:\n", + " row_data.append(order_match.group(1))\n", + " else:\n", + " row_data.append(text.split('\\n')[0].strip())\n", + " else:\n", + " clean_text = text.replace('\\n', ' | ').replace('\\r', '')\n", + " row_data.append(clean_text)\n", "\n", - " # 这一行是【子行】:只有 分类~利润 共7列\n", - " else:\n", - " new_row = [\n", - " current_no, current_order, current_car, current_user,\n", - " row[0], row[1], row[2], row[3], row[4], row[5], row[6],\n", - " '', '', '', '', '', '', ''\n", - " ]\n", - " # ====================================================\n", + " # 如果列数少于表头,补齐空字符串;如果多于表头,截断\n", + " if len(row_data) < len(HEADERS_LIST):\n", + " row_data.extend([''] * (len(HEADERS_LIST) - len(row_data)))\n", + " elif len(row_data) > len(HEADERS_LIST):\n", + " row_data = row_data[:len(HEADERS_LIST)]\n", "\n", - " # 补齐18列\n", - " while len(new_row) < 18:\n", - " new_row.append('')\n", + " result.append(row_data)\n", "\n", - " result.append(new_row[:18])\n", + " return result\n", "\n", - " return [headers] + result\n", - "\n", - "def get_total_pages():\n", - " html = get_html(1)\n", + "def get_total_pages(html):\n", + " \"\"\"从第一页 HTML 中分析总页数\"\"\"\n", " if not html:\n", " return 1\n", - " match = re.search(r'页\\s*1/(\\d+)', html)\n", - " if match:\n", - " return int(match.group(1))\n", + "\n", + " # 常见分页文本模式\n", + " patterns = [\n", + " r'共\\s*(\\d+)\\s*页',\n", + " r'共\\s*(\\d+)\\s*条.*?(\\d+)\\s*页', # 共XX条 XX页\n", + " r'页码\\s*\\d+/(\\d+)',\n", + " r'1/(\\d+)',\n", + " r'of\\s+(\\d+)\\s*pages' # 英文模式\n", + " ]\n", + "\n", + " for pattern in patterns:\n", + " match = re.search(pattern, html)\n", + " if match:\n", + " # 取最后一个匹配组作为页数 (针对第二条正则)\n", + " page_num = match.group(match.lastindex)\n", + " try:\n", + " return int(page_num)\n", + " except ValueError:\n", + " continue\n", + "\n", + " # 如果正则没匹配到,尝试找分页按钮数量估算 (保守估计)\n", + " soup = BeautifulSoup(html, 'html.parser')\n", + " pagination = soup.find('div', class_='dataTables_wrapper') or soup.find('ul', class_='pagination')\n", + " if pagination:\n", + " # 简单策略:如果找不到具体数字,先假设只有1页,避免报错,或者你可以手动设置一个最大值\n", + " # 这里返回 1,并在主循环中增加“如果下一页为空则停止”的逻辑更安全\n", + " print(\" ⚠️ 未明确检测到总页数,将尝试逐页爬取直到无数据。\")\n", + " return 999 # 设置一个较大的上限,依靠内容为空来停止\n", + "\n", " return 1\n", "\n", "def main():\n", - " print(\"🔧 开始导出(100%匹配页面结构)...\")\n", - " total = get_total_pages()\n", - " all_data = []\n", - " header_added = False\n", + " print(\"🔧 开始导出维修记录...\")\n", "\n", - " for p in range(1, total + 1):\n", - " print(f\"正在读取第 {p}/{total} 页\")\n", - " html = get_html(p)\n", - " if not html:\n", - " continue\n", + " # 确保输出目录存在\n", + " if not os.path.exists(OUTPUT_DIR):\n", + " try:\n", + " os.makedirs(OUTPUT_DIR)\n", + " print(f\"✅ 创建输出目录: {OUTPUT_DIR}\")\n", + " except Exception as e:\n", + " print(f\"❌ 无法创建目录: {e}\")\n", + " return\n", "\n", - " rows = parse_real_table(html)\n", - " if not rows:\n", - " continue\n", - "\n", - " if not header_added:\n", - " all_data.extend(rows)\n", - " header_added = True\n", - " else:\n", - " all_data.extend(rows[1:])\n", - "\n", - " if not all_data:\n", - " print(\"❌ 未获取到数据,请检查Cookie是否过期\")\n", + " # 1. 获取第一页以确定总页数\n", + " print(\"📄 正在获取第 1 页以分析页数...\")\n", + " first_html = get_html(1)\n", + " if not first_html:\n", + " print(\"❌ 无法获取第一页,请检查 Cookie 是否过期或网络设置。\")\n", " return\n", "\n", - " df = pd.DataFrame(all_data[1:], columns=all_data[0])\n", - " df.to_excel(OUTPUT_FILE, index=False)\n", - " print(f\"\\n✅ 导出完成!桌面文件:维修记录_完美导出版.xlsx\")\n", + " total_pages = get_total_pages(first_html)\n", + " print(f\"📊 预估总页数: {total_pages}\")\n", + "\n", + " all_data = []\n", + "\n", + " # 2. 循环爬取\n", + " current_page = 1\n", + " while current_page <= total_pages:\n", + " time.sleep(0.5)\n", + " print(f\"🔄 正在处理第 {current_page}/{total_pages} 页...\")\n", + "\n", + " if current_page == 1:\n", + " html = first_html\n", + " else:\n", + " html = get_html(current_page)\n", + "\n", + " if not html:\n", + " print(f\"⚠️ 第{current_page}页获取失败或为空,停止爬取。\")\n", + " break\n", + "\n", + " page_data = parse_table(html)\n", + "\n", + " if not page_data:\n", + " print(f\"⚠️ 第{current_page}页解析不到数据,可能已到达最后一页。\")\n", + " break\n", + "\n", + " all_data.extend(page_data)\n", + " print(f\" ✅ 本页提取 {len(page_data)} 条记录\")\n", + "\n", + " # 简单的反爬延时\n", + " time.sleep(1)\n", + "\n", + " current_page += 1\n", + "\n", + " if not all_data:\n", + " print(\"❌ 未获取到任何有效数据。\")\n", + " return\n", + "\n", + " # 3. 保存数据\n", + " try:\n", + " df = pd.DataFrame(all_data, columns=HEADERS_LIST)\n", + "\n", + " # 保存 Excel\n", + " df.to_excel(OUTPUT_FILE, index=False, engine='openpyxl')\n", + "\n", + " print(\"\\n\" + \"=\"*30)\n", + " print(\"✅ 导出成功!\")\n", + " print(f\"📁 文件路径: {OUTPUT_FILE}\")\n", + " print(f\"📈 总记录数: {len(df)}\")\n", + " print(\"=\"*30)\n", + "\n", + " except Exception as e:\n", + " print(f\"❌ 保存 Excel 失败: {e}\")\n", + " # 降级保存 CSV\n", + " csv_file = OUTPUT_FILE.replace('.xlsx', '.csv')\n", + " try:\n", + " df.to_csv(csv_file, index=False, encoding='utf-8-sig')\n", + " print(f\"📌 已降级保存为 CSV: {csv_file}\")\n", + " except Exception as ce:\n", + " print(f\"❌ 保存 CSV 也失败: {ce}\")\n", "\n", "if __name__ == '__main__':\n", - " main()" - ] + " # 依赖检查\n", + " required_packages = ['requests', 'pandas', 'bs4', 'openpyxl']\n", + " missing = []\n", + " for pkg in required_packages:\n", + " try:\n", + " __import__(pkg)\n", + " except ImportError:\n", + " missing.append(pkg)\n", + "\n", + " if missing:\n", + " print(f\"❌ 缺少必要的库: {', '.join(missing)}\")\n", + " print(\"💡 请运行以下命令安装: pip install \" + \" \".join(missing))\n", + " else:\n", + " main()" + ], + "id": "cbd4eeb0a30b3e15", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🔧 开始导出维修记录...\n", + "📄 正在获取第 1 页以分析页数...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists.html\n", + "📊 预估总页数: 53\n", + "🔄 正在处理第 1/53 页...\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 2/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_2.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 3/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_3.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 4/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_4.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 5/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_5.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 6/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_6.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 7/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_7.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 8/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_8.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 9/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_9.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 10/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_10.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 11/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_11.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 12/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_12.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 13/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_13.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 14/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_14.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 15/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_15.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 16/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_16.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 17/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_17.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 18/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_18.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 19/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_19.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 20/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_20.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 21/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_21.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 22/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_22.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 23/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_23.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 24/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_24.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 25/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_25.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 26/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_26.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 27/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_27.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 28/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_28.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 29/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_29.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 30/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_30.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 31/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_31.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 32/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_32.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 33/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_33.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 34/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_34.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 35/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_35.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 36/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_36.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 37/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_37.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 38/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_38.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 39/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_39.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 40/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_40.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 41/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_41.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 42/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_42.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 43/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_43.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 44/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_44.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 45/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_45.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 46/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_46.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 47/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_47.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 48/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_48.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 49/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_49.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 50/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_50.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 51/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_51.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 52/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_52.html\n", + " ✅ 本页提取 20 条记录\n", + "🔄 正在处理第 53/53 页...\n", + " 正在请求: https://scrm.h1cd.com/admin/billings/Lists_53.html\n", + " ✅ 本页提取 8 条记录\n", + "\n", + "==============================\n", + "✅ 导出成功!\n", + "📁 文件路径: D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\维修记录_完美导出版.xlsx\n", + "📈 总记录数: 1048\n", + "==============================\n" + ] + } + ], + "execution_count": 3 } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "F6+宜搭+其它", "language": "python", "name": "python3" }, @@ -797,9 +1082,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.12" + "version": "3.13.11" } }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/张阳脚本/竞品系统数据导出/Products_page1_debug.html b/张阳脚本/竞品系统数据导出/Products_page1_debug.html new file mode 100644 index 0000000..c3a77d7 --- /dev/null +++ b/张阳脚本/竞品系统数据导出/Products_page1_debug.html @@ -0,0 +1,1305 @@ + + + + + + + + + + + + + + + H1车店—国内最大的微信公众服务平台 + + + + +

开单列表

+
+
+
+
+
+ 门店名称: + + 工单类型: + + 接车人: + 是否出库: + + 是否完工: + +

+ + + + + + +
+ + +
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
序号工单号工单内容车辆信息车主信息工单金额开单时间接车人结算信息是否出库是否完工状态操作
1 + 260318134112271128 +
+ 维修 +
更换LED灯 + + 冀J986WQ + 王芝龙 +
15227539886
+ ¥220.00 + 2026-03-18 13:40:00 + 张丽 +

张丽

+

2026-03-18 13:41:00

+
/已完工 + 已结算 +
2 + 260316183428122714 +
+ 维修 +
更换电瓶 + + 冀JEE793 + 邱洪祥 +
13303175388
+ ¥700.00 + 2026-03-16 18:34:00 + 张丽 +

张丽

+

2026-03-16 19:15:00

+
/已完工 + 已结算 +
3 + 260316175406545210 +
+ 维修 +
添加1升机油 + + 冀J00DS7 + 赵强 +
15103276788
+ ¥80.00 + 2026-03-16 17:53:00 + 张丽 +

+

+
/已完工 + 未结算 +
4 + 260316163205892213 +
+ 维修 +
更换出水口
添加防冻液
工费
更换耐油管
+ + 冀AML535 + 纪执罡 +
13731746999
+ ¥380.00 + 2026-03-16 16:31:00 + 张丽 +

张丽

+

2026-03-16 17:54:00

+
/已完工 + 已结算 +
5 + 260316143301228812 +
+ 维修 +
更换右倒车镜片
更换右倒车镜壳
更换右转向灯
+ + 冀JS222A + 刘龙升 +
17731711280
+ ¥240.00 + 2026-03-16 14:32:00 + 张丽 +

张丽

+

2026-03-16 14:33:00

+
/已完工 + 已结算 +
6 + 260316123329792911 +
+ 维修 +
更换前刹车片
更换后刹车片
+ + 冀JR751R + 温浩 +
15100878817
+ ¥340.00 + 2026-03-16 12:33:00 + 张丽 +

张丽

+

2026-03-16 14:33:00

+
/已完工 + 已结算 +
7 + 260315174443520114 +
+ 维修 +
更换点火铝座
工费
+ + 冀JC5959 + 史永刚 +
13803177311
+ ¥300.00 + 2026-03-15 17:44:00 + 张丽 +

张丽

+

2026-03-15 17:44:00

+
/已完工 + 已结算 +
8 + 260315165704942015 +
+ 维修 +
免拆清洗节气门 + + 冀J586H2 + 刘志强 +
18731760406
+ ¥30.00 + 2026-03-15 16:56:00 + 张丽 +

张丽

+

2026-03-15 16:57:00

+
/已完工 + 已结算 +
9 + 260315122250597127 +
+ 维修 +
更换电瓶 + + 冀J22MD5 + 高长胜 +
13932794618
+ ¥420.00 + 2026-03-15 12:22:00 + 张丽 +

张丽

+

2026-03-15 12:22:00

+
/已完工 + 已结算 +
10 + 260314144843447337 +
+ 维修 +
更换点火线圈 + + 冀J2Y3Y8 + 魏元祥 +
13363170292
+ ¥120.00 + 2026-03-14 14:48:00 + 张丽 +

张丽

+

2026-03-15 09:33:00

+
/已完工 + 已结算 +
11 + 260313100159647327 +
+ 维修 +
更换水箱
更换节温器
更换防冻液
工费
更换水温传感器
+ + 冀AML535 + 纪执罡 +
13731746999
+ ¥1290.00 + 2026-03-13 10:00:00 + 张丽 +

张丽

+

2026-03-13 10:02:00

+
/已完工 + 已结算 +
12 + 260312152431936013 +
+ 维修 +
免拆清洗节气门 + + 冀J7688H + 张晨 +
15231765377
+ ¥100.00 + 2026-03-12 15:24:00 + 张丽 +

张丽

+

2026-03-12 15:24:00

+
/已完工 + 已结算 +
13 + 260309173646627910 +
+ 维修 +
更换节温器盖
添加防冻液
工费
更换机滤限压阀
+ + 冀JWM399 + 高翔 +
13931763551
+ ¥555.00 + 2026-03-09 17:36:00 + 张丽 +

张丽

+

2026-03-09 17:36:00

+
/已完工 + 已结算 +
14 + 260309115227464412 +
+ 维修 +
工费
更换前减弹簧
+ + 冀J5M3M8 + 李娟 +
15130714816
+ ¥260.00 + 2026-03-09 11:52:00 + 张丽 +

张丽

+

2026-03-09 11:52:00

+
/已完工 + 已结算 +
15 + 260309104811826148 +
+ 维修 +
更换升降器架前右 + + 冀J80K86 + 王昆 +
13785798911
+ ¥220.00 + 2026-03-09 10:48:00 + 张丽 +

张丽

+

2026-03-09 11:52:00

+
/已完工 + 已结算 +
16 + 260308174242677121 +
+ 维修 +
添加1升机油 + + 冀JUS259 + 史振辉 +
15511766123
+ ¥100.00 + 2026-03-08 17:42:00 + 张丽 +

张丽

+

2026-03-12 20:11:00

+
/已完工 + 已结算 +
17 + 260308121455918610 +
+ 维修 +
更换进气软管
工费
更换氧传感器
更换三元催化总成
+ + 沪C666JU + 刘 +
13011994818
+ ¥890.00 + 2026-03-08 12:14:00 + 张丽 +

张丽

+

2026-03-08 13:12:00

+
/已完工 + 已结算 +
18 + 260308095623061027 +
+ 维修 +
添加防冻液 + + 冀J00DS7 + 赵强 +
15103276788
+ ¥25.00 + 2026-03-08 09:56:00 + 张丽 +

张丽

+

2026-03-08 09:56:00

+
/已完工 + 已结算 +
19 + 260307170220893812 +
+ 维修 +
更换刹车油
工费
更换真空助力泵
+ + 冀JGT953 + 敬 +
18633727196
+ ¥660.00 + 2026-03-07 17:01:00 + 张丽 +

张丽

+

2026-03-07 17:02:00

+
/已完工 + 已结算 +
20 + 260307103909907029 +
+ 维修 +
更换右后门玻璃托架
工费
+ + 冀J0G0G7 + 马亮 +
19933718588
+ ¥80.00 + 2026-03-07 10:38:00 + 张丽 +

张丽

+

2026-03-07 10:39:00

+
/已完工 + 已结算 +
+
共 69 条记录,页 1/4 + 首页 + 上一页 +1234 下一页 + 末页 +
+
+
+
+
+
+
+ + + + + + + + + + diff --git a/张阳脚本/竞品系统数据导出/h1历史维修记录.html b/张阳脚本/竞品系统数据导出/h1历史维修记录.html new file mode 100644 index 0000000..02dfb27 --- /dev/null +++ b/张阳脚本/竞品系统数据导出/h1历史维修记录.html @@ -0,0 +1,1637 @@ + + + + + + + + + + + + + + + H1车店—国内最大的微信公众服务平台 + + + + +

开单列表

+
+
+
+
+
+ 门店名称: + + 工单类型: + + 接车人: + 是否出库: + + 是否完工: + +

+ + + + + + +
+ + +
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
序号工单号工单内容车辆信息车主信息工单金额开单时间接车人施工人员销售人员预收款开单备注结算信息预计交车时间车架号进厂公里下次保养公里下次保养时间是否出库是否完工状态操作
1 + 260316093840493993 +
+ 维修 +
工时费用
发动机电脑(93604396114)*1
前氧传感器(80539026745)*1
爆震传感器(24856061159)*1
前刹车盘(73051047115)*2
...
+ + 冀FJU026 + 匿名
+ ¥1715.00 + 2026-03-16 09:38:00 + 管理员 + /
/
/
/
/
...
+ /
/
/
/
/
...
¥0.00 + / +

管理员

+

2026-03-16 13:58:00

+
+ 2026-03-16 + LFV2A11K1D4227376 + 69360 + / + / 已出库已完工 + 已结算 +
2 + 260310145350684111 +
+ 维修保养 +
银卫士(02833659118)*1
银卫士(02908894778)*1
空气滤芯(85629599110)*1
空调滤芯(25725161114)*1
+ + 冀C2A316 + 匿名
+ ¥410.00 + 2026-03-10 14:53:00 + 管理员 + /
/
/
/
+ /
/
/
/
¥0.00 + / +

管理员

+

2026-03-10 14:54:00

+
+ 2026-03-10 + LL66HBB07LB049910 + 50000 + / + / 已出库已完工 + 已结算 +
3 + 260305175634044013 +
+ 维修保养 +
海湾顺途5W-30(34726637139)*4 + + 黑A38MW8 + 匿名
+ ¥480.00 + 2026-03-05 17:56:00 + 管理员 + / + / ¥0.00 + / +

管理员

+

2026-03-05 17:56:00

+
+ 2026-03-05 + LGWEF4A59LF445478 + 108157 + 76504 + 2025-01-25 已出库已完工 + 已结算 +
4 + 260303180045083511 +
+ 维修保养 +
海湾顺途5W-30(34726637139)*6
宝马防冻液(10939859114)*3
水泵(55957893012)*1
机滤底座(75754931210)*1
+ + 冀C06B99 + 匿名
+ ¥3450.00 + 2026-03-03 17:57:00 + 管理员 + /
/
/
/
+ /
/
/
/
¥0.00 + / +

管理员

+

2026-03-03 18:22:00

+
+ 2026-03-03 + WBA1S1102H5H21275 + 55206 + / + / 已出库已完工 + 已结算 +
5 + 260302102721554534 +
+ 维修保养 +
银卫士(02833659118)*1
空调滤芯(25725161114)*1
空气滤芯(85629599110)*1
+ + 冀C58K00 + 匿名
+ ¥340.00 + 2026-03-02 10:27:00 + 管理员 + /
/
/
+ /
/
/
¥0.00 + / +

管理员

+

2026-03-02 10:27:00

+
+ 2026-03-02 + LL66HAB05HB10R622 + 71517 + / + / 已出库已完工 + 已结算 +
6 + 260301150951467110 +
+ 维修保养 +
海湾机油畅途5W--40(20033607119)*1
海湾畅途5w40(15309074915)*1
空调滤芯(25725161114)*1
机滤(21350251010)*1
+ + 冀C44636 + 匿名
+ ¥560.00 + 2026-03-01 15:09:00 + 管理员 + /
/
/
/
+ /
/
/
/
¥0.00 + / +

管理员

+

2026-03-02 10:27:00

+
+ 2026-03-01 + LFV3A23C8F3408466 + 112500 + / + / 已出库已完工 + 已结算 +
7 + 260301104550025445 +
+ 维修保养 +
海湾机油畅途5W--40(20033607119)*1
空气滤芯(85629599110)*1
空滤(21414891111)*1
+ + 冀CJW771 + 匿名
+ ¥450.00 + 2026-03-01 10:45:00 + 管理员 + /
/
/
+ /
/
/
¥0.00 + / +

管理员

+

2026-03-01 10:46:00

+
+ 2026-03-01 + LSVFB618XF2178018 + 131055 + / + / 已出库已完工 + 已结算 +
8 + 260228134300142296 +
+ 维修 +
工时费用
节气门清洗
电子水泵(43919706117)*1
散热器密封垫(34113622131)*1
机滤底座密封垫(34133684191)*1
...
+ + 津MAB658 + 匿名
+ ¥1915.00 + 2026-02-28 13:42:00 + 管理员 + /
/
/
/
/
...
+ /
/
/
/
/
...
¥0.00 + / +

管理员

+

2026-03-02 10:27:00

+
+ 2026-02-28 + LFV3A24G5K3004813 + 321058 + / + / 已出库已完工 + 已结算 +
9 + 260227153516533112 +
+ 维修保养 +
四轮动平衡
海湾0w20(73347411962)*1
空气滤芯(85629599110)*1
空调滤芯(25725161114)*1
车院士防冻液小桶(84816968902)*1
...
+ + 冀CWT850 + 匿名
+ ¥550.00 + 2026-02-27 15:34:00 + 管理员 + /
/
/
/
/
...
+ /
/
/
/
/
...
¥0.00 + / +

管理员

+

2026-02-27 15:35:00

+
+ 2026-02-27 + LS5A3DKE2LA710489 + 66167 + / + / 已出库已完工 + 已结算 +
10 + 260224151100030124 +
+ 维修保养 +
海湾顺途4L 5-40W(70935891128)*1
海湾顺途(5-40)*2
空滤(21414891111)*1
空调滤原厂(70429325154)*1
+ + 冀CT6T96 + 匿名
+ ¥860.00 + 2026-02-24 15:09:00 + 管理员 + /
/
/
/
+ /
/
/
/
¥0.00 + / +

管理员

+

2026-02-24 15:14:00

+
+ 2026-02-24 + LFV3A23CXJ3053034 + 90393 + / + / 已出库已完工 + 已结算 +
11 + 260222175152512360 +
+ 维修 +
工时费用
水箱(53030582914)*1
车院士防冻液(84720526872)*2
+ + 鲁K132J1 + 匿名
+ ¥930.00 + 2026-02-22 17:51:00 + 管理员 + /
/
/
+ /
/
/
¥0.00 + / +

管理员

+

2026-02-22 17:52:00

+
+ 2026-02-22 + LZWAUAGA2LG256212 + 38359 + / + / 已出库已完工 + 已结算 +
12 + 260213183149346714 +
+ 维修 +
发电机(31527113164)*1
发电机皮带(83130605528)*1
+ + 黑A52E1M + 匿名
+ ¥1380.00 + 2026-02-13 18:31:00 + 管理员 + /
/
+ /
/
¥0.00 + / +

管理员

+

2026-02-13 18:32:00

+
+ 2026-02-13 + LJDKAA249H0232263 + 90000 + / + / 已出库已完工 + 已结算 +
13 + 260211205756572104 +
+ 维修 +
工时费用
离合器分泵(34817286523)*1
压盘片(53158119465)*1
刹车油(12359842156)*2
后刹车片(05353078109)*1
+ + 辽CJX728 + 匿名
+ ¥1790.00 + 2026-02-11 20:57:00 + 管理员 + /
/
/
/
/
+ /
/
/
/
/
¥0.00 + / +

管理员

+

2026-02-13 18:31:00

+
+ 2026-02-11 + LGBH52E26GY011177 + 144711 + / + / 已出库已完工 + 已结算 +
14 + 260209143558967455 +
+ 维修 +
点火开关(43536533127)*1 + + 冀C1Y810 + 匿名
+ ¥160.00 + 2026-02-09 14:35:00 + 管理员 + / + / ¥0.00 + / +

管理员

+

2026-02-09 14:36:00

+
+ 2026-02-09 + LSV2G60Z4KN034810 + 75336 + / + / 已出库已完工 + 已结算 +
15 + 260209133451163014 +
+ 维修保养 +
车院士抗磨保(41950068128)*1
暖风水管(93403176144)*2
空气滤芯(85629599110)*1
+ + 蒙B559X8 + 陶伟
18611736363
+ ¥380.00 + 2026-02-09 13:34:00 + 管理员 + /
/
/
+ /
/
/
¥0.00 + / +

管理员

+

2026-02-13 18:32:00

+
+ 2026-02-09 + LSVNY41Z4B2722028 + 142616 + 131528 + 2024-05-26 已出库已完工 + 已结算 +
16 + 260208172656325117 +
+ 维修 +
车院士防冻液小桶(84816968902)*1
车院士防冻液(84720526872)*1
正时一套(91556119323)*1
空调滤芯(25725161114)*1
空气滤芯(85629599110)*1
+ + 冀CTL387 + 匿名
+ ¥940.00 + 2026-02-08 17:26:00 + 管理员 + /
/
/
/
/
+ /
/
/
/
/
¥0.00 + / +

管理员

+

2026-02-13 18:32:00

+
+ 2026-02-08 + LFV2A21KXF4234500 + / + / + / 已出库已完工 + 已结算 +
17 + 260208134529403010 +
+ 维修 +
箭牌5-40(64612157125)*1
空调滤芯(25725161114)*1
空气滤芯(85629599110)*1
+ + 冀CUK982 + 匿名
+ ¥300.00 + 2026-02-08 13:45:00 + 管理员 + /
/
/
+ /
/
/
¥0.00 + / +

管理员

+

2026-02-08 13:47:00

+
+ 2026-02-08 + LGB82AE44GS061745 + 180963 + / + / 已出库已完工 + 已结算 +
18 + 260206144139666032 +
+ 维修保养 +
海湾顺途(5W-40)*1 + + 冀CM5U90 + 匿名
+ ¥480.00 + 2026-02-06 14:41:00 + 管理员 + / + / ¥0.00 + / +

管理员

+

2026-02-06 14:41:00

+
+ 2026-02-06 + LFPM4ACC7D1A82605 + 145000 + / + / 已出库已完工 + 已结算 +
19 + 260205110504604414 +
+ 维修保养 +
车院士抗磨保(41950068128)*1 + + 冀C7Z039 + 匿名
+ ¥160.00 + 2026-02-05 11:04:00 + 管理员 + / + / ¥0.00 + / +

管理员

+

2026-02-05 11:05:00

+
+ 2026-02-05 + LZWADAGA4KC636450 + 125000 + 76456 + 2024-03-22 已出库已完工 + 已结算 +
20 + 260203102719285282 +
+ 维修保养 +
车院士金卫士(15953062508)*1
车院士金卫士1(75238097136)*1
空滤(21414891111)*1
空调滤芯(25725161114)*1
+ + 冀C3456Y + 匿名
+ ¥520.00 + 2026-02-03 10:26:00 + 管理员 + /
/
/
/
+ /
/
/
/
¥0.00 + / +

管理员

+

2026-02-03 10:27:00

+
+ 2026-02-03 + / + 95000 + / + / 已出库已完工 + 已结算 +
+
共 22 条记录,页 1/2 + 首页 + 上一页 +12 下一页 + 末页 +
+
+
+
+
+
+
+ + + + + + + + + + diff --git a/张阳脚本/竞品系统数据导出/好店长.ipynb b/张阳脚本/竞品系统数据导出/好店长.ipynb index f85044c..42bff61 100644 --- a/张阳脚本/竞品系统数据导出/好店长.ipynb +++ b/张阳脚本/竞品系统数据导出/好店长.ipynb @@ -22,6 +22,7 @@ "import xlrd\n", "from pprint import pprint\n", "from tqdm import tqdm\n", + "\n", "headers = {\n", " 'authority': 'api.365hdz.com',\n", " 'method': 'POST',\n", @@ -43,8 +44,9 @@ " 'sec-fetch-dest': 'empty',\n", " 'sec-fetch-mode': 'cors',\n", " 'sec-fetch-site': 'same-site',\n", - " 'storeid': 'c1a6a754864d449fb03fe913f41b8f5e', # 修改\n", - " 'storename': '%E4%B8%8B%E5%A1%98%E8%80%81%E5%85%B5%E6%B1%BD%E8%BD%A6%E6%9C%8D%E5%8A%A1%E4%B8%AD%E5%BF%83', # 修改,注意storename为店铺名称,登录失败试一下手动转码\n", + " 'storeid': 'c1a6a754864d449fb03fe913f41b8f5e', # 修改\n", + " 'storename': '%E4%B8%8B%E5%A1%98%E8%80%81%E5%85%B5%E6%B1%BD%E8%BD%A6%E6%9C%8D%E5%8A%A1%E4%B8%AD%E5%BF%83',\n", + " # 修改,注意storename为店铺名称,登录失败试一下手动转码\n", " 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0',\n", " 'x-client-id': 'HDZ_PRO_PC'\n", "}\n", @@ -53,30 +55,30 @@ "all_data = pd.DataFrame()\n", "start = 13770\n", "page = 1530\n", - "for i in tqdm(range(3008,6926)):\n", - " json1={\n", - " 'draw': 25,\n", - " 'start': start,\n", - " 'length': 9,\n", - " 'desc': 'false',\n", - " 'page': page,\n", - " 'size': 9,\n", - " 'sourceHdzId': '59dd3d9f68344b9ebaf4e306ad1816e9', # 修改\n", - " 'paymentType': '',\n", - " 'midDate': '2009-01-01 00:00:00',\n", - " 'endDate': '2024-12-27 23:59:59',\n", - " 'sourceType': '',\n", - " 'customerName': '',\n", - " 'customerPhone':'',\n", - " 'customerLicensePlate': '',\n", - " 'sourceName': ''\n", + "for i in tqdm(range(3008, 6926)):\n", + " json1 = {\n", + " 'draw': 25,\n", + " 'start': start,\n", + " 'length': 9,\n", + " 'desc': 'false',\n", + " 'page': page,\n", + " 'size': 9,\n", + " 'sourceHdzId': '59dd3d9f68344b9ebaf4e306ad1816e9', # 修改\n", + " 'paymentType': '',\n", + " 'midDate': '2009-01-01 00:00:00',\n", + " 'endDate': '2024-12-27 23:59:59',\n", + " 'sourceType': '',\n", + " 'customerName': '',\n", + " 'customerPhone': '',\n", + " 'customerLicensePlate': '',\n", + " 'sourceName': ''\n", " }\n", " url = 'https://api.365hdz.com/identity/hdz/income/data.js'\n", - " res1 = requests.post(url,headers=headers,data=json1)\n", + " res1 = requests.post(url, headers=headers, data=json1)\n", " strele1 = res1.json()\n", " start = start + 9\n", " page = page + 1\n", - " for a in range(0,9):\n", + " for a in range(0, 9):\n", " data_list = [strele1['data'][a]]\n", " df_new1 = pd.DataFrame(data_list)\n", " # 将当前接口的数据添加到总数据中\n", @@ -584,7 +586,7 @@ " 'Accept': 'application/json, text/javascript, */*; q=0.01',\n", " 'Accept-Encoding': 'gzip, deflate, br, zstd',\n", " 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n", - " 'Authorization': 'bearer 971e3757-cecd-47d1-8246-77274fbf3e0e', # 修改\n", + " 'Authorization': 'bearer 971e3757-cecd-47d1-8246-77274fbf3e0e', # 修改\n", " 'Clienttype': 'GOOD_MANAGER_PRO',\n", " 'Content-Length': '199',\n", " 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n", @@ -597,8 +599,8 @@ " 'Sec-Fetch-Dest': 'empty',\n", " 'Sec-Fetch-Mode': 'cors',\n", " 'Sec-Fetch-Site': 'same-site',\n", - " 'Storeid': 'c1a6a754864d449fb03fe913f41b8f5e', # 修改\n", - " 'Storename': '%E4%B8%8B%E5%A1%98%E8%80%81%E5%85%B5%E6%B1%BD%E8%BD%A6%E6%9C%8D%E5%8A%A1%E4%B8%AD%E5%BF%83', # 修改\n", + " 'Storeid': 'c1a6a754864d449fb03fe913f41b8f5e', # 修改\n", + " 'Storename': '%E4%B8%8B%E5%A1%98%E8%80%81%E5%85%B5%E6%B1%BD%E8%BD%A6%E6%9C%8D%E5%8A%A1%E4%B8%AD%E5%BF%83', # 修改\n", " 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0',\n", " 'X-Client-Id': 'HDZ_PRO_PC'\n", "}\n", @@ -607,30 +609,30 @@ "all_data = pd.DataFrame()\n", "start = 0\n", "page = 0\n", - "for i in tqdm(range(0,15)):\n", - " json1={\n", - " 'draw': 11,\n", - " 'start': start,\n", - " 'length': 11,\n", - " 'desc': 'false',\n", - " 'page': page,\n", - " 'size': 11,\n", - " 'sourceHdzId': 'c1a6a754864d449fb03fe913f41b8f5e',\n", - " 'paymentType': '',\n", - " 'midDate': '2009-01-01 00:00:00',\n", - " 'endDate': '2024-08-24 23:59:59',\n", - " 'sourceType': '',\n", - " 'customerName': '',\n", - " 'customerPhone':'',\n", - " 'customerLicensePlate': '',\n", - " 'sourceName': ''\n", + "for i in tqdm(range(0, 15)):\n", + " json1 = {\n", + " 'draw': 11,\n", + " 'start': start,\n", + " 'length': 11,\n", + " 'desc': 'false',\n", + " 'page': page,\n", + " 'size': 11,\n", + " 'sourceHdzId': 'c1a6a754864d449fb03fe913f41b8f5e',\n", + " 'paymentType': '',\n", + " 'midDate': '2009-01-01 00:00:00',\n", + " 'endDate': '2024-08-24 23:59:59',\n", + " 'sourceType': '',\n", + " 'customerName': '',\n", + " 'customerPhone': '',\n", + " 'customerLicensePlate': '',\n", + " 'sourceName': ''\n", " }\n", " url = 'https://api.365hdz.com/basic/customers/countercardlist/data.js'\n", - " res1 = requests.post(url,headers=headers,data=json1)\n", + " res1 = requests.post(url, headers=headers, data=json1)\n", " strele1 = res1.json()\n", " start = start + 11\n", " page = page + 1\n", - " for a in range(0,11):\n", + " for a in range(0, 11):\n", " data_list = [strele1['data'][a]]\n", " df_new1 = pd.DataFrame(data_list)\n", " # 将当前接口的数据添加到总数据中\n", @@ -675,134 +677,12 @@ "outputs": [], "execution_count": 5 }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "ename": "KeyError", - "evalue": "'data'", - "output_type": "error", - "traceback": [ - "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", - "\u001B[1;31mKeyError\u001B[0m Traceback (most recent call last)", - "Cell \u001B[1;32mIn[6], line 57\u001B[0m\n\u001B[0;32m 55\u001B[0m page \u001B[38;5;241m=\u001B[39m page \u001B[38;5;241m+\u001B[39m \u001B[38;5;241m1\u001B[39m\n\u001B[0;32m 56\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m a \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mrange\u001B[39m(\u001B[38;5;241m0\u001B[39m,\u001B[38;5;241m11\u001B[39m):\n\u001B[1;32m---> 57\u001B[0m data_list \u001B[38;5;241m=\u001B[39m [strele1[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mdata\u001B[39m\u001B[38;5;124m'\u001B[39m][a]]\n\u001B[0;32m 58\u001B[0m df_new1 \u001B[38;5;241m=\u001B[39m pd\u001B[38;5;241m.\u001B[39mDataFrame(data_list)\n\u001B[0;32m 59\u001B[0m \u001B[38;5;66;03m# 将当前接口的数据添加到总数据中\u001B[39;00m\n", - "\u001B[1;31mKeyError\u001B[0m: 'data'" - ] - } - ], - "source": [ - "import pandas as pd\n", - "import requests\n", - "import json\n", - "import math\n", - "import xlrd\n", - "from pprint import pprint\n", - "headers = {\n", - " 'accept':'application/json, text/javascript, */*; q=0.01',\n", - " 'accept-encoding':'gzip, deflate, br, zstd',\n", - " 'accept-language':'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',\n", - " 'authorization':'bearer 84004b89-3b9c-4fff-b642-d052da66d130',\n", - " 'clienttype':'GOOD_MANAGER_PRO',\n", - " 'content-length':'246',\n", - " 'content-type':'application/x-www-form-urlencoded; charset=UTF-8',\n", - " 'origin':'https://vip.365hdz.com',\n", - " 'priority':'u=1, i',\n", - " 'referer':'https://vip.365hdz.com/',\n", - " 'sec-ch-ua':'\"Not)A;Brand\";v=\"99\", \"Google Chrome\";v=\"127\", \"Chromium\";v=\"127\"',\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-site',\n", - " 'storeid':'e74ebe0910204946a41f08449d57a8c1',\n", - " 'storename':'%E6%BB%95%E7%9B%9B%EF%BC%8C%E5%A5%BD%E5%B8%AE%E6%89%8B',\n", - " 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',\n", - " 'x-client-id':'HDZ_PRO_PC'\n", - "}\n", - "\n", - "# 创建一个空的DataFrame\n", - "all_data = pd.DataFrame()\n", - "start = 0\n", - "page = 0\n", - "for i in range(0,958):\n", - " json1={\n", - " 'draw': 11,\n", - " 'start': start,\n", - " 'length': 11,\n", - " 'desc': 'false',\n", - " 'page': page,\n", - " 'size': 11,\n", - " 'paymentType': '',\n", - " 'midDate': '2009-01-01 00:00:00',\n", - " 'endDate': '2024-08-24 23:59:59',\n", - " 'sourceType': '',\n", - " 'customerName': '',\n", - " 'customerPhone':'',\n", - " 'customerLicensePlate': '',\n", - " 'sourceName': ''\n", - " }\n", - " url = 'https://api.365hdz.com/basic/customers/countercardlist/data.js'\n", - " res1 = requests.post(url,headers=headers,data=json1)\n", - " strele1 = res1.json()\n", - " start = start + 11\n", - " page = page + 1\n", - " for a in range(0,11):\n", - " data_list = [strele1['data'][a]]\n", - " df_new1 = pd.DataFrame(data_list)\n", - " # 将当前接口的数据添加到总数据中\n", - " all_data = all_data._append(df_new1, ignore_index=True)\n", - " print(i)\n", - "all_data.to_excel(r'C:\\Users\\admin\\Downloads\\好店长剩余套餐-1.xlsx')\n", - "\n", - "# all_data.to_excel(r'C:\\Users\\admin\\Downloads\\好店长消费流水,{}.xlsx'.format(page))\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: UserWarning: Pandas requires version '1.4.3' or newer of 'xlsxwriter' (version '1.3.8' currently installed).\n", - " all_data.to_excel(r'C:\\Users\\admin\\Downloads\\好店长剩余套餐-1.xlsx')\n" - ] - } - ], - "source": [ - "all_data.to_excel(r'C:\\Users\\admin\\Downloads\\好店长剩余套餐-1.xlsx')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "ename": "KeyError", - "evalue": "'data'", - "output_type": "error", - "traceback": [ - "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", - "\u001B[1;31mKeyError\u001B[0m Traceback (most recent call last)", - "Cell \u001B[1;32mIn[4], line 58\u001B[0m\n\u001B[0;32m 56\u001B[0m page \u001B[38;5;241m=\u001B[39m page \u001B[38;5;241m+\u001B[39m \u001B[38;5;241m1\u001B[39m\n\u001B[0;32m 57\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m a \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mrange\u001B[39m(\u001B[38;5;241m0\u001B[39m,\u001B[38;5;241m4\u001B[39m):\n\u001B[1;32m---> 58\u001B[0m data_list \u001B[38;5;241m=\u001B[39m [strele1[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mdata\u001B[39m\u001B[38;5;124m'\u001B[39m][a]]\n\u001B[0;32m 59\u001B[0m df_new1 \u001B[38;5;241m=\u001B[39m pd\u001B[38;5;241m.\u001B[39mDataFrame(data_list)\n\u001B[0;32m 60\u001B[0m \u001B[38;5;66;03m# 将当前接口的数据添加到总数据中\u001B[39;00m\n", - "\u001B[1;31mKeyError\u001B[0m: 'data'" - ] - } - ], - "source": [] - }, { "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2025-01-13T09:06:22.898619Z", - "start_time": "2025-01-13T09:06:22.053285Z" + "end_time": "2026-03-19T07:25:59.945557200Z", + "start_time": "2026-03-19T07:19:53.045101500Z" } }, "source": [ @@ -812,107 +692,2035 @@ "import math\n", "import xlrd\n", "from pprint import pprint\n", + "\n", "headers = {\n", - " 'accept':'application/json, text/javascript, */*; q=0.01',\n", - " 'accept-encoding':'gzip, deflate, br, zstd',\n", - " 'accept-language':'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',\n", - " 'authorization':'bearer a2b873c1-c6cf-48fd-be74-b433f0d63365',\n", - " 'clienttype':'GOOD_MANAGER_PRO',\n", - " 'content-length':'246',\n", - " 'content-type':'application/x-www-form-urlencoded; charset=UTF-8',\n", - " 'origin':'https://vip.365hdz.com',\n", - " 'priority':'u=1, i',\n", - " 'referer':'https://vip.365hdz.com/',\n", - " 'sec-ch-ua':'\"Not)A;Brand\";v=\"99\", \"Google Chrome\";v=\"127\", \"Chromium\";v=\"127\"',\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-site',\n", - " 'storeid':'59dd3d9f68344b9ebaf4e306ad1816e9',\n", - " 'storename':'A%2B%E8%BD%A6%E5%85%BB%E6%8A%A4',\n", - " 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',\n", - " 'x-client-id':'HDZ_PRO_PC'\n", + " 'accept': 'application/json, text/javascript, */*; q=0.01',\n", + " 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n", + " 'authorization': 'bearer 21143f27-ffdc-4727-aae0-ff9b8447f70a',\n", + " 'clienttype': 'GOOD_MANAGER_PRO',\n", + " 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',\n", + " 'origin': 'https://vip.365hdz.com',\n", + " 'priority': 'u=1, i',\n", + " 'referer': 'https://vip.365hdz.com/',\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-site',\n", + " 'storeid': '0e9bd7a80f8d4587ab5e01179fcb132a',\n", + " 'storename': '%E5%90%AF%E6%A2%A6%E6%B1%BD%E8%BD%A6%E6%9C%8D%E5%8A%A1%E4%B8%AD%E5%BF%83',\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", + " 'x-client-id': 'HDZ_PRO_PC',\n", "}\n", "\n", "# 创建一个空的DataFrame\n", "all_data = pd.DataFrame()\n", "start = 0\n", "page = 0\n", - "\n", - "for i in tqdm(range(0,2)):\n", - " json1={\n", - " 'draw': 11,\n", + "for i in range(0, 958):\n", + " json1 = {\n", + " 'draw': 10,\n", " 'start': start,\n", - " 'length': 11,\n", + " 'length': 10,\n", " 'desc': 'false',\n", " 'page': page,\n", - " 'size': 11,\n", - " 'sourceHdzId': '59dd3d9f68344b9ebaf4e306ad1816e9',\n", + " 'size': 10,\n", " 'paymentType': '',\n", " 'midDate': '2009-01-01 00:00:00',\n", - " 'endDate': '2024-08-24 23:59:59',\n", + " 'endDate': '2026-08-24 23:59:59',\n", " 'sourceType': '',\n", " 'customerName': '',\n", - " 'customerPhone':'',\n", + " 'customerPhone': '',\n", " 'customerLicensePlate': '',\n", " 'sourceName': ''\n", " }\n", - " url = 'https://api.365hdz.com/identity/hdz/income/credit/data.js'\n", - " res1 = requests.post(url,headers=headers,data=json1)\n", - " print(res1.json())\n", - "# strele1 = res1.json()\n", - "# start = start + 11\n", - "# page = page + 1\n", - "# for a in range(0,11):\n", - "# data_list = [strele1['data'][a]]\n", - "# df_new1 = pd.DataFrame(data_list)\n", - "# # 将当前接口的数据添加到总数据中\n", - "# all_data = all_data._append(df_new1, ignore_index=True)\n", - "# # print(i)\n", - "# all_data.to_excel(r'D:\\Idea Project\\F6+宜搭+其它(1)\\new\\文件输出\\好店长剩余套餐-17355499916.xlsx')\n", + " url = 'https://api.365hdz.com/basic/customers/countercardlist/data.js'\n", + " res1 = requests.post(url, headers=headers, data=json1)\n", + " strele1 = res1.json()\n", + " page_len = len(strele1['data'])\n", + " start = start + page_len\n", + " page = page + 1\n", + " for a in range(0, page_len):\n", + " data_list = [strele1['data'][a]]\n", + " df_new1 = pd.DataFrame(data_list)\n", + " # 将当前接口的数据添加到总数据中\n", + " all_data = all_data._append(df_new1, ignore_index=True)\n", + " print(i)\n", + "all_data.to_excel(r'D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\好店长剩余套餐-1.xlsx')\n", "\n", "# all_data.to_excel(r'C:\\Users\\admin\\Downloads\\好店长消费流水,{}.xlsx'.format(page))\n", "\n" ], "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 50%|█████ | 1/2 [00:00<00:00, 1.92it/s]" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "{'draw': 12, 'recordsTotal': 891, 'recordsFiltered': 891, 'data': [{'workOrderId': '49c4f25037664965b46a9c724d609430', 'customerName': '孙维怀', 'customerPhoneNumber': '13956411339', 'licensePlate': '皖D95800', 'memberId': '04b9c01e042b11e99e097cd30ad3a67a', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231228180442977CTZO', 'status': 'ON_CREDIT', 'totalAmount': 630.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '更换/后轮刹车片x1.00、更换/感应线x1.00', 'projectId': '', 'couponName': '', 'operatorId': '8070683', 'operatorName': '刘晓曼', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-28 18:06:10', 'realCreateDateTime': '2023-12-28 18:04:43', 'remindCount': 0}, {'workOrderId': '98162af3b7ed468095015676a7a0fc8f', 'customerName': '罗先生', 'customerPhoneNumber': '18655461207', 'licensePlate': '皖DRZ111', 'memberId': 'a3b6a3abdf5d48d8827a5fe0627647cb', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231228172855708V4X1', 'status': 'ON_CREDIT', 'totalAmount': 240.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '更换/右前减震器顶胶x2.00', 'projectId': '', 'couponName': '', 'operatorId': '8070683', 'operatorName': '刘晓曼', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-28 19:13:39', 'realCreateDateTime': '2023-12-28 17:28:56', 'remindCount': 0}, {'workOrderId': '5861692768474a098c7999727305a4e6', 'customerName': '建发市政', 'customerPhoneNumber': '15665540066', 'licensePlate': '皖DWV372', 'memberId': '798cee37c6aa41abaef20c25f9438eea', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231228134222210LQLS', 'status': 'ON_CREDIT', 'totalAmount': 20.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8071457', 'operatorName': '张晴', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-28 13:42:22', 'realCreateDateTime': '2023-12-28 13:42:22', 'remindCount': 0}, {'workOrderId': 'f446d5c8f6b84a4babc6d5e4e09ba7f5', 'customerName': '程兵', 'customerPhoneNumber': '13515541496', 'licensePlate': '皖DCB170', 'memberId': '04b9bdeb042b11e99e097cd30ad3a67a', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231228115253371WD5X', 'status': 'ON_CREDIT', 'totalAmount': 25.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8071457', 'operatorName': '张晴', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-28 14:07:44', 'realCreateDateTime': '2023-12-28 11:52:53', 'remindCount': 0}, {'workOrderId': '0dd1b732302444e4b7803d508e0962ad', 'customerName': '建发市政', 'customerPhoneNumber': '15665540066', 'licensePlate': '皖DA0312', 'memberId': '798cee37c6aa41abaef20c25f9438eea', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231228083322837WDLZ', 'status': 'ON_CREDIT', 'totalAmount': 20.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8071457', 'operatorName': '张晴', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-28 08:33:23', 'realCreateDateTime': '2023-12-28 08:33:23', 'remindCount': 0}, {'workOrderId': 'b43013bae23f404aa14d54b46073e766', 'customerName': '经典建设工程有限公司', 'customerPhoneNumber': '18063008078', 'licensePlate': '皖AB6S11', 'memberId': 'f5a0a1f010aa43f587ad6c84a78d2d3b', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231227163217078TZZB', 'status': 'ON_CREDIT', 'totalAmount': 15.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8071457', 'operatorName': '张晴', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-27 16:32:17', 'realCreateDateTime': '2023-12-27 16:32:17', 'remindCount': 0}, {'workOrderId': '2645c634bc51427aa0dc73199e1c254d', 'customerName': '孙三君/日丰管', 'customerPhoneNumber': '15222945757', 'licensePlate': '皖DD67010', 'memberId': '6ba11bd0bdbc48f692b3f0ce46806769', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231227151754117JWEC', 'status': 'ON_CREDIT', 'totalAmount': 1200.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '杜邦/高隔热护肤膜/v80x1.00、L-SZ/高清太阳膜/侧后x1.00、6月9日贴膜x1.00', 'projectId': '', 'couponName': '', 'operatorId': '8070683', 'operatorName': '刘晓曼', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-27 15:17:54', 'realCreateDateTime': '2023-12-27 15:17:54', 'remindCount': 0}, {'workOrderId': 'ee9eae670ad14941b04ce3e0c52a3aa6', 'customerName': '建发市政', 'customerPhoneNumber': '15665540066', 'licensePlate': '皖D00486', 'memberId': '798cee37c6aa41abaef20c25f9438eea', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD2023122715065531959RF', 'status': 'ON_CREDIT', 'totalAmount': 20.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8071457', 'operatorName': '张晴', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-27 15:06:55', 'realCreateDateTime': '2023-12-27 15:06:55', 'remindCount': 0}, {'workOrderId': '5f2068fe25cf40b8a70bcd3afb78f649', 'customerName': '国启公司', 'customerPhoneNumber': '13955473338', 'licensePlate': '皖D00732', 'memberId': '0f58dc9b1d3c47adba6e7c80cad7056e', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231227144116813PADW', 'status': 'ON_CREDIT', 'totalAmount': 320.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '更换/喇叭x1.00、普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8070683', 'operatorName': '刘晓曼', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-27 15:19:10', 'realCreateDateTime': '2023-12-27 14:41:17', 'remindCount': 0}, {'workOrderId': 'a1fd40b4e2474199bf6676aee034bd6c', 'customerName': '经典建设工程有限公司', 'customerPhoneNumber': '18063008078', 'licensePlate': '皖DF17778', 'memberId': 'f5a0a1f010aa43f587ad6c84a78d2d3b', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231227135049055WFF4', 'status': 'ON_CREDIT', 'totalAmount': 2000.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '杜邦/高隔热护肤膜/v80x1.00、十月份x1.00', 'projectId': '', 'couponName': '', 'operatorId': '8070683', 'operatorName': '刘晓曼', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-27 13:51:28', 'realCreateDateTime': '2023-12-27 13:50:49', 'remindCount': 0}, {'workOrderId': '54d6b314b4bb46499d196eff642d6ec7', 'customerName': '惠利集团房地产', 'customerPhoneNumber': '18855414770', 'licensePlate': '皖A2ZA61', 'memberId': '3de46d7203ae482eb4d91dde957c5d8b', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231227125410429XXGU', 'status': 'ON_CREDIT', 'totalAmount': 30.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8071457', 'operatorName': '张晴', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-27 12:54:10', 'realCreateDateTime': '2023-12-27 12:54:10', 'remindCount': 0}], 'start': 0, 'message': None}\n" + "0\n", + "1\n", + "2\n", + "3\n", + "4\n", + "5\n", + "6\n", + "7\n", + "8\n", + "9\n", + "10\n", + "11\n", + "12\n", + "13\n", + "14\n", + "15\n", + "16\n", + "17\n", + "18\n", + "19\n", + "20\n", + "21\n", + "22\n", + "23\n", + "24\n", + "25\n", + "26\n", + "27\n", + "28\n", + "29\n", + "30\n", + "31\n", + "32\n", + "33\n", + "34\n", + "35\n", + "36\n", + "37\n", + "38\n", + "39\n", + "40\n", + "41\n", + "42\n", + "43\n", + "44\n", + "45\n", + "46\n", + "47\n", + "48\n", + "49\n", + "50\n", + "51\n", + "52\n", + "53\n", + "54\n", + "55\n", + "56\n", + "57\n", + "58\n", + "59\n", + "60\n", + "61\n", + "62\n", + "63\n", + "64\n", + "65\n", + "66\n", + "67\n", + "68\n", + "69\n", + "70\n", + "71\n", + "72\n", + "73\n", + "74\n", + "75\n", + "76\n", + "77\n", + "78\n", + "79\n", + "80\n", + "81\n", + "82\n", + "83\n", + "84\n", + "85\n", + "86\n", + "87\n", + "88\n", + "89\n", + "90\n", + "91\n", + "92\n", + "93\n", + "94\n", + "95\n", + "96\n", + "97\n", + "98\n", + "99\n", + "100\n", + "101\n", + "102\n", + "103\n", + "104\n", + "105\n", + "106\n", + "107\n", + "108\n", + "109\n", + "110\n", + "111\n", + "112\n", + "113\n", + "114\n", + "115\n", + "116\n", + "117\n", + "118\n", + "119\n", + "120\n", + "121\n", + "122\n", + "123\n", + "124\n", + "125\n", + "126\n", + "127\n", + "128\n", + "129\n", + "130\n", + "131\n", + "132\n", + "133\n", + "134\n", + "135\n", + "136\n", + "137\n", + "138\n", + "139\n", + "140\n", + "141\n", + "142\n", + "143\n", + "144\n", + "145\n", + "146\n", + "147\n", + "148\n", + "149\n", + "150\n", + "151\n", + "152\n", + "153\n", + "154\n", + "155\n", + "156\n", + "157\n", + "158\n", + "159\n", + "160\n", + "161\n", + "162\n", + "163\n", + "164\n", + "165\n", + "166\n", + "167\n", + "168\n", + "169\n", + "170\n", + "171\n", + "172\n", + "173\n", + "174\n", + "175\n", + "176\n", + "177\n", + "178\n", + "179\n", + "180\n", + "181\n", + "182\n", + "183\n", + "184\n", + "185\n", + "186\n", + "187\n", + "188\n", + "189\n", + "190\n", + "191\n", + "192\n", + "193\n", + "194\n", + "195\n", + "196\n", + "197\n", + "198\n", + "199\n", + "200\n", + "201\n", + "202\n", + "203\n", + "204\n", + "205\n", + "206\n", + "207\n", + "208\n", + "209\n", + "210\n", + "211\n", + "212\n", + "213\n", + "214\n", + "215\n", + "216\n", + "217\n", + "218\n", + "219\n", + "220\n", + "221\n", + "222\n", + "223\n", + "224\n", + "225\n", + "226\n", + "227\n", + "228\n", + "229\n", + "230\n", + "231\n", + "232\n", + "233\n", + "234\n", + "235\n", + "236\n", + "237\n", + "238\n", + "239\n", + "240\n", + "241\n", + "242\n", + "243\n", + "244\n", + "245\n", + "246\n", + "247\n", + "248\n", + "249\n", + "250\n", + "251\n", + "252\n", + "253\n", + "254\n", + "255\n", + "256\n", + "257\n", + "258\n", + "259\n", + "260\n", + "261\n", + "262\n", + "263\n", + "264\n", + "265\n", + "266\n", + "267\n", + "268\n", + "269\n", + "270\n", + "271\n", + "272\n", + "273\n", + "274\n", + "275\n", + "276\n", + "277\n", + "278\n", + "279\n", + "280\n", + "281\n", + "282\n", + "283\n", + "284\n", + "285\n", + "286\n", + "287\n", + "288\n", + "289\n", + "290\n", + "291\n", + "292\n", + "293\n", + "294\n", + "295\n", + "296\n", + "297\n", + "298\n", + "299\n", + "300\n", + "301\n", + "302\n", + "303\n", + "304\n", + "305\n", + "306\n", + "307\n", + "308\n", + "309\n", + "310\n", + "311\n", + "312\n", + "313\n", + "314\n", + "315\n", + "316\n", + "317\n", + "318\n", + "319\n", + "320\n", + "321\n", + "322\n", + "323\n", + "324\n", + "325\n", + "326\n", + "327\n", + "328\n", + "329\n", + "330\n", + "331\n", + "332\n", + "333\n", + "334\n", + "335\n", + "336\n", + "337\n", + "338\n", + "339\n", + "340\n", + "341\n", + "342\n", + "343\n", + "344\n", + "345\n", + "346\n", + "347\n", + "348\n", + "349\n", + "350\n", + "351\n", + "352\n", + "353\n", + "354\n", + "355\n", + "356\n", + "357\n", + "358\n", + "359\n", + "360\n", + "361\n", + "362\n", + "363\n", + "364\n", + "365\n", + "366\n", + "367\n", + "368\n", + "369\n", + "370\n", + "371\n", + "372\n", + "373\n", + "374\n", + "375\n", + "376\n", + "377\n", + "378\n", + "379\n", + "380\n" ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 2/2 [00:00<00:00, 2.41it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'draw': 12, 'recordsTotal': 891, 'recordsFiltered': 891, 'data': [{'workOrderId': '49c4f25037664965b46a9c724d609430', 'customerName': '孙维怀', 'customerPhoneNumber': '13956411339', 'licensePlate': '皖D95800', 'memberId': '04b9c01e042b11e99e097cd30ad3a67a', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231228180442977CTZO', 'status': 'ON_CREDIT', 'totalAmount': 630.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '更换/后轮刹车片x1.00、更换/感应线x1.00', 'projectId': '', 'couponName': '', 'operatorId': '8070683', 'operatorName': '刘晓曼', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-28 18:06:10', 'realCreateDateTime': '2023-12-28 18:04:43', 'remindCount': 0}, {'workOrderId': '98162af3b7ed468095015676a7a0fc8f', 'customerName': '罗先生', 'customerPhoneNumber': '18655461207', 'licensePlate': '皖DRZ111', 'memberId': 'a3b6a3abdf5d48d8827a5fe0627647cb', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231228172855708V4X1', 'status': 'ON_CREDIT', 'totalAmount': 240.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '更换/右前减震器顶胶x2.00', 'projectId': '', 'couponName': '', 'operatorId': '8070683', 'operatorName': '刘晓曼', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-28 19:13:39', 'realCreateDateTime': '2023-12-28 17:28:56', 'remindCount': 0}, {'workOrderId': '5861692768474a098c7999727305a4e6', 'customerName': '建发市政', 'customerPhoneNumber': '15665540066', 'licensePlate': '皖DWV372', 'memberId': '798cee37c6aa41abaef20c25f9438eea', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231228134222210LQLS', 'status': 'ON_CREDIT', 'totalAmount': 20.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8071457', 'operatorName': '张晴', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-28 13:42:22', 'realCreateDateTime': '2023-12-28 13:42:22', 'remindCount': 0}, {'workOrderId': 'f446d5c8f6b84a4babc6d5e4e09ba7f5', 'customerName': '程兵', 'customerPhoneNumber': '13515541496', 'licensePlate': '皖DCB170', 'memberId': '04b9bdeb042b11e99e097cd30ad3a67a', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231228115253371WD5X', 'status': 'ON_CREDIT', 'totalAmount': 25.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8071457', 'operatorName': '张晴', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-28 14:07:44', 'realCreateDateTime': '2023-12-28 11:52:53', 'remindCount': 0}, {'workOrderId': '0dd1b732302444e4b7803d508e0962ad', 'customerName': '建发市政', 'customerPhoneNumber': '15665540066', 'licensePlate': '皖DA0312', 'memberId': '798cee37c6aa41abaef20c25f9438eea', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231228083322837WDLZ', 'status': 'ON_CREDIT', 'totalAmount': 20.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8071457', 'operatorName': '张晴', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-28 08:33:23', 'realCreateDateTime': '2023-12-28 08:33:23', 'remindCount': 0}, {'workOrderId': 'b43013bae23f404aa14d54b46073e766', 'customerName': '经典建设工程有限公司', 'customerPhoneNumber': '18063008078', 'licensePlate': '皖AB6S11', 'memberId': 'f5a0a1f010aa43f587ad6c84a78d2d3b', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231227163217078TZZB', 'status': 'ON_CREDIT', 'totalAmount': 15.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8071457', 'operatorName': '张晴', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-27 16:32:17', 'realCreateDateTime': '2023-12-27 16:32:17', 'remindCount': 0}, {'workOrderId': '2645c634bc51427aa0dc73199e1c254d', 'customerName': '孙三君/日丰管', 'customerPhoneNumber': '15222945757', 'licensePlate': '皖DD67010', 'memberId': '6ba11bd0bdbc48f692b3f0ce46806769', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231227151754117JWEC', 'status': 'ON_CREDIT', 'totalAmount': 1200.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '杜邦/高隔热护肤膜/v80x1.00、L-SZ/高清太阳膜/侧后x1.00、6月9日贴膜x1.00', 'projectId': '', 'couponName': '', 'operatorId': '8070683', 'operatorName': '刘晓曼', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-27 15:17:54', 'realCreateDateTime': '2023-12-27 15:17:54', 'remindCount': 0}, {'workOrderId': 'ee9eae670ad14941b04ce3e0c52a3aa6', 'customerName': '建发市政', 'customerPhoneNumber': '15665540066', 'licensePlate': '皖D00486', 'memberId': '798cee37c6aa41abaef20c25f9438eea', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD2023122715065531959RF', 'status': 'ON_CREDIT', 'totalAmount': 20.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8071457', 'operatorName': '张晴', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-27 15:06:55', 'realCreateDateTime': '2023-12-27 15:06:55', 'remindCount': 0}, {'workOrderId': '5f2068fe25cf40b8a70bcd3afb78f649', 'customerName': '国启公司', 'customerPhoneNumber': '13955473338', 'licensePlate': '皖D00732', 'memberId': '0f58dc9b1d3c47adba6e7c80cad7056e', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231227144116813PADW', 'status': 'ON_CREDIT', 'totalAmount': 320.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '更换/喇叭x1.00、普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8070683', 'operatorName': '刘晓曼', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-27 15:19:10', 'realCreateDateTime': '2023-12-27 14:41:17', 'remindCount': 0}, {'workOrderId': 'a1fd40b4e2474199bf6676aee034bd6c', 'customerName': '经典建设工程有限公司', 'customerPhoneNumber': '18063008078', 'licensePlate': '皖DF17778', 'memberId': 'f5a0a1f010aa43f587ad6c84a78d2d3b', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231227135049055WFF4', 'status': 'ON_CREDIT', 'totalAmount': 2000.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '杜邦/高隔热护肤膜/v80x1.00、十月份x1.00', 'projectId': '', 'couponName': '', 'operatorId': '8070683', 'operatorName': '刘晓曼', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-27 13:51:28', 'realCreateDateTime': '2023-12-27 13:50:49', 'remindCount': 0}, {'workOrderId': '54d6b314b4bb46499d196eff642d6ec7', 'customerName': '惠利集团房地产', 'customerPhoneNumber': '18855414770', 'licensePlate': '皖A2ZA61', 'memberId': '3de46d7203ae482eb4d91dde957c5d8b', 'paymentAmount': 0.0, 'paymentType': None, 'remark': '', 'serialNumber': 'GD20231227125410429XXGU', 'status': 'ON_CREDIT', 'totalAmount': 30.0, 'deductionAmount': 0.0, 'couponId': None, 'workOrderItemName': '普通洗车x1.00', 'projectId': '7bbdf15f9f6a4e78b66e892138e8dc08,', 'couponName': '', 'operatorId': '8071457', 'operatorName': '张晴', 'cameraId': None, 'licensePlateImage': None, 'createDateTime': '2023-12-27 12:54:10', 'realCreateDateTime': '2023-12-27 12:54:10', 'remindCount': 0}], 'start': 0, 'message': None}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001B[31m---------------------------------------------------------------------------\u001B[39m", + "\u001B[31mKeyboardInterrupt\u001B[39m Traceback (most recent call last)", + "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[4]\u001B[39m\u001B[32m, line 51\u001B[39m\n\u001B[32m 34\u001B[39m json1={\n\u001B[32m 35\u001B[39m \u001B[33m'\u001B[39m\u001B[33mdraw\u001B[39m\u001B[33m'\u001B[39m: \u001B[32m11\u001B[39m,\n\u001B[32m 36\u001B[39m \u001B[33m'\u001B[39m\u001B[33mstart\u001B[39m\u001B[33m'\u001B[39m: start,\n\u001B[32m (...)\u001B[39m\u001B[32m 48\u001B[39m \u001B[33m'\u001B[39m\u001B[33msourceName\u001B[39m\u001B[33m'\u001B[39m: \u001B[33m'\u001B[39m\u001B[33m'\u001B[39m\n\u001B[32m 49\u001B[39m }\n\u001B[32m 50\u001B[39m url = \u001B[33m'\u001B[39m\u001B[33mhttps://api.365hdz.com/basic/customers/countercardlist/data.js\u001B[39m\u001B[33m'\u001B[39m\n\u001B[32m---> \u001B[39m\u001B[32m51\u001B[39m res1 = \u001B[43mrequests\u001B[49m\u001B[43m.\u001B[49m\u001B[43mpost\u001B[49m\u001B[43m(\u001B[49m\u001B[43murl\u001B[49m\u001B[43m,\u001B[49m\u001B[43mheaders\u001B[49m\u001B[43m=\u001B[49m\u001B[43mheaders\u001B[49m\u001B[43m,\u001B[49m\u001B[43mdata\u001B[49m\u001B[43m=\u001B[49m\u001B[43mjson1\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 52\u001B[39m strele1 = res1.json()\n\u001B[32m 53\u001B[39m page_len = \u001B[38;5;28mlen\u001B[39m(strele1[\u001B[33m'\u001B[39m\u001B[33mdata\u001B[39m\u001B[33m'\u001B[39m])\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\site-packages\\requests\\api.py:115\u001B[39m, in \u001B[36mpost\u001B[39m\u001B[34m(url, data, json, **kwargs)\u001B[39m\n\u001B[32m 103\u001B[39m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34mpost\u001B[39m(url, data=\u001B[38;5;28;01mNone\u001B[39;00m, json=\u001B[38;5;28;01mNone\u001B[39;00m, **kwargs):\n\u001B[32m 104\u001B[39m \u001B[38;5;250m \u001B[39m\u001B[33mr\u001B[39m\u001B[33;03m\"\"\"Sends a POST request.\u001B[39;00m\n\u001B[32m 105\u001B[39m \n\u001B[32m 106\u001B[39m \u001B[33;03m :param url: URL for the new :class:`Request` object.\u001B[39;00m\n\u001B[32m (...)\u001B[39m\u001B[32m 112\u001B[39m \u001B[33;03m :rtype: requests.Response\u001B[39;00m\n\u001B[32m 113\u001B[39m \u001B[33;03m \"\"\"\u001B[39;00m\n\u001B[32m--> \u001B[39m\u001B[32m115\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mrequest\u001B[49m\u001B[43m(\u001B[49m\u001B[33;43m\"\u001B[39;49m\u001B[33;43mpost\u001B[39;49m\u001B[33;43m\"\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43murl\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mdata\u001B[49m\u001B[43m=\u001B[49m\u001B[43mdata\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mjson\u001B[49m\u001B[43m=\u001B[49m\u001B[43mjson\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\site-packages\\requests\\api.py:59\u001B[39m, in \u001B[36mrequest\u001B[39m\u001B[34m(method, url, **kwargs)\u001B[39m\n\u001B[32m 55\u001B[39m \u001B[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001B[39;00m\n\u001B[32m 56\u001B[39m \u001B[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001B[39;00m\n\u001B[32m 57\u001B[39m \u001B[38;5;66;03m# cases, and look like a memory leak in others.\u001B[39;00m\n\u001B[32m 58\u001B[39m \u001B[38;5;28;01mwith\u001B[39;00m sessions.Session() \u001B[38;5;28;01mas\u001B[39;00m session:\n\u001B[32m---> \u001B[39m\u001B[32m59\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43msession\u001B[49m\u001B[43m.\u001B[49m\u001B[43mrequest\u001B[49m\u001B[43m(\u001B[49m\u001B[43mmethod\u001B[49m\u001B[43m=\u001B[49m\u001B[43mmethod\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43murl\u001B[49m\u001B[43m=\u001B[49m\u001B[43murl\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\site-packages\\requests\\sessions.py:589\u001B[39m, in \u001B[36mSession.request\u001B[39m\u001B[34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001B[39m\n\u001B[32m 584\u001B[39m send_kwargs = {\n\u001B[32m 585\u001B[39m \u001B[33m\"\u001B[39m\u001B[33mtimeout\u001B[39m\u001B[33m\"\u001B[39m: timeout,\n\u001B[32m 586\u001B[39m \u001B[33m\"\u001B[39m\u001B[33mallow_redirects\u001B[39m\u001B[33m\"\u001B[39m: allow_redirects,\n\u001B[32m 587\u001B[39m }\n\u001B[32m 588\u001B[39m send_kwargs.update(settings)\n\u001B[32m--> \u001B[39m\u001B[32m589\u001B[39m resp = \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43msend\u001B[49m\u001B[43m(\u001B[49m\u001B[43mprep\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43msend_kwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 591\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m resp\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\site-packages\\requests\\sessions.py:703\u001B[39m, in \u001B[36mSession.send\u001B[39m\u001B[34m(self, request, **kwargs)\u001B[39m\n\u001B[32m 700\u001B[39m start = preferred_clock()\n\u001B[32m 702\u001B[39m \u001B[38;5;66;03m# Send the request\u001B[39;00m\n\u001B[32m--> \u001B[39m\u001B[32m703\u001B[39m r = \u001B[43madapter\u001B[49m\u001B[43m.\u001B[49m\u001B[43msend\u001B[49m\u001B[43m(\u001B[49m\u001B[43mrequest\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 705\u001B[39m \u001B[38;5;66;03m# Total elapsed time of the request (approximately)\u001B[39;00m\n\u001B[32m 706\u001B[39m elapsed = preferred_clock() - start\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\site-packages\\requests\\adapters.py:644\u001B[39m, in \u001B[36mHTTPAdapter.send\u001B[39m\u001B[34m(self, request, stream, timeout, verify, cert, proxies)\u001B[39m\n\u001B[32m 641\u001B[39m timeout = TimeoutSauce(connect=timeout, read=timeout)\n\u001B[32m 643\u001B[39m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[32m--> \u001B[39m\u001B[32m644\u001B[39m resp = \u001B[43mconn\u001B[49m\u001B[43m.\u001B[49m\u001B[43murlopen\u001B[49m\u001B[43m(\u001B[49m\n\u001B[32m 645\u001B[39m \u001B[43m \u001B[49m\u001B[43mmethod\u001B[49m\u001B[43m=\u001B[49m\u001B[43mrequest\u001B[49m\u001B[43m.\u001B[49m\u001B[43mmethod\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 646\u001B[39m \u001B[43m \u001B[49m\u001B[43murl\u001B[49m\u001B[43m=\u001B[49m\u001B[43murl\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 647\u001B[39m \u001B[43m \u001B[49m\u001B[43mbody\u001B[49m\u001B[43m=\u001B[49m\u001B[43mrequest\u001B[49m\u001B[43m.\u001B[49m\u001B[43mbody\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 648\u001B[39m \u001B[43m \u001B[49m\u001B[43mheaders\u001B[49m\u001B[43m=\u001B[49m\u001B[43mrequest\u001B[49m\u001B[43m.\u001B[49m\u001B[43mheaders\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 649\u001B[39m \u001B[43m \u001B[49m\u001B[43mredirect\u001B[49m\u001B[43m=\u001B[49m\u001B[38;5;28;43;01mFalse\u001B[39;49;00m\u001B[43m,\u001B[49m\n\u001B[32m 650\u001B[39m \u001B[43m \u001B[49m\u001B[43massert_same_host\u001B[49m\u001B[43m=\u001B[49m\u001B[38;5;28;43;01mFalse\u001B[39;49;00m\u001B[43m,\u001B[49m\n\u001B[32m 651\u001B[39m \u001B[43m \u001B[49m\u001B[43mpreload_content\u001B[49m\u001B[43m=\u001B[49m\u001B[38;5;28;43;01mFalse\u001B[39;49;00m\u001B[43m,\u001B[49m\n\u001B[32m 652\u001B[39m \u001B[43m \u001B[49m\u001B[43mdecode_content\u001B[49m\u001B[43m=\u001B[49m\u001B[38;5;28;43;01mFalse\u001B[39;49;00m\u001B[43m,\u001B[49m\n\u001B[32m 653\u001B[39m \u001B[43m \u001B[49m\u001B[43mretries\u001B[49m\u001B[43m=\u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43mmax_retries\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 654\u001B[39m \u001B[43m \u001B[49m\u001B[43mtimeout\u001B[49m\u001B[43m=\u001B[49m\u001B[43mtimeout\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 655\u001B[39m \u001B[43m \u001B[49m\u001B[43mchunked\u001B[49m\u001B[43m=\u001B[49m\u001B[43mchunked\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 656\u001B[39m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 658\u001B[39m \u001B[38;5;28;01mexcept\u001B[39;00m (ProtocolError, \u001B[38;5;167;01mOSError\u001B[39;00m) \u001B[38;5;28;01mas\u001B[39;00m err:\n\u001B[32m 659\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mConnectionError\u001B[39;00m(err, request=request)\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\site-packages\\urllib3\\connectionpool.py:787\u001B[39m, in \u001B[36mHTTPConnectionPool.urlopen\u001B[39m\u001B[34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001B[39m\n\u001B[32m 784\u001B[39m response_conn = conn \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m release_conn \u001B[38;5;28;01melse\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m\n\u001B[32m 786\u001B[39m \u001B[38;5;66;03m# Make the request on the HTTPConnection object\u001B[39;00m\n\u001B[32m--> \u001B[39m\u001B[32m787\u001B[39m response = \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43m_make_request\u001B[49m\u001B[43m(\u001B[49m\n\u001B[32m 788\u001B[39m \u001B[43m \u001B[49m\u001B[43mconn\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 789\u001B[39m \u001B[43m \u001B[49m\u001B[43mmethod\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 790\u001B[39m \u001B[43m \u001B[49m\u001B[43murl\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 791\u001B[39m \u001B[43m \u001B[49m\u001B[43mtimeout\u001B[49m\u001B[43m=\u001B[49m\u001B[43mtimeout_obj\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 792\u001B[39m \u001B[43m \u001B[49m\u001B[43mbody\u001B[49m\u001B[43m=\u001B[49m\u001B[43mbody\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 793\u001B[39m \u001B[43m \u001B[49m\u001B[43mheaders\u001B[49m\u001B[43m=\u001B[49m\u001B[43mheaders\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 794\u001B[39m \u001B[43m \u001B[49m\u001B[43mchunked\u001B[49m\u001B[43m=\u001B[49m\u001B[43mchunked\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 795\u001B[39m \u001B[43m \u001B[49m\u001B[43mretries\u001B[49m\u001B[43m=\u001B[49m\u001B[43mretries\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 796\u001B[39m \u001B[43m \u001B[49m\u001B[43mresponse_conn\u001B[49m\u001B[43m=\u001B[49m\u001B[43mresponse_conn\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 797\u001B[39m \u001B[43m \u001B[49m\u001B[43mpreload_content\u001B[49m\u001B[43m=\u001B[49m\u001B[43mpreload_content\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 798\u001B[39m \u001B[43m \u001B[49m\u001B[43mdecode_content\u001B[49m\u001B[43m=\u001B[49m\u001B[43mdecode_content\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 799\u001B[39m \u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43m*\u001B[49m\u001B[43mresponse_kw\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 800\u001B[39m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 802\u001B[39m \u001B[38;5;66;03m# Everything went great!\u001B[39;00m\n\u001B[32m 803\u001B[39m clean_exit = \u001B[38;5;28;01mTrue\u001B[39;00m\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\site-packages\\urllib3\\connectionpool.py:534\u001B[39m, in \u001B[36mHTTPConnectionPool._make_request\u001B[39m\u001B[34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001B[39m\n\u001B[32m 532\u001B[39m \u001B[38;5;66;03m# Receive the response from the server\u001B[39;00m\n\u001B[32m 533\u001B[39m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[32m--> \u001B[39m\u001B[32m534\u001B[39m response = \u001B[43mconn\u001B[49m\u001B[43m.\u001B[49m\u001B[43mgetresponse\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 535\u001B[39m \u001B[38;5;28;01mexcept\u001B[39;00m (BaseSSLError, \u001B[38;5;167;01mOSError\u001B[39;00m) \u001B[38;5;28;01mas\u001B[39;00m e:\n\u001B[32m 536\u001B[39m \u001B[38;5;28mself\u001B[39m._raise_timeout(err=e, url=url, timeout_value=read_timeout)\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\site-packages\\urllib3\\connection.py:571\u001B[39m, in \u001B[36mHTTPConnection.getresponse\u001B[39m\u001B[34m(self)\u001B[39m\n\u001B[32m 568\u001B[39m _shutdown = \u001B[38;5;28mgetattr\u001B[39m(\u001B[38;5;28mself\u001B[39m.sock, \u001B[33m\"\u001B[39m\u001B[33mshutdown\u001B[39m\u001B[33m\"\u001B[39m, \u001B[38;5;28;01mNone\u001B[39;00m)\n\u001B[32m 570\u001B[39m \u001B[38;5;66;03m# Get the response from http.client.HTTPConnection\u001B[39;00m\n\u001B[32m--> \u001B[39m\u001B[32m571\u001B[39m httplib_response = \u001B[38;5;28;43msuper\u001B[39;49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\u001B[43m.\u001B[49m\u001B[43mgetresponse\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 573\u001B[39m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[32m 574\u001B[39m assert_header_parsing(httplib_response.msg)\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\http\\client.py:1450\u001B[39m, in \u001B[36mHTTPConnection.getresponse\u001B[39m\u001B[34m(self)\u001B[39m\n\u001B[32m 1448\u001B[39m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[32m 1449\u001B[39m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[32m-> \u001B[39m\u001B[32m1450\u001B[39m \u001B[43mresponse\u001B[49m\u001B[43m.\u001B[49m\u001B[43mbegin\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 1451\u001B[39m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mConnectionError\u001B[39;00m:\n\u001B[32m 1452\u001B[39m \u001B[38;5;28mself\u001B[39m.close()\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\http\\client.py:336\u001B[39m, in \u001B[36mHTTPResponse.begin\u001B[39m\u001B[34m(self)\u001B[39m\n\u001B[32m 334\u001B[39m \u001B[38;5;66;03m# read until we get a non-100 response\u001B[39;00m\n\u001B[32m 335\u001B[39m \u001B[38;5;28;01mwhile\u001B[39;00m \u001B[38;5;28;01mTrue\u001B[39;00m:\n\u001B[32m--> \u001B[39m\u001B[32m336\u001B[39m version, status, reason = \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43m_read_status\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 337\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m status != CONTINUE:\n\u001B[32m 338\u001B[39m \u001B[38;5;28;01mbreak\u001B[39;00m\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\http\\client.py:297\u001B[39m, in \u001B[36mHTTPResponse._read_status\u001B[39m\u001B[34m(self)\u001B[39m\n\u001B[32m 296\u001B[39m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34m_read_status\u001B[39m(\u001B[38;5;28mself\u001B[39m):\n\u001B[32m--> \u001B[39m\u001B[32m297\u001B[39m line = \u001B[38;5;28mstr\u001B[39m(\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43mfp\u001B[49m\u001B[43m.\u001B[49m\u001B[43mreadline\u001B[49m\u001B[43m(\u001B[49m\u001B[43m_MAXLINE\u001B[49m\u001B[43m \u001B[49m\u001B[43m+\u001B[49m\u001B[43m \u001B[49m\u001B[32;43m1\u001B[39;49m\u001B[43m)\u001B[49m, \u001B[33m\"\u001B[39m\u001B[33miso-8859-1\u001B[39m\u001B[33m\"\u001B[39m)\n\u001B[32m 298\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(line) > _MAXLINE:\n\u001B[32m 299\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m LineTooLong(\u001B[33m\"\u001B[39m\u001B[33mstatus line\u001B[39m\u001B[33m\"\u001B[39m)\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\socket.py:719\u001B[39m, in \u001B[36mSocketIO.readinto\u001B[39m\u001B[34m(self, b)\u001B[39m\n\u001B[32m 717\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mOSError\u001B[39;00m(\u001B[33m\"\u001B[39m\u001B[33mcannot read from timed out object\u001B[39m\u001B[33m\"\u001B[39m)\n\u001B[32m 718\u001B[39m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[32m--> \u001B[39m\u001B[32m719\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43m_sock\u001B[49m\u001B[43m.\u001B[49m\u001B[43mrecv_into\u001B[49m\u001B[43m(\u001B[49m\u001B[43mb\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 720\u001B[39m \u001B[38;5;28;01mexcept\u001B[39;00m timeout:\n\u001B[32m 721\u001B[39m \u001B[38;5;28mself\u001B[39m._timeout_occurred = \u001B[38;5;28;01mTrue\u001B[39;00m\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\ssl.py:1304\u001B[39m, in \u001B[36mSSLSocket.recv_into\u001B[39m\u001B[34m(self, buffer, nbytes, flags)\u001B[39m\n\u001B[32m 1300\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m flags != \u001B[32m0\u001B[39m:\n\u001B[32m 1301\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[32m 1302\u001B[39m \u001B[33m\"\u001B[39m\u001B[33mnon-zero flags not allowed in calls to recv_into() on \u001B[39m\u001B[38;5;132;01m%s\u001B[39;00m\u001B[33m\"\u001B[39m %\n\u001B[32m 1303\u001B[39m \u001B[38;5;28mself\u001B[39m.\u001B[34m__class__\u001B[39m)\n\u001B[32m-> \u001B[39m\u001B[32m1304\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43mread\u001B[49m\u001B[43m(\u001B[49m\u001B[43mnbytes\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mbuffer\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 1305\u001B[39m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[32m 1306\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28msuper\u001B[39m().recv_into(buffer, nbytes, flags)\n", + "\u001B[36mFile \u001B[39m\u001B[32mD:\\Program Files\\anaconda3\\envs\\F6+宜搭+其它\\Lib\\ssl.py:1138\u001B[39m, in \u001B[36mSSLSocket.read\u001B[39m\u001B[34m(self, len, buffer)\u001B[39m\n\u001B[32m 1136\u001B[39m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[32m 1137\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m buffer \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[32m-> \u001B[39m\u001B[32m1138\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43m_sslobj\u001B[49m\u001B[43m.\u001B[49m\u001B[43mread\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mlen\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mbuffer\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 1139\u001B[39m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[32m 1140\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m._sslobj.read(\u001B[38;5;28mlen\u001B[39m)\n", + "\u001B[31mKeyboardInterrupt\u001B[39m: " ] } ], - "execution_count": 7 + "execution_count": 4 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-19T07:26:06.751291400Z", + "start_time": "2026-03-19T07:26:06.409769500Z" + } + }, + "cell_type": "code", + "source": "all_data.to_excel(r'D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\好店长剩余套餐-1.xlsx')", + "outputs": [], + "execution_count": 5 + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "" + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "工单信息" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-19T08:52:47.412197900Z", + "start_time": "2026-03-19T08:44:31.270149Z" + } + }, + "cell_type": "code", + "source": [ + "import requests\n", + "import pandas as pd\n", + "from requests.adapters import HTTPAdapter\n", + "from urllib3.util.retry import Retry\n", + "\n", + "def _get_safe_dict(data, key):\n", + " \"\"\"\n", + " 安全地获取嵌套字典。\n", + " 如果 key 不存在,返回 {}。\n", + " 如果 key 存在但值为 None,返回 {}。\n", + " 如果 key 存在且为字典,返回该字典。\n", + " \"\"\"\n", + " val = data.get(key)\n", + " if val is None:\n", + " return {}\n", + " if not isinstance(val, dict):\n", + " # 以防万一数据类型不是字典也不是None,强制转为空字典避免后续报错\n", + " return {}\n", + " return val\n", + "\n", + "def expand_workorder_details(data_list):\n", + " \"\"\"\n", + " 展开工单明细数据,将嵌套的对象展开为独立的列\n", + " \"\"\"\n", + " expanded_data = []\n", + "\n", + " for item in data_list:\n", + " # 基础字段\n", + " base_record = {\n", + " 'id': item.get('id'),\n", + " 'createDateTime': item.get('createDateTime'),\n", + " 'totalAmount': item.get('totalAmount'),\n", + " 'beforeDiscountTotalAmount': item.get('beforeDiscountTotalAmount'),\n", + " 'remark': item.get('remark'),\n", + " 'imgRemark': item.get('imgRemark'),\n", + " 'settlementDate': item.get('settlementDate'),\n", + " 'status': item.get('status'),\n", + " 'receiptVoucherId': item.get('receiptVoucherId'),\n", + " 'licensePlate': item.get('licensePlate'),\n", + " 'storeId': item.get('storeId'),\n", + " 'totalPaidAmount': item.get('totalPaidAmount'),\n", + " 'totalBalanceAmount': item.get('totalBalanceAmount'),\n", + " 'totalGrossProfitAmount': item.get('totalGrossProfitAmount'),\n", + " 'containsPurchaseOrder': item.get('containsPurchaseOrder'),\n", + " 'quotationDateTime': item.get('quotationDateTime'),\n", + " 'sendDateTime': item.get('sendDateTime'),\n", + " 'preDeductAmount': item.get('preDeductAmount'),\n", + " 'maintainOrder': item.get('maintainOrder')\n", + " }\n", + "\n", + " # --- 修复核心:使用 _get_safe_dict 处理所有可能为 None 的嵌套对象 ---\n", + "\n", + " # 操作员信息\n", + " operator_info = _get_safe_dict(item, 'operator')\n", + " base_record.update({\n", + " 'operatorId': operator_info.get('operatorId'),\n", + " 'operatorName': operator_info.get('operatorName'),\n", + " 'operatorStoreId': operator_info.get('operatorStoreId')\n", + " })\n", + "\n", + " # 创建者信息\n", + " creator_info = _get_safe_dict(item, 'creator')\n", + " base_record.update({\n", + " 'creatorId': creator_info.get('operatorId'),\n", + " 'creatorName': creator_info.get('operatorName'),\n", + " 'creatorStoreId': creator_info.get('operatorStoreId')\n", + " })\n", + "\n", + " # 结算会员卡信息 (报错点)\n", + " settlement_member_card = _get_safe_dict(item, 'settlementMemberCard')\n", + " base_record.update({\n", + " 'settlementMemberCardId': settlement_member_card.get('id'),\n", + " 'settlementCardNumber': settlement_member_card.get('cardNumber'),\n", + " 'settlementMemberCardType': settlement_member_card.get('memberCardType')\n", + " })\n", + "\n", + " # 结算客户信息\n", + " settlement_customer = _get_safe_dict(item, 'settlementCustomer')\n", + " base_record.update({\n", + " 'settlementCustomerId': settlement_customer.get('id'),\n", + " 'settlementCustomerName': settlement_customer.get('name'),\n", + " 'settlementContactName': settlement_customer.get('contactName'),\n", + " 'settlementContactTelephone': settlement_customer.get('contactTelephone'),\n", + " 'settlementCustomerCategory': settlement_customer.get('category'),\n", + " 'settlementCumulativeConsumeAmount': settlement_customer.get('cumulativeConsumeAmount'),\n", + " 'settlementCustomerGrade': settlement_customer.get('grade'),\n", + " 'settlementLastConsumeDatetime': settlement_customer.get('lastConsumeDatetime'),\n", + " 'settlementLastIntoStoreDatetime': settlement_customer.get('lastIntoStoreDatetime'),\n", + " 'settlementCustomerCreateDateTime': settlement_customer.get('createDateTime')\n", + " })\n", + "\n", + " # 消费会员卡信息\n", + " consume_member_card = _get_safe_dict(item, 'consumeMemberCard')\n", + " # 处理 consumeMemberCard 内部的 balance 字段,它也可能为 None\n", + " balance_info = _get_safe_dict(consume_member_card, 'balance')\n", + "\n", + " base_record.update({\n", + " 'consumeMemberCardId': consume_member_card.get('id'),\n", + " 'consumeCardNumber': consume_member_card.get('cardNumber'),\n", + " 'consumeMemberCardType': consume_member_card.get('memberCardType'),\n", + " 'consumeCardBalanceStoredAmount': balance_info.get('storedAmount'),\n", + " 'consumeCardBalanceGiftAmount': balance_info.get('giftAmount'),\n", + " 'consumeCardBalanceTotal': balance_info.get('balance'),\n", + " 'consumePreDeductAmount': consume_member_card.get('preDeductAmount'),\n", + " 'consumeAfterPreDeductAmount': consume_member_card.get('afterPreDeductAmount'),\n", + " 'consumeCumulativeStoredAmount': consume_member_card.get('cumulativeStoredAmount'),\n", + " 'consumeCumulativeGiftAmount': consume_member_card.get('cumulativeGiftAmount')\n", + " })\n", + "\n", + " # 消费客户信息\n", + " consume_customer = _get_safe_dict(item, 'consumeCustomer')\n", + " base_record.update({\n", + " 'consumeCustomerId': consume_customer.get('id'),\n", + " 'consumeCustomerName': consume_customer.get('name'),\n", + " 'consumeContactName': consume_customer.get('contactName'),\n", + " 'consumeContactTelephone': consume_customer.get('contactTelephone'),\n", + " 'consumeCustomerCategory': consume_customer.get('category'),\n", + " 'consumeCumulativeConsumeAmount': consume_customer.get('cumulativeConsumeAmount'),\n", + " 'consumeCustomerGrade': consume_customer.get('grade'),\n", + " 'consumeLastConsumeDatetime': consume_customer.get('lastConsumeDatetime'),\n", + " 'consumeLastIntoStoreDatetime': consume_customer.get('lastIntoStoreDatetime'),\n", + " 'consumeCustomerCreateDateTime': consume_customer.get('createDateTime')\n", + " })\n", + "\n", + " # 注册车辆信息\n", + " registered_vehicle = _get_safe_dict(item, 'registeredVehicle')\n", + " vehicle_owner = _get_safe_dict(registered_vehicle, 'vehicleOwner')\n", + " vehicle_info = _get_safe_dict(registered_vehicle, 'vehicle')\n", + " # 车辆牌照信息也可能嵌套且为 None\n", + " license_plate_info = _get_safe_dict(vehicle_info, 'licensePlate')\n", + "\n", + " base_record.update({\n", + " 'registeredVehicleId': registered_vehicle.get('id'),\n", + " 'vehicleOwnerId': vehicle_owner.get('id'),\n", + " 'vehicleOwnerName': vehicle_owner.get('name'),\n", + " 'vehicleOwnerMobilePhone': vehicle_owner.get('mobilePhone'),\n", + " 'vehicleOwnerAddress': vehicle_owner.get('address'),\n", + " 'vehicleOwnerBirthday': vehicle_owner.get('birthday'),\n", + " 'vehicleOwnerGender': vehicle_owner.get('gender'),\n", + " # 修复深层嵌套访问\n", + " 'vehicleLicensePlate': license_plate_info.get('number'),\n", + " 'vehicleBrandCode': vehicle_info.get('brandCode'),\n", + " 'vehicleBrandSeries': vehicle_info.get('brandSeries'),\n", + " 'vehicleColor': vehicle_info.get('color'),\n", + " 'vehicleEngineNumber': vehicle_info.get('engineNumber'),\n", + " 'vehicleFrameNumber': vehicle_info.get('frameNumber'),\n", + " 'vehicleInsuranceDate': vehicle_info.get('insuranceDate'),\n", + " 'vehicleCompulsoryInsuranceDate': vehicle_info.get('compulsoryInsuranceDate'),\n", + " 'vehicleLastMileage': vehicle_info.get('lastMileage'),\n", + " 'vehicleLicenseDate': vehicle_info.get('licenseDate'),\n", + " 'vehicleModel': vehicle_info.get('model'),\n", + " 'vehicleCarBrand': vehicle_info.get('carBrand'),\n", + " 'vehicleManufactureCn': vehicle_info.get('manufactureCn'),\n", + " 'vehicleNameCn': vehicle_info.get('vehicleNameCn'),\n", + " 'vehicleOfYear': vehicle_info.get('vehicleOfYear'),\n", + " 'vehicleMaintenanceMileage': vehicle_info.get('maintenanceMileage'),\n", + " 'vehicleMaintenanceTime': vehicle_info.get('maintenanceTime')\n", + " })\n", + "\n", + " # 工单项目信息\n", + " items = item.get('items')\n", + " # 确保 items 是列表,防止其为 None 导致迭代错误\n", + " if not isinstance(items, list):\n", + " items = []\n", + "\n", + " if items:\n", + " for item_detail in items:\n", + " # 复制基础记录信息\n", + " record = base_record.copy()\n", + "\n", + " # 添加项目详细信息\n", + " record.update({\n", + " 'itemId': item_detail.get('id') if isinstance(item_detail, dict) else None,\n", + " 'itemName': item_detail.get('name') if isinstance(item_detail, dict) else None,\n", + " 'itemRetailPrice': item_detail.get('retailPrice') if isinstance(item_detail, dict) else None,\n", + " 'itemOriginalPrice': item_detail.get('originalPrice') if isinstance(item_detail, dict) else None,\n", + " 'itemCostPrice': item_detail.get('costPrice') if isinstance(item_detail, dict) else None,\n", + " 'itemQuantity': item_detail.get('quantity') if isinstance(item_detail, dict) else None,\n", + " 'itemTotalAmount': item_detail.get('totalAmount') if isinstance(item_detail, dict) else None,\n", + " 'itemBeforeDiscountTotalAmount': item_detail.get('beforeDiscountTotalAmount') if isinstance(item_detail, dict) else None,\n", + " 'itemSaleSourceId': item_detail.get('saleSourceId') if isinstance(item_detail, dict) else None,\n", + " 'itemSaleCategory': item_detail.get('saleCategory') if isinstance(item_detail, dict) else None,\n", + " 'itemFromCounterCard': item_detail.get('fromCounterCard') if isinstance(item_detail, dict) else None,\n", + " 'itemContainsPurchaseOrder': item_detail.get('containsPurchaseOrder') if isinstance(item_detail, dict) else None,\n", + " 'itemCustomizedSupplierId': item_detail.get('customizedSupplierId') if isinstance(item_detail, dict) else None,\n", + " 'itemCustomizedSupplierName': item_detail.get('customizedSupplierName') if isinstance(item_detail, dict) else None,\n", + " 'itemRemark': item_detail.get('remark') if isinstance(item_detail, dict) else None\n", + " })\n", + "\n", + " expanded_data.append(record)\n", + " else:\n", + " # 如果没有项目,则仍保留基础记录\n", + " record = base_record.copy()\n", + " null_item_record = {\n", + " 'itemId': None,\n", + " 'itemName': None,\n", + " 'itemRetailPrice': None,\n", + " 'itemOriginalPrice': None,\n", + " 'itemCostPrice': None,\n", + " 'itemQuantity': None,\n", + " 'itemTotalAmount': None,\n", + " 'itemBeforeDiscountTotalAmount': None,\n", + " 'itemSaleSourceId': None,\n", + " 'itemSaleCategory': None,\n", + " 'itemFromCounterCard': None,\n", + " 'itemContainsPurchaseOrder': None,\n", + " 'itemCustomizedSupplierId': None,\n", + " 'itemCustomizedSupplierName': None,\n", + " 'itemRemark': None\n", + " }\n", + " record.update(null_item_record)\n", + " expanded_data.append(record)\n", + "\n", + " return expanded_data\n", + "\n", + "def fetch_all_workorders():\n", + " \"\"\"\n", + " 获取所有工单数据\n", + " \"\"\"\n", + " # 创建带重试机制的session,提高稳定性\n", + " session = requests.Session()\n", + " retry = Retry(\n", + " total=3,\n", + " backoff_factor=0.5,\n", + " status_forcelist=[429, 500, 502, 503, 504]\n", + " )\n", + " adapter = HTTPAdapter(max_retries=retry)\n", + " session.mount('https://', adapter)\n", + "\n", + " headers = {\n", + " 'accept': 'application/json, text/javascript, */*; q=0.01',\n", + " 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n", + " 'authorization': 'bearer 21143f27-ffdc-4727-aae0-ff9b8447f70a',\n", + " 'clienttype': 'GOOD_MANAGER_PRO',\n", + " 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',\n", + " 'origin': 'https://vip.365hdz.com',\n", + " 'priority': 'u=1, i',\n", + " 'referer': 'https://vip.365hdz.com/',\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-site',\n", + " 'storeid': '0e9bd7a80f8d4587ab5e01179fcb132a',\n", + " 'storename': '%E5%90%AF%E6%A2%A6%E6%B1%BD%E8%BD%A6%E6%9C%8D%E5%8A%A1%E4%B8%AD%E5%BF%83',\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", + " 'x-client-id': 'HDZ_PRO_PC',\n", + " }\n", + "\n", + " data = {\n", + " 'draw': '3',\n", + " 'start': '0',\n", + " 'length': '12',\n", + " 'desc': 'false',\n", + " 'page': '0',\n", + " 'size': '12',\n", + " 'status': 'COMPLETED',\n", + " 'startDateTime': '',\n", + " 'endDateTime': '',\n", + " 'customerName': '',\n", + " 'customerTelephone': '',\n", + " 'licensePlate': '',\n", + " 'serviceName': '',\n", + " }\n", + "\n", + " all_data = []\n", + " total_records = 6621 # 根据API返回的总数\n", + " page_size = 12\n", + "\n", + " # 计算总页数\n", + " total_pages = (total_records // page_size) + (1 if total_records % page_size > 0 else 0)\n", + "\n", + " print(f\"总共需要获取 {total_pages} 页数据...\")\n", + "\n", + " for i in range(total_pages):\n", + " print(f\"正在获取第 {i+1} 页数据...\")\n", + " data['start'] = str(i * page_size)\n", + " data['page'] = str(i)\n", + "\n", + " try:\n", + " response = session.post('https://api.365hdz.com/basic/workorders/data.js', headers=headers, data=data, timeout=30)\n", + " response.raise_for_status()\n", + "\n", + " json_data = response.json()\n", + " page_data = json_data.get('data', [])\n", + "\n", + " if not page_data:\n", + " print(f\"第 {i+1} 页没有数据,停止获取\")\n", + " break\n", + "\n", + " all_data.extend(page_data)\n", + " print(f\"已获取第 {i+1} 页数据,当前总计 {len(all_data)} 条记录\")\n", + "\n", + " except requests.exceptions.RequestException as e:\n", + " print(f\"获取第 {i+1} 页数据失败: {e}\")\n", + " continue\n", + "\n", + " print(f\"数据获取完成,总计 {len(all_data)} 条记录\")\n", + " return all_data\n", + "\n", + "def main():\n", + " \"\"\"\n", + " 主函数\n", + " \"\"\"\n", + " # 1. 获取原始工单数据\n", + " raw_data = fetch_all_workorders()\n", + "\n", + " if not raw_data:\n", + " print(\"未获取到任何数据,程序结束。\")\n", + " return\n", + "\n", + " # 2. 关键修复:调用展开函数处理原始数据\n", + " # 现在这个函数内部已经处理了 None 值的情况\n", + " expanded_data = expand_workorder_details(raw_data)\n", + "\n", + " # 3. 创建DataFrame\n", + " df = pd.DataFrame(expanded_data)\n", + "\n", + " # 输出到Excel文件\n", + " output_path = \"D:/Idea Project/F6+宜搭+其它(1)/张阳脚本/文件输出/好店长工单列表-展开明细.xlsx\"\n", + "\n", + " # 使用ExcelWriter避免大数据量写入问题\n", + " try:\n", + " with pd.ExcelWriter(output_path, engine='openpyxl') as writer:\n", + " df.to_excel(writer, index=False, sheet_name='工单明细')\n", + " print(f\"数据已保存到: {output_path}\")\n", + " print(f\"共生成 {len(df)} 行数据\")\n", + "\n", + " # 显示前几行数据供查看\n", + " print(\"\\n前5行数据预览:\")\n", + " print(df.head())\n", + "\n", + " # 显示列名\n", + " print(f\"\\n共有 {len(df.columns)} 列:\")\n", + " # 只打印前20个列名,避免输出太长\n", + " print(df.columns.tolist()[:20], \"...\")\n", + " except Exception as e:\n", + " print(f\"保存文件时出错: {e}\")\n", + " # 如果路径有问题,尝试保存到当前目录\n", + " fallback_path = \"workorders_export.xlsx\"\n", + " print(f\"尝试保存到当前目录: {fallback_path}\")\n", + " df.to_excel(fallback_path, index=False)\n", + " print(f\"数据已备用保存到: {fallback_path}\")\n", + "\n", + "if __name__ == \"__main__\":\n", + " main()" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "总共需要获取 552 页数据...\n", + "正在获取第 1 页数据...\n", + "已获取第 1 页数据,当前总计 12 条记录\n", + "正在获取第 2 页数据...\n", + "已获取第 2 页数据,当前总计 24 条记录\n", + "正在获取第 3 页数据...\n", + "已获取第 3 页数据,当前总计 36 条记录\n", + "正在获取第 4 页数据...\n", + "已获取第 4 页数据,当前总计 48 条记录\n", + "正在获取第 5 页数据...\n", + "已获取第 5 页数据,当前总计 60 条记录\n", + "正在获取第 6 页数据...\n", + "已获取第 6 页数据,当前总计 72 条记录\n", + "正在获取第 7 页数据...\n", + "已获取第 7 页数据,当前总计 84 条记录\n", + "正在获取第 8 页数据...\n", + "已获取第 8 页数据,当前总计 96 条记录\n", + "正在获取第 9 页数据...\n", + "已获取第 9 页数据,当前总计 108 条记录\n", + "正在获取第 10 页数据...\n", + "已获取第 10 页数据,当前总计 120 条记录\n", + "正在获取第 11 页数据...\n", + "已获取第 11 页数据,当前总计 132 条记录\n", + "正在获取第 12 页数据...\n", + "已获取第 12 页数据,当前总计 144 条记录\n", + "正在获取第 13 页数据...\n", + "已获取第 13 页数据,当前总计 156 条记录\n", + "正在获取第 14 页数据...\n", + "已获取第 14 页数据,当前总计 168 条记录\n", + "正在获取第 15 页数据...\n", + "已获取第 15 页数据,当前总计 180 条记录\n", + "正在获取第 16 页数据...\n", + "已获取第 16 页数据,当前总计 192 条记录\n", + "正在获取第 17 页数据...\n", + "已获取第 17 页数据,当前总计 204 条记录\n", + "正在获取第 18 页数据...\n", + "已获取第 18 页数据,当前总计 216 条记录\n", + "正在获取第 19 页数据...\n", + "已获取第 19 页数据,当前总计 228 条记录\n", + "正在获取第 20 页数据...\n", + "已获取第 20 页数据,当前总计 240 条记录\n", + "正在获取第 21 页数据...\n", + "已获取第 21 页数据,当前总计 252 条记录\n", + "正在获取第 22 页数据...\n", + "已获取第 22 页数据,当前总计 264 条记录\n", + "正在获取第 23 页数据...\n", + "已获取第 23 页数据,当前总计 276 条记录\n", + "正在获取第 24 页数据...\n", + "已获取第 24 页数据,当前总计 288 条记录\n", + "正在获取第 25 页数据...\n", + "已获取第 25 页数据,当前总计 300 条记录\n", + "正在获取第 26 页数据...\n", + "已获取第 26 页数据,当前总计 312 条记录\n", + "正在获取第 27 页数据...\n", + "已获取第 27 页数据,当前总计 324 条记录\n", + "正在获取第 28 页数据...\n", + "已获取第 28 页数据,当前总计 336 条记录\n", + "正在获取第 29 页数据...\n", + "已获取第 29 页数据,当前总计 348 条记录\n", + "正在获取第 30 页数据...\n", + "已获取第 30 页数据,当前总计 360 条记录\n", + "正在获取第 31 页数据...\n", + "已获取第 31 页数据,当前总计 372 条记录\n", + "正在获取第 32 页数据...\n", + "已获取第 32 页数据,当前总计 384 条记录\n", + "正在获取第 33 页数据...\n", + "已获取第 33 页数据,当前总计 396 条记录\n", + "正在获取第 34 页数据...\n", + "已获取第 34 页数据,当前总计 408 条记录\n", + "正在获取第 35 页数据...\n", + "已获取第 35 页数据,当前总计 420 条记录\n", + "正在获取第 36 页数据...\n", + "已获取第 36 页数据,当前总计 432 条记录\n", + "正在获取第 37 页数据...\n", + "已获取第 37 页数据,当前总计 444 条记录\n", + "正在获取第 38 页数据...\n", + "已获取第 38 页数据,当前总计 456 条记录\n", + "正在获取第 39 页数据...\n", + "已获取第 39 页数据,当前总计 468 条记录\n", + "正在获取第 40 页数据...\n", + "已获取第 40 页数据,当前总计 480 条记录\n", + "正在获取第 41 页数据...\n", + "已获取第 41 页数据,当前总计 492 条记录\n", + "正在获取第 42 页数据...\n", + "已获取第 42 页数据,当前总计 504 条记录\n", + "正在获取第 43 页数据...\n", + "已获取第 43 页数据,当前总计 516 条记录\n", + "正在获取第 44 页数据...\n", + "已获取第 44 页数据,当前总计 528 条记录\n", + "正在获取第 45 页数据...\n", + "已获取第 45 页数据,当前总计 540 条记录\n", + "正在获取第 46 页数据...\n", + "已获取第 46 页数据,当前总计 552 条记录\n", + "正在获取第 47 页数据...\n", + "已获取第 47 页数据,当前总计 564 条记录\n", + "正在获取第 48 页数据...\n", + "已获取第 48 页数据,当前总计 576 条记录\n", + "正在获取第 49 页数据...\n", + "已获取第 49 页数据,当前总计 588 条记录\n", + "正在获取第 50 页数据...\n", + "已获取第 50 页数据,当前总计 600 条记录\n", + "正在获取第 51 页数据...\n", + "已获取第 51 页数据,当前总计 612 条记录\n", + "正在获取第 52 页数据...\n", + "已获取第 52 页数据,当前总计 624 条记录\n", + "正在获取第 53 页数据...\n", + "已获取第 53 页数据,当前总计 636 条记录\n", + "正在获取第 54 页数据...\n", + "已获取第 54 页数据,当前总计 648 条记录\n", + "正在获取第 55 页数据...\n", + "已获取第 55 页数据,当前总计 660 条记录\n", + "正在获取第 56 页数据...\n", + "已获取第 56 页数据,当前总计 672 条记录\n", + "正在获取第 57 页数据...\n", + "已获取第 57 页数据,当前总计 684 条记录\n", + "正在获取第 58 页数据...\n", + "已获取第 58 页数据,当前总计 696 条记录\n", + "正在获取第 59 页数据...\n", + "已获取第 59 页数据,当前总计 708 条记录\n", + "正在获取第 60 页数据...\n", + "已获取第 60 页数据,当前总计 720 条记录\n", + "正在获取第 61 页数据...\n", + "已获取第 61 页数据,当前总计 732 条记录\n", + "正在获取第 62 页数据...\n", + "已获取第 62 页数据,当前总计 744 条记录\n", + "正在获取第 63 页数据...\n", + "已获取第 63 页数据,当前总计 756 条记录\n", + "正在获取第 64 页数据...\n", + "已获取第 64 页数据,当前总计 768 条记录\n", + "正在获取第 65 页数据...\n", + "已获取第 65 页数据,当前总计 780 条记录\n", + "正在获取第 66 页数据...\n", + "已获取第 66 页数据,当前总计 792 条记录\n", + "正在获取第 67 页数据...\n", + "已获取第 67 页数据,当前总计 804 条记录\n", + "正在获取第 68 页数据...\n", + "已获取第 68 页数据,当前总计 816 条记录\n", + "正在获取第 69 页数据...\n", + "已获取第 69 页数据,当前总计 828 条记录\n", + "正在获取第 70 页数据...\n", + "已获取第 70 页数据,当前总计 840 条记录\n", + "正在获取第 71 页数据...\n", + "已获取第 71 页数据,当前总计 852 条记录\n", + "正在获取第 72 页数据...\n", + "已获取第 72 页数据,当前总计 864 条记录\n", + "正在获取第 73 页数据...\n", + "已获取第 73 页数据,当前总计 876 条记录\n", + "正在获取第 74 页数据...\n", + "已获取第 74 页数据,当前总计 888 条记录\n", + "正在获取第 75 页数据...\n", + "已获取第 75 页数据,当前总计 900 条记录\n", + "正在获取第 76 页数据...\n", + "已获取第 76 页数据,当前总计 912 条记录\n", + "正在获取第 77 页数据...\n", + "已获取第 77 页数据,当前总计 924 条记录\n", + "正在获取第 78 页数据...\n", + "已获取第 78 页数据,当前总计 936 条记录\n", + "正在获取第 79 页数据...\n", + "已获取第 79 页数据,当前总计 948 条记录\n", + "正在获取第 80 页数据...\n", + "已获取第 80 页数据,当前总计 960 条记录\n", + "正在获取第 81 页数据...\n", + "已获取第 81 页数据,当前总计 972 条记录\n", + "正在获取第 82 页数据...\n", + "已获取第 82 页数据,当前总计 984 条记录\n", + "正在获取第 83 页数据...\n", + "已获取第 83 页数据,当前总计 996 条记录\n", + "正在获取第 84 页数据...\n", + "已获取第 84 页数据,当前总计 1008 条记录\n", + "正在获取第 85 页数据...\n", + "已获取第 85 页数据,当前总计 1020 条记录\n", + "正在获取第 86 页数据...\n", + "已获取第 86 页数据,当前总计 1032 条记录\n", + "正在获取第 87 页数据...\n", + "已获取第 87 页数据,当前总计 1044 条记录\n", + "正在获取第 88 页数据...\n", + "已获取第 88 页数据,当前总计 1056 条记录\n", + "正在获取第 89 页数据...\n", + "已获取第 89 页数据,当前总计 1068 条记录\n", + "正在获取第 90 页数据...\n", + "已获取第 90 页数据,当前总计 1080 条记录\n", + "正在获取第 91 页数据...\n", + "已获取第 91 页数据,当前总计 1092 条记录\n", + "正在获取第 92 页数据...\n", + "已获取第 92 页数据,当前总计 1104 条记录\n", + "正在获取第 93 页数据...\n", + "已获取第 93 页数据,当前总计 1116 条记录\n", + "正在获取第 94 页数据...\n", + "已获取第 94 页数据,当前总计 1128 条记录\n", + "正在获取第 95 页数据...\n", + "已获取第 95 页数据,当前总计 1140 条记录\n", + "正在获取第 96 页数据...\n", + "已获取第 96 页数据,当前总计 1152 条记录\n", + "正在获取第 97 页数据...\n", + "已获取第 97 页数据,当前总计 1164 条记录\n", + "正在获取第 98 页数据...\n", + "已获取第 98 页数据,当前总计 1176 条记录\n", + "正在获取第 99 页数据...\n", + "已获取第 99 页数据,当前总计 1188 条记录\n", + "正在获取第 100 页数据...\n", + "已获取第 100 页数据,当前总计 1200 条记录\n", + "正在获取第 101 页数据...\n", + "已获取第 101 页数据,当前总计 1212 条记录\n", + "正在获取第 102 页数据...\n", + "已获取第 102 页数据,当前总计 1224 条记录\n", + "正在获取第 103 页数据...\n", + "已获取第 103 页数据,当前总计 1236 条记录\n", + "正在获取第 104 页数据...\n", + "已获取第 104 页数据,当前总计 1248 条记录\n", + "正在获取第 105 页数据...\n", + "已获取第 105 页数据,当前总计 1260 条记录\n", + "正在获取第 106 页数据...\n", + "已获取第 106 页数据,当前总计 1272 条记录\n", + "正在获取第 107 页数据...\n", + "已获取第 107 页数据,当前总计 1284 条记录\n", + "正在获取第 108 页数据...\n", + "已获取第 108 页数据,当前总计 1296 条记录\n", + "正在获取第 109 页数据...\n", + "已获取第 109 页数据,当前总计 1308 条记录\n", + "正在获取第 110 页数据...\n", + "已获取第 110 页数据,当前总计 1320 条记录\n", + "正在获取第 111 页数据...\n", + "已获取第 111 页数据,当前总计 1332 条记录\n", + "正在获取第 112 页数据...\n", + "已获取第 112 页数据,当前总计 1344 条记录\n", + "正在获取第 113 页数据...\n", + "已获取第 113 页数据,当前总计 1356 条记录\n", + "正在获取第 114 页数据...\n", + "已获取第 114 页数据,当前总计 1368 条记录\n", + "正在获取第 115 页数据...\n", + "已获取第 115 页数据,当前总计 1380 条记录\n", + "正在获取第 116 页数据...\n", + "已获取第 116 页数据,当前总计 1392 条记录\n", + "正在获取第 117 页数据...\n", + "已获取第 117 页数据,当前总计 1404 条记录\n", + "正在获取第 118 页数据...\n", + "已获取第 118 页数据,当前总计 1416 条记录\n", + "正在获取第 119 页数据...\n", + "已获取第 119 页数据,当前总计 1428 条记录\n", + "正在获取第 120 页数据...\n", + "已获取第 120 页数据,当前总计 1440 条记录\n", + "正在获取第 121 页数据...\n", + "已获取第 121 页数据,当前总计 1452 条记录\n", + "正在获取第 122 页数据...\n", + "已获取第 122 页数据,当前总计 1464 条记录\n", + "正在获取第 123 页数据...\n", + "已获取第 123 页数据,当前总计 1476 条记录\n", + "正在获取第 124 页数据...\n", + "已获取第 124 页数据,当前总计 1488 条记录\n", + "正在获取第 125 页数据...\n", + "已获取第 125 页数据,当前总计 1500 条记录\n", + "正在获取第 126 页数据...\n", + "已获取第 126 页数据,当前总计 1512 条记录\n", + "正在获取第 127 页数据...\n", + "已获取第 127 页数据,当前总计 1524 条记录\n", + "正在获取第 128 页数据...\n", + "已获取第 128 页数据,当前总计 1536 条记录\n", + "正在获取第 129 页数据...\n", + "已获取第 129 页数据,当前总计 1548 条记录\n", + "正在获取第 130 页数据...\n", + "已获取第 130 页数据,当前总计 1560 条记录\n", + "正在获取第 131 页数据...\n", + "已获取第 131 页数据,当前总计 1572 条记录\n", + "正在获取第 132 页数据...\n", + "已获取第 132 页数据,当前总计 1584 条记录\n", + "正在获取第 133 页数据...\n", + "已获取第 133 页数据,当前总计 1596 条记录\n", + "正在获取第 134 页数据...\n", + "已获取第 134 页数据,当前总计 1608 条记录\n", + "正在获取第 135 页数据...\n", + "已获取第 135 页数据,当前总计 1620 条记录\n", + "正在获取第 136 页数据...\n", + "已获取第 136 页数据,当前总计 1632 条记录\n", + "正在获取第 137 页数据...\n", + "已获取第 137 页数据,当前总计 1644 条记录\n", + "正在获取第 138 页数据...\n", + "已获取第 138 页数据,当前总计 1656 条记录\n", + "正在获取第 139 页数据...\n", + "已获取第 139 页数据,当前总计 1668 条记录\n", + "正在获取第 140 页数据...\n", + "已获取第 140 页数据,当前总计 1680 条记录\n", + "正在获取第 141 页数据...\n", + "已获取第 141 页数据,当前总计 1692 条记录\n", + "正在获取第 142 页数据...\n", + "已获取第 142 页数据,当前总计 1704 条记录\n", + "正在获取第 143 页数据...\n", + "已获取第 143 页数据,当前总计 1716 条记录\n", + "正在获取第 144 页数据...\n", + "已获取第 144 页数据,当前总计 1728 条记录\n", + "正在获取第 145 页数据...\n", + "已获取第 145 页数据,当前总计 1740 条记录\n", + "正在获取第 146 页数据...\n", + "已获取第 146 页数据,当前总计 1752 条记录\n", + "正在获取第 147 页数据...\n", + "已获取第 147 页数据,当前总计 1764 条记录\n", + "正在获取第 148 页数据...\n", + "已获取第 148 页数据,当前总计 1776 条记录\n", + "正在获取第 149 页数据...\n", + "已获取第 149 页数据,当前总计 1788 条记录\n", + "正在获取第 150 页数据...\n", + "已获取第 150 页数据,当前总计 1800 条记录\n", + "正在获取第 151 页数据...\n", + "已获取第 151 页数据,当前总计 1812 条记录\n", + "正在获取第 152 页数据...\n", + "已获取第 152 页数据,当前总计 1824 条记录\n", + "正在获取第 153 页数据...\n", + "已获取第 153 页数据,当前总计 1836 条记录\n", + "正在获取第 154 页数据...\n", + "已获取第 154 页数据,当前总计 1848 条记录\n", + "正在获取第 155 页数据...\n", + "已获取第 155 页数据,当前总计 1860 条记录\n", + "正在获取第 156 页数据...\n", + "已获取第 156 页数据,当前总计 1872 条记录\n", + "正在获取第 157 页数据...\n", + "已获取第 157 页数据,当前总计 1884 条记录\n", + "正在获取第 158 页数据...\n", + "已获取第 158 页数据,当前总计 1896 条记录\n", + "正在获取第 159 页数据...\n", + "已获取第 159 页数据,当前总计 1908 条记录\n", + "正在获取第 160 页数据...\n", + "已获取第 160 页数据,当前总计 1920 条记录\n", + "正在获取第 161 页数据...\n", + "已获取第 161 页数据,当前总计 1932 条记录\n", + "正在获取第 162 页数据...\n", + "已获取第 162 页数据,当前总计 1944 条记录\n", + "正在获取第 163 页数据...\n", + "已获取第 163 页数据,当前总计 1956 条记录\n", + "正在获取第 164 页数据...\n", + "已获取第 164 页数据,当前总计 1968 条记录\n", + "正在获取第 165 页数据...\n", + "已获取第 165 页数据,当前总计 1980 条记录\n", + "正在获取第 166 页数据...\n", + "已获取第 166 页数据,当前总计 1992 条记录\n", + "正在获取第 167 页数据...\n", + "已获取第 167 页数据,当前总计 2004 条记录\n", + "正在获取第 168 页数据...\n", + "已获取第 168 页数据,当前总计 2016 条记录\n", + "正在获取第 169 页数据...\n", + "已获取第 169 页数据,当前总计 2028 条记录\n", + "正在获取第 170 页数据...\n", + "已获取第 170 页数据,当前总计 2040 条记录\n", + "正在获取第 171 页数据...\n", + "已获取第 171 页数据,当前总计 2052 条记录\n", + "正在获取第 172 页数据...\n", + "已获取第 172 页数据,当前总计 2064 条记录\n", + "正在获取第 173 页数据...\n", + "已获取第 173 页数据,当前总计 2076 条记录\n", + "正在获取第 174 页数据...\n", + "已获取第 174 页数据,当前总计 2088 条记录\n", + "正在获取第 175 页数据...\n", + "已获取第 175 页数据,当前总计 2100 条记录\n", + "正在获取第 176 页数据...\n", + "已获取第 176 页数据,当前总计 2112 条记录\n", + "正在获取第 177 页数据...\n", + "已获取第 177 页数据,当前总计 2124 条记录\n", + "正在获取第 178 页数据...\n", + "已获取第 178 页数据,当前总计 2136 条记录\n", + "正在获取第 179 页数据...\n", + "已获取第 179 页数据,当前总计 2148 条记录\n", + "正在获取第 180 页数据...\n", + "已获取第 180 页数据,当前总计 2160 条记录\n", + "正在获取第 181 页数据...\n", + "已获取第 181 页数据,当前总计 2172 条记录\n", + "正在获取第 182 页数据...\n", + "已获取第 182 页数据,当前总计 2184 条记录\n", + "正在获取第 183 页数据...\n", + "已获取第 183 页数据,当前总计 2196 条记录\n", + "正在获取第 184 页数据...\n", + "已获取第 184 页数据,当前总计 2208 条记录\n", + "正在获取第 185 页数据...\n", + "已获取第 185 页数据,当前总计 2220 条记录\n", + "正在获取第 186 页数据...\n", + "已获取第 186 页数据,当前总计 2232 条记录\n", + "正在获取第 187 页数据...\n", + "已获取第 187 页数据,当前总计 2244 条记录\n", + "正在获取第 188 页数据...\n", + "已获取第 188 页数据,当前总计 2256 条记录\n", + "正在获取第 189 页数据...\n", + "已获取第 189 页数据,当前总计 2268 条记录\n", + "正在获取第 190 页数据...\n", + "已获取第 190 页数据,当前总计 2280 条记录\n", + "正在获取第 191 页数据...\n", + "已获取第 191 页数据,当前总计 2292 条记录\n", + "正在获取第 192 页数据...\n", + "已获取第 192 页数据,当前总计 2304 条记录\n", + "正在获取第 193 页数据...\n", + "已获取第 193 页数据,当前总计 2316 条记录\n", + "正在获取第 194 页数据...\n", + "已获取第 194 页数据,当前总计 2328 条记录\n", + "正在获取第 195 页数据...\n", + "已获取第 195 页数据,当前总计 2340 条记录\n", + "正在获取第 196 页数据...\n", + "已获取第 196 页数据,当前总计 2352 条记录\n", + "正在获取第 197 页数据...\n", + "已获取第 197 页数据,当前总计 2364 条记录\n", + "正在获取第 198 页数据...\n", + "已获取第 198 页数据,当前总计 2376 条记录\n", + "正在获取第 199 页数据...\n", + "已获取第 199 页数据,当前总计 2388 条记录\n", + "正在获取第 200 页数据...\n", + "已获取第 200 页数据,当前总计 2400 条记录\n", + "正在获取第 201 页数据...\n", + "已获取第 201 页数据,当前总计 2412 条记录\n", + "正在获取第 202 页数据...\n", + "已获取第 202 页数据,当前总计 2424 条记录\n", + "正在获取第 203 页数据...\n", + "已获取第 203 页数据,当前总计 2436 条记录\n", + "正在获取第 204 页数据...\n", + "已获取第 204 页数据,当前总计 2448 条记录\n", + "正在获取第 205 页数据...\n", + "已获取第 205 页数据,当前总计 2460 条记录\n", + "正在获取第 206 页数据...\n", + "已获取第 206 页数据,当前总计 2472 条记录\n", + "正在获取第 207 页数据...\n", + "已获取第 207 页数据,当前总计 2484 条记录\n", + "正在获取第 208 页数据...\n", + "已获取第 208 页数据,当前总计 2496 条记录\n", + "正在获取第 209 页数据...\n", + "已获取第 209 页数据,当前总计 2508 条记录\n", + "正在获取第 210 页数据...\n", + "已获取第 210 页数据,当前总计 2520 条记录\n", + "正在获取第 211 页数据...\n", + "已获取第 211 页数据,当前总计 2532 条记录\n", + "正在获取第 212 页数据...\n", + "已获取第 212 页数据,当前总计 2544 条记录\n", + "正在获取第 213 页数据...\n", + "已获取第 213 页数据,当前总计 2556 条记录\n", + "正在获取第 214 页数据...\n", + "已获取第 214 页数据,当前总计 2568 条记录\n", + "正在获取第 215 页数据...\n", + "已获取第 215 页数据,当前总计 2580 条记录\n", + "正在获取第 216 页数据...\n", + "已获取第 216 页数据,当前总计 2592 条记录\n", + "正在获取第 217 页数据...\n", + "已获取第 217 页数据,当前总计 2604 条记录\n", + "正在获取第 218 页数据...\n", + "已获取第 218 页数据,当前总计 2616 条记录\n", + "正在获取第 219 页数据...\n", + "已获取第 219 页数据,当前总计 2628 条记录\n", + "正在获取第 220 页数据...\n", + "已获取第 220 页数据,当前总计 2640 条记录\n", + "正在获取第 221 页数据...\n", + "已获取第 221 页数据,当前总计 2652 条记录\n", + "正在获取第 222 页数据...\n", + "已获取第 222 页数据,当前总计 2664 条记录\n", + "正在获取第 223 页数据...\n", + "已获取第 223 页数据,当前总计 2676 条记录\n", + "正在获取第 224 页数据...\n", + "已获取第 224 页数据,当前总计 2688 条记录\n", + "正在获取第 225 页数据...\n", + "已获取第 225 页数据,当前总计 2700 条记录\n", + "正在获取第 226 页数据...\n", + "已获取第 226 页数据,当前总计 2712 条记录\n", + "正在获取第 227 页数据...\n", + "已获取第 227 页数据,当前总计 2724 条记录\n", + "正在获取第 228 页数据...\n", + "已获取第 228 页数据,当前总计 2736 条记录\n", + "正在获取第 229 页数据...\n", + "已获取第 229 页数据,当前总计 2748 条记录\n", + "正在获取第 230 页数据...\n", + "已获取第 230 页数据,当前总计 2760 条记录\n", + "正在获取第 231 页数据...\n", + "已获取第 231 页数据,当前总计 2772 条记录\n", + "正在获取第 232 页数据...\n", + "已获取第 232 页数据,当前总计 2784 条记录\n", + "正在获取第 233 页数据...\n", + "已获取第 233 页数据,当前总计 2796 条记录\n", + "正在获取第 234 页数据...\n", + "已获取第 234 页数据,当前总计 2808 条记录\n", + "正在获取第 235 页数据...\n", + "已获取第 235 页数据,当前总计 2820 条记录\n", + "正在获取第 236 页数据...\n", + "已获取第 236 页数据,当前总计 2832 条记录\n", + "正在获取第 237 页数据...\n", + "已获取第 237 页数据,当前总计 2844 条记录\n", + "正在获取第 238 页数据...\n", + "已获取第 238 页数据,当前总计 2856 条记录\n", + "正在获取第 239 页数据...\n", + "已获取第 239 页数据,当前总计 2868 条记录\n", + "正在获取第 240 页数据...\n", + "已获取第 240 页数据,当前总计 2880 条记录\n", + "正在获取第 241 页数据...\n", + "已获取第 241 页数据,当前总计 2892 条记录\n", + "正在获取第 242 页数据...\n", + "已获取第 242 页数据,当前总计 2904 条记录\n", + "正在获取第 243 页数据...\n", + "已获取第 243 页数据,当前总计 2916 条记录\n", + "正在获取第 244 页数据...\n", + "已获取第 244 页数据,当前总计 2928 条记录\n", + "正在获取第 245 页数据...\n", + "已获取第 245 页数据,当前总计 2940 条记录\n", + "正在获取第 246 页数据...\n", + "已获取第 246 页数据,当前总计 2952 条记录\n", + "正在获取第 247 页数据...\n", + "已获取第 247 页数据,当前总计 2964 条记录\n", + "正在获取第 248 页数据...\n", + "已获取第 248 页数据,当前总计 2976 条记录\n", + "正在获取第 249 页数据...\n", + "已获取第 249 页数据,当前总计 2988 条记录\n", + "正在获取第 250 页数据...\n", + "已获取第 250 页数据,当前总计 3000 条记录\n", + "正在获取第 251 页数据...\n", + "已获取第 251 页数据,当前总计 3012 条记录\n", + "正在获取第 252 页数据...\n", + "已获取第 252 页数据,当前总计 3024 条记录\n", + "正在获取第 253 页数据...\n", + "已获取第 253 页数据,当前总计 3036 条记录\n", + "正在获取第 254 页数据...\n", + "已获取第 254 页数据,当前总计 3048 条记录\n", + "正在获取第 255 页数据...\n", + "已获取第 255 页数据,当前总计 3060 条记录\n", + "正在获取第 256 页数据...\n", + "已获取第 256 页数据,当前总计 3072 条记录\n", + "正在获取第 257 页数据...\n", + "已获取第 257 页数据,当前总计 3084 条记录\n", + "正在获取第 258 页数据...\n", + "已获取第 258 页数据,当前总计 3096 条记录\n", + "正在获取第 259 页数据...\n", + "已获取第 259 页数据,当前总计 3108 条记录\n", + "正在获取第 260 页数据...\n", + "已获取第 260 页数据,当前总计 3120 条记录\n", + "正在获取第 261 页数据...\n", + "已获取第 261 页数据,当前总计 3132 条记录\n", + "正在获取第 262 页数据...\n", + "已获取第 262 页数据,当前总计 3144 条记录\n", + "正在获取第 263 页数据...\n", + "已获取第 263 页数据,当前总计 3156 条记录\n", + "正在获取第 264 页数据...\n", + "已获取第 264 页数据,当前总计 3168 条记录\n", + "正在获取第 265 页数据...\n", + "已获取第 265 页数据,当前总计 3180 条记录\n", + "正在获取第 266 页数据...\n", + "已获取第 266 页数据,当前总计 3192 条记录\n", + "正在获取第 267 页数据...\n", + "已获取第 267 页数据,当前总计 3204 条记录\n", + "正在获取第 268 页数据...\n", + "已获取第 268 页数据,当前总计 3216 条记录\n", + "正在获取第 269 页数据...\n", + "已获取第 269 页数据,当前总计 3228 条记录\n", + "正在获取第 270 页数据...\n", + "已获取第 270 页数据,当前总计 3240 条记录\n", + "正在获取第 271 页数据...\n", + "已获取第 271 页数据,当前总计 3252 条记录\n", + "正在获取第 272 页数据...\n", + "已获取第 272 页数据,当前总计 3264 条记录\n", + "正在获取第 273 页数据...\n", + "已获取第 273 页数据,当前总计 3276 条记录\n", + "正在获取第 274 页数据...\n", + "已获取第 274 页数据,当前总计 3288 条记录\n", + "正在获取第 275 页数据...\n", + "已获取第 275 页数据,当前总计 3300 条记录\n", + "正在获取第 276 页数据...\n", + "已获取第 276 页数据,当前总计 3312 条记录\n", + "正在获取第 277 页数据...\n", + "已获取第 277 页数据,当前总计 3324 条记录\n", + "正在获取第 278 页数据...\n", + "已获取第 278 页数据,当前总计 3336 条记录\n", + "正在获取第 279 页数据...\n", + "已获取第 279 页数据,当前总计 3348 条记录\n", + "正在获取第 280 页数据...\n", + "已获取第 280 页数据,当前总计 3360 条记录\n", + "正在获取第 281 页数据...\n", + "已获取第 281 页数据,当前总计 3372 条记录\n", + "正在获取第 282 页数据...\n", + "已获取第 282 页数据,当前总计 3384 条记录\n", + "正在获取第 283 页数据...\n", + "已获取第 283 页数据,当前总计 3396 条记录\n", + "正在获取第 284 页数据...\n", + "已获取第 284 页数据,当前总计 3408 条记录\n", + "正在获取第 285 页数据...\n", + "已获取第 285 页数据,当前总计 3420 条记录\n", + "正在获取第 286 页数据...\n", + "已获取第 286 页数据,当前总计 3432 条记录\n", + "正在获取第 287 页数据...\n", + "已获取第 287 页数据,当前总计 3444 条记录\n", + "正在获取第 288 页数据...\n", + "已获取第 288 页数据,当前总计 3456 条记录\n", + "正在获取第 289 页数据...\n", + "已获取第 289 页数据,当前总计 3468 条记录\n", + "正在获取第 290 页数据...\n", + "已获取第 290 页数据,当前总计 3480 条记录\n", + "正在获取第 291 页数据...\n", + "已获取第 291 页数据,当前总计 3492 条记录\n", + "正在获取第 292 页数据...\n", + "已获取第 292 页数据,当前总计 3504 条记录\n", + "正在获取第 293 页数据...\n", + "已获取第 293 页数据,当前总计 3516 条记录\n", + "正在获取第 294 页数据...\n", + "已获取第 294 页数据,当前总计 3528 条记录\n", + "正在获取第 295 页数据...\n", + "已获取第 295 页数据,当前总计 3540 条记录\n", + "正在获取第 296 页数据...\n", + "已获取第 296 页数据,当前总计 3552 条记录\n", + "正在获取第 297 页数据...\n", + "已获取第 297 页数据,当前总计 3564 条记录\n", + "正在获取第 298 页数据...\n", + "已获取第 298 页数据,当前总计 3576 条记录\n", + "正在获取第 299 页数据...\n", + "已获取第 299 页数据,当前总计 3588 条记录\n", + "正在获取第 300 页数据...\n", + "已获取第 300 页数据,当前总计 3600 条记录\n", + "正在获取第 301 页数据...\n", + "已获取第 301 页数据,当前总计 3612 条记录\n", + "正在获取第 302 页数据...\n", + "已获取第 302 页数据,当前总计 3624 条记录\n", + "正在获取第 303 页数据...\n", + "已获取第 303 页数据,当前总计 3636 条记录\n", + "正在获取第 304 页数据...\n", + "已获取第 304 页数据,当前总计 3648 条记录\n", + "正在获取第 305 页数据...\n", + "已获取第 305 页数据,当前总计 3660 条记录\n", + "正在获取第 306 页数据...\n", + "已获取第 306 页数据,当前总计 3672 条记录\n", + "正在获取第 307 页数据...\n", + "已获取第 307 页数据,当前总计 3684 条记录\n", + "正在获取第 308 页数据...\n", + "已获取第 308 页数据,当前总计 3696 条记录\n", + "正在获取第 309 页数据...\n", + "已获取第 309 页数据,当前总计 3708 条记录\n", + "正在获取第 310 页数据...\n", + "已获取第 310 页数据,当前总计 3720 条记录\n", + "正在获取第 311 页数据...\n", + "已获取第 311 页数据,当前总计 3732 条记录\n", + "正在获取第 312 页数据...\n", + "已获取第 312 页数据,当前总计 3744 条记录\n", + "正在获取第 313 页数据...\n", + "已获取第 313 页数据,当前总计 3756 条记录\n", + "正在获取第 314 页数据...\n", + "已获取第 314 页数据,当前总计 3768 条记录\n", + "正在获取第 315 页数据...\n", + "已获取第 315 页数据,当前总计 3780 条记录\n", + "正在获取第 316 页数据...\n", + "已获取第 316 页数据,当前总计 3792 条记录\n", + "正在获取第 317 页数据...\n", + "已获取第 317 页数据,当前总计 3804 条记录\n", + "正在获取第 318 页数据...\n", + "已获取第 318 页数据,当前总计 3816 条记录\n", + "正在获取第 319 页数据...\n", + "已获取第 319 页数据,当前总计 3828 条记录\n", + "正在获取第 320 页数据...\n", + "已获取第 320 页数据,当前总计 3840 条记录\n", + "正在获取第 321 页数据...\n", + "已获取第 321 页数据,当前总计 3852 条记录\n", + "正在获取第 322 页数据...\n", + "已获取第 322 页数据,当前总计 3864 条记录\n", + "正在获取第 323 页数据...\n", + "已获取第 323 页数据,当前总计 3876 条记录\n", + "正在获取第 324 页数据...\n", + "已获取第 324 页数据,当前总计 3888 条记录\n", + "正在获取第 325 页数据...\n", + "已获取第 325 页数据,当前总计 3900 条记录\n", + "正在获取第 326 页数据...\n", + "已获取第 326 页数据,当前总计 3912 条记录\n", + "正在获取第 327 页数据...\n", + "已获取第 327 页数据,当前总计 3924 条记录\n", + "正在获取第 328 页数据...\n", + "已获取第 328 页数据,当前总计 3936 条记录\n", + "正在获取第 329 页数据...\n", + "已获取第 329 页数据,当前总计 3948 条记录\n", + "正在获取第 330 页数据...\n", + "已获取第 330 页数据,当前总计 3960 条记录\n", + "正在获取第 331 页数据...\n", + "已获取第 331 页数据,当前总计 3972 条记录\n", + "正在获取第 332 页数据...\n", + "已获取第 332 页数据,当前总计 3984 条记录\n", + "正在获取第 333 页数据...\n", + "已获取第 333 页数据,当前总计 3996 条记录\n", + "正在获取第 334 页数据...\n", + "已获取第 334 页数据,当前总计 4008 条记录\n", + "正在获取第 335 页数据...\n", + "已获取第 335 页数据,当前总计 4020 条记录\n", + "正在获取第 336 页数据...\n", + "已获取第 336 页数据,当前总计 4032 条记录\n", + "正在获取第 337 页数据...\n", + "已获取第 337 页数据,当前总计 4044 条记录\n", + "正在获取第 338 页数据...\n", + "已获取第 338 页数据,当前总计 4056 条记录\n", + "正在获取第 339 页数据...\n", + "已获取第 339 页数据,当前总计 4068 条记录\n", + "正在获取第 340 页数据...\n", + "已获取第 340 页数据,当前总计 4080 条记录\n", + "正在获取第 341 页数据...\n", + "已获取第 341 页数据,当前总计 4092 条记录\n", + "正在获取第 342 页数据...\n", + "已获取第 342 页数据,当前总计 4104 条记录\n", + "正在获取第 343 页数据...\n", + "已获取第 343 页数据,当前总计 4116 条记录\n", + "正在获取第 344 页数据...\n", + "已获取第 344 页数据,当前总计 4128 条记录\n", + "正在获取第 345 页数据...\n", + "已获取第 345 页数据,当前总计 4140 条记录\n", + "正在获取第 346 页数据...\n", + "已获取第 346 页数据,当前总计 4152 条记录\n", + "正在获取第 347 页数据...\n", + "已获取第 347 页数据,当前总计 4164 条记录\n", + "正在获取第 348 页数据...\n", + "已获取第 348 页数据,当前总计 4176 条记录\n", + "正在获取第 349 页数据...\n", + "已获取第 349 页数据,当前总计 4188 条记录\n", + "正在获取第 350 页数据...\n", + "已获取第 350 页数据,当前总计 4200 条记录\n", + "正在获取第 351 页数据...\n", + "已获取第 351 页数据,当前总计 4212 条记录\n", + "正在获取第 352 页数据...\n", + "已获取第 352 页数据,当前总计 4224 条记录\n", + "正在获取第 353 页数据...\n", + "已获取第 353 页数据,当前总计 4236 条记录\n", + "正在获取第 354 页数据...\n", + "已获取第 354 页数据,当前总计 4248 条记录\n", + "正在获取第 355 页数据...\n", + "已获取第 355 页数据,当前总计 4260 条记录\n", + "正在获取第 356 页数据...\n", + "已获取第 356 页数据,当前总计 4272 条记录\n", + "正在获取第 357 页数据...\n", + "已获取第 357 页数据,当前总计 4284 条记录\n", + "正在获取第 358 页数据...\n", + "已获取第 358 页数据,当前总计 4296 条记录\n", + "正在获取第 359 页数据...\n", + "已获取第 359 页数据,当前总计 4308 条记录\n", + "正在获取第 360 页数据...\n", + "已获取第 360 页数据,当前总计 4320 条记录\n", + "正在获取第 361 页数据...\n", + "已获取第 361 页数据,当前总计 4332 条记录\n", + "正在获取第 362 页数据...\n", + "已获取第 362 页数据,当前总计 4344 条记录\n", + "正在获取第 363 页数据...\n", + "已获取第 363 页数据,当前总计 4356 条记录\n", + "正在获取第 364 页数据...\n", + "已获取第 364 页数据,当前总计 4368 条记录\n", + "正在获取第 365 页数据...\n", + "已获取第 365 页数据,当前总计 4380 条记录\n", + "正在获取第 366 页数据...\n", + "已获取第 366 页数据,当前总计 4392 条记录\n", + "正在获取第 367 页数据...\n", + "已获取第 367 页数据,当前总计 4404 条记录\n", + "正在获取第 368 页数据...\n", + "已获取第 368 页数据,当前总计 4416 条记录\n", + "正在获取第 369 页数据...\n", + "已获取第 369 页数据,当前总计 4428 条记录\n", + "正在获取第 370 页数据...\n", + "已获取第 370 页数据,当前总计 4440 条记录\n", + "正在获取第 371 页数据...\n", + "已获取第 371 页数据,当前总计 4452 条记录\n", + "正在获取第 372 页数据...\n", + "已获取第 372 页数据,当前总计 4464 条记录\n", + "正在获取第 373 页数据...\n", + "已获取第 373 页数据,当前总计 4476 条记录\n", + "正在获取第 374 页数据...\n", + "已获取第 374 页数据,当前总计 4488 条记录\n", + "正在获取第 375 页数据...\n", + "已获取第 375 页数据,当前总计 4500 条记录\n", + "正在获取第 376 页数据...\n", + "已获取第 376 页数据,当前总计 4512 条记录\n", + "正在获取第 377 页数据...\n", + "已获取第 377 页数据,当前总计 4524 条记录\n", + "正在获取第 378 页数据...\n", + "已获取第 378 页数据,当前总计 4536 条记录\n", + "正在获取第 379 页数据...\n", + "已获取第 379 页数据,当前总计 4548 条记录\n", + "正在获取第 380 页数据...\n", + "已获取第 380 页数据,当前总计 4560 条记录\n", + "正在获取第 381 页数据...\n", + "已获取第 381 页数据,当前总计 4572 条记录\n", + "正在获取第 382 页数据...\n", + "已获取第 382 页数据,当前总计 4584 条记录\n", + "正在获取第 383 页数据...\n", + "已获取第 383 页数据,当前总计 4596 条记录\n", + "正在获取第 384 页数据...\n", + "已获取第 384 页数据,当前总计 4608 条记录\n", + "正在获取第 385 页数据...\n", + "已获取第 385 页数据,当前总计 4620 条记录\n", + "正在获取第 386 页数据...\n", + "已获取第 386 页数据,当前总计 4632 条记录\n", + "正在获取第 387 页数据...\n", + "已获取第 387 页数据,当前总计 4644 条记录\n", + "正在获取第 388 页数据...\n", + "已获取第 388 页数据,当前总计 4656 条记录\n", + "正在获取第 389 页数据...\n", + "已获取第 389 页数据,当前总计 4668 条记录\n", + "正在获取第 390 页数据...\n", + "已获取第 390 页数据,当前总计 4680 条记录\n", + "正在获取第 391 页数据...\n", + "已获取第 391 页数据,当前总计 4692 条记录\n", + "正在获取第 392 页数据...\n", + "已获取第 392 页数据,当前总计 4704 条记录\n", + "正在获取第 393 页数据...\n", + "已获取第 393 页数据,当前总计 4716 条记录\n", + "正在获取第 394 页数据...\n", + "已获取第 394 页数据,当前总计 4728 条记录\n", + "正在获取第 395 页数据...\n", + "已获取第 395 页数据,当前总计 4740 条记录\n", + "正在获取第 396 页数据...\n", + "已获取第 396 页数据,当前总计 4752 条记录\n", + "正在获取第 397 页数据...\n", + "已获取第 397 页数据,当前总计 4764 条记录\n", + "正在获取第 398 页数据...\n", + "已获取第 398 页数据,当前总计 4776 条记录\n", + "正在获取第 399 页数据...\n", + "已获取第 399 页数据,当前总计 4788 条记录\n", + "正在获取第 400 页数据...\n", + "已获取第 400 页数据,当前总计 4800 条记录\n", + "正在获取第 401 页数据...\n", + "已获取第 401 页数据,当前总计 4812 条记录\n", + "正在获取第 402 页数据...\n", + "已获取第 402 页数据,当前总计 4824 条记录\n", + "正在获取第 403 页数据...\n", + "已获取第 403 页数据,当前总计 4836 条记录\n", + "正在获取第 404 页数据...\n", + "已获取第 404 页数据,当前总计 4848 条记录\n", + "正在获取第 405 页数据...\n", + "已获取第 405 页数据,当前总计 4860 条记录\n", + "正在获取第 406 页数据...\n", + "已获取第 406 页数据,当前总计 4872 条记录\n", + "正在获取第 407 页数据...\n", + "已获取第 407 页数据,当前总计 4884 条记录\n", + "正在获取第 408 页数据...\n", + "已获取第 408 页数据,当前总计 4896 条记录\n", + "正在获取第 409 页数据...\n", + "已获取第 409 页数据,当前总计 4908 条记录\n", + "正在获取第 410 页数据...\n", + "已获取第 410 页数据,当前总计 4920 条记录\n", + "正在获取第 411 页数据...\n", + "已获取第 411 页数据,当前总计 4932 条记录\n", + "正在获取第 412 页数据...\n", + "已获取第 412 页数据,当前总计 4944 条记录\n", + "正在获取第 413 页数据...\n", + "已获取第 413 页数据,当前总计 4956 条记录\n", + "正在获取第 414 页数据...\n", + "已获取第 414 页数据,当前总计 4968 条记录\n", + "正在获取第 415 页数据...\n", + "已获取第 415 页数据,当前总计 4980 条记录\n", + "正在获取第 416 页数据...\n", + "已获取第 416 页数据,当前总计 4992 条记录\n", + "正在获取第 417 页数据...\n", + "已获取第 417 页数据,当前总计 5004 条记录\n", + "正在获取第 418 页数据...\n", + "已获取第 418 页数据,当前总计 5016 条记录\n", + "正在获取第 419 页数据...\n", + "已获取第 419 页数据,当前总计 5028 条记录\n", + "正在获取第 420 页数据...\n", + "已获取第 420 页数据,当前总计 5040 条记录\n", + "正在获取第 421 页数据...\n", + "已获取第 421 页数据,当前总计 5052 条记录\n", + "正在获取第 422 页数据...\n", + "已获取第 422 页数据,当前总计 5064 条记录\n", + "正在获取第 423 页数据...\n", + "已获取第 423 页数据,当前总计 5076 条记录\n", + "正在获取第 424 页数据...\n", + "已获取第 424 页数据,当前总计 5088 条记录\n", + "正在获取第 425 页数据...\n", + "已获取第 425 页数据,当前总计 5100 条记录\n", + "正在获取第 426 页数据...\n", + "已获取第 426 页数据,当前总计 5112 条记录\n", + "正在获取第 427 页数据...\n", + "已获取第 427 页数据,当前总计 5124 条记录\n", + "正在获取第 428 页数据...\n", + "已获取第 428 页数据,当前总计 5136 条记录\n", + "正在获取第 429 页数据...\n", + "已获取第 429 页数据,当前总计 5148 条记录\n", + "正在获取第 430 页数据...\n", + "已获取第 430 页数据,当前总计 5160 条记录\n", + "正在获取第 431 页数据...\n", + "已获取第 431 页数据,当前总计 5172 条记录\n", + "正在获取第 432 页数据...\n", + "已获取第 432 页数据,当前总计 5184 条记录\n", + "正在获取第 433 页数据...\n", + "已获取第 433 页数据,当前总计 5196 条记录\n", + "正在获取第 434 页数据...\n", + "已获取第 434 页数据,当前总计 5208 条记录\n", + "正在获取第 435 页数据...\n", + "已获取第 435 页数据,当前总计 5220 条记录\n", + "正在获取第 436 页数据...\n", + "已获取第 436 页数据,当前总计 5232 条记录\n", + "正在获取第 437 页数据...\n", + "已获取第 437 页数据,当前总计 5244 条记录\n", + "正在获取第 438 页数据...\n", + "已获取第 438 页数据,当前总计 5256 条记录\n", + "正在获取第 439 页数据...\n", + "已获取第 439 页数据,当前总计 5268 条记录\n", + "正在获取第 440 页数据...\n", + "已获取第 440 页数据,当前总计 5280 条记录\n", + "正在获取第 441 页数据...\n", + "已获取第 441 页数据,当前总计 5292 条记录\n", + "正在获取第 442 页数据...\n", + "已获取第 442 页数据,当前总计 5304 条记录\n", + "正在获取第 443 页数据...\n", + "已获取第 443 页数据,当前总计 5316 条记录\n", + "正在获取第 444 页数据...\n", + "已获取第 444 页数据,当前总计 5328 条记录\n", + "正在获取第 445 页数据...\n", + "已获取第 445 页数据,当前总计 5340 条记录\n", + "正在获取第 446 页数据...\n", + "已获取第 446 页数据,当前总计 5352 条记录\n", + "正在获取第 447 页数据...\n", + "已获取第 447 页数据,当前总计 5364 条记录\n", + "正在获取第 448 页数据...\n", + "已获取第 448 页数据,当前总计 5376 条记录\n", + "正在获取第 449 页数据...\n", + "已获取第 449 页数据,当前总计 5388 条记录\n", + "正在获取第 450 页数据...\n", + "已获取第 450 页数据,当前总计 5400 条记录\n", + "正在获取第 451 页数据...\n", + "已获取第 451 页数据,当前总计 5412 条记录\n", + "正在获取第 452 页数据...\n", + "已获取第 452 页数据,当前总计 5424 条记录\n", + "正在获取第 453 页数据...\n", + "已获取第 453 页数据,当前总计 5436 条记录\n", + "正在获取第 454 页数据...\n", + "已获取第 454 页数据,当前总计 5448 条记录\n", + "正在获取第 455 页数据...\n", + "已获取第 455 页数据,当前总计 5460 条记录\n", + "正在获取第 456 页数据...\n", + "已获取第 456 页数据,当前总计 5472 条记录\n", + "正在获取第 457 页数据...\n", + "已获取第 457 页数据,当前总计 5484 条记录\n", + "正在获取第 458 页数据...\n", + "已获取第 458 页数据,当前总计 5496 条记录\n", + "正在获取第 459 页数据...\n", + "已获取第 459 页数据,当前总计 5508 条记录\n", + "正在获取第 460 页数据...\n", + "已获取第 460 页数据,当前总计 5520 条记录\n", + "正在获取第 461 页数据...\n", + "已获取第 461 页数据,当前总计 5532 条记录\n", + "正在获取第 462 页数据...\n", + "已获取第 462 页数据,当前总计 5544 条记录\n", + "正在获取第 463 页数据...\n", + "已获取第 463 页数据,当前总计 5556 条记录\n", + "正在获取第 464 页数据...\n", + "已获取第 464 页数据,当前总计 5568 条记录\n", + "正在获取第 465 页数据...\n", + "已获取第 465 页数据,当前总计 5580 条记录\n", + "正在获取第 466 页数据...\n", + "已获取第 466 页数据,当前总计 5592 条记录\n", + "正在获取第 467 页数据...\n", + "已获取第 467 页数据,当前总计 5604 条记录\n", + "正在获取第 468 页数据...\n", + "已获取第 468 页数据,当前总计 5616 条记录\n", + "正在获取第 469 页数据...\n", + "已获取第 469 页数据,当前总计 5628 条记录\n", + "正在获取第 470 页数据...\n", + "已获取第 470 页数据,当前总计 5640 条记录\n", + "正在获取第 471 页数据...\n", + "已获取第 471 页数据,当前总计 5652 条记录\n", + "正在获取第 472 页数据...\n", + "已获取第 472 页数据,当前总计 5664 条记录\n", + "正在获取第 473 页数据...\n", + "已获取第 473 页数据,当前总计 5676 条记录\n", + "正在获取第 474 页数据...\n", + "已获取第 474 页数据,当前总计 5688 条记录\n", + "正在获取第 475 页数据...\n", + "已获取第 475 页数据,当前总计 5700 条记录\n", + "正在获取第 476 页数据...\n", + "已获取第 476 页数据,当前总计 5712 条记录\n", + "正在获取第 477 页数据...\n", + "已获取第 477 页数据,当前总计 5724 条记录\n", + "正在获取第 478 页数据...\n", + "已获取第 478 页数据,当前总计 5736 条记录\n", + "正在获取第 479 页数据...\n", + "已获取第 479 页数据,当前总计 5748 条记录\n", + "正在获取第 480 页数据...\n", + "已获取第 480 页数据,当前总计 5760 条记录\n", + "正在获取第 481 页数据...\n", + "已获取第 481 页数据,当前总计 5772 条记录\n", + "正在获取第 482 页数据...\n", + "已获取第 482 页数据,当前总计 5784 条记录\n", + "正在获取第 483 页数据...\n", + "已获取第 483 页数据,当前总计 5796 条记录\n", + "正在获取第 484 页数据...\n", + "已获取第 484 页数据,当前总计 5808 条记录\n", + "正在获取第 485 页数据...\n", + "已获取第 485 页数据,当前总计 5820 条记录\n", + "正在获取第 486 页数据...\n", + "已获取第 486 页数据,当前总计 5832 条记录\n", + "正在获取第 487 页数据...\n", + "已获取第 487 页数据,当前总计 5844 条记录\n", + "正在获取第 488 页数据...\n", + "已获取第 488 页数据,当前总计 5856 条记录\n", + "正在获取第 489 页数据...\n", + "已获取第 489 页数据,当前总计 5868 条记录\n", + "正在获取第 490 页数据...\n", + "已获取第 490 页数据,当前总计 5880 条记录\n", + "正在获取第 491 页数据...\n", + "已获取第 491 页数据,当前总计 5892 条记录\n", + "正在获取第 492 页数据...\n", + "已获取第 492 页数据,当前总计 5904 条记录\n", + "正在获取第 493 页数据...\n", + "已获取第 493 页数据,当前总计 5916 条记录\n", + "正在获取第 494 页数据...\n", + "已获取第 494 页数据,当前总计 5928 条记录\n", + "正在获取第 495 页数据...\n", + "已获取第 495 页数据,当前总计 5940 条记录\n", + "正在获取第 496 页数据...\n", + "已获取第 496 页数据,当前总计 5952 条记录\n", + "正在获取第 497 页数据...\n", + "已获取第 497 页数据,当前总计 5964 条记录\n", + "正在获取第 498 页数据...\n", + "已获取第 498 页数据,当前总计 5976 条记录\n", + "正在获取第 499 页数据...\n", + "已获取第 499 页数据,当前总计 5988 条记录\n", + "正在获取第 500 页数据...\n", + "已获取第 500 页数据,当前总计 6000 条记录\n", + "正在获取第 501 页数据...\n", + "已获取第 501 页数据,当前总计 6012 条记录\n", + "正在获取第 502 页数据...\n", + "已获取第 502 页数据,当前总计 6024 条记录\n", + "正在获取第 503 页数据...\n", + "已获取第 503 页数据,当前总计 6036 条记录\n", + "正在获取第 504 页数据...\n", + "已获取第 504 页数据,当前总计 6048 条记录\n", + "正在获取第 505 页数据...\n", + "已获取第 505 页数据,当前总计 6060 条记录\n", + "正在获取第 506 页数据...\n", + "已获取第 506 页数据,当前总计 6072 条记录\n", + "正在获取第 507 页数据...\n", + "已获取第 507 页数据,当前总计 6084 条记录\n", + "正在获取第 508 页数据...\n", + "已获取第 508 页数据,当前总计 6096 条记录\n", + "正在获取第 509 页数据...\n", + "已获取第 509 页数据,当前总计 6108 条记录\n", + "正在获取第 510 页数据...\n", + "已获取第 510 页数据,当前总计 6120 条记录\n", + "正在获取第 511 页数据...\n", + "已获取第 511 页数据,当前总计 6132 条记录\n", + "正在获取第 512 页数据...\n", + "已获取第 512 页数据,当前总计 6144 条记录\n", + "正在获取第 513 页数据...\n", + "已获取第 513 页数据,当前总计 6156 条记录\n", + "正在获取第 514 页数据...\n", + "已获取第 514 页数据,当前总计 6168 条记录\n", + "正在获取第 515 页数据...\n", + "已获取第 515 页数据,当前总计 6180 条记录\n", + "正在获取第 516 页数据...\n", + "已获取第 516 页数据,当前总计 6192 条记录\n", + "正在获取第 517 页数据...\n", + "已获取第 517 页数据,当前总计 6204 条记录\n", + "正在获取第 518 页数据...\n", + "已获取第 518 页数据,当前总计 6216 条记录\n", + "正在获取第 519 页数据...\n", + "已获取第 519 页数据,当前总计 6228 条记录\n", + "正在获取第 520 页数据...\n", + "已获取第 520 页数据,当前总计 6240 条记录\n", + "正在获取第 521 页数据...\n", + "已获取第 521 页数据,当前总计 6252 条记录\n", + "正在获取第 522 页数据...\n", + "已获取第 522 页数据,当前总计 6264 条记录\n", + "正在获取第 523 页数据...\n", + "已获取第 523 页数据,当前总计 6276 条记录\n", + "正在获取第 524 页数据...\n", + "已获取第 524 页数据,当前总计 6288 条记录\n", + "正在获取第 525 页数据...\n", + "已获取第 525 页数据,当前总计 6300 条记录\n", + "正在获取第 526 页数据...\n", + "已获取第 526 页数据,当前总计 6312 条记录\n", + "正在获取第 527 页数据...\n", + "已获取第 527 页数据,当前总计 6324 条记录\n", + "正在获取第 528 页数据...\n", + "已获取第 528 页数据,当前总计 6336 条记录\n", + "正在获取第 529 页数据...\n", + "已获取第 529 页数据,当前总计 6348 条记录\n", + "正在获取第 530 页数据...\n", + "已获取第 530 页数据,当前总计 6360 条记录\n", + "正在获取第 531 页数据...\n", + "已获取第 531 页数据,当前总计 6372 条记录\n", + "正在获取第 532 页数据...\n", + "已获取第 532 页数据,当前总计 6384 条记录\n", + "正在获取第 533 页数据...\n", + "已获取第 533 页数据,当前总计 6396 条记录\n", + "正在获取第 534 页数据...\n", + "已获取第 534 页数据,当前总计 6408 条记录\n", + "正在获取第 535 页数据...\n", + "已获取第 535 页数据,当前总计 6420 条记录\n", + "正在获取第 536 页数据...\n", + "已获取第 536 页数据,当前总计 6432 条记录\n", + "正在获取第 537 页数据...\n", + "已获取第 537 页数据,当前总计 6444 条记录\n", + "正在获取第 538 页数据...\n", + "已获取第 538 页数据,当前总计 6456 条记录\n", + "正在获取第 539 页数据...\n", + "已获取第 539 页数据,当前总计 6468 条记录\n", + "正在获取第 540 页数据...\n", + "已获取第 540 页数据,当前总计 6480 条记录\n", + "正在获取第 541 页数据...\n", + "已获取第 541 页数据,当前总计 6492 条记录\n", + "正在获取第 542 页数据...\n", + "已获取第 542 页数据,当前总计 6504 条记录\n", + "正在获取第 543 页数据...\n", + "已获取第 543 页数据,当前总计 6516 条记录\n", + "正在获取第 544 页数据...\n", + "已获取第 544 页数据,当前总计 6528 条记录\n", + "正在获取第 545 页数据...\n", + "已获取第 545 页数据,当前总计 6540 条记录\n", + "正在获取第 546 页数据...\n", + "已获取第 546 页数据,当前总计 6552 条记录\n", + "正在获取第 547 页数据...\n", + "已获取第 547 页数据,当前总计 6564 条记录\n", + "正在获取第 548 页数据...\n", + "已获取第 548 页数据,当前总计 6576 条记录\n", + "正在获取第 549 页数据...\n", + "已获取第 549 页数据,当前总计 6588 条记录\n", + "正在获取第 550 页数据...\n", + "已获取第 550 页数据,当前总计 6600 条记录\n", + "正在获取第 551 页数据...\n", + "已获取第 551 页数据,当前总计 6612 条记录\n", + "正在获取第 552 页数据...\n", + "已获取第 552 页数据,当前总计 6621 条记录\n", + "数据获取完成,总计 6621 条记录\n", + "数据已保存到: D:/Idea Project/F6+宜搭+其它(1)/张阳脚本/文件输出/好店长工单列表-展开明细.xlsx\n", + "共生成 10977 行数据\n", + "\n", + "前5行数据预览:\n", + " id createDateTime totalAmount \\\n", + "0 2d565c97652245f9918b5bbed390cebd 2026-03-14 18:06:46 88.0 \n", + "1 76eada1f4c4e4ae2861f000958ce4c32 2026-03-14 15:33:09 25.0 \n", + "2 26a397127c184eaf8eb2ab0b731421ab 2026-03-13 13:22:03 0.0 \n", + "3 89e2c36b2e69466e9a81d8cbb0ded73a 2026-03-13 10:47:48 25.0 \n", + "4 d034bbd9fc0a408fa9bacee97d0a79e9 2026-03-09 08:54:25 0.0 \n", + "\n", + " beforeDiscountTotalAmount remark imgRemark settlementDate status \\\n", + "0 88.0 2026-03-14 18:06:52 COMPLETED \n", + "1 25.0 2026-03-14 15:33:18 COMPLETED \n", + "2 0.0 2026-03-13 13:22:02 COMPLETED \n", + "3 25.0 2026-03-13 10:47:53 COMPLETED \n", + "4 0.0 2026-03-09 08:54:24 COMPLETED \n", + "\n", + " receiptVoucherId licensePlate ... itemQuantity \\\n", + "0 fdd44cc801db410e942b3dba9afd7802 皖C57CE9 ... 1.0 \n", + "1 1a81b39f074d46f7a8091d5264e9ade6 皖F54306 ... 1.0 \n", + "2 19a0429926e94d97accb8fce34e783c5 皖CQJ667 ... 1.0 \n", + "3 5ea5cb2a398748d3b6830956d6676dcb 皖A811NJ ... 1.0 \n", + "4 a2950b7a29ab47b7a34c27d19046706f 豫R9YR72 ... 3.0 \n", + "\n", + " itemTotalAmount itemBeforeDiscountTotalAmount \\\n", + "0 88.0 88.0 \n", + "1 25.0 25.0 \n", + "2 0.0 0.0 \n", + "3 25.0 25.0 \n", + "4 0.0 0.0 \n", + "\n", + " itemSaleSourceId itemSaleCategory itemFromCounterCard \\\n", + "0 c36bff2c75cb469db4a6f7783616c833 SERVICES False \n", + "1 640b4648797449e09db8d48e299c5c7f SERVICES False \n", + "2 640b4648797449e09db8d48e299c5c7f SERVICES True \n", + "3 640b4648797449e09db8d48e299c5c7f SERVICES False \n", + "4 640b4648797449e09db8d48e299c5c7f SERVICES True \n", + "\n", + " itemContainsPurchaseOrder itemCustomizedSupplierId \\\n", + "0 False None \n", + "1 False None \n", + "2 False None \n", + "3 False None \n", + "4 False None \n", + "\n", + " itemCustomizedSupplierName itemRemark \n", + "0 None None \n", + "1 None None \n", + "2 None None \n", + "3 None None \n", + "4 None None \n", + "\n", + "[5 rows x 97 columns]\n", + "\n", + "共有 97 列:\n", + "['id', 'createDateTime', 'totalAmount', 'beforeDiscountTotalAmount', 'remark', 'imgRemark', 'settlementDate', 'status', 'receiptVoucherId', 'licensePlate', 'storeId', 'totalPaidAmount', 'totalBalanceAmount', 'totalGrossProfitAmount', 'containsPurchaseOrder', 'quotationDateTime', 'sendDateTime', 'preDeductAmount', 'maintainOrder', 'operatorId'] ...\n" + ] + } + ], + "execution_count": 13 } ], "metadata": { diff --git a/张阳脚本/竞品系统数据导出/神汽链导出.ipynb b/张阳脚本/竞品系统数据导出/神汽链导出.ipynb index 4054af9..82d5935 100644 --- a/张阳脚本/竞品系统数据导出/神汽链导出.ipynb +++ b/张阳脚本/竞品系统数据导出/神汽链导出.ipynb @@ -1,32 +1,45 @@ { "cells": [ { - "metadata": {}, - "cell_type": "markdown", - "source": "## 历史维修记录", - "id": "36bcf76f9536b66a" - }, - { + "cell_type": "code", + "execution_count": 1, + "id": "a84cbd49a7363225", "metadata": { "ExecuteTime": { - "end_time": "2026-01-13T03:34:53.537880200Z", - "start_time": "2026-01-13T02:53:38.059679300Z" + "end_time": "2026-03-31T01:58:35.248297Z", + "start_time": "2026-03-31T01:47:30.843891Z" } }, - "cell_type": "code", + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "正在抓取数据: 100%|██████████| 65/65 [15:41<00:00, 14.49s/it]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✅ 全部完成!共抓取 23540 条数据,已保存至 D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\神汽链10年历史数据1.xlsx\n" + ] + } + ], "source": [ - "## 历史维修记录\n", "import requests\n", "from tqdm import tqdm\n", "import pandas as pd\n", "from datetime import datetime, timedelta\n", "import time\n", + "import os\n", "\n", - "cookies = {\n", - " 'JSESSIONID': 'OTczODFhMzctZjNiYi00ZDc2LTkxNTEtYmI5ZWUwOWU1ZDcx',\n", + "# 配置部分\n", + "COOKIES = {\n", + " 'JSESSIONID': 'NDliNDQ0OTYtMzg2NC00ZTAwLWEzMjgtNWE1YmIzMzRjOTMx',\n", "}\n", "\n", - "headers = {\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", @@ -36,22 +49,28 @@ " '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", + " '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", " 'X-Requested-With': 'XMLHttpRequest',\n", " 'appName': 'SQLINK',\n", - " 'sec-ch-ua': '\"Microsoft Edge\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"',\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': 'JSESSIONID=OTczODFhMzctZjNiYi00ZDc2LTkxNTEtYmI5ZWUwOWU1ZDcx',\n", + " # 'Cookie': 'JSESSIONID=NDliNDQ0OTYtMzg2NC00ZTAwLWEzMjgtNWE1YmIzMzRjOTMx',\n", "}\n", + "\n", + "\n", + "URL = 'https://www.sqzone.com/launa/pc/dataCenter/queryShopTurnoverInfo'\n", + "OUTPUT_FILE = r'D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\神汽链10年历史数据1.xlsx'\n", + "\n", + "# 确保输出目录存在\n", + "os.makedirs(os.path.dirname(OUTPUT_FILE), exist_ok=True)\n", + "\n", "all_data = []\n", "\n", "def get_month_range(start_year, start_month, end_year, end_month):\n", - " \"\"\"生成从 start 到 end 的每个月的 (start_date, end_date)\"\"\"\n", " dates = []\n", " current = datetime(start_year, start_month, 1)\n", " end = datetime(end_year, end_month, 1)\n", - "\n", " while current <= end:\n", " next_month = (current.replace(day=28) + timedelta(days=4)).replace(day=1)\n", " last_day = next_month - timedelta(days=1)\n", @@ -62,1650 +81,155 @@ " current = next_month\n", " return dates\n", "\n", + "def fetch_page_with_retry(start_date, end_date, page_num, max_retries=3):\n", + " \"\"\"带重试机制的单页请求函数\"\"\"\n", + " json_data = {\n", + " 'keyword': '',\n", + " 'pageSize': 50,\n", + " 'curPage': page_num,\n", + " 'shopId': '',\n", + " 'payId': [],\n", + " 'payStatus': '',\n", + " 'startTime': start_date,\n", + " 'endTime': end_date,\n", + " }\n", + "\n", + " for attempt in range(max_retries):\n", + " try:\n", + " response = requests.post(\n", + " URL,\n", + " cookies=COOKIES,\n", + " headers=HEADERS,\n", + " json=json_data,\n", + " timeout=15 # 增加超时设置,防止无限等待\n", + " )\n", + "\n", + " # 检查状态码\n", + " if response.status_code == 200:\n", + " res_json = response.json()\n", + " # 检查业务逻辑是否成功 (假设成功时有 'data' 字段)\n", + " if res_json.get('data'):\n", + " return res_json['data'].get('contents', [])\n", + " else:\n", + " # 可能是业务错误,打印并视为本次失败,尝试重试\n", + " print(f\"第{page_num}页业务返回异常: {res_json}\")\n", + " else:\n", + " print(f\"第{page_num}页HTTP错误: {response.status_code}\")\n", + "\n", + " except requests.exceptions.RequestException as e:\n", + " print(f\"第{page_num}页网络请求失败 (尝试 {attempt+1}/{max_retries}): {e}\")\n", + "\n", + " # 如果失败,等待一段时间后重试 (指数退避)\n", + " if attempt < max_retries - 1:\n", + " wait_time = (attempt + 1) * 2 # 2秒, 4秒, 6秒...\n", + " print(f\" -> 等待 {wait_time} 秒后重试...\")\n", + " time.sleep(wait_time)\n", + "\n", + " # 所有重试都失败\n", + " return None\n", + "\n", + "# 生成日期范围\n", + "month_ranges = get_month_range(2020, 11, 2026, 3)\n", "\n", - "# 生成近10年每月区间(2015-11 到 2025-10)\n", - "month_ranges = get_month_range(2016, 11, 2026, 1)\n", "for start_date, end_date in tqdm(month_ranges, desc=\"正在抓取数据\"):\n", - " for i in range(1, 100):\n", - " json_data = {\n", - " 'keyword': '',\n", - " 'pageSize': 50,\n", - " 'curPage': i,\n", - " 'shopId': '',\n", - " 'payId': [],\n", - " 'payStatus': '',\n", - " 'startTime': start_date,\n", - " 'endTime': end_date,\n", - " }\n", + " page = 1\n", + " while True:\n", + " data_list = fetch_page_with_retry(start_date, end_date, page, max_retries=3)\n", "\n", - " response = requests.post(\n", - " 'https://www.sqzone.com/launa/pc/dataCenter/queryShopTurnoverInfo',\n", - " cookies=cookies,\n", - " headers=headers,\n", - " json=json_data,\n", - " )\n", - "\n", - " data_list = response.json().get('data').get('contents')\n", - " if not data_list:\n", - " print(f\"{start_date}-{end_date}数据已爬取完毕,目前数据总数:{len(all_data)}\")\n", + " # 如果重试多次后仍然失败 (返回 None),可以选择跳过该页或终止\n", + " if data_list is None:\n", + " print(f\"⚠️ 严重警告: {start_date}-{end_date} 第{page}页 多次重试失败,跳过该页继续下一页。\")\n", + " # 这里选择 break 跳出当前月份的循环,或者可以根据需求选择 continue 尝试下一页\n", + " # 为了数据安全,通常建议记录日志后 break 当前月份,防止数据错乱\n", " break\n", "\n", + " if not data_list:\n", + " # 正常结束:没有更多数据\n", + " # print(f\"{start_date}-{end_date} 数据已爬取完毕\")\n", + " break\n", + "\n", + " # 处理数据\n", " for data in data_list:\n", - " customer_info = {k: v for k, v in data.items() if k != 'partsViews'}\n", + " # 安全获取 partsViews,防止某些记录没有该字段\n", " parts = data.get('partsViews', [])\n", + " customer_info = {k: v for k, v in data.items() if k != 'partsViews'}\n", "\n", - " for part in parts:\n", - " record = {**customer_info, **part}\n", - " all_data.append(record)\n", + " if parts:\n", + " for part in parts:\n", + " record = {**customer_info, **part}\n", + " all_data.append(record)\n", + " else:\n", + " # 如果没有配件视图,是否也要保留主记录?视业务需求而定\n", + " # 这里假设必须有配件信息才保留,如果需要保留主记录请取消下面注释\n", + " # all_data.append(customer_info)\n", + " pass\n", "\n", - "ndf = pd.DataFrame(all_data)\n", - "ndf.to_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\神汽链10年历史数据.xlsx', index=False)\n", - "\n" - ], - "id": "24d5d274ef770c6f", - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "<>:85: SyntaxWarning: invalid escape sequence '\\I'\n", - "<>:85: SyntaxWarning: invalid escape sequence '\\I'\n", - "C:\\Users\\hp_z66\\AppData\\Local\\Temp\\ipykernel_23536\\2943673992.py:85: SyntaxWarning: invalid escape sequence '\\I'\n", - " ndf.to_excel('D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\神汽链10年历史数据.xlsx', index=False)\n", - "正在抓取数据: 1%| | 1/111 [00:00<00:53, 2.05it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2016-11-01-2016-11-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 2%|▏ | 2/111 [00:04<04:49, 2.65s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2016-12-01-2016-12-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 3%|▎ | 3/111 [00:05<02:58, 1.66s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2017-01-01-2017-01-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 4%|▎ | 4/111 [00:05<02:06, 1.18s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2017-02-01-2017-02-28数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 5%|▍ | 5/111 [00:06<01:42, 1.03it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2017-03-01-2017-03-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 5%|▌ | 6/111 [00:06<01:32, 1.14it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2017-04-01-2017-04-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 6%|▋ | 7/111 [00:07<01:23, 1.24it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2017-05-01-2017-05-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 7%|▋ | 8/111 [00:07<01:10, 1.46it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2017-06-01-2017-06-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 8%|▊ | 9/111 [00:08<01:02, 1.63it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2017-07-01-2017-07-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 9%|▉ | 10/111 [00:09<01:02, 1.62it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2017-08-01-2017-08-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 10%|▉ | 11/111 [00:09<01:04, 1.56it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2017-09-01-2017-09-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 11%|█ | 12/111 [00:10<00:58, 1.69it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2017-10-01-2017-10-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 12%|█▏ | 13/111 [00:11<01:26, 1.14it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2017-11-01-2017-11-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 13%|█▎ | 14/111 [00:12<01:12, 1.34it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2017-12-01-2017-12-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 14%|█▎ | 15/111 [00:12<01:02, 1.53it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2018-01-01-2018-01-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 14%|█▍ | 16/111 [00:13<00:57, 1.66it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2018-02-01-2018-02-28数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 15%|█▌ | 17/111 [00:13<00:51, 1.82it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2018-03-01-2018-03-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 16%|█▌ | 18/111 [00:13<00:47, 1.97it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2018-04-01-2018-04-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 17%|█▋ | 19/111 [00:14<00:44, 2.08it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2018-05-01-2018-05-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 18%|█▊ | 20/111 [00:14<00:45, 2.02it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2018-06-01-2018-06-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 19%|█▉ | 21/111 [00:15<00:49, 1.84it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2018-07-01-2018-07-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 20%|█▉ | 22/111 [00:15<00:45, 1.97it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2018-08-01-2018-08-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 21%|██ | 23/111 [00:16<00:42, 2.06it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2018-09-01-2018-09-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 22%|██▏ | 24/111 [00:16<00:40, 2.14it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2018-10-01-2018-10-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 23%|██▎ | 25/111 [00:17<00:39, 2.20it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2018-11-01-2018-11-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 23%|██▎ | 26/111 [00:17<00:39, 2.15it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2018-12-01-2018-12-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 24%|██▍ | 27/111 [00:18<00:40, 2.07it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-01-01-2019-01-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 25%|██▌ | 28/111 [00:18<00:39, 2.09it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-02-01-2019-02-28数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 26%|██▌ | 29/111 [00:19<00:38, 2.14it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-03-01-2019-03-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 27%|██▋ | 30/111 [00:19<00:36, 2.20it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-04-01-2019-04-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 28%|██▊ | 31/111 [00:20<00:35, 2.26it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-05-01-2019-05-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 29%|██▉ | 32/111 [00:20<00:35, 2.25it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-06-01-2019-06-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 30%|██▉ | 33/111 [00:20<00:34, 2.24it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-07-01-2019-07-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 31%|███ | 34/111 [00:21<00:38, 1.98it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-08-01-2019-08-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 32%|███▏ | 35/111 [00:22<00:38, 1.98it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-09-01-2019-09-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 32%|███▏ | 36/111 [00:22<00:36, 2.06it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-10-01-2019-10-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 33%|███▎ | 37/111 [00:22<00:35, 2.08it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-11-01-2019-11-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 34%|███▍ | 38/111 [00:23<00:34, 2.12it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-12-01-2019-12-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 35%|███▌ | 39/111 [00:24<00:54, 1.31it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-01-01-2020-01-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 36%|███▌ | 40/111 [00:25<00:49, 1.44it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-02-01-2020-02-29数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 37%|███▋ | 41/111 [00:25<00:44, 1.56it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-03-01-2020-03-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 38%|███▊ | 42/111 [00:27<01:01, 1.11it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-04-01-2020-04-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 39%|███▊ | 43/111 [00:28<01:01, 1.11it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-05-01-2020-05-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 40%|███▉ | 44/111 [00:28<00:51, 1.29it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-06-01-2020-06-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 41%|████ | 45/111 [00:29<00:47, 1.39it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-07-01-2020-07-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 41%|████▏ | 46/111 [00:29<00:41, 1.56it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-08-01-2020-08-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 42%|████▏ | 47/111 [00:31<00:57, 1.11it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-09-01-2020-09-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 43%|████▎ | 48/111 [00:32<00:53, 1.18it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-10-01-2020-10-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 44%|████▍ | 49/111 [00:32<00:46, 1.34it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-11-01-2020-11-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 45%|████▌ | 50/111 [00:33<00:44, 1.37it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2020-12-01-2020-12-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 46%|████▌ | 51/111 [00:33<00:40, 1.48it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2021-01-01-2021-01-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 47%|████▋ | 52/111 [00:34<00:35, 1.65it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2021-02-01-2021-02-28数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 48%|████▊ | 53/111 [00:35<00:39, 1.47it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2021-03-01-2021-03-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 49%|████▊ | 54/111 [00:35<00:41, 1.37it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2021-04-01-2021-04-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 50%|████▉ | 55/111 [00:36<00:38, 1.46it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2021-05-01-2021-05-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 50%|█████ | 56/111 [00:37<00:36, 1.50it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2021-06-01-2021-06-30数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 51%|█████▏ | 57/111 [00:38<00:50, 1.07it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2021-07-01-2021-07-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 52%|█████▏ | 58/111 [00:39<00:43, 1.21it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2021-08-01-2021-08-31数据已爬取完毕,目前数据总数:0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 53%|█████▎ | 59/111 [01:22<11:45, 13.56s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2021-09-01-2021-09-30数据已爬取完毕,目前数据总数:641\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 54%|█████▍ | 60/111 [02:05<18:57, 22.30s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2021-10-01-2021-10-31数据已爬取完毕,目前数据总数:1392\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 55%|█████▍ | 61/111 [02:47<23:26, 28.14s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2021-11-01-2021-11-30数据已爬取完毕,目前数据总数:2200\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 56%|█████▌ | 62/111 [03:23<25:05, 30.72s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2021-12-01-2021-12-31数据已爬取完毕,目前数据总数:2968\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 57%|█████▋ | 63/111 [04:04<26:55, 33.67s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-01-01-2022-01-31数据已爬取完毕,目前数据总数:3823\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 58%|█████▊ | 64/111 [04:43<27:36, 35.25s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-02-01-2022-02-28数据已爬取完毕,目前数据总数:4650\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 59%|█████▊ | 65/111 [05:08<24:43, 32.26s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-03-01-2022-03-31数据已爬取完毕,目前数据总数:5276\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 59%|█████▉ | 66/111 [05:29<21:41, 28.92s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-04-01-2022-04-30数据已爬取完毕,目前数据总数:5762\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 60%|██████ | 67/111 [05:55<20:33, 28.04s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-05-01-2022-05-31数据已爬取完毕,目前数据总数:6389\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 61%|██████▏ | 68/111 [06:19<19:12, 26.81s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-06-01-2022-06-30数据已爬取完毕,目前数据总数:7093\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 62%|██████▏ | 69/111 [06:46<18:44, 26.77s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-07-01-2022-07-31数据已爬取完毕,目前数据总数:7727\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 63%|██████▎ | 70/111 [07:12<18:10, 26.61s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-08-01-2022-08-31数据已爬取完毕,目前数据总数:8388\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 64%|██████▍ | 71/111 [07:40<17:59, 26.98s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-09-01-2022-09-30数据已爬取完毕,目前数据总数:9037\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 65%|██████▍ | 72/111 [08:13<18:44, 28.85s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-10-01-2022-10-31数据已爬取完毕,目前数据总数:9815\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 66%|██████▌ | 73/111 [08:37<17:24, 27.49s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-11-01-2022-11-30数据已爬取完毕,目前数据总数:10457\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 67%|██████▋ | 74/111 [09:14<18:38, 30.22s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2022-12-01-2022-12-31数据已爬取完毕,目前数据总数:11635\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 68%|██████▊ | 75/111 [10:07<22:12, 37.01s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-01-01-2023-01-31数据已爬取完毕,目前数据总数:13502\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 68%|██████▊ | 76/111 [10:58<24:02, 41.22s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-02-01-2023-02-28数据已爬取完毕,目前数据总数:15211\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 69%|██████▉ | 77/111 [11:43<24:05, 42.51s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-03-01-2023-03-31数据已爬取完毕,目前数据总数:16775\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 70%|███████ | 78/111 [12:37<25:09, 45.75s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-04-01-2023-04-30数据已爬取完毕,目前数据总数:18275\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 71%|███████ | 79/111 [13:37<26:42, 50.09s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-05-01-2023-05-31数据已爬取完毕,目前数据总数:19754\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 72%|███████▏ | 80/111 [14:25<25:38, 49.62s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-06-01-2023-06-30数据已爬取完毕,目前数据总数:21102\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 73%|███████▎ | 81/111 [15:09<23:49, 47.65s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-07-01-2023-07-31数据已爬取完毕,目前数据总数:22471\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 74%|███████▍ | 82/111 [15:56<23:01, 47.64s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-08-01-2023-08-31数据已爬取完毕,目前数据总数:23833\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 75%|███████▍ | 83/111 [16:43<22:11, 47.55s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-09-01-2023-09-30数据已爬取完毕,目前数据总数:25273\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 76%|███████▌ | 84/111 [17:42<22:54, 50.91s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-01-2023-10-31数据已爬取完毕,目前数据总数:26784\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 77%|███████▋ | 85/111 [18:40<22:57, 53.00s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-11-01-2023-11-30数据已爬取完毕,目前数据总数:28162\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 77%|███████▋ | 86/111 [19:37<22:37, 54.30s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-12-01-2023-12-31数据已爬取完毕,目前数据总数:29658\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 78%|███████▊ | 87/111 [20:42<23:00, 57.50s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-01-01-2024-01-31数据已爬取完毕,目前数据总数:31525\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 79%|███████▉ | 88/111 [21:34<21:18, 55.60s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-02-01-2024-02-29数据已爬取完毕,目前数据总数:33123\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 80%|████████ | 89/111 [22:26<20:04, 54.76s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-03-01-2024-03-31数据已爬取完毕,目前数据总数:34625\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 81%|████████ | 90/111 [23:21<19:07, 54.65s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-04-01-2024-04-30数据已爬取完毕,目前数据总数:36270\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 82%|████████▏ | 91/111 [24:21<18:47, 56.40s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-05-01-2024-05-31数据已爬取完毕,目前数据总数:37970\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 83%|████████▎ | 92/111 [25:22<18:16, 57.72s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-06-01-2024-06-30数据已爬取完毕,目前数据总数:39240\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 84%|████████▍ | 93/111 [26:23<17:38, 58.81s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-07-01-2024-07-31数据已爬取完毕,目前数据总数:40863\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 85%|████████▍ | 94/111 [27:15<16:03, 56.67s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-08-01-2024-08-31数据已爬取完毕,目前数据总数:42314\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 86%|████████▌ | 95/111 [28:00<14:10, 53.17s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-09-01-2024-09-30数据已爬取完毕,目前数据总数:43747\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 86%|████████▋ | 96/111 [28:49<12:59, 51.97s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-10-01-2024-10-31数据已爬取完毕,目前数据总数:45351\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 87%|████████▋ | 97/111 [29:26<11:03, 47.39s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-11-01-2024-11-30数据已爬取完毕,目前数据总数:46896\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 88%|████████▊ | 98/111 [30:10<10:03, 46.46s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-12-01-2024-12-31数据已爬取完毕,目前数据总数:48689\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 89%|████████▉ | 99/111 [31:00<09:29, 47.45s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-01-01-2025-01-31数据已爬取完毕,目前数据总数:50522\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 90%|█████████ | 100/111 [31:47<08:41, 47.37s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-02-01-2025-02-28数据已爬取完毕,目前数据总数:52419\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 91%|█████████ | 101/111 [32:32<07:46, 46.69s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-03-01-2025-03-31数据已爬取完毕,目前数据总数:54182\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 92%|█████████▏| 102/111 [33:21<07:05, 47.27s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-04-01-2025-04-30数据已爬取完毕,目前数据总数:55795\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 93%|█████████▎| 103/111 [34:14<06:31, 48.99s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-05-01-2025-05-31数据已爬取完毕,目前数据总数:57382\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 94%|█████████▎| 104/111 [34:53<05:23, 46.17s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-06-01-2025-06-30数据已爬取完毕,目前数据总数:58912\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 95%|█████████▍| 105/111 [35:40<04:37, 46.20s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-07-01-2025-07-31数据已爬取完毕,目前数据总数:60755\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 95%|█████████▌| 106/111 [36:27<03:51, 46.39s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-08-01-2025-08-31数据已爬取完毕,目前数据总数:62614\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 96%|█████████▋| 107/111 [37:13<03:05, 46.48s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-09-01-2025-09-30数据已爬取完毕,目前数据总数:64223\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 97%|█████████▋| 108/111 [38:30<02:46, 55.41s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-10-01-2025-10-31数据已爬取完毕,目前数据总数:66700\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 98%|█████████▊| 109/111 [39:18<01:46, 53.25s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-11-01-2025-11-30数据已爬取完毕,目前数据总数:68510\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 99%|█████████▉| 110/111 [40:04<00:51, 51.24s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2025-12-01-2025-12-31数据已爬取完毕,目前数据总数:70276\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "正在抓取数据: 100%|██████████| 111/111 [40:24<00:00, 21.84s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2026-01-01-2026-01-31数据已爬取完毕,目前数据总数:71071\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "execution_count": 2 + " page += 1\n", + " # 正常翻页等待\n", + " time.sleep(1)\n", + "\n", + " # 可选:每完成一个月保存一次,防止程序运行几天后崩溃导致前功尽弃\n", + " if len(all_data) > 0 and len(all_data) % 5000 == 0:\n", + " temp_df = pd.DataFrame(all_data)\n", + " temp_df.to_excel(OUTPUT_FILE.replace('.xlsx', '_temp.xlsx'), index=False)\n", + " print(\"临时保存已完成\")\n", + "\n", + "# 最终保存\n", + "if all_data:\n", + " ndf = pd.DataFrame(all_data)\n", + " ndf.to_excel(OUTPUT_FILE, index=False)\n", + " print(f\"✅ 全部完成!共抓取 {len(all_data)} 条数据,已保存至 {OUTPUT_FILE}\")\n", + "else:\n", + " print(\"❌ 未抓取到任何数据。\")" + ] }, { + "cell_type": "code", + "execution_count": 3, + "id": "d2abfb70a61d82a0", "metadata": { "ExecuteTime": { - "end_time": "2025-11-07T01:27:42.064989Z", - "start_time": "2025-11-07T01:27:41.698506Z" + "end_time": "2026-03-31T03:05:38.539504Z", + "start_time": "2026-03-31T03:05:27.394303900Z" } }, - "cell_type": "code", - "source": [ - "ndf = pd.DataFrame(all_data)\n", - "ndf.to_excel('history_repair_10years.xlsx', index=False)" + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✅ 全部完成!共抓取 15906 条数据,已保存至 D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\神汽链10年历史数据1.xlsx\n" + ] + } ], - "id": "55226a5d31ff1268", - "outputs": [], - "execution_count": 6 + "source": [ + "# 最终保存\n", + "if all_data:\n", + " ndf = pd.DataFrame(all_data)\n", + " ndf.to_excel(OUTPUT_FILE, index=False)\n", + " print(f\"✅ 全部完成!共抓取 {len(all_data)} 条数据,已保存至 {OUTPUT_FILE}\")\n", + "else:\n", + " print(\"❌ 未抓取到任何数据。\")" + ] } ], "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, diff --git a/张阳脚本/竞品系统数据导出/米其林驰加系统导出.ipynb b/张阳脚本/竞品系统数据导出/米其林驰加系统导出.ipynb index 6fa5b43..fc5915c 100644 --- a/张阳脚本/竞品系统数据导出/米其林驰加系统导出.ipynb +++ b/张阳脚本/竞品系统数据导出/米其林驰加系统导出.ipynb @@ -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 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} 条') + diff --git a/张阳脚本/简道云/智能助手修复.ipynb b/张阳脚本/简道云/智能助手修复.ipynb index 54f657b..6159bb3 100644 --- a/张阳脚本/简道云/智能助手修复.ipynb +++ b/张阳脚本/简道云/智能助手修复.ipynb @@ -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": { diff --git a/张阳脚本/简道云/智能助手修复.py b/张阳脚本/简道云/智能助手修复.py index 7c68785..3fed1a4 100644 --- a/张阳脚本/简道云/智能助手修复.py +++ b/张阳脚本/简道云/智能助手修复.py @@ -1 +1,215 @@ -# -*- coding: utf-8 -*- \ No newline at end of file +# -*- 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() diff --git a/张阳脚本/简道云/服务器压力统计.ipynb b/张阳脚本/简道云/服务器压力统计.ipynb index c721a8a..a0e622f 100644 --- a/张阳脚本/简道云/服务器压力统计.ipynb +++ b/张阳脚本/简道云/服务器压力统计.ipynb @@ -1,655 +1,446 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "f698c340", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "8800f2ff", - "metadata": {}, - "outputs": [ + "cells": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "正在筛选日期为:2026-02-23 的任务...\n", - "正在从简道云获取源数据...\n", - "已获取 73 条数据\n", - "API 返回原始数据条数: 73\n", - "{'_id': '699b9891bb267647270882ac', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T00:00:17.084Z', 'updateTime': '2026-02-23T00:00:17.084Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T00:00:01.000Z', '_widget_1744873387502': '2026-02-23T00:00:16.000Z', '_widget_1744873387504': '15', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699b98cbe276a38cb2450192', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T00:01:15.225Z', 'updateTime': '2026-02-23T00:01:15.225Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '省市区人员关系表转BI', '_widget_1744873387501': '2026-02-23T00:00:22.000Z', '_widget_1744873387502': '2026-02-23T00:01:14.000Z', '_widget_1744873387504': '52', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699b98da14a266a4faaec87b', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T00:01:30.245Z', 'updateTime': '2026-02-23T00:01:30.245Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '非标业绩提报转BI', '_widget_1744873387501': '2026-02-23T00:01:22.000Z', '_widget_1744873387502': '2026-02-23T00:01:29.000Z', '_widget_1744873387504': '7', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699b98e7506e3a1c9db63a1a', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T00:01:43.368Z', 'updateTime': '2026-02-23T00:01:43.368Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T00:00:01.000Z', '_widget_1744873387502': '2026-02-23T00:01:42.000Z', '_widget_1744873387504': '101', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699b992c654487d78fad28d4', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T00:02:52.229Z', 'updateTime': '2026-02-23T00:02:52.229Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '合伙人结算登记同步到BI', '_widget_1744873387501': '2026-02-23T00:02:22.000Z', '_widget_1744873387502': '2026-02-23T00:02:51.000Z', '_widget_1744873387504': '29', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699b9956ed29cdb3bc0359a0', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T00:03:34.573Z', 'updateTime': '2026-02-23T00:03:34.573Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '分母报备调整', '_widget_1744873387501': '2026-02-23T00:03:22.000Z', '_widget_1744873387502': '2026-02-23T00:03:34.000Z', '_widget_1744873387504': '12', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699b99c5c92edf9a18ddd2e5', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T00:05:25.913Z', 'updateTime': '2026-02-23T00:05:25.913Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '经销商新签服务单转BI', '_widget_1744873387501': '2026-02-23T00:05:23.000Z', '_widget_1744873387502': '2026-02-23T00:05:25.000Z', '_widget_1744873387504': '2', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699b9a023fa4592f7ff27d2b', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T00:06:26.403Z', 'updateTime': '2026-02-23T00:06:26.403Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '分子报备调整', '_widget_1744873387501': '2026-02-23T00:06:23.000Z', '_widget_1744873387502': '2026-02-23T00:06:26.000Z', '_widget_1744873387504': '3', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699b9f36faa412358146bcec', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T00:28:38.775Z', 'updateTime': '2026-02-23T00:28:38.775Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '海外邮件推送', '_widget_1744873387501': '2026-02-23T00:28:26.000Z', '_widget_1744873387502': '2026-02-23T00:28:38.000Z', '_widget_1744873387504': '12', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699ba149bb2676472710a0fe', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T00:37:29.703Z', 'updateTime': '2026-02-23T00:37:29.703Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云海外项目CRM客户档案迁移BI', '_widget_1744873387501': '2026-02-23T00:37:28.000Z', '_widget_1744873387502': '2026-02-23T00:37:29.000Z', '_widget_1744873387504': '1', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699ba696205acb4b4cadef32', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T01:00:06.276Z', 'updateTime': '2026-02-23T01:00:06.276Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T01:00:02.000Z', '_widget_1744873387502': '2026-02-23T01:00:05.000Z', '_widget_1744873387504': '3', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699ba6fda0e00405891ad3fa', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T01:01:49.001Z', 'updateTime': '2026-02-23T01:01:49.001Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T01:00:02.000Z', '_widget_1744873387502': '2026-02-23T01:01:48.000Z', '_widget_1744873387504': '106', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699ba91f5debe6469c395fb9', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T01:10:55.697Z', 'updateTime': '2026-02-23T01:10:55.697Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '接车宝日常派发', '_widget_1744873387501': '2026-02-23T01:10:32.000Z', '_widget_1744873387502': '2026-02-23T01:10:55.000Z', '_widget_1744873387504': '23', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bacabded5b58a521b70f0', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T01:26:03.296Z', 'updateTime': '2026-02-23T01:26:03.296Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '新签客户回访', '_widget_1744873387501': '2026-02-23T01:05:32.000Z', '_widget_1744873387502': '2026-02-23T01:26:02.000Z', '_widget_1744873387504': '1230', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bb02f057a5fdbf0f7a2ff', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T01:41:03.569Z', 'updateTime': '2026-02-23T01:41:03.569Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '续约客户回访', '_widget_1744873387501': '2026-02-23T01:08:32.000Z', '_widget_1744873387502': '2026-02-23T01:41:03.000Z', '_widget_1744873387504': '1951', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bb0432121acc1031813b5', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T01:41:23.436Z', 'updateTime': '2026-02-23T01:41:23.436Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '续约回访待办', '_widget_1744873387501': '2026-02-23T01:35:37.000Z', '_widget_1744873387502': '2026-02-23T01:41:23.000Z', '_widget_1744873387504': '346', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bb3af78f713d2ee49d55b', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T01:55:59.287Z', 'updateTime': '2026-02-23T01:55:59.287Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '履约表数据支撑', '_widget_1744873387501': '2026-02-23T01:11:32.000Z', '_widget_1744873387502': '2026-02-23T01:55:59.000Z', '_widget_1744873387504': '2667', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bb4a5ba28a77430759c97', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T02:00:05.474Z', 'updateTime': '2026-02-23T02:00:05.474Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T02:00:01.000Z', '_widget_1744873387502': '2026-02-23T02:00:05.000Z', '_widget_1744873387504': '4', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bb50fd89e0cfb588ef327', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T02:01:51.376Z', 'updateTime': '2026-02-23T02:01:51.376Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T02:00:01.000Z', '_widget_1744873387502': '2026-02-23T02:01:51.000Z', '_widget_1744873387504': '110', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bb6aabb2676472722b26f', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T02:08:42.043Z', 'updateTime': '2026-02-23T02:08:42.043Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '异常服务待办派发', '_widget_1744873387501': '2026-02-23T02:00:41.000Z', '_widget_1744873387502': '2026-02-23T02:08:41.000Z', '_widget_1744873387504': '480', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bc2b6bb267647272be5f3', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T03:00:06.432Z', 'updateTime': '2026-02-23T03:00:06.432Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T03:00:02.000Z', '_widget_1744873387502': '2026-02-23T03:00:06.000Z', '_widget_1744873387504': '4', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bc31a21b865706e9a07c7', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T03:01:46.581Z', 'updateTime': '2026-02-23T03:01:46.581Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T03:00:02.000Z', '_widget_1744873387502': '2026-02-23T03:01:46.000Z', '_widget_1744873387504': '104', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bd0c8c4526a0fb31cab52', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T04:00:08.047Z', 'updateTime': '2026-02-23T04:00:08.047Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T04:00:02.000Z', '_widget_1744873387502': '2026-02-23T04:00:07.000Z', '_widget_1744873387504': '5', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bd12c6cc6edda46f611f3', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T04:01:48.665Z', 'updateTime': '2026-02-23T04:01:48.665Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T04:00:02.000Z', '_widget_1744873387502': '2026-02-23T04:01:48.000Z', '_widget_1744873387504': '106', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bd13b6b865746fe647937', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T04:02:03.180Z', 'updateTime': '2026-02-23T04:02:03.180Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '非标业绩提报转BI', '_widget_1744873387501': '2026-02-23T04:02:00.000Z', '_widget_1744873387502': '2026-02-23T04:02:03.000Z', '_widget_1744873387504': '3', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bd192ab309d2e5743b60f', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T04:03:30.300Z', 'updateTime': '2026-02-23T04:03:30.300Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '合伙人结算登记同步到BI', '_widget_1744873387501': '2026-02-23T04:03:00.000Z', '_widget_1744873387502': '2026-02-23T04:03:30.000Z', '_widget_1744873387504': '30', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bded6ba28a774309b02e3', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T05:00:06.698Z', 'updateTime': '2026-02-23T05:00:06.698Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T05:00:02.000Z', '_widget_1744873387502': '2026-02-23T05:00:06.000Z', '_widget_1744873387504': '4', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bdf40f3ced099adef4533', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T05:01:52.919Z', 'updateTime': '2026-02-23T05:01:52.919Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T05:00:02.000Z', '_widget_1744873387502': '2026-02-23T05:01:52.000Z', '_widget_1744873387504': '110', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699be198a6312699f3f66600', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T05:11:52.618Z', 'updateTime': '2026-02-23T05:11:52.618Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': 'NGV更新数据', '_widget_1744873387501': '2026-02-23T04:30:04.000Z', '_widget_1744873387502': '2026-02-23T05:11:52.000Z', '_widget_1744873387504': '2508', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bece6a6312699f3ff7a78', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T06:00:06.979Z', 'updateTime': '2026-02-23T06:00:06.979Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T06:00:02.000Z', '_widget_1744873387502': '2026-02-23T06:00:06.000Z', '_widget_1744873387504': '4', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bed46049df941e555738a', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T06:01:42.686Z', 'updateTime': '2026-02-23T06:01:42.686Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T06:00:02.000Z', '_widget_1744873387502': '2026-02-23T06:01:42.000Z', '_widget_1744873387504': '100', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bfaf8e276a38cb29811e1', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T07:00:08.733Z', 'updateTime': '2026-02-23T07:00:08.733Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T07:00:02.000Z', '_widget_1744873387502': '2026-02-23T07:00:08.000Z', '_widget_1744873387504': '6', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699bfb5ae606c83377b26a83', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T07:01:46.229Z', 'updateTime': '2026-02-23T07:01:46.229Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T07:00:02.000Z', '_widget_1744873387502': '2026-02-23T07:01:46.000Z', '_widget_1744873387504': '104', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c09072444810c0bf158a4', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T08:00:07.983Z', 'updateTime': '2026-02-23T08:00:07.983Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T08:00:02.000Z', '_widget_1744873387502': '2026-02-23T08:00:07.000Z', '_widget_1744873387504': '5', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c096d0231857db5783021', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T08:01:49.310Z', 'updateTime': '2026-02-23T08:01:49.310Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T08:00:02.000Z', '_widget_1744873387502': '2026-02-23T08:01:48.000Z', '_widget_1744873387504': '106', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c17151278494a264cd984', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T09:00:05.447Z', 'updateTime': '2026-02-23T09:00:05.447Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T09:00:02.000Z', '_widget_1744873387502': '2026-02-23T09:00:04.000Z', '_widget_1744873387504': '2', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c1772ed29cdb3bc6edf57', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T09:01:38.528Z', 'updateTime': '2026-02-23T09:01:38.528Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '非标业绩提报转BI', '_widget_1744873387501': '2026-02-23T09:01:23.000Z', '_widget_1744873387502': '2026-02-23T09:01:38.000Z', '_widget_1744873387504': '15', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c17795afe4f1583e6e4a4', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T09:01:45.259Z', 'updateTime': '2026-02-23T09:01:45.259Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T09:00:02.000Z', '_widget_1744873387502': '2026-02-23T09:01:44.000Z', '_widget_1744873387504': '102', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c17c00bdffe31d5db6ec4', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T09:02:56.522Z', 'updateTime': '2026-02-23T09:02:56.522Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '合伙人结算登记同步到BI', '_widget_1744873387501': '2026-02-23T09:02:23.000Z', '_widget_1744873387502': '2026-02-23T09:02:55.000Z', '_widget_1744873387504': '32', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c25267bf0348e327bed5a', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T10:00:06.295Z', 'updateTime': '2026-02-23T10:00:06.295Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T10:00:02.000Z', '_widget_1744873387502': '2026-02-23T10:00:06.000Z', '_widget_1744873387504': '4', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c2593a4b0d9369ba61515', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T10:01:55.536Z', 'updateTime': '2026-02-23T10:01:55.536Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T10:00:02.000Z', '_widget_1744873387502': '2026-02-23T10:01:55.000Z', '_widget_1744873387504': '113', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c33367bf0348e32885df8', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T11:00:06.453Z', 'updateTime': '2026-02-23T11:00:06.453Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T11:00:01.000Z', '_widget_1744873387502': '2026-02-23T11:00:06.000Z', '_widget_1744873387504': '5', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c33a843db686ad5f7cb1b', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T11:02:00.440Z', 'updateTime': '2026-02-23T11:02:00.440Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T11:00:01.000Z', '_widget_1744873387502': '2026-02-23T11:02:00.000Z', '_widget_1744873387504': '119', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c4147205acb4b4c3439a0', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T12:00:07.284Z', 'updateTime': '2026-02-23T12:00:07.284Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T12:00:02.000Z', '_widget_1744873387502': '2026-02-23T12:00:07.000Z', '_widget_1744873387504': '5', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c41ad9fc801efc734512c', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T12:01:49.178Z', 'updateTime': '2026-02-23T12:01:49.178Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T12:00:02.000Z', '_widget_1744873387502': '2026-02-23T12:01:49.000Z', '_widget_1744873387504': '107', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c4f5614a266a4fa4c955a', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T13:00:06.759Z', 'updateTime': '2026-02-23T13:00:06.759Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T13:00:02.000Z', '_widget_1744873387502': '2026-02-23T13:00:06.000Z', '_widget_1744873387504': '4', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c4fb6654487d78f493dbf', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T13:01:42.670Z', 'updateTime': '2026-02-23T13:01:42.670Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T13:00:02.000Z', '_widget_1744873387502': '2026-02-23T13:01:42.000Z', '_widget_1744873387504': '100', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c5d67bd4f2251f9fcfa06', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T14:00:07.768Z', 'updateTime': '2026-02-23T14:00:07.768Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T14:00:02.000Z', '_widget_1744873387502': '2026-02-23T14:00:07.000Z', '_widget_1744873387504': '5', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c5dd1a4b0d9369bd6e1d7', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T14:01:53.102Z', 'updateTime': '2026-02-23T14:01:53.102Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T14:00:02.000Z', '_widget_1744873387502': '2026-02-23T14:01:52.000Z', '_widget_1744873387504': '110', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c6b7c806941eed69e73fc', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T15:00:12.027Z', 'updateTime': '2026-02-23T15:00:12.027Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T15:00:02.000Z', '_widget_1744873387502': '2026-02-23T15:00:11.000Z', '_widget_1744873387504': '9', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c6bd8ce153aec688c0292', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T15:01:44.333Z', 'updateTime': '2026-02-23T15:01:44.333Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T15:00:02.000Z', '_widget_1744873387502': '2026-02-23T15:01:44.000Z', '_widget_1744873387504': '102', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c7985ce153aec689731ec', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T16:00:05.670Z', 'updateTime': '2026-02-23T16:00:05.670Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T16:00:02.000Z', '_widget_1744873387502': '2026-02-23T16:00:05.000Z', '_widget_1744873387504': '3', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c79ec16d3c9c3257a4579', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T16:01:48.284Z', 'updateTime': '2026-02-23T16:01:48.284Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T16:00:02.000Z', '_widget_1744873387502': '2026-02-23T16:01:48.000Z', '_widget_1744873387504': '106', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c87942444810c0b611f96', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T17:00:04.032Z', 'updateTime': '2026-02-23T17:00:04.032Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T17:00:02.000Z', '_widget_1744873387502': '2026-02-23T17:00:03.000Z', '_widget_1744873387504': '1', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c87f920538415f63cfa50', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T17:01:45.155Z', 'updateTime': '2026-02-23T17:01:45.155Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T17:00:02.000Z', '_widget_1744873387502': '2026-02-23T17:01:44.000Z', '_widget_1744873387504': '102', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c95a3e276a38cb21eff48', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T18:00:03.746Z', 'updateTime': '2026-02-23T18:00:03.746Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T18:00:01.000Z', '_widget_1744873387502': '2026-02-23T18:00:03.000Z', '_widget_1744873387504': '2', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699c96100c4d4882f5f28406', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T18:01:52.916Z', 'updateTime': '2026-02-23T18:01:52.916Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T18:00:01.000Z', '_widget_1744873387502': '2026-02-23T18:01:52.000Z', '_widget_1744873387504': '111', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699ca3b50c32d8de42e92d47', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T19:00:05.295Z', 'updateTime': '2026-02-23T19:00:05.295Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T19:00:01.000Z', '_widget_1744873387502': '2026-02-23T19:00:05.000Z', '_widget_1744873387504': '4', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699ca41b057a5fdbf0c8299f', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T19:01:47.041Z', 'updateTime': '2026-02-23T19:01:47.041Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T19:00:02.000Z', '_widget_1744873387502': '2026-02-23T19:01:46.000Z', '_widget_1744873387504': '104', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699cb1c90231857db50cc269', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T20:00:09.267Z', 'updateTime': '2026-02-23T20:00:09.267Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T20:00:01.000Z', '_widget_1744873387502': '2026-02-23T20:00:08.000Z', '_widget_1744873387504': '7', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699cb2280c4d4882f50ce59d', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T20:01:44.704Z', 'updateTime': '2026-02-23T20:01:44.704Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T20:00:02.000Z', '_widget_1744873387502': '2026-02-23T20:01:43.000Z', '_widget_1744873387504': '101', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699cb4b31e0ffac0b145194e', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T20:12:35.781Z', 'updateTime': '2026-02-23T20:12:35.781Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '短信数据支撑', '_widget_1744873387501': '2026-02-23T20:10:10.000Z', '_widget_1744873387502': '2026-02-23T20:12:35.000Z', '_widget_1744873387504': '145', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699cb67a9fa5a1c0477231cb', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T20:20:10.896Z', 'updateTime': '2026-02-23T20:20:10.896Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '异业合作数据支撑', '_widget_1744873387501': '2026-02-23T20:20:10.000Z', '_widget_1744873387502': '2026-02-23T20:20:10.000Z', '_widget_1744873387504': '0', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699cbb44cfbbc4fa3b1ced3c', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T20:40:36.637Z', 'updateTime': '2026-02-23T20:40:36.637Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '私域小程序数据支撑', '_widget_1744873387501': '2026-02-23T20:40:10.000Z', '_widget_1744873387502': '2026-02-23T20:40:36.000Z', '_widget_1744873387504': '26', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699cbb8563a6e46a0627003d', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T20:41:41.090Z', 'updateTime': '2026-02-23T20:41:41.090Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '小六提成数据支撑', '_widget_1744873387501': '2026-02-23T20:41:10.000Z', '_widget_1744873387502': '2026-02-23T20:41:40.000Z', '_widget_1744873387504': '30', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699cbfdc314eb23a7b205dfe', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T21:00:12.877Z', 'updateTime': '2026-02-23T21:00:12.877Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T21:00:02.000Z', '_widget_1744873387502': '2026-02-23T21:00:12.000Z', '_widget_1744873387504': '10', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699cbfe9600aa8fbf9d72bde', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T21:00:25.816Z', 'updateTime': '2026-02-23T21:00:25.816Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '高德匹配手机号', '_widget_1744873387501': '2026-02-23T21:00:10.000Z', '_widget_1744873387502': '2026-02-23T21:00:25.000Z', '_widget_1744873387504': '15', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699cc034e276a38cb245a282', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T21:01:40.495Z', 'updateTime': '2026-02-23T21:01:40.495Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T21:00:03.000Z', '_widget_1744873387502': '2026-02-23T21:01:40.000Z', '_widget_1744873387504': '97', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699ccdee775b2d60749f0ee5', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T22:00:14.885Z', 'updateTime': '2026-02-23T22:00:14.885Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T22:00:02.000Z', '_widget_1744873387502': '2026-02-23T22:00:14.000Z', '_widget_1744873387504': '12', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699cce470c32d8de4210d760', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T22:01:43.313Z', 'updateTime': '2026-02-23T22:01:43.313Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T22:00:02.000Z', '_widget_1744873387502': '2026-02-23T22:01:42.000Z', '_widget_1744873387504': '100', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699cdbf6314eb23a7b3b1120', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T23:00:06.937Z', 'updateTime': '2026-02-23T23:00:06.937Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T23:00:01.000Z', '_widget_1744873387502': '2026-02-23T23:00:06.000Z', '_widget_1744873387504': '5', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699cdc57a4b0d9369b4bc3a2', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T23:01:43.061Z', 'updateTime': '2026-02-23T23:01:43.061Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T23:00:02.000Z', '_widget_1744873387502': '2026-02-23T23:01:42.000Z', '_widget_1744873387504': '100', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "{'_id': '699ce3b61278494a26043fb2', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T23:33:10.251Z', 'updateTime': '2026-02-23T23:33:10.251Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T00:00:00.000Z', '_widget_1743644977694': 'NGV新增数据', '_widget_1744873387501': '2026-02-23T23:30:25.000Z', '_widget_1744873387502': '2026-02-23T23:33:09.000Z', '_widget_1744873387504': '164', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", - "正在计算 [2026-02-23] 的 48 个时间槽并发情况...\n", - "正在写入 48 条统计数据到目标表单...\n", - "{'code': 200, 'msg': '处理完成。统计日期:2026-02-23, 成功批次: 1/1', 'detail': [{'status': 'success', 'success_count': 48, 'success_ids': ['699d7316e1be306334210cab', '699d7316e1be306334210cac', '699d7316e1be306334210cad', '699d7316e1be306334210cae', '699d7316e1be306334210caf', '699d7316e1be306334210cb0', '699d7316e1be306334210cb1', '699d7316e1be306334210cb2', '699d7316e1be306334210cb3', '699d7316e1be306334210cb4', '699d7316e1be306334210cb5', '699d7316e1be306334210cb6', '699d7316e1be306334210cb7', '699d7316e1be306334210cb8', '699d7316e1be306334210cb9', '699d7316e1be306334210cba', '699d7316e1be306334210cbb', '699d7316e1be306334210cbc', '699d7316e1be306334210cbd', '699d7316e1be306334210cbe', '699d7316e1be306334210cbf', '699d7316e1be306334210cc0', '699d7316e1be306334210cc1', '699d7316e1be306334210cc2', '699d7316e1be306334210cc3', '699d7316e1be306334210cc4', '699d7316e1be306334210cc5', '699d7316e1be306334210cc6', '699d7316e1be306334210cc7', '699d7316e1be306334210cc8', '699d7316e1be306334210cc9', '699d7316e1be306334210cca', '699d7316e1be306334210ccb', '699d7316e1be306334210ccc', '699d7316e1be306334210ccd', '699d7316e1be306334210cce', '699d7316e1be306334210ccf', '699d7316e1be306334210cd0', '699d7316e1be306334210cd1', '699d7316e1be306334210cd2', '699d7316e1be306334210cd3', '699d7316e1be306334210cd4', '699d7316e1be306334210cd5', '699d7316e1be306334210cd6', '699d7316e1be306334210cd7', '699d7316e1be306334210cd8', '699d7316e1be306334210cd9', '699d7316e1be306334210cda']}]}\n" - ] + "cell_type": "code", + "execution_count": 6, + "id": "8800f2ff", + "metadata": { + "ExecuteTime": { + "end_time": "2026-02-25T02:08:46.893810800Z", + "start_time": "2026-02-25T02:08:45.535701400Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "正在筛选日期为:2026-02-24 的任务...\n", + "正在从简道云获取源数据...\n", + "已获取 62 条数据\n", + "API 返回原始数据条数: 62\n", + "{'_id': '699c7985ce153aec689731ec', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T16:00:05.670Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T16:00:05.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T16:00:02.000Z', '_widget_1744873387502': '2026-02-23T16:00:05.000Z', '_widget_1744873387504': '3', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699c79ec16d3c9c3257a4579', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T16:01:48.284Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T16:01:48.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T16:00:02.000Z', '_widget_1744873387502': '2026-02-23T16:01:48.000Z', '_widget_1744873387504': '106', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699c87942444810c0b611f96', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T17:00:04.032Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T17:00:03.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T17:00:02.000Z', '_widget_1744873387502': '2026-02-23T17:00:03.000Z', '_widget_1744873387504': '1', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699c87f920538415f63cfa50', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T17:01:45.155Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T17:01:44.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T17:00:02.000Z', '_widget_1744873387502': '2026-02-23T17:01:44.000Z', '_widget_1744873387504': '102', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699c95a3e276a38cb21eff48', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T18:00:03.746Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T18:00:03.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T18:00:01.000Z', '_widget_1744873387502': '2026-02-23T18:00:03.000Z', '_widget_1744873387504': '2', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699c96100c4d4882f5f28406', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T18:01:52.916Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T18:01:52.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T18:00:01.000Z', '_widget_1744873387502': '2026-02-23T18:01:52.000Z', '_widget_1744873387504': '111', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699ca3b50c32d8de42e92d47', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T19:00:05.295Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T19:00:05.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T19:00:01.000Z', '_widget_1744873387502': '2026-02-23T19:00:05.000Z', '_widget_1744873387504': '4', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699ca41b057a5fdbf0c8299f', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T19:01:47.041Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T19:01:46.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T19:00:02.000Z', '_widget_1744873387502': '2026-02-23T19:01:46.000Z', '_widget_1744873387504': '104', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cb1c90231857db50cc269', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T20:00:09.267Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T20:00:08.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T20:00:01.000Z', '_widget_1744873387502': '2026-02-23T20:00:08.000Z', '_widget_1744873387504': '7', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cb2280c4d4882f50ce59d', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T20:01:44.704Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T20:01:43.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T20:00:02.000Z', '_widget_1744873387502': '2026-02-23T20:01:43.000Z', '_widget_1744873387504': '101', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cb4b31e0ffac0b145194e', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T20:12:35.781Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T20:12:35.000Z', '_widget_1743644977694': '短信数据支撑', '_widget_1744873387501': '2026-02-23T20:10:10.000Z', '_widget_1744873387502': '2026-02-23T20:12:35.000Z', '_widget_1744873387504': '145', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cb67a9fa5a1c0477231cb', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T20:20:10.896Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T20:20:10.000Z', '_widget_1743644977694': '异业合作数据支撑', '_widget_1744873387501': '2026-02-23T20:20:10.000Z', '_widget_1744873387502': '2026-02-23T20:20:10.000Z', '_widget_1744873387504': '0', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cbb44cfbbc4fa3b1ced3c', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T20:40:36.637Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T20:40:36.000Z', '_widget_1743644977694': '私域小程序数据支撑', '_widget_1744873387501': '2026-02-23T20:40:10.000Z', '_widget_1744873387502': '2026-02-23T20:40:36.000Z', '_widget_1744873387504': '26', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cbb8563a6e46a0627003d', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T20:41:41.090Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T20:41:40.000Z', '_widget_1743644977694': '小六提成数据支撑', '_widget_1744873387501': '2026-02-23T20:41:10.000Z', '_widget_1744873387502': '2026-02-23T20:41:40.000Z', '_widget_1744873387504': '30', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cbfdc314eb23a7b205dfe', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T21:00:12.877Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T21:00:12.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T21:00:02.000Z', '_widget_1744873387502': '2026-02-23T21:00:12.000Z', '_widget_1744873387504': '10', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cbfe9600aa8fbf9d72bde', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T21:00:25.816Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T21:00:25.000Z', '_widget_1743644977694': '高德匹配手机号', '_widget_1744873387501': '2026-02-23T21:00:10.000Z', '_widget_1744873387502': '2026-02-23T21:00:25.000Z', '_widget_1744873387504': '15', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cc034e276a38cb245a282', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T21:01:40.495Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T21:01:40.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T21:00:03.000Z', '_widget_1744873387502': '2026-02-23T21:01:40.000Z', '_widget_1744873387504': '97', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699ccdee775b2d60749f0ee5', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T22:00:14.885Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T22:00:14.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T22:00:02.000Z', '_widget_1744873387502': '2026-02-23T22:00:14.000Z', '_widget_1744873387504': '12', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cce470c32d8de4210d760', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T22:01:43.313Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T22:01:42.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T22:00:02.000Z', '_widget_1744873387502': '2026-02-23T22:01:42.000Z', '_widget_1744873387504': '100', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cdbf6314eb23a7b3b1120', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T23:00:06.937Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T23:00:06.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-23T23:00:01.000Z', '_widget_1744873387502': '2026-02-23T23:00:06.000Z', '_widget_1744873387504': '5', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cdc57a4b0d9369b4bc3a2', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T23:01:43.061Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T23:01:42.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-23T23:00:02.000Z', '_widget_1744873387502': '2026-02-23T23:01:42.000Z', '_widget_1744873387504': '100', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699ce3b61278494a26043fb2', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-23T23:33:10.251Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-23T23:33:09.000Z', '_widget_1743644977694': 'NGV新增数据', '_widget_1744873387501': '2026-02-23T23:30:25.000Z', '_widget_1744873387502': '2026-02-23T23:33:09.000Z', '_widget_1744873387504': '164', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cea051278494a260a5031', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T00:00:05.556Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T00:00:05.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-24T00:00:02.000Z', '_widget_1744873387502': '2026-02-24T00:00:05.000Z', '_widget_1744873387504': '3', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cea5814a266a4fadb2f7f', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T00:01:28.026Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T00:01:27.000Z', '_widget_1743644977694': '省市区人员关系表转BI', '_widget_1744873387501': '2026-02-24T00:00:25.000Z', '_widget_1744873387502': '2026-02-24T00:01:27.000Z', '_widget_1744873387504': '62', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cea5ae1be306334a6a460', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T00:01:30.108Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T00:01:29.000Z', '_widget_1743644977694': '非标业绩提报转BI', '_widget_1744873387501': '2026-02-24T00:01:25.000Z', '_widget_1744873387502': '2026-02-24T00:01:29.000Z', '_widget_1744873387504': '4', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cea7aee7797f106db6f84', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T00:02:02.784Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T00:02:02.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-24T00:00:02.000Z', '_widget_1744873387502': '2026-02-24T00:02:02.000Z', '_widget_1744873387504': '120', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699ceab3ba28a7743089f60a', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T00:02:59.093Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T00:02:58.000Z', '_widget_1743644977694': '合伙人结算登记同步到BI', '_widget_1744873387501': '2026-02-24T00:02:25.000Z', '_widget_1744873387502': '2026-02-24T00:02:58.000Z', '_widget_1744873387504': '33', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cead8e1be306334a7385f', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T00:03:36.530Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T00:03:36.000Z', '_widget_1743644977694': '分母报备调整', '_widget_1744873387501': '2026-02-24T00:03:25.000Z', '_widget_1744873387502': '2026-02-24T00:03:36.000Z', '_widget_1744873387504': '11', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699ceb47600aa8fbf90236ae', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T00:05:27.869Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T00:05:27.000Z', '_widget_1743644977694': '经销商新签服务单转BI', '_widget_1744873387501': '2026-02-24T00:05:25.000Z', '_widget_1744873387502': '2026-02-24T00:05:27.000Z', '_widget_1744873387504': '2', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699ceb84ed29cdb3bc2efd86', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T00:06:28.275Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T00:06:27.000Z', '_widget_1743644977694': '分子报备调整', '_widget_1744873387501': '2026-02-24T00:06:25.000Z', '_widget_1744873387502': '2026-02-24T00:06:27.000Z', '_widget_1744873387504': '2', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cf0b652465cb7e569d54d', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T00:28:38.233Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T00:28:37.000Z', '_widget_1743644977694': '海外邮件推送', '_widget_1744873387501': '2026-02-24T00:28:25.000Z', '_widget_1744873387502': '2026-02-24T00:28:37.000Z', '_widget_1744873387504': '12', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cf2c7650be1e756a0f6d5', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T00:37:27.153Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T00:37:26.000Z', '_widget_1743644977694': '简道云海外项目CRM客户档案迁移BI', '_widget_1744873387501': '2026-02-24T00:37:25.000Z', '_widget_1744873387502': '2026-02-24T00:37:26.000Z', '_widget_1744873387504': '1', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cf82163a6e46a06614610', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T01:00:17.188Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T01:00:16.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-24T01:00:02.000Z', '_widget_1744873387502': '2026-02-24T01:00:16.000Z', '_widget_1744873387504': '14', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cf8b5ab309d2e57488ec5', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T01:02:45.738Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T01:02:45.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-24T01:00:02.000Z', '_widget_1744873387502': '2026-02-24T01:02:45.000Z', '_widget_1744873387504': '163', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699cfae3600aa8fbf910e6b4', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T01:12:03.718Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T01:12:03.000Z', '_widget_1743644977694': '接车宝日常派发', '_widget_1744873387501': '2026-02-24T01:10:25.000Z', '_widget_1744873387502': '2026-02-24T01:12:03.000Z', '_widget_1744873387504': '98', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d0294e276a38cb2888080', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T01:44:52.609Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T01:44:51.000Z', '_widget_1743644977694': '新签客户回访', '_widget_1744873387501': '2026-02-24T01:05:25.000Z', '_widget_1744873387502': '2026-02-24T01:44:51.000Z', '_widget_1744873387504': '2366', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d02f15d55878f12ab3512', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T01:46:25.262Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T01:46:25.000Z', '_widget_1743644977694': '续约回访待办', '_widget_1744873387501': '2026-02-24T01:35:28.000Z', '_widget_1744873387502': '2026-02-24T01:46:25.000Z', '_widget_1744873387504': '657', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d0629ce153aec681ca62a', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T02:00:09.471Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T02:00:08.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-24T02:00:02.000Z', '_widget_1744873387502': '2026-02-24T02:00:08.000Z', '_widget_1744873387504': '6', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d06ad2213e7ab6c58f68a', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T02:02:21.867Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T02:02:21.000Z', '_widget_1743644977694': '续约客户回访', '_widget_1744873387501': '2026-02-24T01:08:25.000Z', '_widget_1744873387502': '2026-02-24T02:02:21.000Z', '_widget_1744873387504': '3236', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d074ca4b0d9369b760b6a', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T02:05:00.523Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T02:04:59.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-24T02:00:02.000Z', '_widget_1744873387502': '2026-02-24T02:04:59.000Z', '_widget_1744873387504': '297', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d08f20231857db5601af7', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T02:12:02.895Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T02:12:01.000Z', '_widget_1743644977694': '异常服务待办派发', '_widget_1744873387501': '2026-02-24T02:00:32.000Z', '_widget_1744873387502': '2026-02-24T02:12:01.000Z', '_widget_1744873387504': '689', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d1151049df941e55d6c75', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T02:47:45.597Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T02:47:45.000Z', '_widget_1743644977694': '履约表数据支撑', '_widget_1744873387501': '2026-02-24T01:11:25.000Z', '_widget_1744873387502': '2026-02-24T02:47:45.000Z', '_widget_1744873387504': '5780', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d1439e606c83377b07e14', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T03:00:09.258Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T03:00:08.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-24T03:00:02.000Z', '_widget_1744873387502': '2026-02-24T03:00:08.000Z', '_widget_1744873387504': '6', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d56a1506e3a1c9d421dc8', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T07:43:29.979Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T07:43:29.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-24T03:00:03.000Z', '_widget_1744873387502': '2026-02-24T07:43:29.000Z', '_widget_1744873387504': '17006', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d57ebbb539cb6e8c2025a', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T07:48:59.608Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T07:48:58.000Z', '_widget_1743644977694': 'NGV更新数据', '_widget_1744873387501': '2026-02-24T04:30:50.000Z', '_widget_1744873387502': '2026-02-24T07:48:58.000Z', '_widget_1744873387504': '11888', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d5a89ce153aec6868a8c4', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T08:00:09.711Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T08:00:08.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-24T08:00:05.000Z', '_widget_1744873387502': '2026-02-24T08:00:08.000Z', '_widget_1744873387504': '3', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d5aff4389eaaf718c388b', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T08:02:07.390Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T08:02:06.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-24T08:00:05.000Z', '_widget_1744873387502': '2026-02-24T08:02:06.000Z', '_widget_1744873387504': '121', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d689cbd4f2251f9f0099b', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T09:00:12.784Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T09:00:12.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-24T09:00:01.000Z', '_widget_1744873387502': '2026-02-24T09:00:12.000Z', '_widget_1744873387504': '11', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d690516d3c9c32558f916', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T09:01:57.675Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T09:01:57.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-24T09:00:02.000Z', '_widget_1744873387502': '2026-02-24T09:01:57.000Z', '_widget_1744873387504': '115', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d761644f0433458bc1b81', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T09:57:42.231Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T09:57:41.000Z', '_widget_1743644977694': '非标业绩提报转BI', '_widget_1744873387501': '2026-02-24T09:57:36.000Z', '_widget_1744873387502': '2026-02-24T09:57:41.000Z', '_widget_1744873387504': '5', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d76a4e276a38cb2f07c73', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T10:00:04.286Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T10:00:04.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-24T10:00:02.000Z', '_widget_1744873387502': '2026-02-24T10:00:04.000Z', '_widget_1744873387504': '2', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d77040231857db5c43bd3', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T10:01:40.149Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T10:01:39.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-24T10:00:02.000Z', '_widget_1744873387502': '2026-02-24T10:01:39.000Z', '_widget_1744873387504': '97', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d84bbe1be30633430e582', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T11:00:11.804Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T11:00:11.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-24T11:00:02.000Z', '_widget_1744873387502': '2026-02-24T11:00:11.000Z', '_widget_1744873387504': '9', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d8521a4b0d9369be55888', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T11:01:53.714Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T11:01:53.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-24T11:00:02.000Z', '_widget_1744873387502': '2026-02-24T11:01:53.000Z', '_widget_1744873387504': '111', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d92c70c32d8de42c5befe', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T12:00:07.622Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T12:00:07.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-24T12:00:01.000Z', '_widget_1744873387502': '2026-02-24T12:00:07.000Z', '_widget_1744873387504': '6', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699d9326bd75a17f167a5f81', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T12:01:42.057Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T12:01:41.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-24T12:00:02.000Z', '_widget_1744873387502': '2026-02-24T12:01:41.000Z', '_widget_1744873387504': '99', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699da0dbdcfe75a216723a16', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T13:00:11.890Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T13:00:11.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-24T13:00:02.000Z', '_widget_1744873387502': '2026-02-24T13:00:11.000Z', '_widget_1744873387504': '9', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699da132758fe22800cb4945', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T13:01:38.894Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T13:01:38.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-24T13:00:02.000Z', '_widget_1744873387502': '2026-02-24T13:01:38.000Z', '_widget_1744873387504': '96', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699daee6914183c95d935320', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T14:00:06.394Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T14:00:06.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-24T14:00:02.000Z', '_widget_1744873387502': '2026-02-24T14:00:06.000Z', '_widget_1744873387504': '4', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699daf493e25d0b5c93a2771', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T14:01:45.131Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T14:01:44.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-24T14:00:02.000Z', '_widget_1744873387502': '2026-02-24T14:01:44.000Z', '_widget_1744873387504': '102', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699dbcfb333a0de29740457d', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T15:00:11.610Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T15:00:11.000Z', '_widget_1743644977694': '简道云员工ID表更新', '_widget_1744873387501': '2026-02-24T15:00:02.000Z', '_widget_1744873387502': '2026-02-24T15:00:11.000Z', '_widget_1744873387504': '9', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "{'_id': '699dbd57f0f87cfb65cc80b9', 'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2026-02-24T15:01:43.285Z', 'updateTime': '2026-02-25T01:50:57.940Z', 'deleteTime': None, '_widget_1744873387500': '2026-02-24T15:01:43.000Z', '_widget_1743644977694': '字段监控', '_widget_1744873387501': '2026-02-24T15:00:02.000Z', '_widget_1744873387502': '2026-02-24T15:01:43.000Z', '_widget_1744873387504': '101', 'appId': '6694d3c4fcb69ca9a111a6c4', 'entryId': '67ede908eb9c22261016466e'}\n", + "正在计算 [2026-02-24] 的 48 个时间槽并发情况...\n", + "正在写入 144 条统计数据到目标表单...\n", + "{'code': 200, 'msg': '处理完成。统计日期:2026-02-24, 成功批次: 2/2', 'detail': [{'status': 'success', 'success_count': 90, 'success_ids': ['699e6bb814fb91974e73b8ca', '699e6bb814fb91974e73b8cb', '699e6bb814fb91974e73b8cc', '699e6bb814fb91974e73b8cd', '699e6bb814fb91974e73b8ce', '699e6bb814fb91974e73b8cf', '699e6bb814fb91974e73b8d0', '699e6bb814fb91974e73b8d1', '699e6bb814fb91974e73b8d2', '699e6bb814fb91974e73b8d3', '699e6bb814fb91974e73b8d4', '699e6bb814fb91974e73b8d5', '699e6bb814fb91974e73b8d6', '699e6bb814fb91974e73b8d7', '699e6bb814fb91974e73b8d8', '699e6bb814fb91974e73b8d9', '699e6bb814fb91974e73b8da', '699e6bb814fb91974e73b8db', '699e6bb814fb91974e73b8dc', '699e6bb814fb91974e73b8dd', '699e6bb814fb91974e73b8de', '699e6bb814fb91974e73b8df', '699e6bb814fb91974e73b8e0', '699e6bb814fb91974e73b8e1', '699e6bb814fb91974e73b8e2', '699e6bb814fb91974e73b8e3', '699e6bb814fb91974e73b8e4', '699e6bb814fb91974e73b8e5', '699e6bb814fb91974e73b8e6', '699e6bb814fb91974e73b8e7', '699e6bb814fb91974e73b8e8', '699e6bb814fb91974e73b8e9', '699e6bb814fb91974e73b8ea', '699e6bb814fb91974e73b8eb', '699e6bb814fb91974e73b8ec', '699e6bb814fb91974e73b8ed', '699e6bb814fb91974e73b8ee', '699e6bb814fb91974e73b8ef', '699e6bb814fb91974e73b8f0', '699e6bb814fb91974e73b8f1', '699e6bb814fb91974e73b8f2', '699e6bb814fb91974e73b8f3', '699e6bb814fb91974e73b8f4', '699e6bb814fb91974e73b8f5', '699e6bb814fb91974e73b8f6', '699e6bb814fb91974e73b8f7', '699e6bb814fb91974e73b8f8', '699e6bb814fb91974e73b8f9', '699e6bb814fb91974e73b8fa', '699e6bb814fb91974e73b8fb', '699e6bb814fb91974e73b8fc', '699e6bb814fb91974e73b8fd', '699e6bb814fb91974e73b8fe', '699e6bb814fb91974e73b8ff', '699e6bb814fb91974e73b900', '699e6bb814fb91974e73b901', '699e6bb814fb91974e73b902', '699e6bb814fb91974e73b903', '699e6bb814fb91974e73b904', '699e6bb814fb91974e73b905', '699e6bb814fb91974e73b906', '699e6bb814fb91974e73b907', '699e6bb814fb91974e73b908', '699e6bb814fb91974e73b909', '699e6bb814fb91974e73b90a', '699e6bb814fb91974e73b90b', '699e6bb814fb91974e73b90c', '699e6bb814fb91974e73b90d', '699e6bb814fb91974e73b90e', '699e6bb814fb91974e73b90f', '699e6bb814fb91974e73b910', '699e6bb814fb91974e73b911', '699e6bb814fb91974e73b912', '699e6bb814fb91974e73b913', '699e6bb814fb91974e73b914', '699e6bb814fb91974e73b915', '699e6bb814fb91974e73b916', '699e6bb814fb91974e73b917', '699e6bb814fb91974e73b918', '699e6bb814fb91974e73b919', '699e6bb814fb91974e73b91a', '699e6bb814fb91974e73b91b', '699e6bb814fb91974e73b91c', '699e6bb814fb91974e73b91d', '699e6bb814fb91974e73b91e', '699e6bb814fb91974e73b91f', '699e6bb814fb91974e73b920', '699e6bb814fb91974e73b921', '699e6bb814fb91974e73b922', '699e6bb814fb91974e73b923']}, {'status': 'success', 'success_count': 54, 'success_ids': ['699e6bb84f32ef70b0a68a45', '699e6bb84f32ef70b0a68a46', '699e6bb84f32ef70b0a68a47', '699e6bb84f32ef70b0a68a48', '699e6bb84f32ef70b0a68a49', '699e6bb84f32ef70b0a68a4a', '699e6bb84f32ef70b0a68a4b', '699e6bb84f32ef70b0a68a4c', '699e6bb84f32ef70b0a68a4d', '699e6bb84f32ef70b0a68a4e', '699e6bb84f32ef70b0a68a4f', '699e6bb84f32ef70b0a68a50', '699e6bb84f32ef70b0a68a51', '699e6bb84f32ef70b0a68a52', '699e6bb84f32ef70b0a68a53', '699e6bb84f32ef70b0a68a54', '699e6bb84f32ef70b0a68a55', '699e6bb84f32ef70b0a68a56', '699e6bb84f32ef70b0a68a57', '699e6bb84f32ef70b0a68a58', '699e6bb84f32ef70b0a68a59', '699e6bb84f32ef70b0a68a5a', '699e6bb84f32ef70b0a68a5b', '699e6bb84f32ef70b0a68a5c', '699e6bb84f32ef70b0a68a5d', '699e6bb84f32ef70b0a68a5e', '699e6bb84f32ef70b0a68a5f', '699e6bb84f32ef70b0a68a60', '699e6bb84f32ef70b0a68a61', '699e6bb84f32ef70b0a68a62', '699e6bb84f32ef70b0a68a63', '699e6bb84f32ef70b0a68a64', '699e6bb84f32ef70b0a68a65', '699e6bb84f32ef70b0a68a66', '699e6bb84f32ef70b0a68a67', '699e6bb84f32ef70b0a68a68', '699e6bb84f32ef70b0a68a69', '699e6bb84f32ef70b0a68a6a', '699e6bb84f32ef70b0a68a6b', '699e6bb84f32ef70b0a68a6c', '699e6bb84f32ef70b0a68a6d', '699e6bb84f32ef70b0a68a6e', '699e6bb84f32ef70b0a68a6f', '699e6bb84f32ef70b0a68a70', '699e6bb84f32ef70b0a68a71', '699e6bb84f32ef70b0a68a72', '699e6bb84f32ef70b0a68a73', '699e6bb84f32ef70b0a68a74', '699e6bb84f32ef70b0a68a75', '699e6bb84f32ef70b0a68a76', '699e6bb84f32ef70b0a68a77', '699e6bb84f32ef70b0a68a78', '699e6bb84f32ef70b0a68a79', '699e6bb84f32ef70b0a68a7a']}]}\n" + ] + } + ], + "source": [ + "import json\n", + "from datetime import datetime, timedelta\n", + "import requests\n", + "import time\n", + "from decimal import Decimal\n", + "\n", + "# ================= 辅助函数定义 =================\n", + "\n", + "def replace_decimals(obj):\n", + " if isinstance(obj, dict):\n", + " return {k: replace_decimals(v) for k, v in obj.items()}\n", + " elif isinstance(obj, list):\n", + " return [replace_decimals(item) for item in obj]\n", + " elif isinstance(obj, Decimal):\n", + " return float(obj)\n", + " return obj\n", + "\n", + "def json_default(obj):\n", + " \"\"\"JSON 序列化时处理 numpy / Decimal 等特殊类型,不使用类,便于在简道云插件环境中运行。\"\"\"\n", + " try:\n", + " import numpy as np\n", + " if isinstance(obj, np.integer):\n", + " return int(obj)\n", + " elif isinstance(obj, np.floating):\n", + " return float(obj)\n", + " elif isinstance(obj, np.ndarray):\n", + " return obj.tolist()\n", + " except ImportError:\n", + " pass\n", + " if isinstance(obj, Decimal):\n", + " return float(obj)\n", + " raise TypeError(f\"Object of type {type(obj)} is not JSON serializable\")\n", + "\n", + "def entry_data_list(data: dict, replace: bool = False, max_retries: int = 20):\n", + " \"\"\"获取多条表单数据\"\"\"\n", + " url = 'https://api.jiandaoyun.com/api/v5/app/entry/data/list'\n", + " API_TOKEN = \"Bearer qygHulymo1fekJk4CIZyNKjyQAzG8CFN\"\n", + " headers = {\n", + " 'Authorization': API_TOKEN,\n", + " 'Content-Type': 'application/json'\n", + " }\n", + "\n", + " all_data_batches = []\n", + " last_data_id = None\n", + " exit_flag = False\n", + "\n", + " while True:\n", + " payload = json.dumps({\n", + " \"app_id\": data['api_key'],\n", + " \"entry_id\": data['entry_id'],\n", + " \"limit\": 90,\n", + " \"data_id\": last_data_id,\n", + " \"filter\": data.get('filter', None)\n", + " })\n", + " retries = 0\n", + " while retries <= max_retries:\n", + " data_get = None\n", + " try:\n", + " res = requests.post(url=url, data=payload, headers=headers, timeout=10)\n", + " res.raise_for_status()\n", + " data_get = res.json()\n", + "\n", + " if data_get.get(\"data\"):\n", + " all_data_batches.extend(data_get['data'])\n", + " last_data_id = data_get['data'][-1].get('_id')\n", + " print(f\"已获取 {len(all_data_batches)} 条数据\")\n", + " break\n", + " else:\n", + " exit_flag = True\n", + " break\n", + " except requests.exceptions.RequestException as e:\n", + " print(f\"请求异常: {e}, 重试 ({retries+1}/{max_retries})\")\n", + " retries += 1\n", + " time.sleep(0.5)\n", + "\n", + " if retries > max_retries:\n", + " print(\"达到最大重试次数,停止获取。\")\n", + " break\n", + " if exit_flag:\n", + " break\n", + "\n", + " final_data = {'data': all_data_batches}\n", + "\n", + " if replace:\n", + " print(\"警告:replace=True 但 field_replacement 函数未在此脚本定义,将返回原始数据。\")\n", + " # 如果需要替换,请确保环境中定义了 field_replacement 函数\n", + " # return_data = field_replacement(data, final_data)\n", + " # return return_data\n", + " return final_data\n", + " else:\n", + " return final_data\n", + "\n", + "def entry_data_batch_create(data: dict, chunk_size: int = 90, max_retries: int = 20):\n", + " \"\"\"新建多条数据\"\"\"\n", + " data = replace_decimals(data)\n", + " url = 'https://api.jiandaoyun.com/api/v5/app/entry/data/batch_create'\n", + " API_TOKEN = \"Bearer qygHulymo1fekJk4CIZyNKjyQAzG8CFN\"\n", + " headers = {\n", + " 'Authorization': API_TOKEN,\n", + " 'Content-Type': 'application/json'\n", + " }\n", + "\n", + " total_length = len(data['data_list'])\n", + " num_chunks = (total_length + chunk_size - 1) // chunk_size\n", + " data_get_list = []\n", + "\n", + " for i in range(num_chunks):\n", + " start_index = i * chunk_size\n", + " end_index = min(start_index + chunk_size, total_length)\n", + "\n", + " payload = json.dumps({\n", + " \"app_id\": data['api_key'],\n", + " \"entry_id\": data['entry_id'],\n", + " \"data_list\": data['data_list'][start_index:end_index],\n", + " \"is_start_workflow\": data.get('is_start_workflow', \"false\"),\n", + " \"is_start_trigger\": data.get('is_start_trigger', \"false\"),\n", + " }, default=json_default)\n", + "\n", + " retries = 0\n", + " while retries <= max_retries:\n", + " try:\n", + " res = requests.post(url=url, data=payload, headers=headers, timeout=15)\n", + " res.raise_for_status()\n", + " data_get = res.json()\n", + "\n", + " if data_get.get(\"status\") == \"success\":\n", + " data_get_list.append(data_get)\n", + " break\n", + " else:\n", + " retries += 1\n", + " time.sleep(3)\n", + " except requests.exceptions.RequestException as e:\n", + " print(f\"批量创建请求异常: {e}\")\n", + " retries += 1\n", + " time.sleep(0.5)\n", + "\n", + " if retries > max_retries:\n", + " print(f\"批次 {i+1}/{num_chunks} 请求失败,已放弃。\")\n", + " data_get_list.append(None)\n", + "\n", + " return data_get_list\n", + "\n", + "# ================= 主业务逻辑 =================\n", + "\n", + "def calculate_server_load(stats_date_str: str | None = None, slot_minutes: int = 10):\n", + " \"\"\"计算服务器在指定日期的负载情况,可配置统计日期和时间粒度,便于作为简道云插件调用。\"\"\"\n", + " # --- 配置 ---\n", + " APP_ID = \"6694d3c4fcb69ca9a111a6c4\"\n", + " SOURCE_FORM_ID = \"67ede908eb9c22261016466e\"\n", + " TARGET_FORM_ID = \"699d4f82ae9623e204969627\"\n", + "\n", + " # 【重要】请核实 ID\n", + " # 用于过滤和读取的“日期”字段 (精确到日)\n", + " WIDGET_DATE_FIELD = \"_widget_1744873387500\"\n", + " # 用于读取具体时间的“开始时间”和“结束时间”字段 (精确到时分秒)\n", + " # 注意:如果源表单只有一个“日期”字段而没有具体时间点,逻辑需要调整。\n", + " # 假设你仍有具体的开始/结束时间字段用于计算时长。如果没有,需确认如何计算30分钟槽。\n", + " # 此处假设你有具体的时分秒字段,如果只有日期字段,所有任务将被视为全天或无法计算精确并发。\n", + " # 如果你的业务逻辑是:只要日期是昨天,就算作昨天的任务,且没有具体时间点,\n", + " # 那么下面的时间解析部分需要适配。\n", + " # **这里假设你依然有具体的开始/结束时间组件用于计算并发**\n", + " WIDGET_START_TIME = \"_widget_1744873387501\" # 请替换为实际的开始时间(含时分) ID\n", + " WIDGET_END_TIME = \"_widget_1744873387502\" # 请替换为实际的结束时间(含时分) ID\n", + "\n", + " # 计算统计日期(默认昨天,北京时间)\n", + " now = datetime.now()\n", + " if stats_date_str is None:\n", + " yesterday_dt = now - timedelta(days=1)\n", + " stats_date_str = yesterday_dt.strftime(\"%Y-%m-%d\")\n", + "\n", + " print(f\"正在筛选日期为:{stats_date_str} 的任务...\")\n", + "\n", + " # --- 构造过滤器 ---\n", + " # 使用日期字段 (精确到日) 进行等值匹配\n", + " FILTER = {\n", + " \"rel\": \"and\",\n", + " \"cond\": [\n", + " {\n", + " \"field\": WIDGET_DATE_FIELD,\n", + " \"type\": \"date\", # 注意这里是 date 不是 datetime\n", + " \"method\": \"eq\", # 等于\n", + " \"value\": [stats_date_str] # 格式 YYYY-MM-DD\n", + " }\n", + " ]\n", + " }\n", + "\n", + " data = {\n", + " \"api_key\": APP_ID,\n", + " \"entry_id\": SOURCE_FORM_ID,\n", + " \"filter\": FILTER\n", + " }\n", + "\n", + " print(\"正在从简道云获取源数据...\")\n", + " # 使用 replace=False,通过 Widget ID 获取\n", + " raw_response = entry_data_list(data, replace=False)\n", + " tasks_raw = raw_response.get(\"data\", [])\n", + "\n", + " if not tasks_raw:\n", + " print(f\"未获取到日期为 {stats_date_str} 的任务数据。\")\n", + " # 即使没有数据,也可以生成全0的统计表,或者根据需求直接返回\n", + " # 这里选择继续生成全0的统计\n", + " tasks = []\n", + " else:\n", + " print(f\"API 返回原始数据条数: {len(tasks_raw)}\")\n", + " tasks = []\n", + " for item in tasks_raw:\n", + " print(item)\n", + " # 获取具体时间值\n", + " s_val = item.get(WIDGET_START_TIME, {})\n", + " e_val = item.get(WIDGET_END_TIME, {})\n", + "\n", + " # 如果源数据只有日期没有具体时间,可能需要默认设为当天 00:00 到 23:59\n", + " # 这里假设必须有具体时间才能计算并发\n", + " if not s_val or not e_val:\n", + " # 兼容处理:如果只有日期字段,尝试用日期字段补全\n", + " # 如果业务上不需要精确到分,可在此处设定默认值\n", + " continue\n", + "\n", + " try:\n", + " # --- 处理简道云返回的 ISO 8601 UTC 时间 (带 Z),统一转为北京时间 ---\n", + " # 1. 转为字符串\n", + " s_str = str(s_val)\n", + " e_str = str(e_val)\n", + "\n", + " # 2. 替换 'T' 为空格,去掉 'Z' 和毫秒部分\n", + " # 示例: 2026-02-23T16:00:01.000Z -> 2026-02-23 16:00:01 (UTC)\n", + " s_clean = s_str.replace('T', ' ').replace('Z', '').split('.')[0]\n", + " e_clean = e_str.replace('T', ' ').replace('Z', '').split('.')[0]\n", + "\n", + " # 3. 先按 UTC 解析\n", + " s_utc = datetime.strptime(s_clean, \"%Y-%m-%d %H:%M:%S\")\n", + " e_utc = datetime.strptime(e_clean, \"%Y-%m-%d %H:%M:%S\")\n", + "\n", + " # 4. 换算为北京时间(UTC+8)\n", + " s_dt = s_utc + timedelta(hours=8)\n", + " e_dt = e_utc + timedelta(hours=8)\n", + "\n", + " tasks.append({\"start\": s_dt, \"end\": e_dt})\n", + "\n", + " except Exception as e:\n", + " # 调试用:打印具体哪条数据失败\n", + " print(f\"解析失败: {s_val}, 错误: {e}\")\n", + " continue\n", + "\n", + " # --- 确定统计哪一天的时间槽 ---\n", + " base_time = datetime.strptime(stats_date_str, \"%Y-%m-%d\")\n", + " stats_date_end = base_time + timedelta(days=1)\n", + "\n", + " print(f\"正在计算 [{stats_date_str}] 的 48 个时间槽并发情况...\")\n", + "\n", + " # 目标表单 Widget ID (请替换为真实 ID)\n", + " WIDGET_T_DATE = \"_widget_1771917185994\"\n", + " WIDGET_T_SLOT = \"_widget_1771917185995\"\n", + " WIDGET_T_COUNT = \"_widget_1771917185996\"\n", + " WIDGET_T_IDLE = \"_widget_1771986185385\"\n", + " WIDGET_T_NORMAL = \"_widget_1771986185387\"\n", + " WIDGET_T_BUSY = \"_widget_1771986185386\"\n", + "\n", + " slots = []\n", + " # 按 slot_minutes 为粒度拆分一天的时间槽\n", + " total_minutes = 24 * 60\n", + " slot_count = total_minutes // slot_minutes\n", + "\n", + " for i in range(slot_count):\n", + " slot_start = base_time + timedelta(minutes=i * slot_minutes)\n", + " slot_end = slot_start + timedelta(minutes=slot_minutes)\n", + "\n", + " count = 0\n", + " for t in tasks:\n", + " # 判断任务是否与该 5 分钟时间槽有重叠\n", + " if t[\"start\"] < slot_end and slot_start < t[\"end\"]:\n", + " count += 1\n", + "\n", + " is_idle = 1 if count == 0 else 0\n", + " is_normal = 1 if 1 <= count <= 3 else 0\n", + " is_busy = 1 if count > 3 else 0\n", + "\n", + " slots.append({\n", + " WIDGET_T_DATE: {\"value\": stats_date_str},\n", + " WIDGET_T_SLOT: {\"value\": slot_start.strftime(\"%H:%M\")},\n", + " WIDGET_T_COUNT: {\"value\": count},\n", + " WIDGET_T_IDLE: {\"value\": is_idle},\n", + " WIDGET_T_NORMAL: {\"value\": is_normal},\n", + " WIDGET_T_BUSY: {\"value\": is_busy},\n", + " })\n", + "\n", + " if not slots:\n", + " return {\"code\": 200, \"msg\": \"未生成时间槽数据\"}\n", + "\n", + " payload = {\n", + " \"api_key\": APP_ID,\n", + " \"entry_id\": TARGET_FORM_ID,\n", + " \"data_list\": slots,\n", + " \"is_start_workflow\": \"false\",\n", + " \"is_start_trigger\": \"false\"\n", + " }\n", + "\n", + " print(f\"正在写入 {len(slots)} 条统计数据到目标表单...\")\n", + " result = entry_data_batch_create(payload)\n", + "\n", + " success_count = sum(1 for r in result if r and r.get(\"status\") == \"success\")\n", + "\n", + " return {\n", + " \"code\": 200,\n", + " \"msg\": f\"处理完成。统计日期:{stats_date_str}, 成功批次: {success_count}/{len(result)}\",\n", + " \"detail\": result\n", + " }\n", + "\n", + "\n", + "def jdy_plugin_handler(params: dict | None = None):\n", + " \"\"\"简道云插件入口函数(支持定时插件不传参数的场景)。\n", + "\n", + " params 示例(全部可选):\n", + " {\n", + " \"date\": \"2026-02-23\", # 统计哪一天,不传则默认昨天(北京时间)\n", + " \"slotMinutes\": 10 # 时间粒度(分钟),不传则默认 10 分钟\n", + " }\n", + " \"\"\"\n", + " if params is None:\n", + " params = {}\n", + "\n", + " stats_date_str = params.get(\"date\")\n", + " slot_minutes = int(params.get(\"slotMinutes\", 10))\n", + " return calculate_server_load(stats_date_str=stats_date_str, slot_minutes=slot_minutes)\n", + "\n", + "\n", + "# 如果需要直接运行测试\n", + "if __name__ == \"__main__\":\n", + " # 确保在实际运行前替换了所有 WIDGET_ID\n", + " res = calculate_server_load()\n", + " print(res)" + ] } - ], - "source": [ - "import json\n", - "from datetime import datetime, timedelta\n", - "import requests\n", - "import time\n", - "from decimal import Decimal\n", - "\n", - "# ================= 辅助函数定义 =================\n", - "\n", - "def replace_decimals(obj):\n", - " if isinstance(obj, dict):\n", - " return {k: replace_decimals(v) for k, v in obj.items()}\n", - " elif isinstance(obj, list):\n", - " return [replace_decimals(item) for item in obj]\n", - " elif isinstance(obj, Decimal):\n", - " return float(obj)\n", - " return obj\n", - "\n", - "class NpEncoder(json.JSONEncoder):\n", - " def default(self, obj):\n", - " try:\n", - " import numpy as np\n", - " if isinstance(obj, np.integer):\n", - " return int(obj)\n", - " elif isinstance(obj, np.floating):\n", - " return float(obj)\n", - " elif isinstance(obj, np.ndarray):\n", - " return obj.tolist()\n", - " except ImportError:\n", - " pass\n", - " return super(NpEncoder, self).default(obj)\n", - "\n", - "def entry_data_list(data: dict, replace: bool = False, max_retries: int = 20):\n", - " \"\"\"获取多条表单数据\"\"\"\n", - " url = 'https://api.jiandaoyun.com/api/v5/app/entry/data/list'\n", - " API_TOKEN = \"Bearer qygHulymo1fekJk4CIZyNKjyQAzG8CFN\"\n", - " headers = {\n", - " 'Authorization': API_TOKEN,\n", - " 'Content-Type': 'application/json'\n", - " }\n", - " \n", - " all_data_batches = []\n", - " last_data_id = None\n", - " exit_flag = False\n", - " \n", - " while True:\n", - " payload = json.dumps({\n", - " \"app_id\": data['api_key'],\n", - " \"entry_id\": data['entry_id'],\n", - " \"limit\": 90,\n", - " \"data_id\": last_data_id,\n", - " \"filter\": data.get('filter', None)\n", - " })\n", - " retries = 0\n", - " while retries <= max_retries:\n", - " data_get = None\n", - " try:\n", - " res = requests.post(url=url, data=payload, headers=headers, timeout=10)\n", - " res.raise_for_status()\n", - " data_get = res.json()\n", - " \n", - " if data_get.get(\"data\"):\n", - " all_data_batches.extend(data_get['data'])\n", - " last_data_id = data_get['data'][-1].get('_id')\n", - " print(f\"已获取 {len(all_data_batches)} 条数据\")\n", - " break\n", - " else:\n", - " exit_flag = True\n", - " break\n", - " except requests.exceptions.RequestException as e:\n", - " print(f\"请求异常: {e}, 重试 ({retries+1}/{max_retries})\")\n", - " retries += 1\n", - " time.sleep(0.5)\n", - " \n", - " if retries > max_retries:\n", - " print(\"达到最大重试次数,停止获取。\")\n", - " break\n", - " if exit_flag:\n", - " break\n", - "\n", - " final_data = {'data': all_data_batches}\n", - " \n", - " if replace:\n", - " print(\"警告:replace=True 但 field_replacement 函数未在此脚本定义,将返回原始数据。\")\n", - " # 如果需要替换,请确保环境中定义了 field_replacement 函数\n", - " # return_data = field_replacement(data, final_data) \n", - " # return return_data\n", - " return final_data\n", - " else:\n", - " return final_data\n", - "\n", - "def entry_data_batch_create(data: dict, chunk_size: int = 90, max_retries: int = 20):\n", - " \"\"\"新建多条数据\"\"\"\n", - " data = replace_decimals(data)\n", - " url = 'https://api.jiandaoyun.com/api/v5/app/entry/data/batch_create'\n", - " API_TOKEN = \"Bearer qygHulymo1fekJk4CIZyNKjyQAzG8CFN\"\n", - " headers = {\n", - " 'Authorization': API_TOKEN,\n", - " 'Content-Type': 'application/json'\n", - " }\n", - "\n", - " total_length = len(data['data_list'])\n", - " num_chunks = (total_length + chunk_size - 1) // chunk_size\n", - " data_get_list = []\n", - "\n", - " for i in range(num_chunks):\n", - " start_index = i * chunk_size\n", - " end_index = min(start_index + chunk_size, total_length)\n", - " \n", - " payload = json.dumps({\n", - " \"app_id\": data['api_key'],\n", - " \"entry_id\": data['entry_id'],\n", - " \"data_list\": data['data_list'][start_index:end_index],\n", - " \"is_start_workflow\": data.get('is_start_workflow', \"false\"),\n", - " \"is_start_trigger\": data.get('is_start_trigger', \"false\"),\n", - " }, cls=NpEncoder)\n", - " \n", - " retries = 0\n", - " while retries <= max_retries:\n", - " try:\n", - " res = requests.post(url=url, data=payload, headers=headers, timeout=15)\n", - " res.raise_for_status()\n", - " data_get = res.json()\n", - " \n", - " if data_get.get(\"status\") == \"success\":\n", - " data_get_list.append(data_get)\n", - " break\n", - " else:\n", - " retries += 1\n", - " time.sleep(3)\n", - " except requests.exceptions.RequestException as e:\n", - " print(f\"批量创建请求异常: {e}\")\n", - " retries += 1\n", - " time.sleep(0.5)\n", - " \n", - " if retries > max_retries:\n", - " print(f\"批次 {i+1}/{num_chunks} 请求失败,已放弃。\")\n", - " data_get_list.append(None)\n", - "\n", - " return data_get_list\n", - "\n", - "# ================= 主业务逻辑 =================\n", - "\n", - "def calculate_server_load():\n", - " # --- 配置 ---\n", - " APP_ID = \"6694d3c4fcb69ca9a111a6c4\"\n", - " SOURCE_FORM_ID = \"67ede908eb9c22261016466e\"\n", - " TARGET_FORM_ID = \"699d4f82ae9623e204969627\"\n", - " \n", - " # 【重要】请核实 ID\n", - " # 用于过滤和读取的“日期”字段 (精确到日)\n", - " WIDGET_DATE_FIELD = \"_widget_1744873387500\" \n", - " # 用于读取具体时间的“开始时间”和“结束时间”字段 (精确到时分秒)\n", - " # 注意:如果源表单只有一个“日期”字段而没有具体时间点,逻辑需要调整。\n", - " # 假设你仍有具体的开始/结束时间字段用于计算时长。如果没有,需确认如何计算30分钟槽。\n", - " # 此处假设你有具体的时分秒字段,如果只有日期字段,所有任务将被视为全天或无法计算精确并发。\n", - " # 如果你的业务逻辑是:只要日期是昨天,就算作昨天的任务,且没有具体时间点,\n", - " # 那么下面的时间解析部分需要适配。\n", - " # **这里假设你依然有具体的开始/结束时间组件用于计算并发**\n", - " WIDGET_START_TIME = \"_widget_1744873387501\" # 请替换为实际的开始时间(含时分) ID\n", - " WIDGET_END_TIME = \"_widget_1744873387502\" # 请替换为实际的结束时间(含时分) ID\n", - " \n", - " now = datetime.now()\n", - " today_str = now.strftime(\"%Y-%m-%d\")\n", - " \n", - " # 计算昨天的日期\n", - " yesterday_dt = now - timedelta(days=1)\n", - " yesterday_str = yesterday_dt.strftime(\"%Y-%m-%d\")\n", - " \n", - " print(f\"正在筛选日期为:{yesterday_str} 的任务...\")\n", - "\n", - " # --- 构造过滤器 ---\n", - " # 使用日期字段 (精确到日) 进行等值匹配\n", - " FILTER = {\n", - " \"rel\": \"and\",\n", - " \"cond\": [\n", - " {\n", - " \"field\": WIDGET_DATE_FIELD,\n", - " \"type\": \"date\", # 注意这里是 date 不是 datetime\n", - " \"method\": \"eq\", # 等于\n", - " \"value\": [yesterday_str] # 格式 YYYY-MM-DD\n", - " }\n", - " ]\n", - " }\n", - " \n", - " data = {\n", - " \"api_key\": APP_ID, \n", - " \"entry_id\": SOURCE_FORM_ID, \n", - " \"filter\": FILTER\n", - " } \n", - "\n", - " print(\"正在从简道云获取源数据...\")\n", - " # 使用 replace=False,通过 Widget ID 获取\n", - " raw_response = entry_data_list(data, replace=False)\n", - " tasks_raw = raw_response.get(\"data\", [])\n", - " \n", - " if not tasks_raw:\n", - " print(f\"未获取到日期为 {yesterday_str} 的任务数据。\")\n", - " # 即使没有数据,也可以生成全0的统计表,或者根据需求直接返回\n", - " # 这里选择继续生成全0的统计\n", - " tasks = []\n", - " else:\n", - " print(f\"API 返回原始数据条数: {len(tasks_raw)}\")\n", - " tasks = []\n", - " for item in tasks_raw:\n", - " print(item)\n", - " # 获取具体时间值\n", - " s_val = item.get(WIDGET_START_TIME, {})\n", - " e_val = item.get(WIDGET_END_TIME, {})\n", - " \n", - " # 如果源数据只有日期没有具体时间,可能需要默认设为当天 00:00 到 23:59\n", - " # 这里假设必须有具体时间才能计算并发\n", - " if not s_val or not e_val:\n", - " # 兼容处理:如果只有日期字段,尝试用日期字段补全\n", - " # 如果业务上不需要精确到分,可在此处设定默认值\n", - " continue \n", - " \n", - " try:\n", - " # --- 核心修复:处理 ISO 8601 格式 (含 T 和 Z) ---\n", - " # 1. 转为字符串\n", - " s_str = str(s_val)\n", - " e_str = str(e_val)\n", - " \n", - " # 2. 替换 'T' 为空格,去掉 'Z' 和毫秒部分\n", - " # 示例: 2026-02-23T00:00:01.000Z -> 2026-02-23 00:00:01\n", - " s_clean = s_str.replace('T', ' ').replace('Z', '').split('.')[0]\n", - " e_clean = e_str.replace('T', ' ').replace('Z', '').split('.')[0]\n", - " \n", - " # 3. 解析\n", - " s_dt = datetime.strptime(s_clean, \"%Y-%m-%d %H:%M:%S\")\n", - " e_dt = datetime.strptime(e_clean, \"%Y-%m-%d %H:%M:%S\")\n", - " \n", - " tasks.append({\"start\": s_dt, \"end\": e_dt})\n", - " \n", - " except Exception as e:\n", - " # 调试用:打印具体哪条数据失败\n", - " print(f\"解析失败: {s_val}, 错误: {e}\")\n", - " continue\n", - "\n", - " # --- 确定统计哪一天的时间槽 ---\n", - " # 既然过滤的是昨天的数据,推测你需要生成【昨天】的负载报表\n", - " stats_date_str = yesterday_str\n", - " base_time = datetime.strptime(stats_date_str, \"%Y-%m-%d\")\n", - " stats_date_end = base_time + timedelta(days=1)\n", - " \n", - " print(f\"正在计算 [{stats_date_str}] 的 48 个时间槽并发情况...\")\n", - " \n", - " # 目标表单 Widget ID (请替换为真实 ID)\n", - " WIDGET_T_DATE = \"_widget_1771917185994\"\n", - " WIDGET_T_SLOT = \"_widget_1771917185995\"\n", - " WIDGET_T_COUNT = \"_widget_1771917185996\"\n", - " WIDGET_T_IDLE = \"_widget_1771917264186\"\n", - " WIDGET_T_NORMAL = \"_widget_1771917918805\"\n", - " WIDGET_T_BUSY = \"_widget_1771917918806\"\n", - "\n", - " slots = []\n", - " for i in range(48): \n", - " slot_start = base_time + timedelta(minutes=i*30)\n", - " slot_end = slot_start + timedelta(minutes=30)\n", - " \n", - " count = 0\n", - " for t in tasks:\n", - " # 判断任务是否与该30分钟槽有重叠\n", - " if t[\"start\"] < slot_end and slot_start < t[\"end\"]:\n", - " count += 1\n", - " \n", - " is_idle = 1 if count == 0 else 0\n", - " is_normal = 1 if 1 <= count <= 3 else 0\n", - " is_busy = 1 if count > 3 else 0\n", - " \n", - " slots.append({\n", - " WIDGET_T_DATE: {\"value\": stats_date_str},\n", - " WIDGET_T_SLOT: {\"value\": slot_start.strftime(\"%H:%M\")},\n", - " WIDGET_T_COUNT: {\"value\": count},\n", - " WIDGET_T_IDLE: {\"value\": is_idle},\n", - " WIDGET_T_NORMAL: {\"value\": is_normal},\n", - " WIDGET_T_BUSY: {\"value\": is_busy},\n", - " })\n", - "\n", - " if not slots:\n", - " return {\"code\": 200, \"msg\": \"未生成时间槽数据\"}\n", - " \n", - " payload = {\n", - " \"api_key\": APP_ID,\n", - " \"entry_id\": TARGET_FORM_ID,\n", - " \"data_list\": slots,\n", - " \"is_start_workflow\": \"false\", \n", - " \"is_start_trigger\": \"false\"\n", - " }\n", - " \n", - " print(f\"正在写入 {len(slots)} 条统计数据到目标表单...\")\n", - " result = entry_data_batch_create(payload)\n", - " \n", - " success_count = sum(1 for r in result if r and r.get(\"status\") == \"success\")\n", - " \n", - " return {\n", - " \"code\": 200, \n", - " \"msg\": f\"处理完成。统计日期:{stats_date_str}, 成功批次: {success_count}/{len(result)}\", \n", - " \"detail\": result\n", - " }\n", - "\n", - "# 如果需要直接运行测试\n", - "if __name__ == \"__main__\":\n", - " # 确保在实际运行前替换了所有 WIDGET_ID\n", - " res = calculate_server_load()\n", - " print(res)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "342edfbf", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "正在获取源数据...\n", - "已获取 90 条数据\n", - "已获取 180 条数据\n", - "已获取 270 条数据\n", - "已获取 360 条数据\n", - "已获取 450 条数据\n", - "已获取 540 条数据\n", - "已获取 630 条数据\n", - "已获取 720 条数据\n", - "已获取 810 条数据\n", - "已获取 900 条数据\n", - "已获取 990 条数据\n", - "已获取 1080 条数据\n", - "已获取 1170 条数据\n", - "已获取 1260 条数据\n", - "已获取 1350 条数据\n", - "已获取 1440 条数据\n", - "已获取 1530 条数据\n", - "已获取 1620 条数据\n", - "已获取 1710 条数据\n", - "已获取 1800 条数据\n", - "已获取 1890 条数据\n", - "已获取 1980 条数据\n", - "已获取 2070 条数据\n", - "已获取 2160 条数据\n", - "已获取 2250 条数据\n", - "已获取 2340 条数据\n", - "已获取 2430 条数据\n", - "已获取 2520 条数据\n", - "已获取 2610 条数据\n", - "已获取 2700 条数据\n", - "已获取 2790 条数据\n", - "已获取 2880 条数据\n", - "已获取 2970 条数据\n", - "已获取 3060 条数据\n", - "已获取 3150 条数据\n", - "已获取 3240 条数据\n", - "已获取 3330 条数据\n", - "已获取 3420 条数据\n", - "已获取 3510 条数据\n", - "已获取 3600 条数据\n", - "已获取 3690 条数据\n", - "已获取 3780 条数据\n", - "已获取 3870 条数据\n", - "已获取 3960 条数据\n", - "已获取 4050 条数据\n", - "已获取 4140 条数据\n", - "已获取 4230 条数据\n", - "已获取 4320 条数据\n", - "已获取 4410 条数据\n", - "已获取 4500 条数据\n", - "已获取 4590 条数据\n", - "已获取 4680 条数据\n", - "已获取 4770 条数据\n", - "已获取 4860 条数据\n", - "已获取 4950 条数据\n", - "已获取 5040 条数据\n", - "已获取 5130 条数据\n", - "已获取 5220 条数据\n", - "已获取 5310 条数据\n", - "已获取 5400 条数据\n", - "已获取 5490 条数据\n", - "已获取 5580 条数据\n", - "已获取 5670 条数据\n", - "已获取 5760 条数据\n", - "已获取 5850 条数据\n", - "已获取 5940 条数据\n", - "已获取 6030 条数据\n", - "已获取 6120 条数据\n", - "已获取 6210 条数据\n", - "已获取 6300 条数据\n", - "已获取 6390 条数据\n", - "已获取 6480 条数据\n", - "已获取 6570 条数据\n", - "已获取 6660 条数据\n", - "已获取 6750 条数据\n", - "已获取 6840 条数据\n", - "已获取 6930 条数据\n", - "已获取 7020 条数据\n", - "已获取 7110 条数据\n", - "已获取 7200 条数据\n", - "已获取 7290 条数据\n", - "已获取 7380 条数据\n", - "已获取 7470 条数据\n", - "已获取 7560 条数据\n", - "已获取 7650 条数据\n", - "已获取 7740 条数据\n", - "已获取 7830 条数据\n", - "已获取 7920 条数据\n", - "已获取 8010 条数据\n", - "已获取 8100 条数据\n", - "已获取 8190 条数据\n", - "已获取 8280 条数据\n", - "已获取 8370 条数据\n", - "已获取 8460 条数据\n", - "已获取 8550 条数据\n", - "已获取 8640 条数据\n", - "已获取 8730 条数据\n", - "已获取 8820 条数据\n", - "已获取 8910 条数据\n", - "已获取 9000 条数据\n", - "已获取 9090 条数据\n", - "已获取 9180 条数据\n", - "已获取 9270 条数据\n", - "已获取 9360 条数据\n", - "已获取 9450 条数据\n", - "已获取 9540 条数据\n", - "已获取 9630 条数据\n", - "已获取 9720 条数据\n", - "已获取 9810 条数据\n", - "已获取 9900 条数据\n", - "已获取 9990 条数据\n", - "已获取 10080 条数据\n", - "已获取 10170 条数据\n", - "已获取 10260 条数据\n", - "已获取 10350 条数据\n", - "已获取 10440 条数据\n", - "已获取 10530 条数据\n", - "已获取 10620 条数据\n", - "已获取 10710 条数据\n", - "已获取 10800 条数据\n", - "已获取 10890 条数据\n", - "已获取 10980 条数据\n", - "已获取 11070 条数据\n", - "已获取 11160 条数据\n", - "已获取 11250 条数据\n", - "已获取 11340 条数据\n", - "已获取 11430 条数据\n", - "已获取 11520 条数据\n", - "已获取 11610 条数据\n", - "已获取 11700 条数据\n", - "已获取 11790 条数据\n", - "已获取 11880 条数据\n", - "已获取 11970 条数据\n", - "已获取 12060 条数据\n", - "已获取 12150 条数据\n", - "已获取 12240 条数据\n", - "已获取 12330 条数据\n", - "已获取 12420 条数据\n", - "已获取 12510 条数据\n", - "已获取 12600 条数据\n", - "已获取 12690 条数据\n", - "已获取 12780 条数据\n", - "已获取 12870 条数据\n", - "已获取 12960 条数据\n", - "已获取 13050 条数据\n", - "已获取 13140 条数据\n", - "已获取 13230 条数据\n", - "已获取 13320 条数据\n", - "已获取 13410 条数据\n", - "已获取 13500 条数据\n", - "已获取 13590 条数据\n", - "已获取 13680 条数据\n", - "已获取 13770 条数据\n", - "已获取 13860 条数据\n", - "已获取 13950 条数据\n", - "已获取 14040 条数据\n", - "已获取 14130 条数据\n", - "已获取 14220 条数据\n", - "已获取 14310 条数据\n", - "已获取 14400 条数据\n", - "已获取 14490 条数据\n", - "已获取 14580 条数据\n", - "已获取 14670 条数据\n", - "已获取 14760 条数据\n", - "已获取 14850 条数据\n", - "已获取 14940 条数据\n", - "已获取 15030 条数据\n", - "已获取 15096 条数据\n" - ] + ], + "metadata": { + "kernelspec": { + "display_name": "F6+宜搭+其它", + "language": "python", + "name": "python3" }, - { - "ename": "AttributeError", - "evalue": "'str' object has no attribute 'get'", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mAttributeError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[2]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m result = \u001b[43mcalculate_server_load\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 2\u001b[39m result\n", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 226\u001b[39m, in \u001b[36mcalculate_server_load\u001b[39m\u001b[34m()\u001b[39m\n\u001b[32m 223\u001b[39m tasks = []\n\u001b[32m 224\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m item \u001b[38;5;129;01min\u001b[39;00m tasks_raw:\n\u001b[32m 225\u001b[39m \u001b[38;5;66;03m# 使用 Widget ID 获取值\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m226\u001b[39m s_val = \u001b[43mitem\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43mWIDGET_START_TIME\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m(\u001b[33m'\u001b[39m\u001b[33mvalue\u001b[39m\u001b[33m'\u001b[39m)\n\u001b[32m 227\u001b[39m e_val = item.get(WIDGET_END_TIME, {}).get(\u001b[33m'\u001b[39m\u001b[33mvalue\u001b[39m\u001b[33m'\u001b[39m)\n\u001b[32m 229\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m s_val \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m e_val:\n", - "\u001b[31mAttributeError\u001b[39m: 'str' object has no attribute 'get'" - ] + "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" } - ], - "source": [ - "result = calculate_server_load()\n", - "result" - ] }, - { - "cell_type": "code", - "execution_count": 3, - "id": "60531b14", - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'tasks_raw' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mNameError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[3]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[43mtasks_raw\u001b[49m\n", - "\u001b[31mNameError\u001b[39m: name 'tasks_raw' is not defined" - ] - } - ], - "source": [ - "tasks_raw" - ] - } - ], - "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 + "nbformat": 4, + "nbformat_minor": 5 } diff --git a/张阳脚本/简道云刷数据/续约待办历史数据刷写.ipynb b/张阳脚本/简道云刷数据/续约待办历史数据刷写.ipynb index 9384231..ccf7f6d 100644 --- a/张阳脚本/简道云刷数据/续约待办历史数据刷写.ipynb +++ b/张阳脚本/简道云刷数据/续约待办历史数据刷写.ipynb @@ -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": { diff --git a/张阳脚本/钉钉群消息获取.ipynb b/张阳脚本/钉钉群消息获取.ipynb index 54f657b..8e20167 100644 --- a/张阳脚本/钉钉群消息获取.ipynb +++ b/张阳脚本/钉钉群消息获取.ipynb @@ -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}\")" ] } ],