Files
saas/test/日常回访手动派发与删除.ipynb
T
2025-08-12 13:43:10 +08:00

3900 lines
237 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "## 删除",
"id": "c7303c5dd84188ab"
},
{
"cell_type": "code",
"id": "initial_id",
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2025-06-03T03:53:43.061901Z",
"start_time": "2025-06-03T03:53:12.897231Z"
}
},
"source": [
"import pandas as pd\n",
"import datetime\n",
"import os\n",
"import time\n",
"import requests\n",
"from api import API\n",
"import re\n",
"from back_ground_module import CommonModule\n",
"from log_config import configure_task_logger, configure_error_task_logger\n",
"\n",
"api_instance = API()\n",
"df = pd.read_excel(r\"C:\\Users\\ADMINI~1.DES\\AppData\\Local\\Temp\\7zOCE0E044D\\日常回访表_20250603114854.xlsx\",sheet_name=\"Sheet1\")\n",
"for index, row in df.iterrows():\n",
" data_id = row[\"data_id\"]\n",
" payload = {\n",
" \"api_key\": \"675b900991ad2491c69389ca\",\n",
" \"entry_id\": \"675b9c63925cd404038a6b86\",\n",
" \"data_id\": data_id,\n",
"\n",
" }\n",
" api_instance.entry_data_delete(payload)\n",
" "
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n",
"返回结果: {'status': 'success'}\n"
]
}
],
"execution_count": 3
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## 派发\n",
"id": "f7683c6f1c3d5ec3"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-04-16T05:59:36.298115Z",
"start_time": "2025-04-16T05:59:35.413539Z"
}
},
"cell_type": "code",
"source": [
"import pandas as pd\n",
"import datetime\n",
"import os\n",
"import time\n",
"import requests\n",
"from api import API\n",
"import re\n",
"from back_ground_module import CommonModule\n",
"from log_config import configure_task_logger, configure_error_task_logger\n",
"import json\n",
"import ast\n",
"\n",
"api_instance = API()\n",
"df = pd.read_excel(r\"C:\\Users\\Administrator.DESKTOP-7IC2USJ\\Desktop\\派发1.xlsx\", sheet_name=\"Sheet2\")\n",
"df['_widget_1734590278288'] = df['_widget_1734590278288'].astype(str)\n",
"df['_widget_1734590278289'] = df['_widget_1734590278289'].astype(str)\n",
"df['_widget_1734590278290'] = df['_widget_1734590278290'].astype(str)\n",
"df['_widget_1734590278291'] = df['_widget_1734590278291'].astype(str)\n",
"df['_widget_1735290738545'] = df['_widget_1735290738545'].astype(str)\n",
"df.fillna(value=\"\", inplace=True)\n",
"data_dict = df.to_dict(orient='list')\n",
"row_dict = df.to_dict(orient='records')\n",
"\n",
"def filter_empty_values(data):\n",
" \"\"\"过滤空值,并将每个值包装在 {'value': ...} 结构中\"\"\"\n",
" return {key: {\"value\": value} for key, value in data.items() if value not in [None, \"\"]}\n",
"\n",
"for row in row_dict:\n",
" # 1. 过滤空值并包装值\n",
" filtered_row = filter_empty_values(row)\n",
" if not filtered_row:\n",
" continue\n",
"\n",
" # 3. 构建payload\n",
" payload = {\n",
" \"api_key\": \"675b900991ad2491c69389ca\",\n",
" \"entry_id\": \"675b9c63925cd404038a6b86\",\n",
" \"is_start_workflow\": \"true\",\n",
" \"data\": filtered_row,\n",
" }\n",
"\n",
" # 4. 打印和发送请求\n",
" print(json.dumps(payload, indent=2, ensure_ascii=False))\n",
" result = api_instance.data_batch_create(payload)\n",
" print(result)"
],
"id": "c826e6fd80ad7658",
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Administrator.DESKTOP-7IC2USJ\\AppData\\Local\\Temp\\ipykernel_19920\\4269952668.py:20: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\n",
" df.fillna(value=\"\", inplace=True)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{\n",
" \"api_key\": \"675b900991ad2491c69389ca\",\n",
" \"entry_id\": \"675b9c63925cd404038a6b86\",\n",
" \"is_start_workflow\": \"true\",\n",
" \"data\": {\n",
" \"_widget_1734590278288\": {\n",
" \"value\": \"2480455276729100000\"\n",
" },\n",
" \"_widget_1734590278289\": {\n",
" \"value\": \"1143206052848260\"\n",
" },\n",
" \"_widget_1734590278290\": {\n",
" \"value\": \"311003461041349\"\n",
" },\n",
" \"_widget_1734590278291\": {\n",
" \"value\": \"110740004537832000\"\n",
" },\n",
" \"_widget_1735290738545\": {\n",
" \"value\": \"1143206052848260\"\n",
" },\n",
" \"_widget_1734073342350\": {\n",
" \"value\": \"√\"\n",
" },\n",
" \"_widget_1735004315757\": {\n",
" \"value\": \"√\"\n",
" },\n",
" \"_widget_1735004315756\": {\n",
" \"value\": \"√\"\n",
" },\n",
" \"_widget_1735004315755\": {\n",
" \"value\": \"√\"\n",
" },\n",
" \"_widget_1735004315754\": {\n",
" \"value\": \"△\"\n",
" },\n",
" \"_widget_1735004315753\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315752\": {\n",
" \"value\": \"△\"\n",
" },\n",
" \"_widget_1735004315751\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315750\": {\n",
" \"value\": \"△\"\n",
" },\n",
" \"_widget_1735004315749\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315748\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315747\": {\n",
" \"value\": \"△\"\n",
" },\n",
" \"_widget_1735004315746\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315745\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315744\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315743\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315742\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315741\": {\n",
" \"value\": \"△\"\n",
" },\n",
" \"_widget_1734073342352\": {\n",
" \"value\": \"△\"\n",
" },\n",
" \"_widget_1735004315763\": {\n",
" \"value\": \"是\"\n",
" },\n",
" \"_widget_1735106258016\": {\n",
" \"value\": \"是\"\n",
" },\n",
" \"_widget_1735106258036\": {\n",
" \"value\": \"是\"\n",
" },\n",
" \"_widget_1735106258086\": {\n",
" \"value\": \"是\"\n",
" },\n",
" \"_widget_1735106258112\": {\n",
" \"value\": \"否\"\n",
" },\n",
" \"_widget_1735004315765\": {\n",
" \"value\": \"是\"\n",
" },\n",
" \"_widget_1735106258038\": {\n",
" \"value\": \"否\"\n",
" },\n",
" \"_widget_1735106258018\": {\n",
" \"value\": \"是\"\n",
" },\n",
" \"_widget_1735107354650\": {\n",
" \"value\": \"否\"\n",
" },\n",
" \"_widget_1735106258141\": {\n",
" \"value\": \"否\"\n",
" },\n",
" \"_widget_1735107355618\": {\n",
" \"value\": \"否\"\n",
" },\n",
" \"_widget_1735106258088\": {\n",
" \"value\": \"是\"\n",
" },\n",
" \"_widget_1734590278279\": {\n",
" \"value\": \"泰州市泰和汽车修理厂\"\n",
" },\n",
" \"_widget_1735112931760\": {\n",
" \"value\": 168822842966671008\n",
" },\n",
" \"_widget_1735112931761\": {\n",
" \"value\": 24320717914899300\n",
" },\n",
" \"_widget_1734590278281\": {\n",
" \"value\": \"泰州市泰和汽车修理厂\"\n",
" },\n",
" \"_widget_1734590278292\": {\n",
" \"value\": \"续约后90天回访\"\n",
" },\n",
" \"_widget_1734321349021\": {\n",
" \"value\": \"67ebe3c068c8051b724a0e0c\"\n",
" },\n",
" \"_widget_1742548684369\": {\n",
" \"value\": \"关怀使用情况,促进更多功能使用,提升系统使用深度。\"\n",
" },\n",
" \"_widget_1734590278266\": {\n",
" \"value\": \"华东区域\"\n",
" },\n",
" \"_widget_1734590278285\": {\n",
" \"value\": \"华东1区\"\n",
" },\n",
" \"_widget_1734590278284\": {\n",
" \"value\": \"江苏省\"\n",
" },\n",
" \"_widget_1734590278283\": {\n",
" \"value\": \"泰州市\"\n",
" },\n",
" \"_widget_1734590278282\": {\n",
" \"value\": \"海陵区\"\n",
" },\n",
" \"_widget_1734590278278\": {\n",
" \"value\": \"D\"\n",
" },\n",
" \"_widget_1734590278277\": {\n",
" \"value\": \"重要客户(SVIP\"\n",
" },\n",
" \"_widget_1734590278276\": {\n",
" \"value\": \"5账号\"\n",
" },\n",
" \"_widget_1734590278275\": {\n",
" \"value\": \"单账号\"\n",
" },\n",
" \"_widget_1734590278274\": {\n",
" \"value\": \"E.S(旧)\"\n",
" },\n",
" \"_widget_1734590278273\": {\n",
" \"value\": \"第10年\"\n",
" },\n",
" \"_widget_1734590278272\": {\n",
" \"value\": \"成熟\"\n",
" },\n",
" \"_widget_1734590278271\": {\n",
" \"value\": \"单店\"\n",
" },\n",
" \"_widget_1734590278267\": {\n",
" \"value\": \"薛玉俊\"\n",
" },\n",
" \"_widget_1734590278287\": {\n",
" \"value\": 18052619366\n",
" },\n",
" \"_widget_1734590278286\": {\n",
" \"value\": \"进阶版\"\n",
" },\n",
" \"_widget_1734590278280\": {\n",
" \"value\": \"CHS201512110264\"\n",
" },\n",
" \"_widget_1735096489244\": {\n",
" \"value\": \"2025-04-15T08:45:55.907Z\"\n",
" },\n",
" \"_widget_1742895342914\": {\n",
" \"value\": \"保养,洗车,维修,轮胎,钣喷\"\n",
" },\n",
" \"_widget_1742895342915\": {\n",
" \"value\": 6\n",
" }\n",
" }\n",
"}\n",
"返回结果: {'data': {'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2025-04-16T05:59:34.505Z', 'updateTime': '2025-04-16T05:59:34.506Z', 'deleteTime': None, 'flowState': 0, '_widget_1734590278281': '泰州市泰和汽车修理厂', '_widget_1734590278277': '重要客户(SVIP', '_widget_1734590278286': '进阶版', '_widget_1734590278278': 'D', '_widget_1734590278279': '泰州市泰和汽车修理厂', '_widget_1734590278288': None, '_widget_1735096489244': '2025-04-15T08:45:55.907Z', '_widget_1734590278292': '续约后90天回访', '_widget_1734321349021': '67ebe3c068c8051b724a0e0c', '_widget_1742548684369': '关怀使用情况,促进更多功能使用,提升系统使用深度。', '_widget_1742895342914': '保养,洗车,维修,轮胎,钣喷', '_widget_1742895342915': '6', '_widget_1742895342916': [], '_widget_1744596110482': '', '_widget_1744681425824': '', '_widget_1744681425822': '', '_widget_1744681426080': '', '_widget_1735004315763': '是', '_widget_1735004315765': '是', '_widget_1734591440478': '', '_widget_1735526457050': '', '_widget_1736414756201': '', '_widget_1734592065745': '', '_widget_1744593781029': '', '_widget_1735004315768': '', '_widget_1735004315769': '', '_widget_1744622070539': '', '_widget_1735004315767': '', '_widget_1735106258016': '是', '_widget_1735106258018': '是', '_widget_1735106258020': '', '_widget_1735526457110': '', '_widget_1736414756203': '', '_widget_1735106258022': '', '_widget_1744593781128': '', '_widget_1735106258023': '', '_widget_1735106258024': '', '_widget_1744596110993': '', '_widget_1735106258025': '', '_widget_1735107354648': '', '_widget_1735107354650': '否', '_widget_1735107354652': '', '_widget_1735526457120': '', '_widget_1736414756213': '', '_widget_1735107354654': '', '_widget_1744622070527': '', '_widget_1735107354655': '', '_widget_1744685581305': '', '_widget_1735107354656': '', '_widget_1744622070529': '', '_widget_1735107354657': '', '_widget_1735106258086': '是', '_widget_1735106258088': '是', '_widget_1735106258090': '', '_widget_1735526457114': '', '_widget_1736414756207': '', '_widget_1735106258092': '', '_widget_1744622070531': '', '_widget_1735106258093': '', '_widget_1744685581307': '', '_widget_1735106258094': '', '_widget_1744622070533': '', '_widget_1735106258095': '', '_widget_1735107355740': '', '_widget_1735107355742': '', '_widget_1735107355744': '', '_widget_1735526457144': '', '_widget_1736414756237': '', '_widget_1735107355746': '', '_widget_1744622070535': '', '_widget_1735107355747': '', '_widget_1744685581693': '', '_widget_1735107355748': '', '_widget_1744622070537': '', '_widget_1735107355749': '', '_widget_1735107354811': '', '_widget_1735107354813': '', '_widget_1735107354815': '', '_widget_1735526457124': '', '_widget_1736414756217': '', '_widget_1735107354817': '', '_widget_1744622070649': '', '_widget_1735107354818': '', '_widget_1744622070651': '', '_widget_1735107354819': '', '_widget_1744685581695': '', '_widget_1735107354820': '', '_widget_1735106258036': '是', '_widget_1735106258038': '否', '_widget_1735106258040': '', '_widget_1735526457112': '', '_widget_1736414756205': '', '_widget_1735106258042': '', '_widget_1744622070763': '', '_widget_1735106258043': '', '_widget_1744685581827': '', '_widget_1735106258044': '', '_widget_1744622070765': '', '_widget_1735106258045': '', '_widget_1735106258112': '否', '_widget_1735106258114': '', '_widget_1735106258116': '', '_widget_1735526457116': '', '_widget_1736414756209': '', '_widget_1735106258118': '', '_widget_1744622070767': '', '_widget_1735106258119': '', '_widget_1744622070769': '', '_widget_1735106258120': '', '_widget_1744685581960': '', '_widget_1735106258121': '', '_widget_1735106258141': '否', '_widget_1735106258143': '', '_widget_1735106258145': '', '_widget_1735526457118': '', '_widget_1736414756211': '', '_widget_1735106258147': '', '_widget_1744622070885': '', '_widget_1735106258148': '', '_widget_1744622070887': '', '_widget_1735106258149': '', '_widget_1744685582094': '', '_widget_1735106258150': '', '_widget_1735107355093': '', '_widget_1735107355095': '', '_widget_1735107355097': '', '_widget_1735526457130': '', '_widget_1736414756223': '', '_widget_1735107355099': '', '_widget_1744622071005': '', '_widget_1735107355100': '', '_widget_1744622071007': '', '_widget_1735107355101': '', '_widget_1744685582096': '', '_widget_1735107355102': '', '_widget_1735107355618': '否', '_widget_1735107355620': '', '_widget_1735107355622': '', '_widget_1735526457142': '', '_widget_1736414756235': '', '_widget_1735107355624': '', '_widget_1744622071127': '', '_widget_1735107355625': '', '_widget_1744622071129': '', '_widget_1735107355626': '', '_widget_1744685582098': '', '_widget_1735107355627': '', '_widget_1735107355143': '', '_widget_1735107355145': '', '_widget_1735107355147': '', '_widget_1735526457132': '', '_widget_1736414756225': '', '_widget_1735107355149': '', '_widget_1744622071131': '', '_widget_1735107355150': '', '_widget_1744622071133': '', '_widget_1735107355151': '', '_widget_1744685582100': '', '_widget_1735107355152': '', '_widget_1735107355333': '', '_widget_1735107355335': '', '_widget_1735107355337': '', '_widget_1735526457136': '', '_widget_1736414756229': '', '_widget_1735107355339': '', '_widget_1744622071135': '', '_widget_1735107355340': '', '_widget_1744622071137': '', '_widget_1735107355341': '', '_widget_1744685582238': '', '_widget_1735107355342': '', '_widget_1735107354980': '', '_widget_1735107354982': '', '_widget_1735107354984': '', '_widget_1735526457128': '', '_widget_1736414756221': '', '_widget_1735107354986': '', '_widget_1744622071263': '', '_widget_1735107354987': '', '_widget_1744622071265': '', '_widget_1735107354988': '', '_widget_1744685582240': '', '_widget_1735107354989': '', '_widget_1734590278274': 'E.S(旧)', '_widget_1734590278267': '薛玉俊', '_widget_1734590278287': '18052619366', '_widget_1734590278271': '单店', '_widget_1734590278276': '5账号', '_widget_1734590278275': '单账号', '_widget_1734590278273': '第10年', '_widget_1734590278272': '成熟', '_widget_1734590278280': 'CHS201512110264', '_widget_1734590278289': None, '_widget_1734590278290': {'name': '肖军', 'username': '311003461041349', 'status': 1, 'type': 0, 'departments': [122314630, 122323520], 'integrate_id': '311003461041349'}, '_widget_1734590278291': None, '_widget_1735290738545': None, '_widget_1734590278266': '华东区域', '_widget_1734590278285': '华东1区', '_widget_1734590278284': '江苏省', '_widget_1734590278283': '泰州市', '_widget_1734590278282': '海陵区', '_widget_1735112931760': '168822842966671000', '_widget_1735112931761': '24320717914899300', '_widget_1735107354725': '', '_widget_1735107354727': '', '_widget_1735107354729': '', '_widget_1735526457122': '', '_widget_1736414756215': '', '_widget_1735107354731': '', '_widget_1735107354732': '', '_widget_1735107354733': '', '_widget_1735107354734': '', '_widget_1735107354906': '', '_widget_1735107354908': '', '_widget_1735107354910': '', '_widget_1735526457126': '', '_widget_1736414756219': '', '_widget_1735107354912': '', '_widget_1735107354913': '', '_widget_1735107354914': '', '_widget_1735107354915': '', '_widget_1735107355235': '', '_widget_1735107355237': '', '_widget_1735107355239': '', '_widget_1735526457134': '', '_widget_1736414756227': '', '_widget_1735107355241': '', '_widget_1735107355242': '', '_widget_1735107355243': '', '_widget_1735107355244': '', '_widget_1735107355392': '', '_widget_1735107355394': '', '_widget_1735107355396': '', '_widget_1735526457138': '', '_widget_1736414756231': '', '_widget_1735107355398': '', '_widget_1735107355399': '', '_widget_1735107355400': '', '_widget_1735107355401': '', '_widget_1735107355502': '', '_widget_1735107355504': '', '_widget_1735107355506': '', '_widget_1735526457140': '', '_widget_1736414756233': '', '_widget_1735107355508': '', '_widget_1735107355509': '', '_widget_1735107355510': '', '_widget_1735107355511': '', '_widget_1734073342350': '√', '_widget_1735004315757': '√', '_widget_1735004315756': '√', '_widget_1735004315755': '√', '_widget_1735004315754': '△', '_widget_1735004315753': '×', '_widget_1735004315752': '△', '_widget_1735004315751': '×', '_widget_1735004315750': '△', '_widget_1735004315749': '×', '_widget_1735004315748': '×', '_widget_1735004315747': '△', '_widget_1735004315746': '×', '_widget_1735004315745': '×', '_widget_1735004315744': '×', '_widget_1735004315743': '×', '_widget_1735004315742': '×', '_widget_1735004315741': '△', '_widget_1734073342352': '△', '_widget_1735544637578': '', '_widget_1742204915356': '', '_widget_1742204915358': '', '_id': '67ff47466091a6e9fbb38c6a', 'appId': '675b900991ad2491c69389ca', 'entryId': '675b9c63925cd404038a6b86'}}\n",
"{'data': {'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2025-04-16T05:59:34.505Z', 'updateTime': '2025-04-16T05:59:34.506Z', 'deleteTime': None, 'flowState': 0, '_widget_1734590278281': '泰州市泰和汽车修理厂', '_widget_1734590278277': '重要客户(SVIP', '_widget_1734590278286': '进阶版', '_widget_1734590278278': 'D', '_widget_1734590278279': '泰州市泰和汽车修理厂', '_widget_1734590278288': None, '_widget_1735096489244': '2025-04-15T08:45:55.907Z', '_widget_1734590278292': '续约后90天回访', '_widget_1734321349021': '67ebe3c068c8051b724a0e0c', '_widget_1742548684369': '关怀使用情况,促进更多功能使用,提升系统使用深度。', '_widget_1742895342914': '保养,洗车,维修,轮胎,钣喷', '_widget_1742895342915': '6', '_widget_1742895342916': [], '_widget_1744596110482': '', '_widget_1744681425824': '', '_widget_1744681425822': '', '_widget_1744681426080': '', '_widget_1735004315763': '是', '_widget_1735004315765': '是', '_widget_1734591440478': '', '_widget_1735526457050': '', '_widget_1736414756201': '', '_widget_1734592065745': '', '_widget_1744593781029': '', '_widget_1735004315768': '', '_widget_1735004315769': '', '_widget_1744622070539': '', '_widget_1735004315767': '', '_widget_1735106258016': '是', '_widget_1735106258018': '是', '_widget_1735106258020': '', '_widget_1735526457110': '', '_widget_1736414756203': '', '_widget_1735106258022': '', '_widget_1744593781128': '', '_widget_1735106258023': '', '_widget_1735106258024': '', '_widget_1744596110993': '', '_widget_1735106258025': '', '_widget_1735107354648': '', '_widget_1735107354650': '否', '_widget_1735107354652': '', '_widget_1735526457120': '', '_widget_1736414756213': '', '_widget_1735107354654': '', '_widget_1744622070527': '', '_widget_1735107354655': '', '_widget_1744685581305': '', '_widget_1735107354656': '', '_widget_1744622070529': '', '_widget_1735107354657': '', '_widget_1735106258086': '是', '_widget_1735106258088': '是', '_widget_1735106258090': '', '_widget_1735526457114': '', '_widget_1736414756207': '', '_widget_1735106258092': '', '_widget_1744622070531': '', '_widget_1735106258093': '', '_widget_1744685581307': '', '_widget_1735106258094': '', '_widget_1744622070533': '', '_widget_1735106258095': '', '_widget_1735107355740': '', '_widget_1735107355742': '', '_widget_1735107355744': '', '_widget_1735526457144': '', '_widget_1736414756237': '', '_widget_1735107355746': '', '_widget_1744622070535': '', '_widget_1735107355747': '', '_widget_1744685581693': '', '_widget_1735107355748': '', '_widget_1744622070537': '', '_widget_1735107355749': '', '_widget_1735107354811': '', '_widget_1735107354813': '', '_widget_1735107354815': '', '_widget_1735526457124': '', '_widget_1736414756217': '', '_widget_1735107354817': '', '_widget_1744622070649': '', '_widget_1735107354818': '', '_widget_1744622070651': '', '_widget_1735107354819': '', '_widget_1744685581695': '', '_widget_1735107354820': '', '_widget_1735106258036': '是', '_widget_1735106258038': '否', '_widget_1735106258040': '', '_widget_1735526457112': '', '_widget_1736414756205': '', '_widget_1735106258042': '', '_widget_1744622070763': '', '_widget_1735106258043': '', '_widget_1744685581827': '', '_widget_1735106258044': '', '_widget_1744622070765': '', '_widget_1735106258045': '', '_widget_1735106258112': '否', '_widget_1735106258114': '', '_widget_1735106258116': '', '_widget_1735526457116': '', '_widget_1736414756209': '', '_widget_1735106258118': '', '_widget_1744622070767': '', '_widget_1735106258119': '', '_widget_1744622070769': '', '_widget_1735106258120': '', '_widget_1744685581960': '', '_widget_1735106258121': '', '_widget_1735106258141': '否', '_widget_1735106258143': '', '_widget_1735106258145': '', '_widget_1735526457118': '', '_widget_1736414756211': '', '_widget_1735106258147': '', '_widget_1744622070885': '', '_widget_1735106258148': '', '_widget_1744622070887': '', '_widget_1735106258149': '', '_widget_1744685582094': '', '_widget_1735106258150': '', '_widget_1735107355093': '', '_widget_1735107355095': '', '_widget_1735107355097': '', '_widget_1735526457130': '', '_widget_1736414756223': '', '_widget_1735107355099': '', '_widget_1744622071005': '', '_widget_1735107355100': '', '_widget_1744622071007': '', '_widget_1735107355101': '', '_widget_1744685582096': '', '_widget_1735107355102': '', '_widget_1735107355618': '否', '_widget_1735107355620': '', '_widget_1735107355622': '', '_widget_1735526457142': '', '_widget_1736414756235': '', '_widget_1735107355624': '', '_widget_1744622071127': '', '_widget_1735107355625': '', '_widget_1744622071129': '', '_widget_1735107355626': '', '_widget_1744685582098': '', '_widget_1735107355627': '', '_widget_1735107355143': '', '_widget_1735107355145': '', '_widget_1735107355147': '', '_widget_1735526457132': '', '_widget_1736414756225': '', '_widget_1735107355149': '', '_widget_1744622071131': '', '_widget_1735107355150': '', '_widget_1744622071133': '', '_widget_1735107355151': '', '_widget_1744685582100': '', '_widget_1735107355152': '', '_widget_1735107355333': '', '_widget_1735107355335': '', '_widget_1735107355337': '', '_widget_1735526457136': '', '_widget_1736414756229': '', '_widget_1735107355339': '', '_widget_1744622071135': '', '_widget_1735107355340': '', '_widget_1744622071137': '', '_widget_1735107355341': '', '_widget_1744685582238': '', '_widget_1735107355342': '', '_widget_1735107354980': '', '_widget_1735107354982': '', '_widget_1735107354984': '', '_widget_1735526457128': '', '_widget_1736414756221': '', '_widget_1735107354986': '', '_widget_1744622071263': '', '_widget_1735107354987': '', '_widget_1744622071265': '', '_widget_1735107354988': '', '_widget_1744685582240': '', '_widget_1735107354989': '', '_widget_1734590278274': 'E.S(旧)', '_widget_1734590278267': '薛玉俊', '_widget_1734590278287': '18052619366', '_widget_1734590278271': '单店', '_widget_1734590278276': '5账号', '_widget_1734590278275': '单账号', '_widget_1734590278273': '第10年', '_widget_1734590278272': '成熟', '_widget_1734590278280': 'CHS201512110264', '_widget_1734590278289': None, '_widget_1734590278290': {'name': '肖军', 'username': '311003461041349', 'status': 1, 'type': 0, 'departments': [122314630, 122323520], 'integrate_id': '311003461041349'}, '_widget_1734590278291': None, '_widget_1735290738545': None, '_widget_1734590278266': '华东区域', '_widget_1734590278285': '华东1区', '_widget_1734590278284': '江苏省', '_widget_1734590278283': '泰州市', '_widget_1734590278282': '海陵区', '_widget_1735112931760': '168822842966671000', '_widget_1735112931761': '24320717914899300', '_widget_1735107354725': '', '_widget_1735107354727': '', '_widget_1735107354729': '', '_widget_1735526457122': '', '_widget_1736414756215': '', '_widget_1735107354731': '', '_widget_1735107354732': '', '_widget_1735107354733': '', '_widget_1735107354734': '', '_widget_1735107354906': '', '_widget_1735107354908': '', '_widget_1735107354910': '', '_widget_1735526457126': '', '_widget_1736414756219': '', '_widget_1735107354912': '', '_widget_1735107354913': '', '_widget_1735107354914': '', '_widget_1735107354915': '', '_widget_1735107355235': '', '_widget_1735107355237': '', '_widget_1735107355239': '', '_widget_1735526457134': '', '_widget_1736414756227': '', '_widget_1735107355241': '', '_widget_1735107355242': '', '_widget_1735107355243': '', '_widget_1735107355244': '', '_widget_1735107355392': '', '_widget_1735107355394': '', '_widget_1735107355396': '', '_widget_1735526457138': '', '_widget_1736414756231': '', '_widget_1735107355398': '', '_widget_1735107355399': '', '_widget_1735107355400': '', '_widget_1735107355401': '', '_widget_1735107355502': '', '_widget_1735107355504': '', '_widget_1735107355506': '', '_widget_1735526457140': '', '_widget_1736414756233': '', '_widget_1735107355508': '', '_widget_1735107355509': '', '_widget_1735107355510': '', '_widget_1735107355511': '', '_widget_1734073342350': '√', '_widget_1735004315757': '√', '_widget_1735004315756': '√', '_widget_1735004315755': '√', '_widget_1735004315754': '△', '_widget_1735004315753': '×', '_widget_1735004315752': '△', '_widget_1735004315751': '×', '_widget_1735004315750': '△', '_widget_1735004315749': '×', '_widget_1735004315748': '×', '_widget_1735004315747': '△', '_widget_1735004315746': '×', '_widget_1735004315745': '×', '_widget_1735004315744': '×', '_widget_1735004315743': '×', '_widget_1735004315742': '×', '_widget_1735004315741': '△', '_widget_1734073342352': '△', '_widget_1735544637578': '', '_widget_1742204915356': '', '_widget_1742204915358': '', '_id': '67ff47466091a6e9fbb38c6a', 'appId': '675b900991ad2491c69389ca', 'entryId': '675b9c63925cd404038a6b86'}}\n",
"{\n",
" \"api_key\": \"675b900991ad2491c69389ca\",\n",
" \"entry_id\": \"675b9c63925cd404038a6b86\",\n",
" \"is_start_workflow\": \"true\",\n",
" \"data\": {\n",
" \"_widget_1734590278288\": {\n",
" \"value\": \"1824444134779520\"\n",
" },\n",
" \"_widget_1734590278289\": {\n",
" \"value\": \"3051357221235920\"\n",
" },\n",
" \"_widget_1734590278290\": {\n",
" \"value\": \"25366033037741900\"\n",
" },\n",
" \"_widget_1734590278291\": {\n",
" \"value\": \"52909055823302000\"\n",
" },\n",
" \"_widget_1735290738545\": {\n",
" \"value\": \"3051357221235920\"\n",
" },\n",
" \"_widget_1734073342350\": {\n",
" \"value\": \"√\"\n",
" },\n",
" \"_widget_1735004315757\": {\n",
" \"value\": \"√\"\n",
" },\n",
" \"_widget_1735004315756\": {\n",
" \"value\": \"△\"\n",
" },\n",
" \"_widget_1735004315755\": {\n",
" \"value\": \"√\"\n",
" },\n",
" \"_widget_1735004315754\": {\n",
" \"value\": \"△\"\n",
" },\n",
" \"_widget_1735004315753\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315752\": {\n",
" \"value\": \"△\"\n",
" },\n",
" \"_widget_1735004315751\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315750\": {\n",
" \"value\": \"△\"\n",
" },\n",
" \"_widget_1735004315749\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315748\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315747\": {\n",
" \"value\": \"△\"\n",
" },\n",
" \"_widget_1735004315746\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315745\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315744\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315743\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315742\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1735004315741\": {\n",
" \"value\": \"×\"\n",
" },\n",
" \"_widget_1734073342352\": {\n",
" \"value\": \"△\"\n",
" },\n",
" \"_widget_1735004315763\": {\n",
" \"value\": \"是\"\n",
" },\n",
" \"_widget_1735106258016\": {\n",
" \"value\": \"是\"\n",
" },\n",
" \"_widget_1735106258036\": {\n",
" \"value\": \"否\"\n",
" },\n",
" \"_widget_1735106258086\": {\n",
" \"value\": \"是\"\n",
" },\n",
" \"_widget_1735106258112\": {\n",
" \"value\": \"否\"\n",
" },\n",
" \"_widget_1735004315765\": {\n",
" \"value\": \"是\"\n",
" },\n",
" \"_widget_1735106258038\": {\n",
" \"value\": \"否\"\n",
" },\n",
" \"_widget_1735106258018\": {\n",
" \"value\": \"是\"\n",
" },\n",
" \"_widget_1735107354650\": {\n",
" \"value\": \"否\"\n",
" },\n",
" \"_widget_1735106258141\": {\n",
" \"value\": \"否\"\n",
" },\n",
" \"_widget_1735107355618\": {\n",
" \"value\": \"否\"\n",
" },\n",
" \"_widget_1735106258088\": {\n",
" \"value\": \"否\"\n",
" },\n",
" \"_widget_1734590278279\": {\n",
" \"value\": \"沈阳市铁西区路奔汽车服务中心一店\"\n",
" },\n",
" \"_widget_1735112931760\": {\n",
" \"value\": 10545724654287599616\n",
" },\n",
" \"_widget_1735112931761\": {\n",
" \"value\": 10545724654287599616\n",
" },\n",
" \"_widget_1734590278281\": {\n",
" \"value\": \"沈阳市铁西区路奔汽车服务中心\"\n",
" },\n",
" \"_widget_1734590278292\": {\n",
" \"value\": \"续约后90天回访\"\n",
" },\n",
" \"_widget_1734321349021\": {\n",
" \"value\": \"67ebe3d074e070c607aacc97\"\n",
" },\n",
" \"_widget_1742548684369\": {\n",
" \"value\": \"关怀使用情况,促进更多功能使用,提升系统使用深度。\"\n",
" },\n",
" \"_widget_1734590278266\": {\n",
" \"value\": \"东北区域\"\n",
" },\n",
" \"_widget_1734590278285\": {\n",
" \"value\": \"东北1区\"\n",
" },\n",
" \"_widget_1734590278284\": {\n",
" \"value\": \"辽宁省\"\n",
" },\n",
" \"_widget_1734590278283\": {\n",
" \"value\": \"沈阳市\"\n",
" },\n",
" \"_widget_1734590278282\": {\n",
" \"value\": \"铁西区\"\n",
" },\n",
" \"_widget_1734590278278\": {\n",
" \"value\": \"C\"\n",
" },\n",
" \"_widget_1734590278277\": {\n",
" \"value\": \"重要客户(SVIP\"\n",
" },\n",
" \"_widget_1734590278276\": {\n",
" \"value\": \"5账号\"\n",
" },\n",
" \"_widget_1734590278275\": {\n",
" \"value\": \"5账号\"\n",
" },\n",
" \"_widget_1734590278274\": {\n",
" \"value\": \"E.S(旧)\"\n",
" },\n",
" \"_widget_1734590278273\": {\n",
" \"value\": \"第8年\"\n",
" },\n",
" \"_widget_1734590278272\": {\n",
" \"value\": \"成熟\"\n",
" },\n",
" \"_widget_1734590278271\": {\n",
" \"value\": \"连锁\"\n",
" },\n",
" \"_widget_1734590278267\": {\n",
" \"value\": \"吴海艳\"\n",
" },\n",
" \"_widget_1734590278287\": {\n",
" \"value\": 15940528133\n",
" },\n",
" \"_widget_1734590278286\": {\n",
" \"value\": \"基础版\"\n",
" },\n",
" \"_widget_1734590278280\": {\n",
" \"value\": \"CHS201803122373\"\n",
" },\n",
" \"_widget_1735096489244\": {\n",
" \"value\": \"2025-04-15T08:45:56.082Z\"\n",
" },\n",
" \"_widget_1742895342914\": {\n",
" \"value\": \"保养,维修,轮胎\"\n",
" },\n",
" \"_widget_1742895342915\": {\n",
" \"value\": 3\n",
" }\n",
" }\n",
"}\n",
"返回结果: {'data': {'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2025-04-16T05:59:34.827Z', 'updateTime': '2025-04-16T05:59:34.828Z', 'deleteTime': None, 'flowState': 0, '_widget_1734590278281': '沈阳市铁西区路奔汽车服务中心', '_widget_1734590278277': '重要客户(SVIP', '_widget_1734590278286': '基础版', '_widget_1734590278278': 'C', '_widget_1734590278279': '沈阳市铁西区路奔汽车服务中心一店', '_widget_1734590278288': None, '_widget_1735096489244': '2025-04-15T08:45:56.082Z', '_widget_1734590278292': '续约后90天回访', '_widget_1734321349021': '67ebe3d074e070c607aacc97', '_widget_1742548684369': '关怀使用情况,促进更多功能使用,提升系统使用深度。', '_widget_1742895342914': '保养,维修,轮胎', '_widget_1742895342915': '3', '_widget_1742895342916': [], '_widget_1744596110482': '', '_widget_1744681425824': '', '_widget_1744681425822': '', '_widget_1744681426080': '', '_widget_1735004315763': '是', '_widget_1735004315765': '是', '_widget_1734591440478': '', '_widget_1735526457050': '', '_widget_1736414756201': '', '_widget_1734592065745': '', '_widget_1744593781029': '', '_widget_1735004315768': '', '_widget_1735004315769': '', '_widget_1744622070539': '', '_widget_1735004315767': '', '_widget_1735106258016': '是', '_widget_1735106258018': '是', '_widget_1735106258020': '', '_widget_1735526457110': '', '_widget_1736414756203': '', '_widget_1735106258022': '', '_widget_1744593781128': '', '_widget_1735106258023': '', '_widget_1735106258024': '', '_widget_1744596110993': '', '_widget_1735106258025': '', '_widget_1735107354648': '', '_widget_1735107354650': '否', '_widget_1735107354652': '', '_widget_1735526457120': '', '_widget_1736414756213': '', '_widget_1735107354654': '', '_widget_1744622070527': '', '_widget_1735107354655': '', '_widget_1744685581305': '', '_widget_1735107354656': '', '_widget_1744622070529': '', '_widget_1735107354657': '', '_widget_1735106258086': '是', '_widget_1735106258088': '否', '_widget_1735106258090': '', '_widget_1735526457114': '', '_widget_1736414756207': '', '_widget_1735106258092': '', '_widget_1744622070531': '', '_widget_1735106258093': '', '_widget_1744685581307': '', '_widget_1735106258094': '', '_widget_1744622070533': '', '_widget_1735106258095': '', '_widget_1735107355740': '', '_widget_1735107355742': '', '_widget_1735107355744': '', '_widget_1735526457144': '', '_widget_1736414756237': '', '_widget_1735107355746': '', '_widget_1744622070535': '', '_widget_1735107355747': '', '_widget_1744685581693': '', '_widget_1735107355748': '', '_widget_1744622070537': '', '_widget_1735107355749': '', '_widget_1735107354811': '', '_widget_1735107354813': '', '_widget_1735107354815': '', '_widget_1735526457124': '', '_widget_1736414756217': '', '_widget_1735107354817': '', '_widget_1744622070649': '', '_widget_1735107354818': '', '_widget_1744622070651': '', '_widget_1735107354819': '', '_widget_1744685581695': '', '_widget_1735107354820': '', '_widget_1735106258036': '否', '_widget_1735106258038': '否', '_widget_1735106258040': '', '_widget_1735526457112': '', '_widget_1736414756205': '', '_widget_1735106258042': '', '_widget_1744622070763': '', '_widget_1735106258043': '', '_widget_1744685581827': '', '_widget_1735106258044': '', '_widget_1744622070765': '', '_widget_1735106258045': '', '_widget_1735106258112': '否', '_widget_1735106258114': '', '_widget_1735106258116': '', '_widget_1735526457116': '', '_widget_1736414756209': '', '_widget_1735106258118': '', '_widget_1744622070767': '', '_widget_1735106258119': '', '_widget_1744622070769': '', '_widget_1735106258120': '', '_widget_1744685581960': '', '_widget_1735106258121': '', '_widget_1735106258141': '否', '_widget_1735106258143': '', '_widget_1735106258145': '', '_widget_1735526457118': '', '_widget_1736414756211': '', '_widget_1735106258147': '', '_widget_1744622070885': '', '_widget_1735106258148': '', '_widget_1744622070887': '', '_widget_1735106258149': '', '_widget_1744685582094': '', '_widget_1735106258150': '', '_widget_1735107355093': '', '_widget_1735107355095': '', '_widget_1735107355097': '', '_widget_1735526457130': '', '_widget_1736414756223': '', '_widget_1735107355099': '', '_widget_1744622071005': '', '_widget_1735107355100': '', '_widget_1744622071007': '', '_widget_1735107355101': '', '_widget_1744685582096': '', '_widget_1735107355102': '', '_widget_1735107355618': '否', '_widget_1735107355620': '', '_widget_1735107355622': '', '_widget_1735526457142': '', '_widget_1736414756235': '', '_widget_1735107355624': '', '_widget_1744622071127': '', '_widget_1735107355625': '', '_widget_1744622071129': '', '_widget_1735107355626': '', '_widget_1744685582098': '', '_widget_1735107355627': '', '_widget_1735107355143': '', '_widget_1735107355145': '', '_widget_1735107355147': '', '_widget_1735526457132': '', '_widget_1736414756225': '', '_widget_1735107355149': '', '_widget_1744622071131': '', '_widget_1735107355150': '', '_widget_1744622071133': '', '_widget_1735107355151': '', '_widget_1744685582100': '', '_widget_1735107355152': '', '_widget_1735107355333': '', '_widget_1735107355335': '', '_widget_1735107355337': '', '_widget_1735526457136': '', '_widget_1736414756229': '', '_widget_1735107355339': '', '_widget_1744622071135': '', '_widget_1735107355340': '', '_widget_1744622071137': '', '_widget_1735107355341': '', '_widget_1744685582238': '', '_widget_1735107355342': '', '_widget_1735107354980': '', '_widget_1735107354982': '', '_widget_1735107354984': '', '_widget_1735526457128': '', '_widget_1736414756221': '', '_widget_1735107354986': '', '_widget_1744622071263': '', '_widget_1735107354987': '', '_widget_1744622071265': '', '_widget_1735107354988': '', '_widget_1744685582240': '', '_widget_1735107354989': '', '_widget_1734590278274': 'E.S(旧)', '_widget_1734590278267': '吴海艳', '_widget_1734590278287': '15940528133', '_widget_1734590278271': '连锁', '_widget_1734590278276': '5账号', '_widget_1734590278275': '5账号', '_widget_1734590278273': '第8年', '_widget_1734590278272': '成熟', '_widget_1734590278280': 'CHS201803122373', '_widget_1734590278289': None, '_widget_1734590278290': None, '_widget_1734590278291': None, '_widget_1735290738545': None, '_widget_1734590278266': '东北区域', '_widget_1734590278285': '东北1区', '_widget_1734590278284': '辽宁省', '_widget_1734590278283': '沈阳市', '_widget_1734590278282': '铁西区', '_widget_1735112931760': '10545724654287600000', '_widget_1735112931761': '10545724654287600000', '_widget_1735107354725': '', '_widget_1735107354727': '', '_widget_1735107354729': '', '_widget_1735526457122': '', '_widget_1736414756215': '', '_widget_1735107354731': '', '_widget_1735107354732': '', '_widget_1735107354733': '', '_widget_1735107354734': '', '_widget_1735107354906': '', '_widget_1735107354908': '', '_widget_1735107354910': '', '_widget_1735526457126': '', '_widget_1736414756219': '', '_widget_1735107354912': '', '_widget_1735107354913': '', '_widget_1735107354914': '', '_widget_1735107354915': '', '_widget_1735107355235': '', '_widget_1735107355237': '', '_widget_1735107355239': '', '_widget_1735526457134': '', '_widget_1736414756227': '', '_widget_1735107355241': '', '_widget_1735107355242': '', '_widget_1735107355243': '', '_widget_1735107355244': '', '_widget_1735107355392': '', '_widget_1735107355394': '', '_widget_1735107355396': '', '_widget_1735526457138': '', '_widget_1736414756231': '', '_widget_1735107355398': '', '_widget_1735107355399': '', '_widget_1735107355400': '', '_widget_1735107355401': '', '_widget_1735107355502': '', '_widget_1735107355504': '', '_widget_1735107355506': '', '_widget_1735526457140': '', '_widget_1736414756233': '', '_widget_1735107355508': '', '_widget_1735107355509': '', '_widget_1735107355510': '', '_widget_1735107355511': '', '_widget_1734073342350': '√', '_widget_1735004315757': '√', '_widget_1735004315756': '△', '_widget_1735004315755': '√', '_widget_1735004315754': '△', '_widget_1735004315753': '×', '_widget_1735004315752': '△', '_widget_1735004315751': '×', '_widget_1735004315750': '△', '_widget_1735004315749': '×', '_widget_1735004315748': '×', '_widget_1735004315747': '△', '_widget_1735004315746': '×', '_widget_1735004315745': '×', '_widget_1735004315744': '×', '_widget_1735004315743': '×', '_widget_1735004315742': '×', '_widget_1735004315741': '×', '_widget_1734073342352': '△', '_widget_1735544637578': '', '_widget_1742204915356': '', '_widget_1742204915358': '', '_id': '67ff47462baaeba275b44199', 'appId': '675b900991ad2491c69389ca', 'entryId': '675b9c63925cd404038a6b86'}}\n",
"{'data': {'creator': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'updater': {'name': 'F6汽车科技', 'username': '#admin', 'status': 1, 'type': 0}, 'deleter': None, 'createTime': '2025-04-16T05:59:34.827Z', 'updateTime': '2025-04-16T05:59:34.828Z', 'deleteTime': None, 'flowState': 0, '_widget_1734590278281': '沈阳市铁西区路奔汽车服务中心', '_widget_1734590278277': '重要客户(SVIP', '_widget_1734590278286': '基础版', '_widget_1734590278278': 'C', '_widget_1734590278279': '沈阳市铁西区路奔汽车服务中心一店', '_widget_1734590278288': None, '_widget_1735096489244': '2025-04-15T08:45:56.082Z', '_widget_1734590278292': '续约后90天回访', '_widget_1734321349021': '67ebe3d074e070c607aacc97', '_widget_1742548684369': '关怀使用情况,促进更多功能使用,提升系统使用深度。', '_widget_1742895342914': '保养,维修,轮胎', '_widget_1742895342915': '3', '_widget_1742895342916': [], '_widget_1744596110482': '', '_widget_1744681425824': '', '_widget_1744681425822': '', '_widget_1744681426080': '', '_widget_1735004315763': '是', '_widget_1735004315765': '是', '_widget_1734591440478': '', '_widget_1735526457050': '', '_widget_1736414756201': '', '_widget_1734592065745': '', '_widget_1744593781029': '', '_widget_1735004315768': '', '_widget_1735004315769': '', '_widget_1744622070539': '', '_widget_1735004315767': '', '_widget_1735106258016': '是', '_widget_1735106258018': '是', '_widget_1735106258020': '', '_widget_1735526457110': '', '_widget_1736414756203': '', '_widget_1735106258022': '', '_widget_1744593781128': '', '_widget_1735106258023': '', '_widget_1735106258024': '', '_widget_1744596110993': '', '_widget_1735106258025': '', '_widget_1735107354648': '', '_widget_1735107354650': '否', '_widget_1735107354652': '', '_widget_1735526457120': '', '_widget_1736414756213': '', '_widget_1735107354654': '', '_widget_1744622070527': '', '_widget_1735107354655': '', '_widget_1744685581305': '', '_widget_1735107354656': '', '_widget_1744622070529': '', '_widget_1735107354657': '', '_widget_1735106258086': '是', '_widget_1735106258088': '否', '_widget_1735106258090': '', '_widget_1735526457114': '', '_widget_1736414756207': '', '_widget_1735106258092': '', '_widget_1744622070531': '', '_widget_1735106258093': '', '_widget_1744685581307': '', '_widget_1735106258094': '', '_widget_1744622070533': '', '_widget_1735106258095': '', '_widget_1735107355740': '', '_widget_1735107355742': '', '_widget_1735107355744': '', '_widget_1735526457144': '', '_widget_1736414756237': '', '_widget_1735107355746': '', '_widget_1744622070535': '', '_widget_1735107355747': '', '_widget_1744685581693': '', '_widget_1735107355748': '', '_widget_1744622070537': '', '_widget_1735107355749': '', '_widget_1735107354811': '', '_widget_1735107354813': '', '_widget_1735107354815': '', '_widget_1735526457124': '', '_widget_1736414756217': '', '_widget_1735107354817': '', '_widget_1744622070649': '', '_widget_1735107354818': '', '_widget_1744622070651': '', '_widget_1735107354819': '', '_widget_1744685581695': '', '_widget_1735107354820': '', '_widget_1735106258036': '否', '_widget_1735106258038': '否', '_widget_1735106258040': '', '_widget_1735526457112': '', '_widget_1736414756205': '', '_widget_1735106258042': '', '_widget_1744622070763': '', '_widget_1735106258043': '', '_widget_1744685581827': '', '_widget_1735106258044': '', '_widget_1744622070765': '', '_widget_1735106258045': '', '_widget_1735106258112': '否', '_widget_1735106258114': '', '_widget_1735106258116': '', '_widget_1735526457116': '', '_widget_1736414756209': '', '_widget_1735106258118': '', '_widget_1744622070767': '', '_widget_1735106258119': '', '_widget_1744622070769': '', '_widget_1735106258120': '', '_widget_1744685581960': '', '_widget_1735106258121': '', '_widget_1735106258141': '否', '_widget_1735106258143': '', '_widget_1735106258145': '', '_widget_1735526457118': '', '_widget_1736414756211': '', '_widget_1735106258147': '', '_widget_1744622070885': '', '_widget_1735106258148': '', '_widget_1744622070887': '', '_widget_1735106258149': '', '_widget_1744685582094': '', '_widget_1735106258150': '', '_widget_1735107355093': '', '_widget_1735107355095': '', '_widget_1735107355097': '', '_widget_1735526457130': '', '_widget_1736414756223': '', '_widget_1735107355099': '', '_widget_1744622071005': '', '_widget_1735107355100': '', '_widget_1744622071007': '', '_widget_1735107355101': '', '_widget_1744685582096': '', '_widget_1735107355102': '', '_widget_1735107355618': '否', '_widget_1735107355620': '', '_widget_1735107355622': '', '_widget_1735526457142': '', '_widget_1736414756235': '', '_widget_1735107355624': '', '_widget_1744622071127': '', '_widget_1735107355625': '', '_widget_1744622071129': '', '_widget_1735107355626': '', '_widget_1744685582098': '', '_widget_1735107355627': '', '_widget_1735107355143': '', '_widget_1735107355145': '', '_widget_1735107355147': '', '_widget_1735526457132': '', '_widget_1736414756225': '', '_widget_1735107355149': '', '_widget_1744622071131': '', '_widget_1735107355150': '', '_widget_1744622071133': '', '_widget_1735107355151': '', '_widget_1744685582100': '', '_widget_1735107355152': '', '_widget_1735107355333': '', '_widget_1735107355335': '', '_widget_1735107355337': '', '_widget_1735526457136': '', '_widget_1736414756229': '', '_widget_1735107355339': '', '_widget_1744622071135': '', '_widget_1735107355340': '', '_widget_1744622071137': '', '_widget_1735107355341': '', '_widget_1744685582238': '', '_widget_1735107355342': '', '_widget_1735107354980': '', '_widget_1735107354982': '', '_widget_1735107354984': '', '_widget_1735526457128': '', '_widget_1736414756221': '', '_widget_1735107354986': '', '_widget_1744622071263': '', '_widget_1735107354987': '', '_widget_1744622071265': '', '_widget_1735107354988': '', '_widget_1744685582240': '', '_widget_1735107354989': '', '_widget_1734590278274': 'E.S(旧)', '_widget_1734590278267': '吴海艳', '_widget_1734590278287': '15940528133', '_widget_1734590278271': '连锁', '_widget_1734590278276': '5账号', '_widget_1734590278275': '5账号', '_widget_1734590278273': '第8年', '_widget_1734590278272': '成熟', '_widget_1734590278280': 'CHS201803122373', '_widget_1734590278289': None, '_widget_1734590278290': None, '_widget_1734590278291': None, '_widget_1735290738545': None, '_widget_1734590278266': '东北区域', '_widget_1734590278285': '东北1区', '_widget_1734590278284': '辽宁省', '_widget_1734590278283': '沈阳市', '_widget_1734590278282': '铁西区', '_widget_1735112931760': '10545724654287600000', '_widget_1735112931761': '10545724654287600000', '_widget_1735107354725': '', '_widget_1735107354727': '', '_widget_1735107354729': '', '_widget_1735526457122': '', '_widget_1736414756215': '', '_widget_1735107354731': '', '_widget_1735107354732': '', '_widget_1735107354733': '', '_widget_1735107354734': '', '_widget_1735107354906': '', '_widget_1735107354908': '', '_widget_1735107354910': '', '_widget_1735526457126': '', '_widget_1736414756219': '', '_widget_1735107354912': '', '_widget_1735107354913': '', '_widget_1735107354914': '', '_widget_1735107354915': '', '_widget_1735107355235': '', '_widget_1735107355237': '', '_widget_1735107355239': '', '_widget_1735526457134': '', '_widget_1736414756227': '', '_widget_1735107355241': '', '_widget_1735107355242': '', '_widget_1735107355243': '', '_widget_1735107355244': '', '_widget_1735107355392': '', '_widget_1735107355394': '', '_widget_1735107355396': '', '_widget_1735526457138': '', '_widget_1736414756231': '', '_widget_1735107355398': '', '_widget_1735107355399': '', '_widget_1735107355400': '', '_widget_1735107355401': '', '_widget_1735107355502': '', '_widget_1735107355504': '', '_widget_1735107355506': '', '_widget_1735526457140': '', '_widget_1736414756233': '', '_widget_1735107355508': '', '_widget_1735107355509': '', '_widget_1735107355510': '', '_widget_1735107355511': '', '_widget_1734073342350': '√', '_widget_1735004315757': '√', '_widget_1735004315756': '△', '_widget_1735004315755': '√', '_widget_1735004315754': '△', '_widget_1735004315753': '×', '_widget_1735004315752': '△', '_widget_1735004315751': '×', '_widget_1735004315750': '△', '_widget_1735004315749': '×', '_widget_1735004315748': '×', '_widget_1735004315747': '△', '_widget_1735004315746': '×', '_widget_1735004315745': '×', '_widget_1735004315744': '×', '_widget_1735004315743': '×', '_widget_1735004315742': '×', '_widget_1735004315741': '×', '_widget_1734073342352': '△', '_widget_1735544637578': '', '_widget_1742204915356': '', '_widget_1742204915358': '', '_id': '67ff47462baaeba275b44199', 'appId': '675b900991ad2491c69389ca', 'entryId': '675b9c63925cd404038a6b86'}}\n"
]
}
],
"execution_count": 26
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## 新签手动替换",
"id": "b337701ceaab5253"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-04-16T06:08:38.123412Z",
"start_time": "2025-04-16T06:08:22.519801Z"
}
},
"cell_type": "code",
"source": [
"import datetime\n",
"import os\n",
"import time\n",
"\n",
"import requests\n",
"\n",
"from api import API\n",
"import re\n",
"from back_ground_module import CommonModule\n",
"import pandas as pd\n",
"from log_config import configure_task_logger, configure_error_task_logger\n",
"\n",
"api_instance = API()\n",
"common_module = CommonModule()\n",
"# start_time = datetime.datetime.now()\n",
"\n",
"# 获取已经配置好的常规日志记录器\n",
"logger = configure_task_logger()\n",
"\n",
"# 获取已经配置好的错误任务日志记录器\n",
"error_task_logger = configure_error_task_logger()\n",
"\n",
"\n",
"class NewServicesRevisit:\n",
" \"\"\"\n",
" 用于处理新签服务回访的类。\n",
" \"\"\"\n",
"\n",
" def __init__(self):\n",
" self.get_feature_usage = None\n",
" self.saas_create_time = None\n",
" self.index = None\n",
" self.date_one = None\n",
" self.data_NGV_S = None\n",
" self.date_list = None\n",
" self.Smart_detection = None\n",
" self.service_remind = None\n",
" self.NGV_data_list = None\n",
" self.permissions_table = None\n",
" self.staff_id_list = None\n",
" self.json_list = []\n",
" self.policy_recognition = None\n",
" self.widget_list = None\n",
" self.private_domain = None\n",
" self.public_domain = None\n",
" self.public_domain_list = None\n",
" self.different_industries = None\n",
" self.different_industries_list = None\n",
" self.groupnotification = None\n",
"\n",
" def calculate_date_one(self, start_offset=0):\n",
" \"\"\"\n",
" 计算从当前日期(或指定偏移量的日期)开始,往前遍历遇到date_list中日期的次数。\n",
"\n",
" 参数:\n",
" - start_offset: 从当前日期起始的天数偏移量,默认为0(即今天)。负数表示过去,正数表示未来。\n",
"\n",
" 返回:\n",
" - date_one: 遍历到date_list中日期的次数。\n",
" \"\"\"\n",
" jdy_date = datetime.datetime.now().strftime(\"%Y-%m-%d\")\n",
" jdy_start_time = datetime.datetime.now().strftime(\"%Y-%m-%d \")\n",
" # 设置起始日期\n",
" now_time = datetime.datetime.now() + datetime.timedelta(days=start_offset)\n",
"\n",
" # 初始化计数器\n",
" date_one = 1\n",
"\n",
" # 检查起始日期是否在date_list中\n",
" if now_time.strftime(\"%Y-%m-%d\") in self.date_list:\n",
" date_one = 0\n",
" print(\"开始次数:\", date_one)\n",
"\n",
" print(\"当前日期:\", now_time.strftime(\"%Y-%m-%d\"))\n",
"\n",
" # 遍历日期\n",
" for i in range(1, 10):\n",
" new_date = now_time + datetime.timedelta(days=-i)\n",
" new_date_str = new_date.strftime(\"%Y-%m-%d\")\n",
" print(\"遍历日期:\", new_date_str)\n",
" if new_date_str in self.date_list:\n",
" date_one += 1\n",
" print(\"节假日期:\", new_date_str)\n",
" else:\n",
" break\n",
"\n",
" print(\"遍历次数:\", date_one)\n",
" return date_one\n",
"\n",
" @staticmethod\n",
" def download_url_content(url, save_path):\n",
" \"\"\"\n",
" 下载指定 URL 的内容并保存到本地文件。\n",
"\n",
" :param url: 要下载内容的 URL\n",
" :param save_path: 保存文件的路径\n",
" \"\"\"\n",
" try:\n",
" # 发送 GET 请求以获取内容\n",
" response = requests.get(url, stream=True)\n",
" response.raise_for_status() # 如果响应状态码不是 200,抛出异常\n",
"\n",
" # 确保保存目录存在\n",
" os.makedirs(os.path.dirname(save_path), exist_ok=True)\n",
"\n",
" # 将内容写入文件\n",
" with open(save_path, 'wb') as file:\n",
" for chunk in response.iter_content(chunk_size=8192): # 分块写入,避免占用过多内存\n",
" if chunk: # 过滤掉空块\n",
" file.write(chunk)\n",
"\n",
" print(f\"文件已成功保存到 {save_path}\")\n",
"\n",
" except requests.exceptions.RequestException as e:\n",
" print(f\"下载失败: {e}\")\n",
" except Exception as e:\n",
" print(f\"发生错误: {e}\")\n",
"\n",
" def load_all_data(self):\n",
" \"\"\"加载所有必要的数据表\"\"\"\n",
" # 省市区人员关系表\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"676512ac3e54dc3159460c0a\"}\n",
" json_dict = api_instance.entry_data_list(payload)\n",
" self.json_list = json_dict.get(\"data\")\n",
"\n",
" # 获取简道云员工id\n",
" payload = {\"api_key\": \"6694d3c4fcb69ca9a111a6c4\",\n",
" \"entry_id\": \"6769204a1902c9341340a1bc\",\n",
" }\n",
" staff_id = api_instance.entry_data_list(payload)\n",
" self.staff_id_list = staff_id.get(\"data\") # api请求格式,将数据封装在data字典里\n",
"\n",
" # 获取权限表信息\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"675b96c14e839f90fef1647c\"}\n",
" self.permissions_table = api_instance.entry_data_list(payload).get(\"data\", [])\n",
"\n",
" # 获取NGV数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"675bb02bd2d53c2034c665e4\"}\n",
" self.NGV_data_list = api_instance.entry_data_list(payload).get(\"data\", [])\n",
" # print(\"NGV获取后的类型:\", type(self.NGV_data_list))\n",
"\n",
" # 获取服务提醒-数据支持表单数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"676bb7bda3029720f1083e99\"}\n",
" self.service_remind = api_instance.entry_data_list(payload).get(\"data\", [])\n",
"\n",
" # 获取智能检测-数据支持表单数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"676bb99649ab3ac975af6e39\"}\n",
" self.Smart_detection = api_instance.entry_data_list(payload).get(\"data\", [])\n",
"\n",
" # 获取功能使用情况表\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"6763bbf657bd8fb76fcb41b2\"}\n",
" self.get_feature_usage = api_instance.entry_data_list(payload).get(\"data\", [])\n",
"\n",
" # 获取保单识别表\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"6773a60d30ed87ff9f68d3c5\"}\n",
" self.policy_recognition = api_instance.entry_data_list(payload).get(\"data\")\n",
" # 提取 _widget_1735632397600 的值并存储在列表中\n",
" self.widget_list = [item['_widget_1735632397600'] for item in self.policy_recognition]\n",
"\n",
" # 获取私域小程序-数据支持表单数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"67e0f0fae622896749ba5087\"}\n",
" self.private_domain = api_instance.entry_data_list(payload).get(\"data\", [])\n",
" # 提取 _widget_1742795002375 的值并存储在列表中\n",
" # self.private_domain = [item['_widget_1742795002375'] for item in self.private_domain]\n",
"\n",
" # 获取公域小程序-数据支持表单数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"67e0c702c8f603b997980999\"}\n",
" self.public_domain = api_instance.entry_data_list(payload).get(\"data\", [])\n",
" # 提取 _widget_1742784257506 的值并存储在列表中\n",
" self.public_domain_list = [item['_widget_1742784257506'] for item in self.public_domain]\n",
"\n",
" # 获取异业合作-数据支持表单数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"67e24fdd8dfcfa918e17c30b\"}\n",
" self.different_industries = api_instance.entry_data_list(payload).get(\"data\", [])\n",
" # 提取 _widget_1742784257506 的值并存储在列表中\n",
" self.different_industries_list = [item['_widget_1742884829007'] for item in self.different_industries]\n",
"\n",
" # 获取短信-数据支持表单数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"67e5107198ba1b20d5df3974\"}\n",
" self.groupnotification = api_instance.entry_data_list(payload).get(\"data\", [])\n",
"\n",
" @staticmethod\n",
" def build_index(json_list):\n",
" index = {}\n",
" # print(json_list)\n",
" for json_item in json_list:\n",
" # json_item = json_item.get(\"data\")\n",
" # print(json_item)\n",
" try:\n",
" key = (json_item['_widget_1734677164861'], json_item['_widget_1734677164862'],\n",
" json_item['_widget_1734677164863']) # 省市区\n",
" if '_widget_1734677164871' not in json_item: # 日常回访客服\n",
" raise KeyError(\"缺少 '日常回访客服' 键\")\n",
" index[key] = json_item\n",
" except KeyError as e:\n",
" print(f\"警告:{e},跳过该条记录: {json_item}\")\n",
" continue\n",
" return index\n",
"\n",
" @staticmethod\n",
" def find_customer_service(province_name, city_name, area_name, index):\n",
" key = (province_name, city_name, area_name)\n",
" # print(index)\n",
" if key not in index:\n",
" return \"数据缺失: 未找到对应的日常回访客服\"\n",
"\n",
" return index[key]\n",
"\n",
" @staticmethod\n",
" def remove_parentheses(text: str) -> str:\n",
" # 使用正则表达式匹配并去除括号及其内容\n",
" # \\s* 表示匹配零个或多个空白字符(处理括号前后可能存在的空格)\n",
" # $ 和 $ 分别表示匹配左括号和右括号\n",
" # 中间的 .*? 表示非贪婪地匹配任意数量的字符(包括没有字符的情况)\n",
" cleaned_text = re.sub(r'\\s*$.*?$\\s*', '', text)\n",
" # 为了确保同时处理中文括号,再进行一次替换\n",
" cleaned_text = re.sub(r'\\s*.*?\\s*', '', cleaned_text)\n",
" return cleaned_text.strip() # 去除两端多余的空白字符\n",
"\n",
" @staticmethod\n",
" def get_staff_id(row_item, name):\n",
" \"\"\"辅助函数,用于获取员工ID\"\"\"\n",
" if str(row_item[\"_widget_1734942794144\"]) == str(name): # 检查姓名是否匹配\n",
" return row_item[\"_widget_1734942794145\"] # 返回员工ID\n",
" return None\n",
"\n",
" def assign_customer_service(self, province_name, city_name, area_name, index):\n",
" \"\"\"根据省市区派发给日常回访客服\"\"\"\n",
" try:\n",
" customer_service_info = self.find_customer_service(province_name, city_name, area_name, index)\n",
" relationship_manager = customer_service_info.get('_widget_1734677164864', {}).get('username') # 运营顾问\n",
" customer_service = customer_service_info.get('_widget_1734677164871', {}).get('username') # 日常回访客服\n",
" technician = customer_service_info.get('_widget_1734677164866', {}).get('username')\n",
" area_manager = customer_service_info.get('_widget_1734677164865', {}).get('username')\n",
" return relationship_manager, customer_service, technician, area_manager\n",
" except Exception as e:\n",
" print(f\"Error finding customer service: {e}\")\n",
" return \"分配失败,请检查\", \"分配失败,请检查\", \"分配失败,请检查\"\n",
"\n",
" @staticmethod\n",
" def up_JDY_status(up_jdy_date, up_jdy_start_time):\n",
" up_jdy_end_time = datetime.datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")\n",
"\n",
"\n",
"\n",
" def main(self):\n",
" up_jdy_date = datetime.datetime.now().strftime(\"%Y-%m-%d\")\n",
" up_jdy_start_time = datetime.datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")\n",
"\n",
" global png_url, key, upload_key\n",
" # self.load_all_data()\n",
"\n",
" self.date_list = common_module.get_holiday_list()\n",
" self.data_NGV_S = common_module.get_ngv_details(days_back=1).astype(str) # 获取data_NGV 并转为str\n",
" self.date_one = self.calculate_date_one(start_offset=0)\n",
" self.index = self.build_index(self.json_list)\n",
" self.saas_create_time_180 = 173 # 新签日期\n",
" self.saas_create_time_90 = 83 # 新签日期\n",
"\n",
" print(\"开始运行main\")\n",
" print(self.date_one)\n",
" for i in range(0, self.date_one): # 从NGV总表过滤\n",
" # now_time = datetime.datetime.now() + datetime.timedelta(days=-76)\n",
" # now_time = now_time + datetime.timedelta(days=-i)\n",
" now_time = datetime.datetime.now() + datetime.timedelta(days=-i)\n",
" today = now_time + datetime.timedelta(days=-self.saas_create_time_180)\n",
" formatted_today_180 = today.strftime(\"%Y-%m-%d\")\n",
" today = now_time + datetime.timedelta(days=-self.saas_create_time_90)\n",
" formatted_today_90 = today.strftime(\"%Y-%m-%d\")\n",
" print(\"SaaS开户回访日期:\", formatted_today_180, formatted_today_90)\n",
"\n",
" data_NGV = self.data_NGV_S.copy()\n",
"\n",
" def replace_values(series):\n",
" # 使用条件判断来进行替换\n",
" return series.apply(lambda x: '' if pd.isna(x) or x in ['NA', 'None', ''] else x)\n",
"\n",
" # 对整个DataFrame的所有列应用替换函数\n",
" data_NGV = data_NGV.apply(replace_values)\n",
" # data_NGV.to_csv(\"dayinNGV.csv\")\n",
"\n",
" # 定义优先级顺序\n",
" edition_order = ['皇冠版', '至尊版', '尊享版', '旗舰版', '标准版', '进阶版', '基础版', '入门版']\n",
" customer_type_order = [\"F\", \"E\", \"D\", \"C\", \"B\", \"A\"] # 索引越小优先级越高\n",
" group_grade_order = ['全国KAFMVP', '区域KAMVP', '重要客户(SVIP', '普通客户(VIP']\n",
"\n",
" # 创建映射字典,并为不在列表中的值设置默认值\n",
" edition_map = {edition: idx for idx, edition in enumerate(edition_order)}\n",
" customer_type_map = {ctype: idx for idx, ctype in enumerate(customer_type_order)}\n",
" group_grade_map = {grade: idx for idx, grade in enumerate(group_grade_order)}\n",
"\n",
" # 添加用于排序的新列,并处理不在映射字典中的值\n",
" data_NGV['edition_rank'] = data_NGV['saas_edition_fmt'].map(edition_map).fillna(0).astype(\n",
" int) # 缺失值用最高优先级填充\n",
" data_NGV['customer_type_rank'] = data_NGV['saas_customer_type'].map(customer_type_map).fillna(0).astype(int)\n",
" data_NGV['group_grade_rank'] = data_NGV['group_grade'].map(group_grade_map).fillna(0).astype(int)\n",
" # data_NGV.to_csv(\"88855.csv\")\n",
"\n",
" # 找到每组中 edition_rank 最小值对应的行\n",
" best_edition_idx = data_NGV.groupby('id_own_group')['edition_rank'].idxmin()\n",
" best_edition_rows = data_NGV.loc[best_edition_idx]\n",
" best_edition_rows['max_saas_edition'] = best_edition_rows['saas_edition_fmt']\n",
"\n",
" # 找到每组中 customer_type_rank 最小值对应的行\n",
" best_customer_type_idx = data_NGV.groupby('id_own_group')['customer_type_rank'].idxmin()\n",
" best_customer_type_rows = data_NGV.loc[best_customer_type_idx]\n",
" best_customer_type_rows['max_saas_customer_type'] = best_customer_type_rows['customer_type_rank'].apply(\n",
" lambda x: customer_type_order[x])\n",
"\n",
" # 找到每组中 group_grade_rank 最小值对应的行\n",
" best_group_grade_idx = data_NGV.groupby('id_own_group')['group_grade_rank'].idxmin()\n",
" best_group_grade_rows = data_NGV.loc[best_group_grade_idx]\n",
" best_group_grade_rows['max_group_grade'] = best_group_grade_rows['group_grade']\n",
"\n",
" # 合并最佳值回到原数据集\n",
" best_values = (\n",
" best_edition_rows[['id_own_group', 'max_saas_edition']]\n",
" .merge(best_customer_type_rows[['id_own_group', 'max_saas_customer_type']], on='id_own_group',\n",
" how='outer')\n",
" .merge(best_group_grade_rows[['id_own_group', 'max_group_grade']], on='id_own_group', how='outer')\n",
" )\n",
"\n",
" # 将最佳值合并回原数据集\n",
" data_NGV = data_NGV.merge(best_values, on='id_own_group', how='left')\n",
"\n",
" condition = (data_NGV['is_main_org'] == 1) & (data_NGV['org_status'] == '过期') # 步骤2: 过滤条件\n",
"\n",
" ngvv2 = data_NGV[condition]\n",
" # ngvv2.to_excel(r\"C:\\Users\\Administrator.DESKTOP-7IC2USJ\\Desktop\\NGVV2.xlsx\")\n",
"\n",
" data_NGV_V2 = data_NGV.copy() # 步骤3: 检查id_own_group是否存在于ngvv2中\n",
" data_NGV_V2['条件'] = (data_NGV_V2['org_type'] == \"一般\") & (data_NGV_V2['org_status'] == '留存') & (\n",
" data_NGV_V2['area_manager'] != '殷昊') & (\n",
" data_NGV_V2['area_manager'] != '孙玉蕾') & (\n",
" data_NGV_V2['is_main_org'] != 1)\n",
" data_NGV_V2 = data_NGV_V2.loc[data_NGV_V2[\"条件\"]]\n",
" # 步骤4: 过滤存在的记录\n",
" data_NGV_V2['exists_in_ngvv2'] = data_NGV_V2['id_own_group'].isin(ngvv2['id_own_group'])\n",
" filtered_data = data_NGV_V2[data_NGV_V2['exists_in_ngvv2']]\n",
"\n",
" fixed_order = ['皇冠版', '至尊版', '尊享版', '旗舰版', '标准版', '进阶版', '基础版', '入门版']\n",
" # sorted_items = sorted(filtered_data, key=lambda x: fixed_order.index(x))\n",
"\n",
" fixed_order_map = {edition: index for index, edition in enumerate(fixed_order)}\n",
" filtered_data['sort_key'] = filtered_data['saas_edition_fmt'].map(fixed_order_map)\n",
" filtered_data = filtered_data.sort_values(by='sort_key').drop('sort_key', axis=1)\n",
"\n",
" result = filtered_data.drop_duplicates(subset='id_own_group', keep='first')\n",
"\n",
" data_NGV['条件'] = (data_NGV['org_type'] == \"一般\") & (data_NGV['org_status'] == '留存') & (\n",
" data_NGV['area_manager'] != '殷昊') & (\n",
" data_NGV['area_manager'] != '孙玉蕾') & (\n",
" (data_NGV['saas_create_time'] == formatted_today_180) | (\n",
" data_NGV['saas_create_time'] == formatted_today_90)) & (\n",
" data_NGV['is_main_org'] == \"1\")\n",
"\n",
" data_NGV = data_NGV.loc[data_NGV[\"条件\"]]\n",
"\n",
" data_NGV = pd.concat([data_NGV, result], axis=0)\n",
" print(len(data_NGV), \"20250325\")\n",
"\n",
" # 定义一个函数,根据 saas_create_time 字段的值设置阶段列和主要目的列的值\n",
" def set_columns(row):\n",
" if row['saas_create_time'] == formatted_today_180:\n",
" row['跟进阶段'] = '新签后180天'\n",
" row['主要目的'] = '关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。'\n",
" elif row['saas_create_time'] == formatted_today_90:\n",
" row['跟进阶段'] = '新签后90天'\n",
" row['主要目的'] = '关怀使用情况,解答使用问题,强化培训,挖掘增购商机。'\n",
" else:\n",
" row['跟进阶段'] = \"派发异常请联系数据组!\" # 返回其他默认值\n",
" row['主要目的'] = \"派发异常请联系数据组!\" # 返回其他默认值\n",
" return row\n",
"\n",
" # 使用 apply 方法将函数应用到每一行\n",
" data_NGV = data_NGV.apply(set_columns, axis=1)\n",
"\n",
" print(\"SaaS开户回访人数:\", len(data_NGV))\n",
" print(data_NGV)\n",
"\n",
" # 重置索引\n",
" data_NGV = data_NGV.reset_index(drop=True)\n",
"\n",
" data_NGV = pd.read_excel(r\"C:\\Users\\Administrator.DESKTOP-7IC2USJ\\Desktop\\派发1.xlsx\", sheet_name=\"Sheet5\")\n",
"\n",
" for index_num, row in data_NGV.iterrows(): # 对过滤后的每一条进行派发\n",
" try:\n",
" # print(row[\"org_code\"]) # 数据验证\n",
" # print(row[\"service_impl_principal\"])\n",
" # print(row[\"area_manager\"])\n",
" # print(row[\"technician\"])\n",
" payload_dict = {}\n",
" saas_use_year = re.findall(r'第([0-9]+)年', row[\"saas_use_year\"])[0]\n",
"\n",
" NGV_roles = {\n",
" 'relationship_manager': row['service_impl_principal'], # 运营负责人\n",
" # 'relationship_manager': \"张阳\", # 运营负责人\n",
" 'area_manager': row['area_manager'], # 区域经理\n",
" 'technician': row['technician'], # 技术专家\n",
" 'salesmen': row['salesmen'], # 销售负责人\n",
" }\n",
"\n",
" for role, name in NGV_roles.items(): # 寻找对应的员工ID\n",
" for row_item in self.staff_id_list:\n",
" staff_id = self.get_staff_id(row_item, name)\n",
" if staff_id:\n",
" NGV_roles[role] = staff_id\n",
" break # 找到后退出循环\n",
" else:\n",
" NGV_roles[role] = None # 如果没有找到对应的员工ID\n",
"\n",
" # 回访人员: 需确认 四年以下 technician\n",
" if int(saas_use_year) < 4:\n",
"\n",
" relationship_manager, area_manager, technician, salesmen = [NGV_roles[role] for role in\n",
" ['relationship_manager', 'area_manager',\n",
" 'technician', 'salesmen']]\n",
"\n",
" # 如果未找到运营负责人,则根据省市区派发给日常回访客服\n",
" if not relationship_manager:\n",
" relationship_manager = self.assign_customer_service(\n",
" row['province_name'], row['city_name'], row['area_name'], self.index\n",
" )[0]\n",
" if not technician:\n",
" technician = self.assign_customer_service(\n",
" row['province_name'], row['city_name'], row['area_name'], self.index\n",
" )[2]\n",
" payload_dict.update({\n",
" \"_widget_1734590278288\": {\"value\": relationship_manager}, # 跟进人是运营负责人\n",
" })\n",
"\n",
" else:\n",
" salesmen = [NGV_roles[role] for role in\n",
" ['salesmen']]\n",
" # 直接根据省市区派发给日常回访客服\n",
" relationship_manager, customer_service, technician, area_manager = self.assign_customer_service(\n",
" row['province_name'], row['city_name'], row['area_name'], self.index\n",
" )\n",
" payload_dict.update({\n",
" \"_widget_1734590278288\": {\"value\": customer_service} # 跟进人是日常回访客服\n",
" })\n",
"\n",
" payload_dict.update({\n",
" # \"_widget_1734590278288\": {\"value\": relationship_manager}, # 跟进人是运营负责人\n",
" \"_widget_1734590278289\": {\"value\": relationship_manager}, # 运营负责人\n",
" \"_widget_1734590278290\": {\"value\": area_manager}, # 区域经理\n",
" \"_widget_1734590278291\": {\"value\": technician}, # 技术专家\n",
" \"_widget_1735290738545\": {\"value\": salesmen} # 销售负责人\n",
" })\n",
"\n",
" # 输出结果\n",
" print(\"SaaS开户回访人员:\", relationship_manager or \"未分配\")\n",
" print(\"SaaS技术专家:\", technician or \"未分配\")\n",
" print(\"SaaS区域经理:\", area_manager or \"未分配\")\n",
"\n",
" # 判断权限唯一值\n",
" # pattern = r'([\\u4e00-\\u9fa5]+)\\'\n",
" # match = re.search(pattern, row['max_group_grade'])\n",
" # group_grade = match.group(1)\n",
" group_grade = re.sub(r'[^]*', '', row['max_group_grade'])\n",
"\n",
" if not row['saas_customer_type'] or row['saas_customer_type'] == 'NA' or row[\n",
" 'saas_customer_type'] == 'None':\n",
" row['saas_customer_type'] = \"F\"\n",
"\n",
" NGV_store_level_key = group_grade + row['max_saas_edition'] + row['max_saas_customer_type']\n",
" print(\"权限唯一值:\", NGV_store_level_key)\n",
"\n",
" Billing = None\n",
" for item in self.permissions_table:\n",
" if NGV_store_level_key == item.get(\"_widget_1734056507963\"): # 合并(等级-类型-分层)\n",
" print(\"该门店开单的权限是:\", item.get(item.get(\"_widget_1734055617039\")))\n",
" Billing = item.get(\"_widget_1734055617039\") # 开单\n",
" Service_Alerts = item.get(\"_widget_1734055617040\") # 服务提醒\n",
" membership = item.get(\"_widget_1734055617041\") # 会员卡\n",
" SMS = item.get(\"_widget_1734055617042\") # 短信\n",
" Public_domain_applets = item.get(\"_widget_1734055617043\") # 公域小程序\n",
" Private_domain_applets = item.get(\"_widget_1734055617044\") # 私域小程序\n",
" Test_sheet = item.get(\"_widget_1734055617045\") # 检测单\n",
" AI_poster = item.get(\"_widget_1734055617046\") # AI海报\n",
" Business_wallets = item.get(\"_widget_1734055617047\") # 企业钱包\n",
" Precision_marketing = item.get(\"_widget_1734055617049\") # 精准营销\n",
" Paid_memberships = item.get(\"_widget_1734055617051\") # 付费会员\n",
" business_WeCom = item.get(\"_widget_1734055617052\") # 企业微信\n",
" Insurance_policy_identification = item.get(\"_widget_1734055617053\") # 保险单识别\n",
" Insurance_bots = item.get(\"_widget_1734055617054\") # 保险机器人\n",
" Camera_pick_up = item.get(\"_widget_1734055617055\") # 摄像头接车\n",
" Camera_billing = item.get(\"_widget_1734055617056\") # 摄像头开单\n",
" Transparent_workshop = item.get(\"_widget_1734055617057\") # 透明车间\n",
" Cross_industry_cooperation = item.get(\"_widget_1734055617058\") # 异业合作\n",
" BI_Insights = item.get(\"_widget_1734055617059\") # BI洞察\n",
"\n",
" payload_dict.update(\n",
" {\n",
" \"_widget_1734073342350\": {\"value\": Billing},\n",
" \"_widget_1735004315757\": {\"value\": Service_Alerts},\n",
" \"_widget_1735004315756\": {\"value\": membership},\n",
" \"_widget_1735004315755\": {\"value\": SMS},\n",
" \"_widget_1735004315754\": {\"value\": Public_domain_applets},\n",
" \"_widget_1735004315753\": {\"value\": Private_domain_applets},\n",
" \"_widget_1735004315752\": {\"value\": Test_sheet},\n",
" \"_widget_1735004315751\": {\"value\": AI_poster},\n",
" \"_widget_1735004315750\": {\"value\": Business_wallets},\n",
" \"_widget_1735004315749\": {\"value\": Precision_marketing},\n",
" \"_widget_1735004315748\": {\"value\": Paid_memberships},\n",
" \"_widget_1735004315747\": {\"value\": business_WeCom},\n",
" \"_widget_1735004315746\": {\"value\": Insurance_policy_identification},\n",
" \"_widget_1735004315745\": {\"value\": Insurance_bots},\n",
" \"_widget_1735004315744\": {\"value\": Camera_pick_up},\n",
" \"_widget_1735004315743\": {\"value\": Camera_billing},\n",
" \"_widget_1735004315742\": {\"value\": Transparent_workshop},\n",
" \"_widget_1735004315741\": {\"value\": Cross_industry_cooperation},\n",
" \"_widget_1734073342352\": {\"value\": BI_Insights},\n",
"\n",
" }\n",
" )\n",
"\n",
" feature_dict = {\n",
" \"开单\": \"_widget_1734073342350\",\n",
" \"服务提醒\": \"_widget_1735004315757\",\n",
" \"会员卡\": \"_widget_1735004315756\",\n",
" \"短信\": \"_widget_1735004315755\",\n",
" \"公域小程序\": \"_widget_1735004315754\",\n",
" \"私域小程序\": \"_widget_1735004315753\",\n",
" \"检测单\": \"_widget_1735004315752\",\n",
" \"AI海报\": \"_widget_1735004315751\",\n",
" \"企业钱包\": \"_widget_1735004315750\",\n",
" \"精准营销\": \"_widget_1735004315749\",\n",
" \"付费会员\": \"_widget_1735004315748\",\n",
" \"企业微信\": \"_widget_1735004315747\",\n",
" \"保险单识别\": \"_widget_1735004315746\",\n",
" \"保险机器人\": \"_widget_1735004315745\",\n",
" \"摄像头接车\": \"_widget_1735004315744\",\n",
" \"摄像头开单\": \"_widget_1735004315743\",\n",
" \"透明车间\": \"_widget_1735004315742\",\n",
" \"异业合作\": \"_widget_1735004315741\",\n",
" \"BI洞察\": \"_widget_1734073342352\",\n",
"\n",
" }\n",
" # _widget_1735527329557 下次是否推荐\n",
" for new_item in self.get_feature_usage:\n",
" for feature_module, feature_value in feature_dict.items(): # 模块\n",
" if new_item.get(\"_widget_1735268263079\") == feature_module and new_item.get(\n",
" \"_widget_1735527329557\") == \"否\" and new_item.get(\"_widget_1735280720550\") == \\\n",
" row[\"id_own_org\"]: # 下次是否推荐 功能使用情况表\n",
" print(f\"{feature_value}进行了更改\")\n",
" payload_dict.update({f\"{feature_value}\": {\"value\": \"×\"}})\n",
"\n",
" if new_item.get(\"_widget_1735268263079\") == feature_module and new_item.get(\n",
" \"_widget_1736414617462\") == \"否\" and new_item.get(\"_widget_1735280720550\") == \\\n",
" row[\"id_own_org\"]: # 下次是否跟进\n",
" print(f\"{feature_value}进行了更改\")\n",
" payload_dict.update({f\"{feature_value}\": {\"value\": \"×\"}})\n",
"\n",
" fields_to_check = {\n",
" \"_widget_1735004315763\": Billing, # 开单\n",
" \"_widget_1735106258016\": Service_Alerts, # 服务提醒\n",
" \"_widget_1735106258036\": membership, # 会员卡\n",
" \"_widget_1735106258086\": SMS, # 短信\n",
" \"_widget_1735106258112\": Public_domain_applets, # 公域小程序\n",
" \"_widget_1735106258141\": Private_domain_applets, # 私域小程序\n",
" \"_widget_1735107354648\": Test_sheet, # 检测单\n",
" \"_widget_1735107354725\": AI_poster, # AI海报\n",
" \"_widget_1735107354811\": Business_wallets, # 企业钱包\n",
" \"_widget_1735107354906\": Precision_marketing, # 精准营销\n",
" \"_widget_1735107354980\": Paid_memberships, # 付费会员\n",
" \"_widget_1735107355093\": business_WeCom, # 企业微信\n",
" \"_widget_1735107355143\": Insurance_policy_identification, # 保险单识别\n",
" \"_widget_1735107355235\": Insurance_bots, # 保险机器人\n",
" \"_widget_1735107355333\": Camera_pick_up, # 摄像头接车\n",
" \"_widget_1735107355392\": Camera_billing, # 摄像头开单\n",
" \"_widget_1735107355502\": Transparent_workshop, # 透明车间\n",
" \"_widget_1735107355618\": Cross_industry_cooperation, # 异业合作\n",
" \"_widget_1735107355740\": BI_Insights # BI洞察\n",
" }\n",
"\n",
" # 遍历每个字段,检查其值并更新payload_dict\n",
" for widget_id, field_name in fields_to_check.items():\n",
" if field_name == \"√\":\n",
" payload_dict.update({widget_id: {\"value\": \"是\"}})\n",
"\n",
" break\n",
"\n",
" if not Billing:\n",
" print(f\"权限表请求失败或者权限表无对应关系,权限唯一值是:{NGV_store_level_key}\")\n",
"\n",
" if row[\"active_status_fmt\"] == \"活跃\": # 开单 是否使用\n",
" payload_dict.update({\"_widget_1735004315765\": {\"value\": \"是\"}})\n",
" else:\n",
" payload_dict.update({\"_widget_1735004315765\": {\"value\": \"否\"}})\n",
" try:\n",
" if row[\"saas_edition_fmt\"] not in [\"基础版\", \"入门版\"]: # 会员卡 是否拥有\n",
" payload_dict.update({\"_widget_1735106258036\": {\"value\": \"是\"}})\n",
" else:\n",
" payload_dict.update({\"_widget_1735106258036\": {\"value\": \"否\"}})\n",
" except Exception as e:\n",
" print(f\"会员卡识别:Error finding customer service: {e}\")\n",
" try:\n",
" if row[\"card_bill_day_count_last_30_day\"] != \"0\": # 会员卡 是否使用\n",
" payload_dict.update({\"_widget_1735106258038\": {\"value\": \"是\"}})\n",
" else:\n",
" payload_dict.update({\"_widget_1735106258038\": {\"value\": \"否\"}})\n",
" except Exception as e:\n",
" print(f\"会员卡识别:Error finding customer service: {e}\")\n",
" # print(self.service_remind.get(\"_widget_1735112637045\"))\n",
" payload_dict[\"_widget_1735106258018\"] = {\"value\": \"否\"}\n",
"\n",
" for item in self.service_remind:\n",
" if row[\"id_own_group\"] == item.get(\"_widget_1735112637043\"):\n",
" if int(item.get(\"_widget_1735112637045\")) < 180 and int(\n",
" item.get(\"_widget_1735112637046\")) == 1: # 服务提醒 是否使用\n",
" payload_dict.update({\"_widget_1735106258018\": {\"value\": \"是\"}})\n",
" break\n",
" elif int(item.get(\"_widget_1735112637048\")) > 0:\n",
" payload_dict.update({\"_widget_1735106258018\": {\"value\": \"是\"}})\n",
" break\n",
"\n",
" keys_to_check = [\n",
" \"_widget_1735113110155\"\n",
" ] # 智能检测 是否使用\n",
"\n",
" # 初始化默认值为\"否\"\n",
" payload_dict[\"_widget_1735107354650\"] = {\"value\": \"否\"}\n",
"\n",
" # 检查每个键,如果有一个大于0,则更新为\"是\"并停止检查\n",
" for key in keys_to_check:\n",
" for item in self.Smart_detection:\n",
" if row[\"id_own_org\"] == item.get(\"_widget_1735113110147\"):\n",
" if int(item.get(key, 0)) > 0: # 使用get方法并提供默认值0防止键不存在的情况\n",
" payload_dict[\"_widget_1735107354650\"][\"value\"] = \"是\"\n",
" break\n",
"\n",
" # 近30天业务单量=0 则其它所有模块均不推荐\n",
" try:\n",
" for feature_module, feature_value in feature_dict.items(): # 模块\n",
" if row[\"bill_count_last_30_day\"] == '0' and payload_dict[feature_value][\"value\"] == '△':\n",
" payload_dict.update({f\"{feature_value}\": {\"value\": \"×\"}})\n",
" except Exception as e:\n",
" print(f\"不开单识别:Error finding customer service: {e}\")\n",
" # 保单识别:从系统中抽取目标门店,针对门店抽取修改是否推荐\n",
" try:\n",
" if row[\"org_code\"] in self.widget_list:\n",
" payload_dict.update({'_widget_1735004315746': {\"value\": \"△\"}})\n",
" except Exception as e:\n",
" print(f\"保单识别:Error finding customer service: {e}\")\n",
" # 私域小程序:根据是否开通微信小程序判断是否使用,旗舰版及以上算拥有\n",
" try:\n",
" for item in self.private_domain:\n",
" if row[\"id_own_group\"] == item.get(\"_widget_1742795002375\"): # 公司id\n",
" if int(item.get(\"_widget_1742795002379\")) > 0 : # 上架商品数\n",
" payload_dict.update({\"_widget_1735106258143\": {\"value\": \"是\"}}) # DX:是否拥有\n",
" break\n",
" else:\n",
" payload_dict.update({\"_widget_1735106258143\": {\"value\": \"否\"}}) # DX:是否拥有\n",
" break\n",
" except Exception as e:\n",
" print(f\"私域小程序:Error finding customer service: {e}\")\n",
" try:\n",
" high_version = ['皇冠版', '至尊版', '尊享版', '旗舰版']\n",
" if row[\"saas_edition_fmt\"] in high_version:\n",
" payload_dict.update({'_widget_1735106258141': {\"value\": \"是\"}}) # SYXCX:是否拥有\n",
" else:\n",
" payload_dict.update({'_widget_1735106258141': {\"value\": \"否\"}}) # SYXCX:是否拥有\n",
" except Exception as e:\n",
" print(f\"私域小程序:Error finding customer service: {e}\")\n",
"\n",
" # 公域小程序:根据是否开通微信小程序判断是否使用,旗舰版及以上算拥有\n",
" try:\n",
" for item in self.public_domain:\n",
" if row[\"id_own_org\"] == item.get(\"_widget_1742784257506\"): # 门店id\n",
" if int(item.get(\"_widget_1742784257509\")) == 1: # 发布商品数量\n",
" payload_dict.update({\"_widget_1735106258114\": {\"value\": \"是\"}}) # GYXCX:是否使用\n",
" break\n",
" else:\n",
" payload_dict.update({\"_widget_1735106258114\": {\"value\": \"否\"}}) # GYXCX:是否使用\n",
" break\n",
" except Exception as e:\n",
" print(f\"公域小程序:Error finding customer service: {e}\")\n",
" try:\n",
" if row[\"id_own_org\"] in self.public_domain_list:\n",
" payload_dict.update({'_widget_1735106258112': {\"value\": \"是\"}}) # GYXCX:是否拥有\n",
" else:\n",
" payload_dict.update({'_widget_1735106258112': {\"value\": \"否\"}}) # GYXCX:是否拥有\n",
" except Exception as e:\n",
" print(f\"公域小程序:Error finding customer service: {e}\")\n",
" # 异业合作:根据是否存在判断是否拥有,过滤条件 商品名称包含异业两个字\n",
" try:\n",
" if row[\"id_own_org\"] in self.different_industries_list:\n",
" payload_dict.update({'_widget_1735107355618': {\"value\": \"是\"}}) # YYHZ:是否拥有\n",
" else:\n",
" payload_dict.update({'_widget_1735107355618': {\"value\": \"否\"}}) # YYHZ:是否拥有\n",
" except Exception as e:\n",
" print(f\"异业合作:Error finding customer service: {e}\")\n",
"\n",
" # 短信:根据是否启动短信功能判断是否拥有,根据\n",
" try:\n",
" for item in self.groupnotification:\n",
" if row[\"id_own_group\"] == item.get(\"_widget_1743065201885\"): # 公司id\n",
" if int(item.get(\"_widget_1743065201886\")) == 1: # 是否启动短信功能\n",
" payload_dict.update({\"_widget_1735106258086\": {\"value\": \"是\"}}) # DX:是否拥有\n",
" break\n",
" else:\n",
" payload_dict.update({\"_widget_1735106258086\": {\"value\": \"否\"}}) # DX:是否拥有\n",
" break\n",
" except Exception as e:\n",
" print(f\"短信:Error finding customer service: {e}\")\n",
" try:\n",
" for item in self.groupnotification:\n",
" if row[\"id_own_group\"] == item.get(\"_widget_1743065201885\"): # 公司id\n",
" if int(item.get(\"_widget_1743065201889\")) > 0: # 累计发送成功总人数\n",
" payload_dict.update({\"_widget_1735106258088\": {\"value\": \"是\"}}) # DX:是否使用\n",
" break\n",
" else:\n",
" payload_dict.update({\"_widget_1735106258088\": {\"value\": \"否\"}}) # DX:是否使用\n",
" break\n",
" except Exception as e:\n",
" print(f\"短信:Error finding customer service: {e}\")\n",
"\n",
" NGV_data_id = None\n",
" # 获取关联数据\n",
" for NGV_Data in self.NGV_data_list:\n",
" # NGV_Data = NGV_Data.get(\"data\")\n",
" if row[\"org_code\"] == NGV_Data.get(\"_widget_1734062123071\"): # 门店编码\n",
" NGV_data_id = NGV_Data.get(\"_id\")\n",
" print(NGV_data_id)\n",
" try:\n",
" png_url = NGV_Data.get('_widget_1742890765211', {})[0].get('url', \"\")\n",
" except:\n",
" png_url = \"\"\n",
" print(png_url)\n",
" if not NGV_data_id:\n",
" print(\"未找到数据ID\")\n",
"\n",
" distribution_date = datetime.datetime.now(datetime.timezone.utc)\n",
" distribution_date = distribution_date.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'\n",
"\n",
" upload_key = None\n",
" UUid = time.strftime(\"%Y%m%d%H%M%S\", time.localtime())\n",
" if png_url:\n",
" save_dir = \"sampleCloud\" # 设置输出目录\n",
"\n",
" # 创建输出目录(如果不存在)\n",
" import os\n",
"\n",
" os.makedirs(save_dir, exist_ok=True)\n",
"\n",
" save_path = fr'{save_dir}\\png\\{time.strftime(\"%Y%m%d%H%M%S\", time.localtime())}.png'\n",
"\n",
"\n",
"\n",
" NewServicesRevisit.download_url_content(png_url, save_path)\n",
"\n",
" up_data = api_instance.get_upload_token(\n",
" {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"675b9c63925cd404038a6b86\",\n",
" \"transaction_id\": UUid})\n",
"\n",
" upload_url=up_data.get(\"upload_url\")\n",
" upload_token=up_data.get(\"upload_token\")\n",
"\n",
" upload_result = api_instance.upload_file(\n",
" {\"upload_url\": upload_url, \"upload_token\": upload_token, \"file_path\": save_path})\n",
" upload_key = upload_result.get(\"key\")\n",
" # print(\"已上传文件\")\n",
" # print(upload_result)\n",
"\n",
" # print(upload_key)\n",
"\n",
" payload_dict.update({\n",
" \"_widget_1734590278279\": {\"value\": row[\"group_name\"]}, # 公司名称\n",
" \"_widget_1735112931760\": {\"value\": row[\"id_own_group\"]}, # 公司id\n",
" \"_widget_1735112931761\": {\"value\": row[\"id_own_org\"]}, # 门店id\n",
" \"_widget_1734590278281\": {\"value\": row['org_name']}, # 门店名称\n",
" \"_widget_1734590278292\": {\"value\": row[\"跟进阶段\"]}, # 跟进阶段\n",
" \"_widget_1734321349021\": {\"value\": NGV_data_id}, # 关data_get联数据\n",
" \"_widget_1742548684369\": {\"value\": row['主要目的']}, # 主要目的\n",
" \"_widget_1734590278266\": {\"value\": row['region_name']}, # 大区\n",
" \"_widget_1734590278285\": {\"value\": row['branch_name']}, # 小区\n",
" \"_widget_1734590278284\": {\"value\": row['province_name']}, # 省\n",
" \"_widget_1734590278283\": {\"value\": row['city_name']}, # 市\n",
" \"_widget_1734590278282\": {\"value\": row['area_name']}, # 区\n",
" \"_widget_1734590278278\": {\"value\": row['saas_customer_type']}, # 门店分层\n",
" \"_widget_1734590278277\": {\"value\": row['group_grade']}, # 公司等级\n",
" \"_widget_1734590278276\": {\"value\": row['limit_user_type']}, # 限制账户类型\n",
" \"_widget_1734590278275\": {\"value\": row['active_user_type']}, # 有效账户类型\n",
" \"_widget_1734590278274\": {\"value\": row['saas_version']}, # ERP操作模式\n",
" \"_widget_1734590278273\": {\"value\": row['saas_use_year']}, # 使用时长\n",
" \"_widget_1734590278272\": {\"value\": row['org_stage']}, # 门店阶段\n",
" \"_widget_1734590278271\": {\"value\": row['manage_model']}, # 经营模式\n",
" \"_widget_1734590278267\": {\"value\": row['contacts']}, # 联系人\n",
" \"_widget_1734590278287\": {\"value\": row['contact_mobile']}, # 联系手机号\n",
" \"_widget_1734590278286\": {\"value\": row['saas_edition_fmt']}, # SaaS版本\n",
" \"_widget_1734590278280\": {\"value\": row['org_code']}, # 门店编码\n",
" \"_widget_1735096489244\": {\"value\": distribution_date}, # 派发时间\n",
" \"_widget_1742895342914\": {\"value\": row['business_scope_fmt']}, # 经营范围\n",
" \"_widget_1742895342915\": {\"value\": row['station_number']}, # 工位数\n",
" \"_widget_1742895342916\": {\"value\": [upload_key]} # 门头照片\n",
" })\n",
"\n",
" routine_follow_up_payload = {\n",
" \"api_key\": \"675b900991ad2491c69389ca\",\n",
" \"entry_id\": \"675b9c63925cd404038a6b86\",\n",
" \"is_start_workflow\": \"true\",\n",
" \"data\": payload_dict,\n",
" \"transaction_id\": UUid\n",
" }\n",
"\n",
" print(routine_follow_up_payload)\n",
"\n",
" # res = api_instance.data_batch_create(routine_follow_up_payload)\n",
" # logger.info(f\"创建结果:{res}\")\n",
" except:\n",
" pass\n",
" self.up_JDY_status(up_jdy_date,up_jdy_start_time)\n",
"\n",
"\n",
"if __name__ == '__main__':\n",
" start = NewServicesRevisit()\n",
" start.main()\n"
],
"id": "423d41450c64cdfa",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"当前日期: 2025-04-16\n",
"遍历日期: 2025-04-15\n",
"遍历次数: 1\n",
"开始运行main\n",
"1\n",
"SaaS开户回访日期: 2024-10-25 2025-01-23\n",
"18 20250325\n",
"SaaS开户回访人数: 18\n",
" date_id date_fmt id_own_group group_name \\\n",
"1436 20250415 2025-04-15 11240984669918283550 桐乡市志勇汽车维修有限公司 \n",
"1545 20250415 2025-04-15 11240984669918282040 中石化南昌分公司 \n",
"1546 20250415 2025-04-15 11240984669918281045 鹏洋商贸 \n",
"1658 20250415 2025-04-15 11240984669918283549 阿克苏市浩创车品汽车用品经营中心 \n",
"1666 20250415 2025-04-15 11240984669918282042 霍城县诚峰鲸鲨养车服务部 \n",
"9211 20250415 2025-04-15 10546172455191817876 脉博汽车生活馆(紫萱路店) \n",
"18856 20250415 2025-04-15 11240984669917372028 奥驰汽车服务中心(白云区大朗店) \n",
"39649 20250415 2025-04-15 11240984669918180516 汽帜汽车服务中心 \n",
"39675 20250415 2025-04-15 11240984669918180020 平舆县舆强汽车服务有限公司 \n",
"39694 20250415 2025-04-15 11240984669918182517 亳州铂之驰汽车服务有限公司 \n",
"39697 20250415 2025-04-15 11240984669918182019 西宁市城西区轩德汽车维修中心 \n",
"39722 20250415 2025-04-15 11240984669918182017 华豪汽修 \n",
"39733 20250415 2025-04-15 11240984669918181521 宜章县玖昌成汽车销售服务有限公司 \n",
"39737 20250415 2025-04-15 11240984669918182018 临清市车轰轰汽修店(个体工商户) \n",
"39747 20250415 2025-04-15 11240984669918180024 西宁市城中区金良汽车修理厂 \n",
"39751 20250415 2025-04-15 11240984669918181017 湖南华洋车管家科技服务有限公司 \n",
"39788 20250415 2025-04-15 11240984669918184018 武汉捷弛汽车服务有限公司潜江分公司 \n",
"39832 20250415 2025-04-15 11240984669918185516 慈利美鸿汽车服务中心 \n",
"\n",
" id_own_org org_name org_code group_grade \\\n",
"1436 11240984669918289552 桐乡市维卡特汽车维修有限公司 CHS202501230290145 重要客户(SVIP \n",
"1545 11240984669918288040 中石化南昌分公司 CHS202501230290135 区域KAMVP \n",
"1546 11240984669918287047 鹏洋商贸 CHS202501230290134 普通客户(VIP \n",
"1658 11240984669918289551 胜牌润滑油三滤电瓶 CHS202501230290143 普通客户(VIP \n",
"1666 11240984669918288044 诚峰鲸鲨养车 CHS202501230290147 普通客户(VIP \n",
"9211 10546172455191817697 杭州脉博汽车服务有限公司 CHS201812240004974 普通客户(VIP \n",
"18856 11240984669917379028 奥驰汽车服务中心(白云区大朗店) CHS202205190180002 普通客户(VIP \n",
"39649 11240984669918189016 汽帜汽车服务中心 CHS202410250284130 重要客户(SVIP \n",
"39675 11240984669918188520 舆强汽车服务中心 CHS202410250284136 普通客户(VIP \n",
"39694 11240984669918190518 亳州铂之驰汽车服务有限公司 CHS202410250284143 普通客户(VIP \n",
"39697 11240984669918191019 老任修车 CHS202410250284150 普通客户(VIP \n",
"39722 11240984669918191017 华豪汽修 CHS202410250284140 普通客户(VIP \n",
"39733 11240984669918190021 宜章县玖昌成汽车销售服务有限公司 CHS202410250284173 普通客户(VIP \n",
"39737 11240984669918191018 临清车轰轰 CHS202410250284148 重要客户(SVIP \n",
"39747 11240984669918188524 西宁市城中区金良汽车修理厂 CHS202410250284156 重要客户(SVIP \n",
"39751 11240984669918189517 华洋车生活(青山店) CHS202410250284141 普通客户(VIP \n",
"39788 11240984669918192518 潜江捷弛汽车服务 CHS202410250284180 重要客户(SVIP \n",
"39832 11240984669918194016 美鸿汽车电子科技 CHS202410250284202 普通客户(VIP \n",
"\n",
" org_type org_status ... edition_rank customer_type_rank \\\n",
"1436 一般 留存 ... 4 1 \n",
"1545 一般 留存 ... 3 3 \n",
"1546 一般 留存 ... 7 3 \n",
"1658 一般 留存 ... 7 3 \n",
"1666 一般 留存 ... 7 3 \n",
"9211 一般 留存 ... 5 2 \n",
"18856 一般 留存 ... 7 3 \n",
"39649 一般 留存 ... 6 1 \n",
"39675 一般 留存 ... 6 3 \n",
"39694 一般 留存 ... 5 3 \n",
"39697 一般 留存 ... 5 3 \n",
"39722 一般 留存 ... 7 5 \n",
"39733 一般 留存 ... 5 3 \n",
"39737 一般 留存 ... 6 1 \n",
"39747 一般 留存 ... 6 1 \n",
"39751 一般 留存 ... 4 3 \n",
"39788 一般 留存 ... 5 0 \n",
"39832 一般 留存 ... 7 4 \n",
"\n",
" group_grade_rank max_saas_edition max_saas_customer_type \\\n",
"1436 2 标准版 E \n",
"1545 1 旗舰版 C \n",
"1546 3 入门版 C \n",
"1658 3 入门版 C \n",
"1666 3 入门版 C \n",
"9211 3 进阶版 D \n",
"18856 3 入门版 C \n",
"39649 2 基础版 E \n",
"39675 3 基础版 C \n",
"39694 3 进阶版 C \n",
"39697 3 进阶版 C \n",
"39722 3 入门版 A \n",
"39733 3 进阶版 C \n",
"39737 2 基础版 E \n",
"39747 2 基础版 E \n",
"39751 3 标准版 C \n",
"39788 2 进阶版 F \n",
"39832 3 入门版 B \n",
"\n",
" max_group_grade 条件 exists_in_ngvv2 跟进阶段 \\\n",
"1436 重要客户(SVIP True NaN 新签后90天 \n",
"1545 区域KAMVP True NaN 新签后90天 \n",
"1546 普通客户(VIP True NaN 新签后90天 \n",
"1658 普通客户(VIP True NaN 新签后90天 \n",
"1666 普通客户(VIP True NaN 新签后90天 \n",
"9211 普通客户(VIP True NaN 新签后180天 \n",
"18856 普通客户(VIP True NaN 新签后180天 \n",
"39649 重要客户(SVIP True NaN 新签后180天 \n",
"39675 普通客户(VIP True NaN 新签后180天 \n",
"39694 普通客户(VIP True NaN 新签后180天 \n",
"39697 普通客户(VIP True NaN 新签后180天 \n",
"39722 普通客户(VIP True NaN 新签后180天 \n",
"39733 普通客户(VIP True NaN 新签后180天 \n",
"39737 重要客户(SVIP True NaN 新签后180天 \n",
"39747 重要客户(SVIP True NaN 新签后180天 \n",
"39751 普通客户(VIP True NaN 新签后180天 \n",
"39788 重要客户(SVIP True NaN 新签后180天 \n",
"39832 普通客户(VIP True NaN 新签后180天 \n",
"\n",
" 主要目的 \n",
"1436 关怀使用情况,解答使用问题,强化培训,挖掘增购商机。 \n",
"1545 关怀使用情况,解答使用问题,强化培训,挖掘增购商机。 \n",
"1546 关怀使用情况,解答使用问题,强化培训,挖掘增购商机。 \n",
"1658 关怀使用情况,解答使用问题,强化培训,挖掘增购商机。 \n",
"1666 关怀使用情况,解答使用问题,强化培训,挖掘增购商机。 \n",
"9211 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"18856 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"39649 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"39675 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"39694 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"39697 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"39722 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"39733 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"39737 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"39747 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"39751 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"39788 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"39832 关怀使用情况,邀约转介绍,跟进增购商机,识别首年续约风险,及时跟进提报。 \n",
"\n",
"[18 rows x 151 columns]\n"
]
}
],
"execution_count": 29
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-04-17T01:24:51.050537Z",
"start_time": "2025-04-17T01:11:42.429234Z"
}
},
"cell_type": "code",
"source": [
"import os\n",
"import time\n",
"\n",
"import requests\n",
"\n",
"from api import API\n",
"from back_ground_module import CommonModule\n",
"import pandas as pd\n",
"import datetime\n",
"import re\n",
"from log_config import configure_task_logger, configure_error_task_logger\n",
"\n",
"api_instance = API()\n",
"common_module = CommonModule()\n",
"# start_time = datetime.datetime.now()\n",
"\n",
"# 获取已经配置好的常规日志记录器\n",
"logger = configure_task_logger()\n",
"\n",
"# 获取已经配置好的错误任务日志记录器\n",
"error_task_logger = configure_error_task_logger()\n",
"\n",
"\n",
"class RenewServicesRevisit:\n",
" def __init__(self):\n",
" self.index = None\n",
" self.data_NGV = None\n",
" self.date_list = None\n",
" self.Smart_detection = None\n",
" self.service_remind = None\n",
" self.json_list = []\n",
" self.NGV_data_list = None\n",
" self.permissions_table = None\n",
" self.staff_id_list = None\n",
" self.get_feature_usage = None\n",
" self.policy_recognition = None\n",
" self.widget_list = None\n",
" self.private_domain = None\n",
" self.public_domain = None\n",
" self.public_domain_list = None\n",
" self.different_industries = None\n",
" self.different_industries_list = None\n",
" self.groupnotification = None\n",
"\n",
" def load_all_data(self):\n",
" \"\"\"加载所有必要的数据表\"\"\"\n",
" # 省市区人员关系表\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"676512ac3e54dc3159460c0a\"}\n",
" json_dict = api_instance.entry_data_list(payload)\n",
" if json_dict and \"data\" in json_dict:\n",
" self.json_list = json_dict.get(\"data\")\n",
" else:\n",
" print(\"加载省市区人员关系表失败\")\n",
" self.json_list = []\n",
"\n",
" # 获取简道云员工id\n",
" payload = {\"api_key\": \"6694d3c4fcb69ca9a111a6c4\",\n",
" \"entry_id\": \"6769204a1902c9341340a1bc\",\n",
" }\n",
" staff_id = api_instance.entry_data_list(payload)\n",
" self.staff_id_list = staff_id.get(\"data\") # api请求格式,将数据封装在data字典里\n",
"\n",
" # 获取权限表信息\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"675b96c14e839f90fef1647c\"}\n",
" self.permissions_table = api_instance.entry_data_list(payload).get(\"data\")\n",
"\n",
" # 获取NGV数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"675bb02bd2d53c2034c665e4\"}\n",
" self.NGV_data_list = api_instance.entry_data_list(payload).get(\"data\")\n",
" # print(\"NGV获取后的类型:\", type(self.NGV_data_list))\n",
"\n",
" # 获取服务提醒-数据支持表单数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"676bb7bda3029720f1083e99\"}\n",
" self.service_remind = api_instance.entry_data_list(payload).get(\"data\")\n",
"\n",
" # 获取智能检测-数据支持表单数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"676bb99649ab3ac975af6e39\"}\n",
" self.Smart_detection = api_instance.entry_data_list(payload).get(\"data\")\n",
"\n",
" # 获取功能使用情况表\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"6763bbf657bd8fb76fcb41b2\"}\n",
" self.get_feature_usage = api_instance.entry_data_list(payload).get(\"data\", [])\n",
"\n",
" # 获取保单识别表\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"6773a60d30ed87ff9f68d3c5\"}\n",
" self.policy_recognition = api_instance.entry_data_list(payload).get(\"data\")\n",
" # 提取 _widget_1735632397600 的值并存储在列表中\n",
" self.widget_list = [item['_widget_1735632397600'] for item in self.policy_recognition]\n",
"\n",
" # 获取私域小程序-数据支持表单数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"67e0f0fae622896749ba5087\"}\n",
" self.private_domain = api_instance.entry_data_list(payload).get(\"data\", [])\n",
" # 提取 _widget_1742795002375 的值并存储在列表中\n",
" # self.private_domain_list = [item['_widget_1742795002375'] for item in self.private_domain]\n",
"\n",
" # 获取公域小程序-数据支持表单数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"67e0c702c8f603b997980999\"}\n",
" self.public_domain = api_instance.entry_data_list(payload).get(\"data\", [])\n",
" # 提取 _widget_1742784257506 的值并存储在列表中\n",
" self.public_domain_list = [item['_widget_1742784257506'] for item in self.public_domain]\n",
"\n",
" # 获取异业合作-数据支持表单数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"67e24fdd8dfcfa918e17c30b\"}\n",
" self.different_industries = api_instance.entry_data_list(payload).get(\"data\", [])\n",
" # 提取 _widget_1742784257506 的值并存储在列表中\n",
" self.different_industries_list = [item['_widget_1742884829007'] for item in self.different_industries]\n",
"\n",
" # 获取短信-数据支持表单数据\n",
" payload = {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"67e5107198ba1b20d5df3974\"}\n",
" self.groupnotification = api_instance.entry_data_list(payload).get(\"data\", [])\n",
"\n",
" @staticmethod\n",
" def download_url_content(url, save_path):\n",
" \"\"\"\n",
" 下载指定 URL 的内容并保存到本地文件。\n",
"\n",
" :param url: 要下载内容的 URL\n",
" :param save_path: 保存文件的路径\n",
" \"\"\"\n",
" try:\n",
" # 发送 GET 请求以获取内容\n",
" response = requests.get(url, stream=True)\n",
" response.raise_for_status() # 如果响应状态码不是 200,抛出异常\n",
"\n",
" # 确保保存目录存在\n",
" os.makedirs(os.path.dirname(save_path), exist_ok=True)\n",
"\n",
" # 将内容写入文件\n",
" with open(save_path, 'wb') as file:\n",
" for chunk in response.iter_content(chunk_size=8192): # 分块写入,避免占用过多内存\n",
" if chunk: # 过滤掉空块\n",
" file.write(chunk)\n",
"\n",
" print(f\"文件已成功保存到 {save_path}\")\n",
"\n",
" except requests.exceptions.RequestException as e:\n",
" print(f\"下载失败: {e}\")\n",
" except Exception as e:\n",
" print(f\"发生错误: {e}\")\n",
"\n",
" @staticmethod\n",
" def build_index(json_list):\n",
" index = {}\n",
" for json_item in json_list:\n",
" try:\n",
" key = (json_item['_widget_1734677164861'], json_item['_widget_1734677164862'],\n",
" json_item['_widget_1734677164863']) # 省市区\n",
" if '_widget_1734677164871' not in json_item: # 日常回访客服\n",
" raise KeyError(\"缺少 '日常回访客服' 键\")\n",
" index[key] = json_item\n",
" except KeyError as e:\n",
" print(f\"警告:{e},跳过该条记录: {json_item}\")\n",
" continue\n",
" return index\n",
"\n",
" @staticmethod\n",
" def find_customer_service(province_name, city_name, area_name, index):\n",
" key = (province_name, city_name, area_name)\n",
" # print(index)\n",
" if key not in index:\n",
" return \"数据缺失: 未找到对应的日常回访客服\"\n",
"\n",
" return index[key]\n",
"\n",
" @staticmethod\n",
" def remove_parentheses(text: str) -> str:\n",
" # 使用正则表达式匹配并去除括号及其内容\n",
" # \\s* 表示匹配零个或多个空白字符(处理括号前后可能存在的空格)\n",
" # $ 和 $ 分别表示匹配左括号和右括号\n",
" # 中间的 .*? 表示非贪婪地匹配任意数量的字符(包括没有字符的情况)\n",
" cleaned_text = re.sub(r'\\s*$.*?$\\s*', '', text)\n",
" # 为了确保同时处理中文括号,再进行一次替换\n",
" cleaned_text = re.sub(r'\\s*.*?\\s*', '', cleaned_text)\n",
" return cleaned_text.strip() # 去除两端多余的空白字符\n",
"\n",
" @staticmethod\n",
" def get_staff_id(row_item, name):\n",
" \"\"\"辅助函数,用于获取员工ID\"\"\"\n",
" if str(row_item[\"_widget_1734942794144\"]) == str(name): # 检查姓名是否匹配\n",
" return row_item[\"_widget_1734942794145\"] # 返回员工ID\n",
" return None\n",
"\n",
" def assign_customer_service(self, province_name, city_name, area_name, index):\n",
" \"\"\"根据省市区派发给日常回访客服\"\"\"\n",
" try:\n",
" customer_service_info = self.find_customer_service(province_name, city_name, area_name, index)\n",
" relationship_manager = customer_service_info.get('_widget_1734677164864', {}).get('username') # 运营顾问\n",
" customer_service = customer_service_info.get('_widget_1734677164871', {}).get('username') # 日常回访客服\n",
" technician = customer_service_info.get('_widget_1734677164866', {}).get('username')\n",
" area_manager = customer_service_info.get('_widget_1734677164865', {}).get('username')\n",
" return relationship_manager, customer_service, technician, area_manager\n",
" except Exception as e:\n",
" print(f\"Error finding customer service: {e}\")\n",
" return \"分配失败,请检查\", \"分配失败,请检查\", \"分配失败,请检查\"\n",
"\n",
" def calculate_date_one(self, start_offset=0):\n",
" \"\"\"\n",
" 计算从当前日期(或指定偏移量的日期)开始,往前遍历遇到date_list中日期的次数。\n",
"\n",
" 参数:\n",
" - start_offset: 从当前日期起始的天数偏移量,默认为0(即今天)。负数表示过去,正数表示未来。\n",
"\n",
" 返回:\n",
" - date_one: 遍历到date_list中日期的次数。\n",
" \"\"\"\n",
" # 设置起始日期\n",
" now_time = datetime.datetime.now() + datetime.timedelta(days=start_offset)\n",
"\n",
" # 初始化计数器\n",
" date_one = 1\n",
"\n",
" # 检查起始日期是否在date_list中\n",
" if now_time.strftime(\"%Y-%m-%d\") in self.date_list:\n",
" date_one = 0\n",
" print(\"开始次数:\", date_one)\n",
"\n",
" print(\"当前日期:\", now_time.strftime(\"%Y-%m-%d\"))\n",
"\n",
" # 遍历日期\n",
" for i in range(1, 10):\n",
" new_date = now_time + datetime.timedelta(days=-i)\n",
" new_date_str = new_date.strftime(\"%Y-%m-%d\")\n",
" print(\"遍历日期:\", new_date_str)\n",
" if new_date_str in self.date_list:\n",
" date_one += 1\n",
" print(\"节假日期:\", new_date_str)\n",
" else:\n",
" break\n",
"\n",
" print(\"遍历次数:\", date_one)\n",
" return date_one\n",
"\n",
" def main(self):\n",
" # 主店过期,分店设置为主店\n",
" global png_url, upload_key\n",
" self.load_all_data()\n",
" self.date_list = common_module.get_holiday_list() # 获取一年中的节假日\n",
" date_one = self.calculate_date_one(start_offset=0)\n",
" self.data_NGV = common_module.get_ngv_details(days_back=1) # 获取data_NGV 并转为str\n",
" self.index = self.build_index(self.json_list)\n",
"\n",
" # 将A列和B列的日期字符串转换为日期格式\n",
" data_NGV = self.data_NGV.copy()\n",
" # data_NGV.to_csv(\"dayin.csv\")\n",
" data_NGV['A'] = pd.to_datetime(data_NGV['expiry_time'])\n",
" data_NGV['B'] = pd.to_datetime(data_NGV['renew_date'])\n",
"\n",
" def replace_values(series):\n",
" # 使用条件判断来进行替换\n",
" return series.apply(lambda x: '' if pd.isna(x) or x in ['NA', 'None', ''] else x)\n",
"\n",
" # 对整个DataFrame的所有列应用替换函数\n",
"\n",
" # 处理字符串数据并显式指定数据类型\n",
" data_NGV = data_NGV.apply(replace_values)\n",
" # data_NGV.to_csv(\"dayinNGV.csv\")\n",
"\n",
" # 定义优先级顺序\n",
" edition_order = ['皇冠版', '至尊版', '尊享版', '旗舰版', '标准版', '进阶版', '基础版', '入门版']\n",
" customer_type_order = [\"F\", \"E\", \"D\", \"C\", \"B\", \"A\"] # 索引越小优先级越高\n",
" group_grade_order = ['全国KAFMVP', '区域KAMVP', '重要客户(SVIP', '普通客户(VIP']\n",
"\n",
" # 创建映射字典,并为不在列表中的值设置默认值\n",
" edition_map = {edition: idx for idx, edition in enumerate(edition_order)}\n",
" customer_type_map = {ctype: idx for idx, ctype in enumerate(customer_type_order)}\n",
" group_grade_map = {grade: idx for idx, grade in enumerate(group_grade_order)}\n",
"\n",
" # 添加用于排序的新列,并处理不在映射字典中的值\n",
" data_NGV['edition_rank'] = data_NGV['saas_edition_fmt'].map(edition_map).fillna(0).astype(\n",
" int) # 缺失值用最高优先级填充\n",
" data_NGV['customer_type_rank'] = data_NGV['saas_customer_type'].map(customer_type_map).fillna(0).astype(int)\n",
" data_NGV['group_grade_rank'] = data_NGV['group_grade'].map(group_grade_map).fillna(0).astype(int)\n",
" # data_NGV.to_csv(\"88855.csv\")\n",
"\n",
" # 找到每组中 edition_rank 最小值对应的行\n",
" best_edition_idx = data_NGV.groupby('id_own_group')['edition_rank'].idxmin()\n",
" best_edition_rows = data_NGV.loc[best_edition_idx]\n",
" best_edition_rows['max_saas_edition'] = best_edition_rows['saas_edition_fmt']\n",
"\n",
" # 找到每组中 customer_type_rank 最小值对应的行\n",
" best_customer_type_idx = data_NGV.groupby('id_own_group')['customer_type_rank'].idxmin()\n",
" best_customer_type_rows = data_NGV.loc[best_customer_type_idx]\n",
" best_customer_type_rows['max_saas_customer_type'] = best_customer_type_rows['customer_type_rank'].apply(\n",
" lambda x: customer_type_order[x])\n",
"\n",
" # 找到每组中 group_grade_rank 最小值对应的行\n",
" best_group_grade_idx = data_NGV.groupby('id_own_group')['group_grade_rank'].idxmin()\n",
" best_group_grade_rows = data_NGV.loc[best_group_grade_idx]\n",
" best_group_grade_rows['max_group_grade'] = best_group_grade_rows['group_grade']\n",
"\n",
" # 合并最佳值回到原数据集\n",
" best_values = (\n",
" best_edition_rows[['id_own_group', 'max_saas_edition']]\n",
" .merge(best_customer_type_rows[['id_own_group', 'max_saas_customer_type']], on='id_own_group',\n",
" how='outer')\n",
" .merge(best_group_grade_rows[['id_own_group', 'max_group_grade']], on='id_own_group', how='outer')\n",
" )\n",
"\n",
" # 将最佳值合并回原数据集\n",
" data_NGV = data_NGV.merge(best_values, on='id_own_group', how='left')\n",
"\n",
" condition = (data_NGV['is_main_org'] == 1) & (data_NGV['org_status'] == '过期') # 步骤2: 过滤条件\n",
"\n",
" ngvv2 = data_NGV[condition]\n",
" # ngvv2.to_excel(r\"C:\\Users\\Administrator.DESKTOP-7IC2USJ\\Desktop\\NGVV2.xlsx\")\n",
"\n",
" data_NGV_V2 = data_NGV.copy() # 步骤3: 检查id_own_group是否存在于ngvv2中\n",
" data_NGV_V2['条件'] = (data_NGV_V2['org_type'] == \"一般\") & (data_NGV_V2['org_status'] == '留存') & (\n",
" data_NGV_V2['area_manager'] != '殷昊') & (\n",
" data_NGV_V2['area_manager'] != '孙玉蕾') & (\n",
" data_NGV_V2['is_main_org'] != 1)\n",
" data_NGV_V2 = data_NGV_V2.loc[data_NGV_V2[\"条件\"]]\n",
" # 步骤4: 过滤存在的记录\n",
" data_NGV_V2['exists_in_ngvv2'] = data_NGV_V2['id_own_group'].isin(ngvv2['id_own_group'])\n",
" filtered_data = data_NGV_V2[data_NGV_V2['exists_in_ngvv2']]\n",
"\n",
" fixed_order = ['皇冠版', '至尊版', '尊享版', '旗舰版', '标准版', '进阶版', '基础版', '入门版']\n",
" # sorted_items = sorted(filtered_data, key=lambda x: fixed_order.index(x))\n",
"\n",
" fixed_order_map = {edition: index for index, edition in enumerate(fixed_order)}\n",
" filtered_data['sort_key'] = filtered_data['saas_edition_fmt'].map(fixed_order_map)\n",
" filtered_data = filtered_data.sort_values(by='sort_key').drop('sort_key', axis=1)\n",
"\n",
" result = filtered_data.drop_duplicates(subset='id_own_group', keep='first')\n",
"\n",
" data_NGV['条件'] = (data_NGV['org_type'] == \"一般\") & (data_NGV['org_status'] == '留存') & (\n",
" data_NGV['area_manager'] != '殷昊') & (\n",
" data_NGV['area_manager'] != '孙玉蕾') & (\n",
" data_NGV['is_main_org'] == 1)\n",
" data_NGV = data_NGV.loc[data_NGV[\"条件\"]]\n",
"\n",
" data_NGV = pd.concat([data_NGV, result], axis=0)\n",
" # data_NGV.to_csv(\"dayin1.csv\")\n",
" data_details = data_NGV.copy()\n",
" # data_details.to_excel(r\"C:\\Users\\admin\\Downloads\\1.xlsx\")\n",
"\n",
" # 重置索引\n",
" data_details = data_details.reset_index(drop=True)\n",
" # data_details.to_csv(\"dayin.csv\")\n",
" # 判断A列的日期是否大于B列的日期730天,如果是的话,将B列的值设置为1\n",
" data_details['条件'] = data_details.apply(\n",
" lambda row: (\n",
" (pd.to_datetime(row['A']) - pd.to_datetime(row['B'])).days\n",
" if pd.to_datetime(row['A']) - pd.to_datetime(row['B']) >= pd.Timedelta(days=730)\n",
" else 0\n",
" ),\n",
" axis=1\n",
" )\n",
" data_details = data_details.loc[data_details[\"条件\"] > 0]\n",
"\n",
" # 定义一个函数,用于将数字除以365并取整数\n",
" def divide_by_365(x):\n",
" if isinstance(x, (int, float)):\n",
" return int(x / 365)\n",
" else:\n",
" return x\n",
"\n",
" # 使用applymap()函数将divide_by_365函数应用到DataFrame的每个元素\n",
" data_details['年'] = data_details['条件'].apply(divide_by_365)\n",
" # 重置索引\n",
" data_details = data_details.reset_index(drop=True)\n",
" # data_details.to_excel(r\"C:\\Users\\admin\\Downloads\\2.xlsx\")\n",
" # 创建一个新的空的DataFrame\n",
" new_df = pd.DataFrame()\n",
" # 遍历原始DataFrame的每一行\n",
" from datetime import datetime\n",
" for index, row in data_details.iterrows():\n",
" # 根据A列的值来决定复制的次数\n",
" if row[\"renew_date\"] != \"2024-02-29\":\n",
" for i_new in range(1, row['年']):\n",
" # 修改日期\n",
" row_new = row.copy()\n",
" c = row_new[\"renew_date\"]\n",
" date_obj = datetime.strptime(c, \"%Y-%m-%d\")\n",
" new_year = date_obj.year + i_new\n",
" new_date_obj = date_obj.replace(year=new_year)\n",
" new_c = new_date_obj.strftime(\"%Y-%m-%d\")\n",
" row_new[\"renew_date\"] = new_c\n",
" # 将当前行添加到新的DataFrame中\n",
" # new_df = new_df.append(row_new, ignore_index=True)\n",
" new_df = pd.concat([new_df, pd.DataFrame([row_new])], ignore_index=True)\n",
" # 合并两个DataFrame\n",
" # new_df.to_excel(r\"C:\\Users\\admin\\Downloads\\3.xlsx\")\n",
" merged_df = pd.concat([data_NGV, new_df], axis=0, ignore_index=True)\n",
" data_details = merged_df.copy() # 替换名称\n",
"\n",
" data_details_not_null = data_details[data_details['renew_date'].notnull()]\n",
" # data_details_not_null = data_details_not_null[data_details_not_null['renew_date'].str.contains('2023')]\n",
" # data_details_not_null = data_details_not_null.sort_values(by='renew_date', ascending=True).drop_duplicates(\n",
" # subset='id_own_group') 重置索引\n",
" data_details_not_null = data_details_not_null.reset_index(drop=True)\n",
" data_details = data_details_not_null.copy() # 替换名称 v2\n",
" data_details['saas_create_time'] = data_details['saas_create_time'].str[:4] # 截取前10位\n",
" data_details['renew_date_new'] = data_details['renew_date'].str[:4] # 截取前10位\n",
" data_details = data_details[\n",
" data_details['saas_create_time'] != data_details['renew_date_new']] # 过滤掉等于renew_date的行\n",
"\n",
" data_details = data_details.reset_index(drop=True)\n",
"\n",
" print(data_details)\n",
" # data_details.to_excel(r\"C:\\Users\\admin\\Downloads\\4.xlsx\")\n",
" import datetime\n",
" start_time = datetime.datetime.now()\n",
"\n",
" date_90 = 83\n",
" date_120 = 113\n",
" date_180 = 173\n",
" # date_one = 1\n",
" now_time = start_time.replace()\n",
"\n",
" if now_time.strftime(\"%Y-%m-%d\") in self.date_list:\n",
" date_one = 0\n",
" print(\"开始次数:\", date_one)\n",
" print(\"当前日期:\", now_time)\n",
"\n",
" if now_time.strftime(\"%Y-%m-%d\") in self.date_list:\n",
" date_one = 0\n",
" print(\"开始次数:\", date_one)\n",
" print(\"当前日期:\", now_time)\n",
"\n",
" # for i in range(1, 10):\n",
" # new_date = now_time + datetime.timedelta(days=-i)\n",
" # new_date = new_date.strftime(\"%Y-%m-%d\")\n",
" # print(\"遍历日期:\", new_date)\n",
" # if new_date in self.date_list:\n",
" # date_one = date_one + 1\n",
" # print(\"节假日期:\", new_date)\n",
" # else:\n",
" # break\n",
"\n",
" print(\"遍历次数:\", date_one)\n",
"\n",
" now_time = start_time.replace()\n",
" for i in range(0, date_one):\n",
" import datetime\n",
" now_time = now_time + datetime.timedelta(days=-(i + 1))\n",
" today = now_time + datetime.timedelta(days=-date_90)\n",
" formatted_today_90 = today.strftime(\"%Y-%m-%d\")\n",
" today = now_time + datetime.timedelta(days=-date_120)\n",
" formatted_today_120 = today.strftime(\"%Y-%m-%d\")\n",
" today = now_time + datetime.timedelta(days=-date_180)\n",
" formatted_today_180 = today.strftime(\"%Y-%m-%d\")\n",
" print(formatted_today_90, formatted_today_120, formatted_today_180)\n",
" # 获取数据\n",
" data_details_90 = data_details.copy()\n",
" data_details_90['条件'] = (data_details_90['renew_date'] == formatted_today_90) & (data_details_90[\n",
" 'group_grade'] != \"普通客户(VIP\") # & (data_details_90['saas_edition_fmt'] != '基础版') & (data_details_90['saas_edition_fmt'] != '入门版')\n",
" data_details_90 = data_details_90.loc[data_details_90[\"条件\"]]\n",
" data_details_120 = data_details.copy()\n",
" data_details_120['条件'] = (data_details_120['renew_date'] == formatted_today_120) & (\n",
" (data_details_120['saas_edition_fmt'] == '基础版') | (\n",
" data_details_120['saas_edition_fmt'] == '入门版'))\n",
" data_details_120 = data_details_120.loc[data_details_120[\"条件\"]]\n",
" data_details_180 = data_details.copy()\n",
" data_details_180['条件'] = (data_details_180[\n",
" 'renew_date'] == formatted_today_180) # & (data_details_180['saas_edition_fmt'] != '基础版') & (data_details_180['saas_edition_fmt'] != '入门版')\n",
" data_details_180 = data_details_180.loc[data_details_180[\"条件\"]]\n",
"\n",
" data_details_90[\"跟进阶段\"] = \"续约后90天回访\"\n",
" data_details_90[\"主要目的\"] = \"关怀使用情况,促进更多功能使用,提升系统使用深度。\"\n",
" data_details_120[\"跟进阶段\"] = \"续约后120天回访\"\n",
" data_details_120[\"主要目的\"] = \"暂无\"\n",
" data_details_180[\"跟进阶段\"] = \"续约后180天回访\"\n",
" data_details_180[\"主要目的\"] = \"关怀使用情况,促进增购商机转化,识别潜在风险,及时提报。\"\n",
"\n",
" # 合并三个DataFrame\n",
" data_result = pd.concat([data_details_90, data_details_180],\n",
" ignore_index=True) # 去除续约120天回访 data_details_120\n",
" print(len(data_result))\n",
" data_result = data_result.astype(str)\n",
"\n",
" data_NGV = data_result.copy()\n",
" \n",
" data_NGV = pd.read_excel(r\"C:\\Users\\Administrator.DESKTOP-7IC2USJ\\Desktop\\派发1.xlsx\", sheet_name=\"Sheet9\")\n",
"\n",
" for index_num, row in data_NGV.iterrows(): # 对过滤后的每一条进行派发\n",
" try:\n",
" # print(row[\"org_code\"]) # 数据验证\n",
" # print(row[\"service_impl_principal\"])\n",
" # print(row[\"area_manager\"])\n",
" # print(row[\"technician\"])\n",
" print(\"销售负责人是:\", row[\"salesmen\"])\n",
"\n",
" payload_dict = {}\n",
" saas_use_year = re.findall(r'第([0-9]+)年', row[\"saas_use_year\"])[0]\n",
"\n",
" NGV_roles = {\n",
" 'relationship_manager': row['service_impl_principal'], # 运营负责人\n",
" # 'relationship_manager': \"张阳\", # 运营负责人\n",
" 'area_manager': row['area_manager'], # 区域经理\n",
" 'technician': row['technician'], # 技术专家\n",
" 'salesmen': row['salesmen'], # 销售负责人\n",
" }\n",
"\n",
" for role, name in NGV_roles.items():\n",
" for row_item in self.staff_id_list:\n",
" staff_id = self.get_staff_id(row_item, name)\n",
" if staff_id:\n",
" NGV_roles[role] = staff_id\n",
" break # 找到后退出循环\n",
" else:\n",
" NGV_roles[role] = None # 如果没有找到对应的员工ID\n",
" # 回访人员: 需确认 四年以下 technician\n",
" if int(saas_use_year) < 4:\n",
"\n",
" relationship_manager, area_manager, technician, salesmen = [NGV_roles[role] for role in\n",
" ['relationship_manager',\n",
" 'area_manager',\n",
" 'technician', 'salesmen']]\n",
"\n",
" # 如果未找到运营负责人,则根据省市区派发给日常回访客服\n",
" if not relationship_manager:\n",
" relationship_manager = self.assign_customer_service(\n",
" row['province_name'], row['city_name'], row['area_name'], self.index\n",
" )[0]\n",
" if not technician:\n",
" technician = self.assign_customer_service(\n",
" row['province_name'], row['city_name'], row['area_name'], self.index\n",
" )[2]\n",
"\n",
" payload_dict.update({\n",
" \"_widget_1734590278288\": {\"value\": relationship_manager}, # 跟进人是运营负责人\n",
" })\n",
"\n",
" else:\n",
" salesmen = [NGV_roles[role] for role in ['salesmen']][0]\n",
" print(salesmen)\n",
" # salesmen = [NGV_roles[role] for role in\n",
" # ['salesmen']]\n",
" # 直接根据省市区派发给日常回访客服\n",
" relationship_manager, customer_service, technician, area_manager = self.assign_customer_service(\n",
" row['province_name'], row['city_name'], row['area_name'], self.index\n",
" )\n",
" payload_dict.update({\n",
" \"_widget_1734590278288\": {\"value\": customer_service} # 跟进人是日常回访客服\n",
" })\n",
"\n",
" payload_dict.update({\n",
" # \"_widget_1734590278288\": {\"value\": relationship_manager}, # 跟进人是运营负责人\n",
" \"_widget_1734590278289\": {\"value\": relationship_manager}, # 运营负责人\n",
" \"_widget_1734590278290\": {\"value\": area_manager}, # 区域经理\n",
" \"_widget_1734590278291\": {\"value\": technician}, # 技术专家\n",
" \"_widget_1735290738545\": {\"value\": salesmen} # 销售负责人\n",
" })\n",
"\n",
" # 输出结果\n",
" print(\"SaaS开户回访人员:\", relationship_manager or \"未分配\")\n",
" print(\"SaaS技术专家:\", technician or \"未分配\")\n",
" print(\"SaaS区域经理:\", area_manager or \"未分配\")\n",
"\n",
" # 判断权限唯一值\n",
" # pattern = r'([\\u4e00-\\u9fa5]+)\\'\n",
" # match = re.search(pattern, row['max_group_grade'])\n",
" # group_grade = match.group(1)\n",
" group_grade = re.sub(r'[^]*', '', row['max_group_grade'])\n",
"\n",
" if not row['saas_customer_type'] or row['saas_customer_type'] == 'NA' or row[\n",
" 'saas_customer_type'] == 'None':\n",
" row['saas_customer_type'] = \"F\"\n",
"\n",
" NGV_store_level_key = group_grade + row['max_saas_edition'] + row['max_saas_customer_type']\n",
" print(\"权限唯一值:\", NGV_store_level_key)\n",
"\n",
" Billing = None\n",
" for item in self.permissions_table:\n",
" if NGV_store_level_key == item.get(\"_widget_1734056507963\"): # 合并(等级-类型-分层)\n",
" print(\"该门店开单的权限是:\", item.get(\"_widget_1734055617039\"))\n",
" Billing = item.get(\"_widget_1734055617039\") # 开单\n",
" Service_Alerts = item.get(\"_widget_1734055617040\") # 服务提醒\n",
" membership = item.get(\"_widget_1734055617041\") # 会员卡\n",
" SMS = item.get(\"_widget_1734055617042\") # 短信\n",
" Public_domain_applets = item.get(\"_widget_1734055617043\") # 公域小程序\n",
" Private_domain_applets = item.get(\"_widget_1734055617044\") # 私域小程序\n",
" Test_sheet = item.get(\"_widget_1734055617045\") # 检测单\n",
" AI_poster = item.get(\"_widget_1734055617046\") # AI海报\n",
" Business_wallets = item.get(\"_widget_1734055617047\") # 企业钱包\n",
" Precision_marketing = item.get(\"_widget_1734055617049\") # 精准营销\n",
" Paid_memberships = item.get(\"_widget_1734055617051\") # 付费会员\n",
" business_WeCom = item.get(\"_widget_1734055617052\") # 企业微信\n",
" Insurance_policy_identification = item.get(\"_widget_1734055617053\") # 保险单识别\n",
" Insurance_bots = item.get(\"_widget_1734055617054\") # 保险机器人\n",
" Camera_pick_up = item.get(\"_widget_1734055617055\") # 摄像头接车\n",
" Camera_billing = item.get(\"_widget_1734055617056\") # 摄像头开单\n",
" Transparent_workshop = item.get(\"_widget_1734055617057\") # 透明车间\n",
" Cross_industry_cooperation = item.get(\"_widget_1734055617058\") # 异业合作\n",
" BI_Insights = item.get(\"_widget_1734055617059\") # BI洞察\n",
" payload_dict.update(\n",
" {\n",
" \"_widget_1734073342350\": {\"value\": Billing},\n",
" \"_widget_1735004315757\": {\"value\": Service_Alerts},\n",
" \"_widget_1735004315756\": {\"value\": membership},\n",
" \"_widget_1735004315755\": {\"value\": SMS},\n",
" \"_widget_1735004315754\": {\"value\": Public_domain_applets},\n",
" \"_widget_1735004315753\": {\"value\": Private_domain_applets},\n",
" \"_widget_1735004315752\": {\"value\": Test_sheet},\n",
" \"_widget_1735004315751\": {\"value\": AI_poster},\n",
" \"_widget_1735004315750\": {\"value\": Business_wallets},\n",
" \"_widget_1735004315749\": {\"value\": Precision_marketing},\n",
" \"_widget_1735004315748\": {\"value\": Paid_memberships},\n",
" \"_widget_1735004315747\": {\"value\": business_WeCom},\n",
" \"_widget_1735004315746\": {\"value\": Insurance_policy_identification},\n",
" \"_widget_1735004315745\": {\"value\": Insurance_bots},\n",
" \"_widget_1735004315744\": {\"value\": Camera_pick_up},\n",
" \"_widget_1735004315743\": {\"value\": Camera_billing},\n",
" \"_widget_1735004315742\": {\"value\": Transparent_workshop},\n",
" \"_widget_1735004315741\": {\"value\": Cross_industry_cooperation},\n",
" \"_widget_1734073342352\": {\"value\": BI_Insights},\n",
"\n",
" }\n",
" )\n",
"\n",
" feature_dict = {\n",
" \"开单\": \"_widget_1734073342350\",\n",
" \"服务提醒\": \"_widget_1735004315757\",\n",
" \"会员卡\": \"_widget_1735004315756\",\n",
" \"短信\": \"_widget_1735004315755\",\n",
" \"公域小程序\": \"_widget_1735004315754\",\n",
" \"私域小程序\": \"_widget_1735004315753\",\n",
" \"检测单\": \"_widget_1735004315752\",\n",
" \"AI海报\": \"_widget_1735004315751\",\n",
" \"企业钱包\": \"_widget_1735004315750\",\n",
" \"精准营销\": \"_widget_1735004315749\",\n",
" \"付费会员\": \"_widget_1735004315748\",\n",
" \"企业微信\": \"_widget_1735004315747\",\n",
" \"保险单识别\": \"_widget_1735004315746\",\n",
" \"保险机器人\": \"_widget_1735004315745\",\n",
" \"摄像头接车\": \"_widget_1735004315744\",\n",
" \"摄像头开单\": \"_widget_1735004315743\",\n",
" \"透明车间\": \"_widget_1735004315742\",\n",
" \"异业合作\": \"_widget_1735004315741\",\n",
" \"BI洞察\": \"_widget_1734073342352\",\n",
"\n",
" }\n",
" # _widget_1735527329557 下次是否推荐\n",
" for new_item in self.get_feature_usage:\n",
" for feature_module, feature_value in feature_dict.items(): # 模块\n",
" if new_item.get(\"_widget_1735268263079\") == feature_module and new_item.get(\n",
" \"_widget_1735527329557\") == \"否\" and new_item.get(\n",
" \"_widget_1735280720550\") == \\\n",
" row[\"id_own_org\"]: # 下次是否推荐 功能使用情况表\n",
" print(f\"{feature_value}进行了更改\")\n",
" payload_dict.update({f\"{feature_value}\": {\"value\": \"×\"}})\n",
"\n",
" if new_item.get(\"_widget_1735268263079\") == feature_module and new_item.get(\n",
" \"_widget_1736414617462\") == \"否\" and new_item.get(\n",
" \"_widget_1735280720550\") == \\\n",
" row[\"id_own_org\"]: # 下次是否跟进\n",
" print(f\"{feature_value}进行了更改\")\n",
" payload_dict.update({f\"{feature_value}\": {\"value\": \"×\"}})\n",
"\n",
" fields_to_check = {\n",
" \"_widget_1735004315763\": Billing, # 开单\n",
" \"_widget_1735106258016\": Service_Alerts, # 服务提醒\n",
" \"_widget_1735106258036\": membership, # 会员卡\n",
" \"_widget_1735106258086\": SMS, # 短信\n",
" \"_widget_1735106258112\": Public_domain_applets, # 公域小程序\n",
" \"_widget_1735106258141\": Private_domain_applets, # 私域小程序\n",
" \"_widget_1735107354648\": Test_sheet, # 检测单\n",
" \"_widget_1735107354725\": AI_poster, # AI海报\n",
" \"_widget_1735107354811\": Business_wallets, # 企业钱包\n",
" \"_widget_1735107354906\": Precision_marketing, # 精准营销\n",
" \"_widget_1735107354980\": Paid_memberships, # 付费会员\n",
" \"_widget_1735107355093\": business_WeCom, # 企业微信\n",
" \"_widget_1735107355143\": Insurance_policy_identification, # 保险单识别\n",
" \"_widget_1735107355235\": Insurance_bots, # 保险机器人\n",
" \"_widget_1735107355333\": Camera_pick_up, # 摄像头接车\n",
" \"_widget_1735107355392\": Camera_billing, # 摄像头开单\n",
" \"_widget_1735107355502\": Transparent_workshop, # 透明车间\n",
" \"_widget_1735107355618\": Cross_industry_cooperation, # 异业合作\n",
" \"_widget_1735107355740\": BI_Insights # BI洞察\n",
" }\n",
"\n",
" # 遍历每个字段,检查其值并更新payload_dict\n",
" for widget_id, field_name in fields_to_check.items():\n",
" if field_name == \"√\":\n",
" payload_dict.update({widget_id: {\"value\": \"是\"}})\n",
"\n",
" break\n",
"\n",
" if not Billing:\n",
" print(f\"权限表请求失败或者权限表无对应关系,权限唯一值是:{NGV_store_level_key}\")\n",
"\n",
" if row[\"active_status_fmt\"] == \"活跃\": # 开单 是否使用\n",
" payload_dict.update({\"_widget_1735004315765\": {\"value\": \"是\"}})\n",
" else:\n",
" payload_dict.update({\"_widget_1735004315765\": {\"value\": \"否\"}})\n",
" try:\n",
" if row[\"saas_edition_fmt\"] not in [\"基础版\", \"入门版\"]: # 会员卡 是否拥有\n",
" payload_dict.update({\"_widget_1735106258036\": {\"value\": \"是\"}})\n",
" else:\n",
" payload_dict.update({\"_widget_1735106258036\": {\"value\": \"否\"}})\n",
" except Exception as e:\n",
" print(f\"会员卡识别:Error finding customer service: {e}\")\n",
" try:\n",
" if row[\"card_bill_day_count_last_30_day\"] != \"0\": # 会员卡 是否使用\n",
" payload_dict.update({\"_widget_1735106258038\": {\"value\": \"是\"}})\n",
" else:\n",
" payload_dict.update({\"_widget_1735106258038\": {\"value\": \"否\"}})\n",
" except Exception as e:\n",
" print(f\"会员卡识别:Error finding customer service: {e}\")\n",
" # print(self.service_remind.get(\"_widget_1735112637045\"))\n",
" payload_dict[\"_widget_1735106258018\"] = {\"value\": \"否\"}\n",
"\n",
" for item in self.service_remind:\n",
" if row[\"id_own_group\"] == item.get(\"_widget_1735112637043\"):\n",
" if int(item.get(\"_widget_1735112637045\")) < 180 and int(\n",
" item.get(\"_widget_1735112637046\")) == 1: # 服务提醒 是否使用\n",
" payload_dict.update({\"_widget_1735106258018\": {\"value\": \"是\"}})\n",
" break\n",
" elif int(item.get(\"_widget_1735112637048\")) > 0:\n",
" payload_dict.update({\"_widget_1735106258018\": {\"value\": \"是\"}})\n",
" break\n",
"\n",
" keys_to_check = [\n",
" \"_widget_1735113110155\"\n",
" ] # 智能检测 是否使用\n",
"\n",
" # 初始化默认值为\"否\"\n",
" payload_dict[\"_widget_1735107354650\"] = {\"value\": \"否\"}\n",
"\n",
" # 检查每个键,如果有一个大于0,则更新为\"是\"并停止检查\n",
" for key in keys_to_check:\n",
" for item in self.Smart_detection:\n",
" if row[\"id_own_org\"] == item.get(\"_widget_1735113110147\"):\n",
" if int(item.get(key, 0)) > 0: # 使用get方法并提供默认值0防止键不存在的情况\n",
" payload_dict[\"_widget_1735107354650\"][\"value\"] = \"是\"\n",
" break\n",
"\n",
" # 近30天业务单量=0 则其它所有模块均不推荐\n",
" try:\n",
" for feature_module, feature_value in feature_dict.items(): # 模块\n",
" if row[\"bill_count_last_30_day\"] == '0' and payload_dict[feature_value][\"value\"] == '△':\n",
" payload_dict.update({f\"{feature_value}\": {\"value\": \"×\"}})\n",
" except Exception as e:\n",
" print(f\"不开单识别:Error finding customer service: {e}\")\n",
" # 保单识别:从系统中抽取目标门店,针对门店抽取修改是否推荐\n",
" try:\n",
" if row[\"org_code\"] in self.widget_list:\n",
" payload_dict.update({'_widget_1735004315746': {\"value\": \"△\"}})\n",
" except Exception as e:\n",
" print(f\"保单识别:Error finding customer service: {e}\")\n",
"\n",
" # 私域小程序:根据是否开通微信小程序判断是否使用,旗舰版及以上算拥有\n",
" try:\n",
" for item in self.private_domain:\n",
" if row[\"id_own_group\"] == item.get(\"_widget_1742795002375\"): # 公司id\n",
" if int(item.get(\"_widget_1742795002379\")) > 0: # 上架商品数\n",
" payload_dict.update({\"_widget_1735106258143\": {\"value\": \"是\"}}) # DX:是否拥有\n",
" break\n",
" else:\n",
" payload_dict.update({\"_widget_1735106258143\": {\"value\": \"否\"}}) # DX:是否拥有\n",
" break\n",
" except Exception as e:\n",
" print(f\"私域小程序:Error finding customer service: {e}\")\n",
" try:\n",
" high_version = ['皇冠版', '至尊版', '尊享版', '旗舰版']\n",
" if row[\"saas_edition_fmt\"] in high_version:\n",
" payload_dict.update({'_widget_1735106258141': {\"value\": \"是\"}}) # SYXCX:是否拥有\n",
" else:\n",
" payload_dict.update({'_widget_1735106258141': {\"value\": \"否\"}}) # SYXCX:是否拥有\n",
" except Exception as e:\n",
" print(f\"私域小程序:Error finding customer service: {e}\")\n",
"\n",
" # 公域小程序:根据是否开通微信小程序判断是否使用,旗舰版及以上算拥有\n",
" try:\n",
" for item in self.public_domain:\n",
" if row[\"id_own_org\"] == item.get(\"_widget_1742784257506\"): # 门店id\n",
" if int(item.get(\"_widget_1742784257509\")) == 1: # 发布商品数量\n",
" payload_dict.update({\"_widget_1735106258114\": {\"value\": \"是\"}}) # GYXCX:是否使用\n",
" break\n",
" else:\n",
" payload_dict.update({\"_widget_1735106258114\": {\"value\": \"否\"}}) # GYXCX:是否使用\n",
" break\n",
" except Exception as e:\n",
" print(f\"公域小程序:Error finding customer service: {e}\")\n",
" try:\n",
" if row[\"id_own_org\"] in self.public_domain_list:\n",
" payload_dict.update({'_widget_1735106258112': {\"value\": \"是\"}}) # GYXCX:是否拥有\n",
" else:\n",
" payload_dict.update({'_widget_1735106258112': {\"value\": \"否\"}}) # GYXCX:是否拥有\n",
" except Exception as e:\n",
" print(f\"公域小程序:Error finding customer service: {e}\")\n",
"\n",
" # 异业合作:根据是否存在判断是否拥有,过滤条件 商品名称包含异业两个字\n",
" try:\n",
" if row[\"id_own_org\"] in self.different_industries_list:\n",
" payload_dict.update({'_widget_1735107355618': {\"value\": \"是\"}}) # YYHZ:是否拥有\n",
" else:\n",
" payload_dict.update({'_widget_1735107355618': {\"value\": \"否\"}}) # YYHZ:是否拥有\n",
" except Exception as e:\n",
" print(f\"异业合作:Error finding customer service: {e}\")\n",
"\n",
" # 短信:根据是否启动短信功能判断是否拥有,根据\n",
" try:\n",
" for item in self.groupnotification:\n",
" if row[\"id_own_group\"] == item.get(\"_widget_1743065201885\"): # 公司id\n",
" if int(item.get(\"_widget_1743065201886\")) == 1: # 是否启动短信功能\n",
" payload_dict.update({\"_widget_1735106258086\": {\"value\": \"是\"}}) # DX:是否拥有\n",
" break\n",
" else:\n",
" payload_dict.update({\"_widget_1735106258086\": {\"value\": \"否\"}}) # DX:是否拥有\n",
" break\n",
" except Exception as e:\n",
" print(f\"短信:Error finding customer service: {e}\")\n",
" try:\n",
" for item in self.groupnotification:\n",
" if row[\"id_own_group\"] == item.get(\"_widget_1743065201885\"): # 公司id\n",
" if int(item.get(\"_widget_1743065201889\")) > 0: # 累计发送成功总人数\n",
" payload_dict.update({\"_widget_1735106258088\": {\"value\": \"是\"}}) # DX:是否使用\n",
" break\n",
" else:\n",
" payload_dict.update({\"_widget_1735106258088\": {\"value\": \"否\"}}) # DX:是否使用\n",
" break\n",
" except Exception as e:\n",
" print(f\"短信:Error finding customer service: {e}\")\n",
" NGV_data_id = None\n",
" # 获取关联数据\n",
" for NGV_Data in self.NGV_data_list:\n",
" # NGV_Data = NGV_Data.get(\"data\")\n",
" if row[\"org_code\"] == NGV_Data.get(\"_widget_1734062123071\"): # 门店编码\n",
" NGV_data_id = NGV_Data.get(\"_id\")\n",
" print(NGV_data_id)\n",
" try:\n",
" png_url = NGV_Data.get('_widget_1742890765211', {})[0].get('url', \"\")\n",
" except:\n",
" png_url = \"\"\n",
" print(png_url)\n",
" if not NGV_data_id:\n",
" print(\"未找到数据ID\")\n",
"\n",
" distribution_date = datetime.datetime.now(datetime.timezone.utc)\n",
" distribution_date = distribution_date.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'\n",
"\n",
" upload_key = None\n",
" UUid = time.strftime(\"%Y%m%d%H%M%S\", time.localtime())\n",
" if png_url:\n",
" save_dir = \"sampleCloud\" # 设置输出目录\n",
"\n",
" # 创建输出目录(如果不存在)\n",
" import os\n",
"\n",
" os.makedirs(save_dir, exist_ok=True)\n",
"\n",
" save_path = fr'{save_dir}\\png\\{time.strftime(\"%Y%m%d%H%M%S\", time.localtime())}.png'\n",
"\n",
" RenewServicesRevisit.download_url_content(png_url, save_path)\n",
"\n",
" up_data = api_instance.get_upload_token(\n",
" {\"api_key\": \"675b900991ad2491c69389ca\", \"entry_id\": \"675b9c63925cd404038a6b86\",\n",
" \"transaction_id\": UUid})\n",
" upload_url = up_data.get(\"upload_url\")\n",
" upload_token = up_data.get(\"upload_token\")\n",
"\n",
" upload_result = api_instance.upload_file(\n",
" {\"upload_url\": upload_url, \"upload_token\": upload_token, \"file_path\": save_path})\n",
" upload_key = upload_result.get(\"key\")\n",
"\n",
" payload_dict.update({\n",
" \"_widget_1734590278279\": {\"value\": row[\"group_name\"]}, # 公司名称\n",
" \"_widget_1735112931760\": {\"value\": row[\"id_own_group\"]}, # 公司id\n",
" \"_widget_1735112931761\": {\"value\": row[\"id_own_org\"]}, # 门店id\n",
" \"_widget_1734590278281\": {\"value\": row['org_name']}, # 门店名称\n",
" \"_widget_1734590278292\": {\"value\": row[\"跟进阶段\"]}, # 跟进阶段\n",
" \"_widget_1734321349021\": {\"value\": NGV_data_id}, # 关data_get联数据\n",
" \"_widget_1742548684369\": {\"value\": row['主要目的']}, # 主要目的\n",
" \"_widget_1734590278266\": {\"value\": row['region_name']}, # 大区\n",
" \"_widget_1734590278285\": {\"value\": row['branch_name']}, # 小区\n",
" \"_widget_1734590278284\": {\"value\": row['province_name']}, # 省\n",
" \"_widget_1734590278283\": {\"value\": row['city_name']}, # 市\n",
" \"_widget_1734590278282\": {\"value\": row['area_name']}, # 区\n",
" \"_widget_1734590278278\": {\"value\": row['saas_customer_type']}, # 门店分层\n",
" \"_widget_1734590278277\": {\"value\": row['group_grade']}, # 公司等级\n",
" \"_widget_1734590278276\": {\"value\": row['limit_user_type']}, # 限制账户类型\n",
" \"_widget_1734590278275\": {\"value\": row['active_user_type']}, # 有效账户类型\n",
" \"_widget_1734590278274\": {\"value\": row['saas_version']}, # ERP操作模式\n",
" \"_widget_1734590278273\": {\"value\": row['saas_use_year']}, # 使用时长\n",
" \"_widget_1734590278272\": {\"value\": row['org_stage']}, # 门店阶段\n",
" \"_widget_1734590278271\": {\"value\": row['manage_model']}, # 经营模式\n",
" \"_widget_1734590278267\": {\"value\": row['contacts']}, # 联系人\n",
" \"_widget_1734590278287\": {\"value\": row['contact_mobile']}, # 联系手机号\n",
" \"_widget_1734590278286\": {\"value\": row['saas_edition_fmt']}, # SaaS版本\n",
" \"_widget_1734590278280\": {\"value\": row['org_code']}, # 门店编码\n",
" # \"_widget_1735287791875\": {\"value\": row['salesmen']}, # 销售负责人\n",
" \"_widget_1735096489244\": {\"value\": distribution_date}, # 派发时间\n",
" \"_widget_1742895342914\": {\"value\": row['business_scope_fmt']}, # 经营范围\n",
" \"_widget_1742895342915\": {\"value\": row['station_number']}, # 工位数\n",
" \"_widget_1742895342916\": {\"value\": [upload_key]} # 门头照片\n",
" })\n",
"\n",
" def convert_nan_none_to_null(obj):\n",
" if obj is None or (isinstance(obj, float) and math.isnan(obj)):\n",
" return None # 会被 json.dumps() 转换为 'null'\n",
" elif isinstance(obj, (list, tuple)):\n",
" return [convert_nan_none_to_null(item) for item in obj]\n",
" elif isinstance(obj, dict):\n",
" return {key: convert_nan_none_to_null(value) for key, value in obj.items()}\n",
" else:\n",
" return obj\n",
" cleaned_payload = convert_nan_none_to_null(payload_dict)\n",
"\n",
" routine_follow_up_payload = {\n",
" \"api_key\": \"675b900991ad2491c69389ca\",\n",
" \"entry_id\": \"675b9c63925cd404038a6b86\",\n",
" \"is_start_workflow\": \"true\",\n",
" \"data\": payload_dict,\n",
" \"transaction_id\": UUid\n",
" }\n",
"\n",
" print(routine_follow_up_payload)\n",
"\n",
" res = api_instance.data_batch_create(routine_follow_up_payload)\n",
" logger.info(f\"创建结果:{res}\")\n",
"\n",
" # print(res)\n",
" except:\n",
" pass\n",
"\n",
"\n",
"if __name__ == '__main__':\n",
" start = RenewServicesRevisit()\n",
" start.main()\n"
],
"id": "4ccc98491494ae3c",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"已获取 100 条数据\n",
"已获取 200 条数据\n",
"已获取 300 条数据\n",
"已获取 400 条数据\n",
"已获取 500 条数据\n",
"已获取 600 条数据\n",
"已获取 700 条数据\n",
"已获取 800 条数据\n",
"已获取 900 条数据\n",
"已获取 1000 条数据\n",
"已获取 1100 条数据\n",
"已获取 1200 条数据\n",
"已获取 1300 条数据\n",
"已获取 1400 条数据\n",
"已获取 1500 条数据\n",
"已获取 1600 条数据\n",
"已获取 1700 条数据\n",
"已获取 1800 条数据\n",
"已获取 1900 条数据\n",
"已获取 2000 条数据\n",
"已获取 2100 条数据\n",
"已获取 2200 条数据\n",
"已获取 2300 条数据\n",
"已获取 2400 条数据\n",
"已获取 2500 条数据\n",
"已获取 2600 条数据\n",
"已获取 2700 条数据\n",
"已获取 2800 条数据\n",
"已获取 2900 条数据\n",
"已获取 3000 条数据\n",
"已获取 3100 条数据\n",
"已获取 3200 条数据\n",
"已获取 3300 条数据\n",
"已获取 3400 条数据\n",
"已获取 3500 条数据\n",
"已获取 3600 条数据\n",
"已获取 3664 条数据\n",
"已获取 100 条数据\n",
"已获取 200 条数据\n",
"已获取 222 条数据\n",
"已获取 100 条数据\n",
"已获取 192 条数据\n",
"已获取 100 条数据\n",
"已获取 200 条数据\n",
"已获取 300 条数据\n",
"已获取 400 条数据\n",
"已获取 500 条数据\n",
"已获取 600 条数据\n",
"已获取 700 条数据\n",
"已获取 800 条数据\n",
"已获取 900 条数据\n",
"已获取 1000 条数据\n",
"已获取 1100 条数据\n",
"已获取 1200 条数据\n",
"已获取 1300 条数据\n",
"已获取 1400 条数据\n",
"已获取 1500 条数据\n",
"已获取 1600 条数据\n",
"已获取 1700 条数据\n",
"已获取 1800 条数据\n",
"已获取 1900 条数据\n",
"已获取 2000 条数据\n",
"已获取 2100 条数据\n",
"已获取 2200 条数据\n",
"已获取 2300 条数据\n",
"已获取 2400 条数据\n",
"已获取 2500 条数据\n",
"已获取 2600 条数据\n",
"已获取 2700 条数据\n",
"已获取 2800 条数据\n",
"已获取 2900 条数据\n",
"已获取 3000 条数据\n",
"已获取 3100 条数据\n",
"已获取 3200 条数据\n",
"已获取 3300 条数据\n",
"已获取 3400 条数据\n",
"已获取 3500 条数据\n",
"已获取 3600 条数据\n",
"已获取 3700 条数据\n",
"已获取 3800 条数据\n",
"已获取 3900 条数据\n",
"已获取 4000 条数据\n",
"已获取 4100 条数据\n",
"已获取 4200 条数据\n",
"已获取 4300 条数据\n",
"已获取 4400 条数据\n",
"已获取 4500 条数据\n",
"已获取 4600 条数据\n",
"已获取 4700 条数据\n",
"已获取 4800 条数据\n",
"已获取 4900 条数据\n",
"已获取 5000 条数据\n",
"已获取 5100 条数据\n",
"已获取 5200 条数据\n",
"已获取 5300 条数据\n",
"已获取 5400 条数据\n",
"已获取 5500 条数据\n",
"已获取 5600 条数据\n",
"已获取 5700 条数据\n",
"已获取 5800 条数据\n",
"已获取 5900 条数据\n",
"已获取 6000 条数据\n",
"已获取 6100 条数据\n",
"已获取 6200 条数据\n",
"已获取 6300 条数据\n",
"已获取 6400 条数据\n",
"已获取 6500 条数据\n",
"已获取 6600 条数据\n",
"已获取 6700 条数据\n",
"已获取 6800 条数据\n",
"已获取 6900 条数据\n",
"已获取 7000 条数据\n",
"已获取 7100 条数据\n",
"已获取 7200 条数据\n",
"已获取 7300 条数据\n",
"已获取 7400 条数据\n",
"已获取 7500 条数据\n",
"已获取 7600 条数据\n",
"已获取 7700 条数据\n",
"已获取 7800 条数据\n",
"已获取 7900 条数据\n",
"已获取 8000 条数据\n",
"已获取 8100 条数据\n",
"已获取 8200 条数据\n",
"已获取 8300 条数据\n",
"已获取 8400 条数据\n",
"已获取 8500 条数据\n",
"已获取 8600 条数据\n",
"已获取 8700 条数据\n",
"已获取 8800 条数据\n",
"已获取 8900 条数据\n",
"已获取 9000 条数据\n",
"已获取 9100 条数据\n",
"已获取 9200 条数据\n",
"已获取 9300 条数据\n",
"已获取 9400 条数据\n",
"已获取 9500 条数据\n",
"已获取 9600 条数据\n",
"已获取 9700 条数据\n",
"已获取 9800 条数据\n",
"已获取 9900 条数据\n",
"已获取 10000 条数据\n",
"已获取 10100 条数据\n",
"已获取 10200 条数据\n",
"已获取 10300 条数据\n",
"已获取 10400 条数据\n",
"已获取 10500 条数据\n",
"已获取 10600 条数据\n",
"已获取 10700 条数据\n",
"已获取 10800 条数据\n",
"已获取 10900 条数据\n",
"已获取 11000 条数据\n",
"已获取 11100 条数据\n",
"已获取 11200 条数据\n",
"已获取 11300 条数据\n",
"已获取 11400 条数据\n",
"已获取 11500 条数据\n",
"已获取 11600 条数据\n",
"已获取 11700 条数据\n",
"已获取 11800 条数据\n",
"已获取 11900 条数据\n",
"已获取 12000 条数据\n",
"已获取 12100 条数据\n",
"已获取 12200 条数据\n",
"已获取 12300 条数据\n",
"已获取 12400 条数据\n",
"已获取 12500 条数据\n",
"已获取 12600 条数据\n",
"已获取 12700 条数据\n",
"已获取 12800 条数据\n",
"已获取 12900 条数据\n",
"已获取 13000 条数据\n",
"已获取 13100 条数据\n",
"已获取 13200 条数据\n",
"已获取 13300 条数据\n",
"已获取 13400 条数据\n",
"已获取 13500 条数据\n",
"已获取 13600 条数据\n",
"已获取 13700 条数据\n",
"已获取 13800 条数据\n",
"已获取 13900 条数据\n",
"已获取 14000 条数据\n",
"已获取 14100 条数据\n",
"已获取 14200 条数据\n",
"已获取 14300 条数据\n",
"已获取 14400 条数据\n",
"已获取 14500 条数据\n",
"已获取 14600 条数据\n",
"已获取 14700 条数据\n",
"已获取 14800 条数据\n",
"已获取 14900 条数据\n",
"已获取 15000 条数据\n",
"已获取 15100 条数据\n",
"已获取 15200 条数据\n",
"已获取 15300 条数据\n",
"已获取 15400 条数据\n",
"已获取 15500 条数据\n",
"已获取 15600 条数据\n",
"已获取 15700 条数据\n",
"已获取 15800 条数据\n",
"已获取 15900 条数据\n",
"已获取 16000 条数据\n",
"已获取 16100 条数据\n",
"已获取 16200 条数据\n",
"已获取 16300 条数据\n",
"已获取 16400 条数据\n",
"已获取 16500 条数据\n",
"已获取 16600 条数据\n",
"已获取 16700 条数据\n",
"已获取 16800 条数据\n",
"已获取 16900 条数据\n",
"已获取 17000 条数据\n",
"已获取 17100 条数据\n",
"已获取 17200 条数据\n",
"已获取 17300 条数据\n",
"已获取 17400 条数据\n",
"已获取 17500 条数据\n",
"已获取 17600 条数据\n",
"已获取 17700 条数据\n",
"已获取 17800 条数据\n",
"已获取 17900 条数据\n",
"已获取 18000 条数据\n",
"已获取 18100 条数据\n",
"已获取 18200 条数据\n",
"已获取 18300 条数据\n",
"已获取 18400 条数据\n",
"已获取 18500 条数据\n",
"已获取 18600 条数据\n",
"已获取 18700 条数据\n",
"已获取 18800 条数据\n",
"已获取 18900 条数据\n",
"已获取 19000 条数据\n",
"已获取 19100 条数据\n",
"已获取 19200 条数据\n",
"已获取 19300 条数据\n",
"已获取 19400 条数据\n",
"已获取 19500 条数据\n",
"已获取 19600 条数据\n",
"已获取 19700 条数据\n",
"已获取 19800 条数据\n",
"已获取 19900 条数据\n",
"已获取 20000 条数据\n",
"已获取 20100 条数据\n",
"已获取 20200 条数据\n",
"已获取 20300 条数据\n",
"已获取 20400 条数据\n",
"已获取 20500 条数据\n",
"已获取 20600 条数据\n",
"已获取 20700 条数据\n",
"已获取 20800 条数据\n",
"已获取 20900 条数据\n",
"已获取 21000 条数据\n",
"已获取 21100 条数据\n",
"已获取 21200 条数据\n",
"已获取 21300 条数据\n",
"已获取 21400 条数据\n",
"已获取 21500 条数据\n",
"已获取 21600 条数据\n",
"已获取 21700 条数据\n",
"已获取 21800 条数据\n",
"已获取 21900 条数据\n",
"已获取 22000 条数据\n",
"已获取 22100 条数据\n",
"已获取 22200 条数据\n",
"已获取 22300 条数据\n",
"已获取 22400 条数据\n",
"已获取 22500 条数据\n",
"已获取 22600 条数据\n",
"已获取 22700 条数据\n",
"已获取 22800 条数据\n",
"已获取 22900 条数据\n",
"已获取 23000 条数据\n",
"已获取 23100 条数据\n",
"已获取 23200 条数据\n",
"已获取 23300 条数据\n",
"已获取 23400 条数据\n",
"已获取 23500 条数据\n",
"已获取 23600 条数据\n",
"已获取 23700 条数据\n",
"已获取 23800 条数据\n",
"已获取 23900 条数据\n",
"已获取 24000 条数据\n",
"已获取 24100 条数据\n",
"已获取 24200 条数据\n",
"已获取 24300 条数据\n",
"已获取 24400 条数据\n",
"已获取 24500 条数据\n",
"已获取 24600 条数据\n",
"已获取 24700 条数据\n",
"已获取 24800 条数据\n",
"已获取 24900 条数据\n",
"已获取 25000 条数据\n",
"已获取 25100 条数据\n",
"已获取 25200 条数据\n",
"已获取 25300 条数据\n",
"已获取 25400 条数据\n",
"已获取 25500 条数据\n",
"已获取 25600 条数据\n",
"已获取 25700 条数据\n",
"已获取 25800 条数据\n",
"已获取 25900 条数据\n",
"已获取 26000 条数据\n",
"已获取 26100 条数据\n",
"已获取 26200 条数据\n",
"已获取 26300 条数据\n",
"已获取 26400 条数据\n",
"已获取 26500 条数据\n",
"已获取 26600 条数据\n",
"已获取 26700 条数据\n",
"已获取 26800 条数据\n",
"已获取 26900 条数据\n",
"已获取 27000 条数据\n",
"已获取 27100 条数据\n",
"已获取 27200 条数据\n",
"已获取 27300 条数据\n",
"已获取 27400 条数据\n",
"已获取 27500 条数据\n",
"已获取 27600 条数据\n",
"已获取 27700 条数据\n",
"已获取 27800 条数据\n",
"已获取 27900 条数据\n",
"已获取 28000 条数据\n",
"已获取 28100 条数据\n",
"已获取 28200 条数据\n",
"已获取 28300 条数据\n",
"已获取 28400 条数据\n",
"已获取 28500 条数据\n",
"已获取 28600 条数据\n",
"已获取 28700 条数据\n",
"已获取 28800 条数据\n",
"已获取 28900 条数据\n",
"已获取 29000 条数据\n",
"已获取 29100 条数据\n",
"已获取 29200 条数据\n",
"已获取 29300 条数据\n",
"已获取 29400 条数据\n",
"已获取 29500 条数据\n",
"已获取 29600 条数据\n",
"已获取 29700 条数据\n",
"已获取 29800 条数据\n",
"已获取 29900 条数据\n",
"已获取 30000 条数据\n",
"已获取 30100 条数据\n",
"已获取 30200 条数据\n",
"已获取 30300 条数据\n",
"已获取 30400 条数据\n",
"已获取 30500 条数据\n",
"已获取 30600 条数据\n",
"已获取 30700 条数据\n",
"已获取 30800 条数据\n",
"已获取 30900 条数据\n",
"已获取 31000 条数据\n",
"已获取 31100 条数据\n",
"已获取 31200 条数据\n",
"已获取 31300 条数据\n",
"已获取 31400 条数据\n",
"已获取 31500 条数据\n",
"已获取 31600 条数据\n",
"已获取 31700 条数据\n",
"已获取 31800 条数据\n",
"已获取 31900 条数据\n",
"已获取 32000 条数据\n",
"已获取 32100 条数据\n",
"已获取 32200 条数据\n",
"已获取 32300 条数据\n",
"已获取 32400 条数据\n",
"已获取 32500 条数据\n",
"已获取 32600 条数据\n",
"已获取 32700 条数据\n",
"已获取 32800 条数据\n",
"已获取 32900 条数据\n",
"已获取 33000 条数据\n",
"已获取 33100 条数据\n",
"已获取 33200 条数据\n",
"已获取 33300 条数据\n",
"已获取 33400 条数据\n",
"已获取 33500 条数据\n",
"已获取 33600 条数据\n",
"已获取 33700 条数据\n",
"已获取 33800 条数据\n",
"已获取 33900 条数据\n",
"已获取 34000 条数据\n",
"已获取 34100 条数据\n",
"已获取 34200 条数据\n",
"已获取 34300 条数据\n",
"已获取 34400 条数据\n",
"已获取 34500 条数据\n",
"已获取 34600 条数据\n",
"已获取 34700 条数据\n",
"已获取 34800 条数据\n",
"已获取 34900 条数据\n",
"已获取 35000 条数据\n",
"已获取 35100 条数据\n",
"已获取 35200 条数据\n",
"已获取 35300 条数据\n",
"已获取 35400 条数据\n",
"已获取 35500 条数据\n",
"已获取 35600 条数据\n",
"已获取 35700 条数据\n",
"已获取 35800 条数据\n",
"已获取 35900 条数据\n",
"已获取 36000 条数据\n",
"已获取 36100 条数据\n",
"已获取 36200 条数据\n",
"已获取 36300 条数据\n",
"已获取 36400 条数据\n",
"已获取 36500 条数据\n",
"已获取 36600 条数据\n",
"已获取 36700 条数据\n",
"已获取 36800 条数据\n",
"已获取 36900 条数据\n",
"已获取 37000 条数据\n",
"已获取 37100 条数据\n",
"已获取 37200 条数据\n",
"已获取 37300 条数据\n",
"已获取 37400 条数据\n",
"已获取 37500 条数据\n",
"已获取 37600 条数据\n",
"已获取 37700 条数据\n",
"已获取 37724 条数据\n",
"已获取 100 条数据\n",
"已获取 200 条数据\n",
"已获取 300 条数据\n",
"已获取 400 条数据\n",
"已获取 500 条数据\n",
"已获取 600 条数据\n",
"已获取 700 条数据\n",
"已获取 800 条数据\n",
"已获取 900 条数据\n",
"已获取 1000 条数据\n",
"已获取 1100 条数据\n",
"已获取 1200 条数据\n",
"已获取 1300 条数据\n",
"已获取 1400 条数据\n",
"已获取 1500 条数据\n",
"已获取 1600 条数据\n",
"已获取 1700 条数据\n",
"已获取 1800 条数据\n",
"已获取 1900 条数据\n",
"已获取 2000 条数据\n",
"已获取 2100 条数据\n",
"已获取 2200 条数据\n",
"已获取 2300 条数据\n",
"已获取 2400 条数据\n",
"已获取 2500 条数据\n",
"已获取 2600 条数据\n",
"已获取 2700 条数据\n",
"已获取 2800 条数据\n",
"已获取 2900 条数据\n",
"已获取 3000 条数据\n",
"已获取 3100 条数据\n",
"已获取 3200 条数据\n",
"已获取 3300 条数据\n",
"已获取 3400 条数据\n",
"已获取 3500 条数据\n",
"已获取 3600 条数据\n",
"已获取 3700 条数据\n",
"已获取 3800 条数据\n",
"已获取 3900 条数据\n",
"已获取 4000 条数据\n",
"已获取 4100 条数据\n",
"已获取 4200 条数据\n",
"已获取 4300 条数据\n",
"已获取 4400 条数据\n",
"已获取 4500 条数据\n",
"已获取 4600 条数据\n",
"已获取 4700 条数据\n",
"已获取 4800 条数据\n",
"已获取 4900 条数据\n",
"已获取 5000 条数据\n",
"已获取 5100 条数据\n",
"已获取 5200 条数据\n",
"已获取 5300 条数据\n",
"已获取 5400 条数据\n",
"已获取 5500 条数据\n",
"已获取 5600 条数据\n",
"已获取 5700 条数据\n",
"已获取 5800 条数据\n",
"已获取 5900 条数据\n",
"已获取 6000 条数据\n",
"已获取 6100 条数据\n",
"已获取 6200 条数据\n",
"已获取 6300 条数据\n",
"已获取 6400 条数据\n",
"已获取 6500 条数据\n",
"已获取 6600 条数据\n",
"已获取 6700 条数据\n",
"已获取 6800 条数据\n",
"已获取 6900 条数据\n",
"已获取 7000 条数据\n",
"已获取 7100 条数据\n",
"已获取 7200 条数据\n",
"已获取 7300 条数据\n",
"已获取 7400 条数据\n",
"已获取 7500 条数据\n",
"已获取 7600 条数据\n",
"已获取 7700 条数据\n",
"已获取 7800 条数据\n",
"已获取 7900 条数据\n",
"已获取 8000 条数据\n",
"已获取 8100 条数据\n",
"已获取 8200 条数据\n",
"已获取 8300 条数据\n",
"已获取 8400 条数据\n",
"已获取 8500 条数据\n",
"已获取 8600 条数据\n",
"已获取 8700 条数据\n",
"已获取 8800 条数据\n",
"已获取 8900 条数据\n",
"已获取 9000 条数据\n",
"已获取 9100 条数据\n",
"已获取 9200 条数据\n",
"已获取 9300 条数据\n",
"已获取 9400 条数据\n",
"已获取 9500 条数据\n",
"已获取 9600 条数据\n",
"已获取 9700 条数据\n",
"已获取 9800 条数据\n",
"已获取 9900 条数据\n",
"已获取 10000 条数据\n",
"已获取 10100 条数据\n",
"已获取 10200 条数据\n",
"已获取 10300 条数据\n",
"已获取 10400 条数据\n",
"已获取 10500 条数据\n",
"已获取 10600 条数据\n",
"已获取 10700 条数据\n",
"已获取 10800 条数据\n",
"已获取 10900 条数据\n",
"已获取 11000 条数据\n",
"已获取 11100 条数据\n",
"已获取 11200 条数据\n",
"已获取 11300 条数据\n",
"已获取 11400 条数据\n",
"已获取 11500 条数据\n",
"已获取 11600 条数据\n",
"已获取 11700 条数据\n",
"已获取 11800 条数据\n",
"已获取 11900 条数据\n",
"已获取 12000 条数据\n",
"已获取 12100 条数据\n",
"已获取 12200 条数据\n",
"已获取 12300 条数据\n",
"已获取 12400 条数据\n",
"已获取 12500 条数据\n",
"已获取 12600 条数据\n",
"已获取 12700 条数据\n",
"已获取 12800 条数据\n",
"已获取 12900 条数据\n",
"已获取 13000 条数据\n",
"已获取 13100 条数据\n",
"已获取 13200 条数据\n",
"已获取 13300 条数据\n",
"已获取 13400 条数据\n",
"已获取 13500 条数据\n",
"已获取 13600 条数据\n",
"已获取 13700 条数据\n",
"已获取 13800 条数据\n",
"已获取 13900 条数据\n",
"已获取 14000 条数据\n",
"已获取 14100 条数据\n",
"已获取 14200 条数据\n",
"已获取 14300 条数据\n",
"已获取 14400 条数据\n",
"已获取 14500 条数据\n",
"已获取 14600 条数据\n",
"已获取 14700 条数据\n",
"已获取 14800 条数据\n",
"已获取 14900 条数据\n",
"已获取 15000 条数据\n",
"已获取 15100 条数据\n",
"已获取 15200 条数据\n",
"已获取 15300 条数据\n",
"已获取 15400 条数据\n",
"已获取 15500 条数据\n",
"已获取 15600 条数据\n",
"已获取 15700 条数据\n",
"已获取 15800 条数据\n",
"已获取 15900 条数据\n",
"已获取 16000 条数据\n",
"已获取 16100 条数据\n",
"已获取 16200 条数据\n",
"已获取 16300 条数据\n",
"已获取 16400 条数据\n",
"已获取 16500 条数据\n",
"已获取 16600 条数据\n",
"已获取 16700 条数据\n",
"已获取 16800 条数据\n",
"已获取 16900 条数据\n",
"已获取 17000 条数据\n",
"已获取 17100 条数据\n",
"已获取 17200 条数据\n",
"已获取 17300 条数据\n",
"已获取 17400 条数据\n",
"已获取 17500 条数据\n",
"已获取 17600 条数据\n",
"已获取 17700 条数据\n",
"已获取 17800 条数据\n",
"已获取 17871 条数据\n",
"已获取 100 条数据\n",
"已获取 200 条数据\n",
"已获取 300 条数据\n",
"已获取 400 条数据\n",
"已获取 500 条数据\n",
"已获取 600 条数据\n",
"已获取 700 条数据\n",
"已获取 800 条数据\n",
"已获取 900 条数据\n",
"已获取 1000 条数据\n",
"已获取 1100 条数据\n",
"已获取 1200 条数据\n",
"已获取 1300 条数据\n",
"已获取 1400 条数据\n",
"已获取 1500 条数据\n",
"已获取 1600 条数据\n",
"已获取 1700 条数据\n",
"已获取 1800 条数据\n",
"已获取 1900 条数据\n",
"已获取 2000 条数据\n",
"已获取 2100 条数据\n",
"已获取 2200 条数据\n",
"已获取 2300 条数据\n",
"已获取 2400 条数据\n",
"已获取 2500 条数据\n",
"已获取 2600 条数据\n",
"已获取 2700 条数据\n",
"已获取 2800 条数据\n",
"已获取 2900 条数据\n",
"已获取 3000 条数据\n",
"已获取 3100 条数据\n",
"已获取 3200 条数据\n",
"已获取 3300 条数据\n",
"已获取 3400 条数据\n",
"已获取 3500 条数据\n",
"已获取 3600 条数据\n",
"已获取 3700 条数据\n",
"已获取 3800 条数据\n",
"已获取 3900 条数据\n",
"已获取 4000 条数据\n",
"已获取 4100 条数据\n",
"已获取 4200 条数据\n",
"已获取 4300 条数据\n",
"已获取 4400 条数据\n",
"已获取 4500 条数据\n",
"已获取 4600 条数据\n",
"已获取 4700 条数据\n",
"已获取 4800 条数据\n",
"已获取 4900 条数据\n",
"已获取 5000 条数据\n",
"已获取 5100 条数据\n",
"已获取 5200 条数据\n",
"已获取 5300 条数据\n",
"已获取 5400 条数据\n",
"已获取 5500 条数据\n",
"已获取 5600 条数据\n",
"已获取 5700 条数据\n",
"已获取 5800 条数据\n",
"已获取 5900 条数据\n",
"已获取 6000 条数据\n",
"已获取 6100 条数据\n",
"已获取 6200 条数据\n",
"已获取 6300 条数据\n",
"已获取 6400 条数据\n",
"已获取 6500 条数据\n",
"已获取 6600 条数据\n",
"已获取 6700 条数据\n",
"已获取 6800 条数据\n",
"已获取 6900 条数据\n",
"已获取 7000 条数据\n",
"已获取 7100 条数据\n",
"已获取 7200 条数据\n",
"已获取 7300 条数据\n",
"已获取 7400 条数据\n",
"已获取 7500 条数据\n",
"已获取 7600 条数据\n",
"已获取 7700 条数据\n",
"已获取 7800 条数据\n",
"已获取 7900 条数据\n",
"已获取 8000 条数据\n",
"已获取 8100 条数据\n",
"已获取 8200 条数据\n",
"已获取 8300 条数据\n",
"已获取 8400 条数据\n",
"已获取 8500 条数据\n",
"已获取 8600 条数据\n",
"已获取 8700 条数据\n",
"已获取 8800 条数据\n",
"已获取 8900 条数据\n",
"已获取 9000 条数据\n",
"已获取 9100 条数据\n",
"已获取 9200 条数据\n",
"已获取 9300 条数据\n",
"已获取 9400 条数据\n",
"已获取 9500 条数据\n",
"已获取 9600 条数据\n",
"已获取 9700 条数据\n",
"已获取 9800 条数据\n",
"已获取 9900 条数据\n",
"已获取 10000 条数据\n",
"已获取 10100 条数据\n",
"已获取 10200 条数据\n",
"已获取 10300 条数据\n",
"已获取 10400 条数据\n",
"已获取 10500 条数据\n",
"已获取 10600 条数据\n",
"已获取 10700 条数据\n",
"已获取 10800 条数据\n",
"已获取 10900 条数据\n",
"已获取 11000 条数据\n",
"已获取 11100 条数据\n",
"已获取 11200 条数据\n",
"已获取 11300 条数据\n",
"已获取 11400 条数据\n",
"已获取 11500 条数据\n",
"已获取 11600 条数据\n",
"已获取 11700 条数据\n",
"已获取 11800 条数据\n",
"已获取 11900 条数据\n",
"已获取 12000 条数据\n",
"已获取 12100 条数据\n",
"已获取 12200 条数据\n",
"已获取 12300 条数据\n",
"已获取 12400 条数据\n",
"已获取 12500 条数据\n",
"已获取 12600 条数据\n",
"已获取 12700 条数据\n",
"已获取 12800 条数据\n",
"已获取 12900 条数据\n",
"已获取 13000 条数据\n",
"已获取 13100 条数据\n",
"已获取 13200 条数据\n",
"已获取 13300 条数据\n",
"已获取 13400 条数据\n",
"已获取 13500 条数据\n",
"已获取 13600 条数据\n",
"已获取 13700 条数据\n",
"已获取 13800 条数据\n",
"已获取 13900 条数据\n",
"已获取 14000 条数据\n",
"已获取 14100 条数据\n",
"已获取 14200 条数据\n",
"已获取 14300 条数据\n",
"已获取 14400 条数据\n",
"已获取 14500 条数据\n",
"已获取 14600 条数据\n",
"已获取 14700 条数据\n",
"已获取 14800 条数据\n",
"已获取 14900 条数据\n",
"已获取 15000 条数据\n",
"已获取 15100 条数据\n",
"已获取 15200 条数据\n",
"已获取 15300 条数据\n",
"已获取 15400 条数据\n",
"已获取 15500 条数据\n",
"已获取 15600 条数据\n",
"已获取 15700 条数据\n",
"已获取 15800 条数据\n",
"已获取 15900 条数据\n",
"已获取 16000 条数据\n",
"已获取 16100 条数据\n",
"已获取 16200 条数据\n",
"已获取 16300 条数据\n",
"已获取 16400 条数据\n",
"已获取 16500 条数据\n",
"已获取 16600 条数据\n",
"已获取 16700 条数据\n",
"已获取 16800 条数据\n",
"已获取 16900 条数据\n",
"已获取 17000 条数据\n",
"已获取 17100 条数据\n",
"已获取 17200 条数据\n",
"已获取 17300 条数据\n",
"已获取 17400 条数据\n",
"已获取 17500 条数据\n",
"已获取 17600 条数据\n",
"已获取 17700 条数据\n",
"已获取 17800 条数据\n",
"已获取 17900 条数据\n",
"已获取 18000 条数据\n",
"已获取 18100 条数据\n",
"已获取 18200 条数据\n",
"已获取 18300 条数据\n",
"已获取 18400 条数据\n",
"已获取 18500 条数据\n",
"已获取 18600 条数据\n",
"已获取 18700 条数据\n",
"已获取 18800 条数据\n",
"已获取 18900 条数据\n",
"已获取 19000 条数据\n",
"已获取 19100 条数据\n",
"已获取 19200 条数据\n",
"已获取 19300 条数据\n",
"已获取 19400 条数据\n",
"已获取 19500 条数据\n",
"已获取 19600 条数据\n",
"已获取 19700 条数据\n",
"已获取 19800 条数据\n",
"已获取 19900 条数据\n",
"已获取 20000 条数据\n",
"已获取 20100 条数据\n",
"已获取 20200 条数据\n",
"已获取 20300 条数据\n",
"已获取 20400 条数据\n",
"已获取 20500 条数据\n",
"已获取 20600 条数据\n",
"已获取 20700 条数据\n",
"已获取 20800 条数据\n",
"已获取 20900 条数据\n",
"已获取 21000 条数据\n",
"已获取 21100 条数据\n",
"已获取 21200 条数据\n",
"已获取 21300 条数据\n",
"已获取 21400 条数据\n",
"已获取 21500 条数据\n",
"已获取 21600 条数据\n",
"已获取 21700 条数据\n",
"已获取 21800 条数据\n",
"已获取 21820 条数据\n",
"已获取 100 条数据\n",
"已获取 200 条数据\n",
"已获取 300 条数据\n",
"已获取 400 条数据\n",
"已获取 500 条数据\n",
"已获取 600 条数据\n",
"已获取 700 条数据\n",
"已获取 800 条数据\n",
"已获取 900 条数据\n",
"已获取 1000 条数据\n",
"已获取 1100 条数据\n",
"已获取 1200 条数据\n",
"已获取 1300 条数据\n",
"已获取 1400 条数据\n",
"已获取 1500 条数据\n",
"已获取 1600 条数据\n",
"已获取 1700 条数据\n",
"已获取 1800 条数据\n",
"已获取 1850 条数据\n",
"已获取 100 条数据\n",
"已获取 200 条数据\n",
"已获取 300 条数据\n",
"已获取 400 条数据\n",
"已获取 432 条数据\n",
"已获取 100 条数据\n",
"已获取 200 条数据\n",
"已获取 300 条数据\n",
"已获取 400 条数据\n",
"已获取 500 条数据\n",
"已获取 600 条数据\n",
"已获取 700 条数据\n",
"已获取 800 条数据\n",
"已获取 900 条数据\n",
"已获取 1000 条数据\n",
"已获取 1100 条数据\n",
"已获取 1200 条数据\n",
"已获取 1300 条数据\n",
"已获取 1400 条数据\n",
"已获取 1500 条数据\n",
"已获取 1600 条数据\n",
"已获取 1700 条数据\n",
"已获取 1800 条数据\n",
"已获取 1900 条数据\n",
"已获取 2000 条数据\n",
"已获取 2100 条数据\n",
"已获取 2200 条数据\n",
"已获取 2300 条数据\n",
"已获取 2400 条数据\n",
"已获取 2500 条数据\n",
"已获取 2600 条数据\n",
"已获取 2700 条数据\n",
"已获取 2800 条数据\n",
"已获取 2900 条数据\n",
"已获取 3000 条数据\n",
"已获取 3100 条数据\n",
"已获取 3200 条数据\n",
"已获取 3300 条数据\n",
"已获取 3369 条数据\n",
"已获取 100 条数据\n",
"已获取 200 条数据\n",
"已获取 206 条数据\n",
"已获取 51 条数据\n",
"已获取 100 条数据\n",
"已获取 200 条数据\n",
"已获取 300 条数据\n",
"已获取 400 条数据\n",
"已获取 500 条数据\n",
"已获取 600 条数据\n",
"已获取 700 条数据\n",
"已获取 800 条数据\n",
"已获取 900 条数据\n",
"已获取 1000 条数据\n",
"已获取 1100 条数据\n",
"已获取 1200 条数据\n",
"已获取 1300 条数据\n",
"已获取 1400 条数据\n",
"已获取 1500 条数据\n",
"已获取 1600 条数据\n",
"已获取 1700 条数据\n",
"已获取 1800 条数据\n",
"已获取 1900 条数据\n",
"已获取 2000 条数据\n",
"已获取 2100 条数据\n",
"已获取 2200 条数据\n",
"已获取 2300 条数据\n",
"已获取 2400 条数据\n",
"已获取 2500 条数据\n",
"已获取 2600 条数据\n",
"已获取 2700 条数据\n",
"已获取 2800 条数据\n",
"已获取 2900 条数据\n",
"已获取 3000 条数据\n",
"已获取 3100 条数据\n",
"已获取 3200 条数据\n",
"已获取 3300 条数据\n",
"已获取 3400 条数据\n",
"已获取 3500 条数据\n",
"已获取 3600 条数据\n",
"已获取 3700 条数据\n",
"已获取 3800 条数据\n",
"已获取 3900 条数据\n",
"已获取 4000 条数据\n",
"已获取 4100 条数据\n",
"已获取 4200 条数据\n",
"已获取 4300 条数据\n",
"已获取 4400 条数据\n",
"已获取 4500 条数据\n",
"已获取 4600 条数据\n",
"已获取 4700 条数据\n",
"已获取 4800 条数据\n",
"已获取 4900 条数据\n",
"已获取 5000 条数据\n",
"已获取 5100 条数据\n",
"已获取 5200 条数据\n",
"已获取 5300 条数据\n",
"已获取 5400 条数据\n",
"已获取 5500 条数据\n",
"已获取 5600 条数据\n",
"已获取 5700 条数据\n",
"已获取 5800 条数据\n",
"已获取 5900 条数据\n",
"已获取 6000 条数据\n",
"已获取 6100 条数据\n",
"已获取 6200 条数据\n",
"已获取 6300 条数据\n",
"已获取 6400 条数据\n",
"已获取 6500 条数据\n",
"已获取 6600 条数据\n",
"已获取 6700 条数据\n",
"已获取 6800 条数据\n",
"已获取 6900 条数据\n",
"已获取 7000 条数据\n",
"已获取 7100 条数据\n",
"已获取 7200 条数据\n",
"已获取 7300 条数据\n",
"已获取 7400 条数据\n",
"已获取 7500 条数据\n",
"已获取 7600 条数据\n",
"已获取 7700 条数据\n",
"已获取 7800 条数据\n",
"已获取 7900 条数据\n",
"已获取 8000 条数据\n",
"已获取 8100 条数据\n",
"已获取 8200 条数据\n",
"已获取 8300 条数据\n",
"已获取 8400 条数据\n",
"已获取 8500 条数据\n",
"已获取 8600 条数据\n",
"已获取 8700 条数据\n",
"已获取 8800 条数据\n",
"已获取 8900 条数据\n",
"已获取 9000 条数据\n",
"已获取 9100 条数据\n",
"已获取 9200 条数据\n",
"已获取 9300 条数据\n",
"已获取 9400 条数据\n",
"已获取 9500 条数据\n",
"已获取 9600 条数据\n",
"已获取 9700 条数据\n",
"已获取 9800 条数据\n",
"已获取 9900 条数据\n",
"已获取 10000 条数据\n",
"已获取 10100 条数据\n",
"已获取 10200 条数据\n",
"已获取 10300 条数据\n",
"已获取 10400 条数据\n",
"已获取 10500 条数据\n",
"已获取 10600 条数据\n",
"已获取 10700 条数据\n",
"已获取 10800 条数据\n",
"已获取 10900 条数据\n",
"已获取 11000 条数据\n",
"已获取 11100 条数据\n",
"已获取 11200 条数据\n",
"已获取 11300 条数据\n",
"已获取 11400 条数据\n",
"已获取 11500 条数据\n",
"已获取 11600 条数据\n",
"已获取 11700 条数据\n",
"已获取 11800 条数据\n",
"已获取 11900 条数据\n",
"已获取 12000 条数据\n",
"已获取 12100 条数据\n",
"已获取 12200 条数据\n",
"已获取 12300 条数据\n",
"已获取 12400 条数据\n",
"已获取 12500 条数据\n",
"已获取 12600 条数据\n",
"已获取 12700 条数据\n",
"已获取 12800 条数据\n",
"已获取 12900 条数据\n",
"已获取 13000 条数据\n",
"已获取 13100 条数据\n",
"已获取 13200 条数据\n",
"已获取 13300 条数据\n",
"已获取 13400 条数据\n",
"已获取 13500 条数据\n",
"已获取 13600 条数据\n",
"已获取 13700 条数据\n",
"已获取 13800 条数据\n",
"已获取 13900 条数据\n",
"已获取 14000 条数据\n",
"已获取 14100 条数据\n",
"已获取 14200 条数据\n",
"已获取 14300 条数据\n",
"已获取 14400 条数据\n",
"已获取 14500 条数据\n",
"已获取 14600 条数据\n",
"已获取 14700 条数据\n",
"已获取 14800 条数据\n",
"已获取 14900 条数据\n",
"已获取 15000 条数据\n",
"已获取 15100 条数据\n",
"已获取 15200 条数据\n",
"已获取 15300 条数据\n",
"已获取 15400 条数据\n",
"已获取 15500 条数据\n",
"已获取 15600 条数据\n",
"已获取 15700 条数据\n",
"已获取 15800 条数据\n",
"已获取 15900 条数据\n",
"已获取 16000 条数据\n",
"已获取 16100 条数据\n",
"已获取 16200 条数据\n",
"已获取 16300 条数据\n",
"已获取 16400 条数据\n",
"已获取 16500 条数据\n",
"已获取 16600 条数据\n",
"已获取 16700 条数据\n",
"已获取 16800 条数据\n",
"已获取 16900 条数据\n",
"已获取 17000 条数据\n",
"已获取 17100 条数据\n",
"已获取 17200 条数据\n",
"已获取 17300 条数据\n",
"已获取 17400 条数据\n",
"已获取 17500 条数据\n",
"已获取 17600 条数据\n",
"已获取 17700 条数据\n",
"已获取 17800 条数据\n",
"已获取 17900 条数据\n",
"已获取 18000 条数据\n",
"已获取 18100 条数据\n",
"已获取 18200 条数据\n",
"已获取 18300 条数据\n",
"已获取 18400 条数据\n",
"已获取 18500 条数据\n",
"已获取 18600 条数据\n",
"已获取 18700 条数据\n",
"已获取 18781 条数据\n",
"当前日期: 2025-04-17\n",
"遍历日期: 2025-04-16\n",
"遍历次数: 1\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Administrator.DESKTOP-7IC2USJ\\AppData\\Local\\Temp\\ipykernel_12820\\56379425.py:321: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" filtered_data['sort_key'] = filtered_data['saas_edition_fmt'].map(fixed_order_map)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" date_id date_fmt id_own_group group_name \\\n",
"0 20250416 2025-04-16 11240984669918161533 合肥兆琳汽车服务有限公司 \n",
"1 20250416 2025-04-16 11240984669918160044 宁波太古汽车服务有限公司 \n",
"2 20250416 2025-04-16 11240984669918185067 苏州车觉道汽车服务有限公司 \n",
"3 20250416 2025-04-16 11240984669918182017 华豪汽修 \n",
"4 20250416 2025-04-16 11240984669918175531 江苏淮威汽车服务有限公司 \n",
"... ... ... ... ... \n",
"26771 20250416 2025-04-16 10546443563661823778 信阳市平桥区百度汽车维修中心/龙江路 \n",
"26772 20250416 2025-04-16 10907434497383320861 优车库 \n",
"26773 20250416 2025-04-16 10907434497383320861 优车库 \n",
"26774 20250416 2025-04-16 10546443564004141570 南京锋源汽车服务有限公司 \n",
"26775 20250416 2025-04-16 10546443564004141570 南京锋源汽车服务有限公司 \n",
"\n",
" id_own_org org_name org_code group_grade \\\n",
"0 11240984669918170533 合肥兆琳汽车服务有限公司 CHS202410150283533 重要客户(SVIP \n",
"1 11240984669918168544 宁波太古汽车服务有限公司 CHS202410160283566 重要客户(SVIP \n",
"2 11240984669918193575 苏州车觉道汽车服务有限公司 CHS202411010284709 重要客户(SVIP \n",
"3 11240984669918191017 华豪汽修 CHS202410250284140 普通客户(VIP \n",
"4 11240984669918184031 盐城共享钣喷中心 CHS202410210283865 重要客户(SVIP \n",
"... ... ... ... ... \n",
"26771 11240984669918135520 百度汽车 CHS202409060281076 普通客户(VIP \n",
"26772 11240984669918090034 优车库 CHS202407310278377 普通客户(VIP \n",
"26773 11240984669918090034 优车库 CHS202407310278377 普通客户(VIP \n",
"26774 11240984669918127026 锋源汽车 CHS202408300280497 普通客户(VIP \n",
"26775 11240984669918127026 锋源汽车 CHS202408300280497 普通客户(VIP \n",
"\n",
" org_type org_status ... edition_rank customer_type_rank \\\n",
"0 一般 留存 ... 5 2 \n",
"1 一般 留存 ... 5 1 \n",
"2 一般 留存 ... 5 2 \n",
"3 一般 留存 ... 7 5 \n",
"4 一般 留存 ... 5 1 \n",
"... ... ... ... ... ... \n",
"26771 一般 留存 ... 7 3 \n",
"26772 一般 留存 ... 7 3 \n",
"26773 一般 留存 ... 7 3 \n",
"26774 一般 留存 ... 7 3 \n",
"26775 一般 留存 ... 7 3 \n",
"\n",
" group_grade_rank max_saas_edition max_saas_customer_type \\\n",
"0 2 进阶版 D \n",
"1 2 进阶版 E \n",
"2 2 进阶版 D \n",
"3 3 入门版 A \n",
"4 2 进阶版 E \n",
"... ... ... ... \n",
"26771 3 尊享版 C \n",
"26772 3 基础版 C \n",
"26773 3 基础版 C \n",
"26774 3 基础版 C \n",
"26775 3 基础版 C \n",
"\n",
" max_group_grade 条件 exists_in_ngvv2 年 renew_date_new \n",
"0 重要客户(SVIP) 1 NaN NaN \n",
"1 重要客户(SVIP) 1 NaN NaN \n",
"2 重要客户(SVIP) 1 NaN NaN \n",
"3 普通客户(VIP) 1 NaN NaN \n",
"4 重要客户(SVIP) 1 NaN NaN \n",
"... ... ... ... ... ... \n",
"26771 普通客户(VIP 1120 True 3.0 2026 \n",
"26772 普通客户(VIP 1156 True 3.0 2025 \n",
"26773 普通客户(VIP 1156 True 3.0 2026 \n",
"26774 普通客户(VIP 1106 True 3.0 2025 \n",
"26775 普通客户(VIP 1106 True 3.0 2026 \n",
"\n",
"[26776 rows x 153 columns]\n",
"开始次数: 1\n",
"当前日期: 2025-04-17 09:24:46.784417\n",
"遍历次数: 1\n",
"2025-01-23 2024-12-24 2024-10-25\n",
"59\n",
"销售负责人是: 刘磊\n",
"0254392654682418\n",
"SaaS开户回访人员: 0254392654682418\n",
"SaaS技术专家: 0237196424846034\n",
"SaaS区域经理: 1218085201677303\n",
"权限唯一值: 重要客户标准版E\n",
"该门店开单的权限是: √\n",
"67ebe3e10316219b9902b499\n",
"\n",
"销售负责人是: 刘磊\n",
"0254392654682418\n",
"SaaS开户回访人员: 0254392654682418\n",
"SaaS技术专家: 0237196424846034\n",
"SaaS区域经理: 1218085201677303\n",
"权限唯一值: 重要客户基础版D\n",
"该门店开单的权限是: √\n",
"67ebe4a3402e6a06de7b2a88\n",
"\n",
"销售负责人是: 贾宏伟\n",
"1124513635494702\n",
"SaaS开户回访人员: 1124513635494702\n",
"SaaS技术专家: 055512041727184572\n",
"SaaS区域经理: 1218085201677303\n",
"权限唯一值: 重要客户基础版D\n",
"该门店开单的权限是: √\n",
"67ebe45093cd0e815b15badc\n",
"\n",
"销售负责人是: 王蔚东\n",
"036316110429501709\n",
"SaaS开户回访人员: 036316110429501709\n",
"SaaS技术专家: 195159084238961158\n",
"SaaS区域经理: 025366033037741985\n",
"权限唯一值: 重要客户旗舰版D\n",
"该门店开单的权限是: √\n",
"67ebe3c33e982b69b90f567a\n",
"\n",
"销售负责人是: 刘磊\n",
"0254392654682418\n",
"SaaS开户回访人员: 0254392654682418\n",
"SaaS技术专家: 0237196424846034\n",
"SaaS区域经理: 1218085201677303\n",
"权限唯一值: 普通客户基础版C\n",
"该门店开单的权限是: √\n",
"67ebe4246e71febc7037cb1d\n",
"\n",
"销售负责人是: 王兵帅\n",
"6412695429095931\n",
"SaaS开户回访人员: 6412695429095931\n",
"SaaS技术专家: 054169455736370109\n",
"SaaS区域经理: 1525590028775887\n",
"权限唯一值: 普通客户基础版C\n",
"该门店开单的权限是: √\n",
"67ebe49c844fc468062d3ee7\n",
"\n",
"销售负责人是: 刘磊\n",
"0254392654682418\n",
"SaaS开户回访人员: 0254392654682418\n",
"SaaS技术专家: 0237196424846034\n",
"SaaS区域经理: 1218085201677303\n",
"权限唯一值: 重要客户基础版D\n",
"该门店开单的权限是: √\n",
"67ebe4a0cbb467a58217d00b\n",
"\n",
"销售负责人是: 陈煜\n",
"05463054031221652\n",
"SaaS开户回访人员: 05463054031221652\n",
"SaaS技术专家: 171128505620867604\n",
"SaaS区域经理: 232229053125844557\n",
"权限唯一值: 重要客户旗舰版D\n",
"该门店开单的权限是: √\n",
"67ebe409cbb467a58216a6e0\n",
"\n",
"销售负责人是: 魏延楠\n",
"162067282938988985\n",
"SaaS开户回访人员: 1143206052848269\n",
"SaaS技术专家: 110740004537832492\n",
"SaaS区域经理: 311003461041349\n",
"权限唯一值: 普通客户基础版A\n",
"该门店开单的权限是: √\n",
"67ebe49c038f019e7e6609f5\n",
"\n",
"销售负责人是: 贾宏伟\n",
"1124513635494702\n",
"SaaS开户回访人员: 1124513635494702\n",
"SaaS技术专家: 055512041727184572\n",
"SaaS区域经理: 1218085201677303\n",
"权限唯一值: 重要客户旗舰版D\n",
"该门店开单的权限是: √\n",
"67ebe3d85778ac1011aafe6c\n",
"\n",
"销售负责人是: 丰文祥\n",
"253635282420072174\n",
"SaaS开户回访人员: 253635282420072174\n",
"SaaS技术专家: 195159084238961158\n",
"SaaS区域经理: 025366033037741985\n",
"权限唯一值: 重要客户基础版D\n",
"该门店开单的权限是: √\n",
"67ebe49650a799395c177e3b\n",
"\n",
"销售负责人是: 邵宝振\n",
"032861373036352679\n",
"SaaS开户回访人员: 032861373036352679\n",
"SaaS技术专家: 1253235059942945\n",
"SaaS区域经理: 1218085201677303\n",
"权限唯一值: 普通客户旗舰版F\n",
"该门店开单的权限是: √\n",
"67ebe4246261eb293a77cc65\n",
"\n",
"销售负责人是: 王鑫\n",
"SaaS开户回访人员: 2750181616954944\n",
"SaaS技术专家: 0237196424846034\n",
"SaaS区域经理: 1218085201677303\n",
"权限唯一值: 普通客户基础版C\n",
"该门店开单的权限是: √\n",
"67ebe43dde575a6af79f2005\n",
"\n",
"销售负责人是: 舒晓明\n",
"224934300132837549\n",
"Error finding customer service: 'str' object has no attribute 'get'\n",
"销售负责人是: 许盼盼\n",
"693800011139268\n",
"SaaS开户回访人员: 693800011139268\n",
"SaaS技术专家: 055512041727184572\n",
"SaaS区域经理: 1218085201677303\n",
"权限唯一值: 重要客户旗舰版F\n",
"该门店开单的权限是: √\n",
"67ebe4246261eb293a77cc29\n",
"\n",
"销售负责人是: 储召强\n",
"075458412020533110\n",
"SaaS开户回访人员: 075458412020533110\n",
"SaaS技术专家: 3704680936560271\n",
"SaaS区域经理: 025366033037741985\n",
"权限唯一值: 重要客户旗舰版E\n",
"该门店开单的权限是: √\n",
"67ebe45093cd0e815b15bad9\n",
"\n",
"销售负责人是: 郭波波\n",
"SaaS开户回访人员: 101152211221580284\n",
"SaaS技术专家: 0103433535667605\n",
"SaaS区域经理: 232229053125844557\n",
"权限唯一值: 普通客户基础版F\n",
"该门店开单的权限是: √\n",
"67ebe4192cd7fe3c651ac64e\n",
"\n",
"销售负责人是: 邵宝振\n",
"SaaS开户回访人员: 032861373036352679\n",
"SaaS技术专家: 1253235059942945\n",
"SaaS区域经理: 1218085201677303\n",
"权限唯一值: 重要客户至尊版E\n",
"该门店开单的权限是: √\n",
"67ebe48f2224d5f4ce7e38b8\n",
"\n"
]
}
],
"execution_count": 5
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}