Files
F6--/其它系统脚本/续约回访:基础版120,其它90-180V6.ipynb
T
2026-01-30 11:28:35 +08:00

970 lines
46 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": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 含多年"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import holidays\n",
"from datetime import date\n",
"\n",
"# 创建一个中国节假日对象\n",
"cn_holidays = holidays.China()\n",
"# 获取当前日期\n",
"input_date = date.today()\n",
"switch = \"\"\n",
"# 判断日期是否为节假日\n",
"if input_date in cn_holidays:\n",
" switch = \"节假日\"\n",
" print(f\"{input_date} 是节假日\")\n",
"else:\n",
" switch = \"非节假日\"\n",
" print(f\"{input_date} 不是节假日\")\n",
"date_list = []\n",
"for data in cn_holidays:\n",
" date_list.append(str(data))\n",
"\n",
"from datetime import date, timedelta\n",
"\n",
"def get_saturdays(year):\n",
" start_date = date(year, 1, 1)\n",
" end_date = date(year, 12, 31)\n",
" saturdays = []\n",
"\n",
" while start_date <= end_date:\n",
" if start_date.weekday() == 6: # 周日的weekday值为6\n",
" saturdays.append(start_date)\n",
" start_date += timedelta(days=1)\n",
"\n",
" return saturdays\n",
"\n",
"current_year = date.today().year\n",
"saturdays = get_saturdays(current_year)\n",
"print(saturdays)\n",
"for data in saturdays:\n",
" date_list.append(str(data))\n",
"date_list = list(set(date_list))\n",
"date_list = sorted(date_list, reverse=False)\n",
"\n",
"# -*- coding: utf-8 -*-\n",
"import psycopg2\n",
"import pandas as pd\n",
"# 获得连接\n",
"conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n",
"# 获得游标对象,一个游标对象可以对数据库进行执行操作\n",
"cursor = conn.cursor()\n",
"\n",
"import datetime\n",
"now_time = datetime.datetime.now()\n",
"yes_time = now_time + datetime.timedelta(days=-1)\n",
"yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_saas_profile_ngv_detail_d\" WHERE \"date_id\" = '{yes_time_nyr}' ;\"\"\"\n",
"# 执行语句\n",
"cursor.execute(sql)\n",
"# 获取结果集的每一行\n",
"rows = cursor.fetchall()\n",
"# 获取所有字段名\n",
"all_fields = cursor.description\n",
"#执行结果转化为dataframe\n",
"col = []\n",
"for i in all_fields:\n",
" col.append(i[0])\n",
"data_NGV = pd.DataFrame(list(rows),columns=col)\n",
"# data_NGV.to_excel(r'C:\\Users\\admin\\Desktop\\NGV明细.xlsx')\n",
"# 关闭数据库连接\n",
"cursor.close()\n",
"conn.close()\n",
"# 读取短信表--------------------------12/11\n",
"\n",
"# 将A列和B列的日期字符串转换为日期格式\n",
"data_NGV['A'] = pd.to_datetime(data_NGV['expiry_time'])\n",
"data_NGV['B'] = pd.to_datetime(data_NGV['renew_date'])\n",
"data_NGV['条件'] = (data_NGV['org_type'] == \"一般\") & (data_NGV['org_status'] == '留存') & (data_NGV['group_grade'] != '区域KAMVP') & (data_NGV['group_grade'] != '全国KAFMVP')& (data_NGV['area_manager'] != '殷昊')& (data_NGV['area_manager'] != '孙玉蕾')\n",
"data_NGV = data_NGV.loc[data_NGV[\"条件\"] == True]\n",
"data_details = data_NGV.copy()\n",
"# 重置索引\n",
"data_details = data_details.reset_index(drop=True)\n",
"# 判断A列的日期是否大于B列的日期730天,如果是的话,将B列的值设置为1\n",
"data_details['条件'] = data_details.apply(lambda row: (row['A'] - row['B']).days if row['A'] - row['B'] >= pd.Timedelta(days=730) else row['条件'], axis=1)\n",
"data_details = data_details.loc[data_details[\"条件\"] != True]\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",
"# 使用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",
"# 创建一个新的空的DataFrame\n",
"new_df = pd.DataFrame()\n",
"# 遍历原始DataFrame的每一行\n",
"from datetime import datetime, timedelta\n",
"for index, row in data_details.iterrows():\n",
" # 根据A列的值来决定复制的次数\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",
"# 合并两个DataFrame\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(subset='id_own_group')\n",
"# 重置索引\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[:10] # 截取前10位\n",
"data_details = data_details[data_details['saas_create_time'] != data_details['renew_date']] # 过滤掉等于renew_date的行\n",
"data_details = data_details.reset_index(drop=True)\n",
"from datetime import datetime\n",
"from dateutil.relativedelta import relativedelta\n",
"\n",
"# for data in date_list:\n",
"# # 将字符串转换为日期\n",
"# date = datetime.strptime(data, '%Y-%m-%d')\n",
"# # 将日期加1\n",
"# date = date + relativedelta(days=1)\n",
"# # 将日期转换回字符串格式\n",
"# date_str = date.strftime('%Y-%m-%d')\n",
"# # 遍历 renew_date 列,如果值等于 A,则将其改为 B\n",
"# data_details['renew_date'] = data_details['renew_date'].replace(data, date_str)\n",
"\n",
"\n",
"\n",
"import pandas as pd\n",
"import pandas as pd\n",
"import numpy as np\n",
"import requests\n",
"import json\n",
"import time\n",
"import re\n",
"from datetime import datetime\n",
"from dateutil.relativedelta import relativedelta\n",
"from pathlib import Path\n",
"from urllib.parse import quote\n",
"from io import BytesIO\n",
"\n",
"ROOT = Path('.').absolute() # 当前工作目录\n",
"\n",
"\n",
"# 生成 token,参数不需要修改\n",
"def generateToken() -> str:\n",
" \"\"\" 生成 token \"\"\"\n",
"\n",
" token_api = 'https://api.dingtalk.com/v1.0/oauth2/accessToken'\n",
"\n",
" # 该信息在钉钉开放应用中\n",
" data = {\n",
" \"appKey\": \"ding5kqocon5s9oph5uq\",\n",
" \"appSecret\": 'HL1jgsIIfLAC0eTH0A1m4mwxUDqbgsiPeCCGGE3ocM6qJBTIW7Ivt9drxF_Z4Kb_'\n",
" }\n",
"\n",
" res = requests.post(token_api, json=data)\n",
" token = res.json()['accessToken']\n",
"\n",
" return token\n",
"\n",
"def read_instances(token, formUuid, page, n,formatted_today,formatted_today_two):\n",
" \"\"\" 函数功能:读取普通表单的所有数据 \"\"\"\n",
"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/search'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" formData = {\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : formUuid,\n",
" \"createFromTimeGMT\" : formatted_today,\n",
" \"createToTimeGMT\" : formatted_today_two,\n",
" \"currentPage\" : page,\n",
" \"pageSize\" : n\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=formData)\n",
" return res.json()\n",
"\n",
"def initiate_process(TOKEN,formUuid,processCode,formData):\n",
" \"\"\" 发起宜搭审批流程 \"\"\"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/processes/instances/start'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" payload = {\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : formUuid,\n",
" \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"processCode\" : processCode,\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=payload)\n",
" return res.json()\n",
"\n",
"def read_instances_new(token, formUuid, page, n):\n",
" \"\"\" 函数功能:读取普通表单的所有数据 \"\"\"\n",
"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/search'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" formData = {\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : formUuid,\n",
" \"currentPage\" : page,\n",
" \"pageSize\" : n\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=formData)\n",
" return res.json()\n",
"def read_instances_ngv(token, formUuid, page, n,searchField):\n",
" \"\"\" 函数功能:读取普通表单的所有数据 \"\"\"\n",
"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/search'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" formData = {\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : formUuid,\n",
" \"searchFieldJson\": json.dumps(searchField),\n",
" \"currentPage\" : page,\n",
" \"pageSize\" : n\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=formData)\n",
" return res.json()\n",
"class NpEncoder(json.JSONEncoder):\n",
" def default(self, obj):\n",
" if isinstance(obj, np.integer):\n",
" return int(obj)\n",
" elif isinstance(obj, np.floating):\n",
" return float(obj)\n",
" elif isinstance(obj, np.ndarray):\n",
" return obj.tolist()\n",
" else:\n",
" return super(NpEncoder, self).default(obj)\n",
" \n",
"TOKEN = generateToken()\n",
"'''读取员工对应关系:宜搭员工-ID对应表 '''\n",
"FORMID = \"FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\n",
"# 读取流程表单数据\n",
"form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"ALL_DATA_staff = {}\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" # form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, createFromTimeGMT=CREATE_FROM, createToTimeGMT=CREATE_TO, page=i, n=100, searchField={'textField_l7if5ff9': '否'})\n",
" form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100)\n",
" for data in form_data.get('data'):\n",
" ALL_DATA_staff[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']\n",
"'''读取省市小六技术专家区域客服区域客成 '''\n",
"FORMID = \"FORM-TP866D918DFCA4FW79YZU5X43FO32QZJQDZJL7\" #省市小六技术专家区域客服区域客成\n",
"# 读取流程表单数据\n",
"form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"textField_gif29wy = {}\n",
"textField_3athky8 = {}\n",
"textField_3hgho1m = {}\n",
"textField_nc7gskc = {}\n",
"textField_qk1e5di = {}\n",
"textField_m3hchxc = {} # 市\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100)\n",
" for data in form_data.get('data'):\n",
" textField_gif29wy[data['formData']['textField_o7jtgf1']]=data['formData']['textField_gif29wy'] #区域客成id\n",
" textField_3athky8[data['formData']['textField_o7jtgf1']]=data['formData']['textField_3athky8'] #区域客服id\n",
" textField_3hgho1m[data['formData']['textField_o7jtgf1']]=data['formData']['textField_3hgho1m'] #小六id\n",
" textField_nc7gskc[data['formData']['textField_o7jtgf1']]=data['formData']['textField_nc7gskc'] #技术专家id\n",
" textField_qk1e5di[data['formData']['textField_o7jtgf1']]=data['formData']['textField_lntniove'] #区域经理id\n",
" textField_m3hchxc[data['formData']['textField_m3hchxc']]=data['formData']['textField_3hgho1m'] #小六id-市\n",
"print(f'读取到省市小六技术专家区域客服区域客成表单中 {len(textField_gif29wy)} 条数据!')\n",
"'''读取市-技术专家id '''\n",
"FORMID = \"FORM-A8666NA1FJDEVPBB6VVTOCMP47UP2J2L6SPML2\" #市-技术专家id\n",
"# 读取流程表单数据\n",
"form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"textField_lmps6q39 = {}\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" # form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, createFromTimeGMT=CREATE_FROM, createToTimeGMT=CREATE_TO, page=i, n=100, searchField={'textField_l7if5ff9': '否'})\n",
" form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100)\n",
" for data in form_data.get('data'):\n",
" textField_lmps6q39[data['formData']['textField_lmps6q38']]=data['formData']['textField_lmps6q39'] #技术专家id\n",
"print(f'读取到市-技术专家id表单中 {len(textField_lmps6q39)} 条数据!')\n",
"import datetime\n",
"date_90 = 83\n",
"date_120 = 113\n",
"date_180 = 173\n",
"date_one = 1\n",
"now_time = datetime.datetime.now()\n",
"# now_time = now_time + datetime.timedelta(days=+1)\n",
"if now_time.strftime(\"%Y-%m-%d\") in 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 date_list:\n",
" date_one = date_one + 1 \n",
" print(\"节假日期:\",new_date)\n",
" else:\n",
" break\n",
"print(\"遍历次数:\",date_one)\n",
"\n",
"now_time = datetime.datetime.now()\n",
"for i in range(0,date_one):\n",
" now_time = now_time + datetime.timedelta(days=-i)\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",
" timestamp_ms = int(time.time() * 1000) # 当然日期时间戳 毫秒级\n",
" # 获取数据\n",
" data_details_90 = data_details.copy()\n",
" data_details_90['条件'] = (data_details_90['renew_date'] == formatted_today_90) & (data_details_90['saas_edition_fmt'] != '基础版')\n",
" data_details_90 = data_details_90.loc[data_details_90[\"条件\"] == True]\n",
" data_details_120 = data_details.copy()\n",
" data_details_120['条件'] = (data_details_120['renew_date'] == formatted_today_120) & (data_details_120['saas_edition_fmt'] == '基础版')\n",
" data_details_120 = data_details_120.loc[data_details_120[\"条件\"] == True]\n",
" data_details_180 = data_details.copy()\n",
" data_details_180['条件'] = (data_details_180['renew_date'] == formatted_today_180) & (data_details_180['saas_edition_fmt'] != '基础版')\n",
" data_details_180 = data_details_180.loc[data_details_180[\"条件\"] == True]\n",
"\n",
" text_jcb_120 = '''\n",
" 续约后120天:\n",
" 1.客户系统使用问题集中解答;\n",
" 2.跟客户查看车辆分析,推荐短信及其他营销功能;\n",
" 3.红包裂变功能介绍;\n",
" 4.说明转介绍政策,索要转介绍;\n",
" '''\n",
" text_bzb_90 = '''\n",
" 续约后90天:\n",
" 1.客户系统使用问题集中解答;\n",
" 2.跟客户查看车辆分析,推荐短信及其他营销功能;\n",
" 3.会员卡功能使用情况分析,推荐公众号引导升级;\n",
" 4.说明转介绍政策,索要转介绍;\n",
" '''\n",
" text_bzb_180 = '''\n",
" 续约后180天:\n",
" 1.客户系统使用问题集中解答;\n",
" 2.跟客户查看车辆分析,推荐短信及其他营销功能;\n",
" 3.会员卡功能使用情况分析,推荐公众号引导升级;\n",
" 4.红包裂变推荐;\n",
" '''\n",
" text_qita_90 = '''\n",
" 续约后90天:\n",
" 1.客户系统使用问题集中解答;\n",
" 2.跟客户查看车辆分析,推荐短信及其他营销功能;\n",
" 3.公众号小程序功能使用情况分析,提升系统使用深度;\n",
" 4.说明转介绍政策,索要转介绍;\n",
" '''\n",
" text_qita_180 = '''\n",
" 续约后180天:\n",
" 1.客户系统使用问题集中解答;\n",
" 2.跟客户查看车辆分析,推荐短信及其他营销功能;\n",
" 3.公众号小程序功能使用情况分析,提升系统使用深度;\n",
" 4.红包裂变推荐;\n",
" '''\n",
" data_details_90['拜访目的说明'] = \"\"\n",
" # text_bzb_90\n",
" data_details_90['拜访目的说明'] = data_details_90.apply(lambda row: text_bzb_90 if row['saas_edition_fmt'] == '标准版' else row['拜访目的说明'], axis=1)\n",
" # text_qita_90\n",
" data_details_90['拜访目的说明'] = data_details_90.apply(lambda row: text_qita_90 if row['saas_edition_fmt'] != '标准版' else row['拜访目的说明'], axis=1)\n",
"\n",
" # text_jcb_120\n",
" data_details_120['拜访目的说明'] = text_jcb_120\n",
"\n",
" data_details_180['拜访目的说明'] = \"\"\n",
" # text_bzb_180\n",
" data_details_180['拜访目的说明'] = data_details_180.apply(lambda row: text_bzb_180 if row['saas_edition_fmt'] == '标准版' else row['拜访目的说明'], axis=1)\n",
" # text_qita_180\n",
" data_details_180['拜访目的说明'] = data_details_180.apply(lambda row: text_qita_180 if row['saas_edition_fmt'] != '标准版' else row['拜访目的说明'], axis=1)\n",
" # 合并三个DataFrame\n",
" data_result = pd.concat([data_details_90, data_details_120, data_details_180], ignore_index=True)\n",
" print(len(data_result))\n",
" # 获取待回访人员信息+去重\n",
" name_list = []\n",
" for data in data_result['service_impl_principal']:\n",
" name_list.append(data)\n",
" unique_arr = []\n",
" [unique_arr.append(x) for x in name_list if x not in unique_arr]\n",
" print(unique_arr)\n",
" # 每日工作计划\n",
" formUuid = \"FORM-4V966N81OMEEH85QDP8XW4AH1AIZ2GKRLZTML21\"\n",
" processCode = \"TPROC--4V966N81OMEEH85QDP8XW4AH1AIZ21ORLZTML31\"\n",
" # 遍历数据并进行创建\n",
" for name in unique_arr:\n",
" tableField_lnsi0v71 = {}\n",
" tableField_lnsi0v71['dateField_lmelabb1'] = \"\"\n",
" tableField_lnsi0v71['employeeField_lmeqk429'] = \"\"\n",
" tableField_lnsi0v71['employeeField_lmeqk423'] = \"\"\n",
" tableField_lnsi0v71['employeeField_lmeqk424'] = \"\"\n",
" for i in range(0,len(data_result)):\n",
" if data_result.loc[i,\"service_impl_principal\"] == name:\n",
" print(textField_m3hchxc[data_result[\"city_name\"][i]]) # data_result\n",
" data_one = {} # 子表单\n",
" data_two = {} # 主表单\n",
" # 子表单\n",
" data_one['textField_lnsi0v72'] = data_result.loc[i,\"org_name\"] # 门店名称\n",
" data_one['textField_lnsi0v6s'] = data_result.loc[i,\"saas_edition_fmt\"] # 销售版本\n",
" try:\n",
" data_one['employeeField_lnsi0v6u'] = textField_nc7gskc[name] # 技术专家\n",
" data_one['employeeField_lnsi0v6v'] = textField_qk1e5di[name] # 区域经理\n",
" if textField_3hgho1m[name] ==\"\":\n",
" data_one['employeeField_lnsi0v6w'] = textField_m3hchxc[data_result[\"city_name\"][i]] # 运营顾问 \n",
" else:\n",
" data_one['employeeField_lnsi0v6w'] = textField_3hgho1m[name] # 运营顾问\n",
" except:\n",
" data_one['employeeField_lnsi0v6u'] = textField_lmps6q39[data_result[\"city_name\"][i]] # 技术专家\n",
" data_one['employeeField_lnsi0v6v'] = ALL_DATA_staff[data_result.loc[i,\"area_manager\"]] # 区域经理\n",
" data_one['employeeField_lnsi0v6w'] = textField_m3hchxc[data_result[\"city_name\"][i]] # 运营顾问\n",
" data_one['dateField_lnsi0v6x'] = str(timestamp_ms) # 计划日期\n",
" data_one['textField_lnsi0v6y'] = data_result.loc[i,\"org_name\"] # 门店名称-拷贝\n",
" data_one['textField_lnsi0v6z'] = data_result.loc[i,\"org_code\"] # 门店编码\n",
" data_one['selectField_lnsi0v6q'] = \"客情维护\" # 拜访目的\n",
" data_one['textareaField_lnsi0v6r'] = data_result.loc[i,\"拜访目的说明\"] # 拜访目的说明\n",
" data_one['textField_lnsi0v70'] = data_result.loc[i,\"id_own_group\"] # 公司id\n",
" # 加入数据\n",
" \n",
" tableField_lnsi0v71['tableField_lnsi0v71'] = [data_one]\n",
" # 主表单\n",
" tableField_lnsi0v71['dateField_lmelabb1'] = str(timestamp_ms)\n",
" try:\n",
" if textField_3hgho1m[name] ==\"\":\n",
" tableField_lnsi0v71['employeeField_lmeqk429'] = textField_m3hchxc[data_result[\"city_name\"][i]] # 小六 textField_m3hchxc[data_NGV[\"city_name\"][i]]\n",
" else:\n",
" tableField_lnsi0v71['employeeField_lmeqk429'] = textField_3hgho1m[name] # 小六\n",
" tableField_lnsi0v71['employeeField_lmeqk423'] = textField_qk1e5di[name] # 区域经理\n",
" tableField_lnsi0v71['employeeField_lmeqk424'] = textField_nc7gskc[name] # 技术专家\n",
" except:\n",
" tableField_lnsi0v71['employeeField_lmeqk429'] = textField_m3hchxc[data_result[\"city_name\"][i]] # 小六\n",
" tableField_lnsi0v71['employeeField_lmeqk423'] = ALL_DATA_staff[data_result.loc[i,\"area_manager\"]] # 区域经理\n",
" tableField_lnsi0v71['employeeField_lmeqk424'] = textField_lmps6q39[data_result[\"city_name\"][i]] # 技术专家\n",
" tableField_lnsi0v71['textField_lmu0523h'] = \"自动派发回访计划\" # 状态备用\n",
" # 富文本 超链接 NGV\n",
" try:\n",
" form_data_ngv = read_instances_ngv(token=TOKEN, formUuid=\"FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91\", page=1, n=100, searchField={'textField_zc1iowp': data_result.loc[i,\"org_code\"]})\n",
" tableField_lnsi0v71['editorField_lodoplg0'] = [\"root\",{},[\"p\",{},[\"span\",{\"data-type\":\"text\"},[\"span\",{\"data-type\":\"leaf\"},\"\"]],[\"a\",{\"href\":\"https://f6car.aliwork.com/APP_UYZ0KG6L0CCNV80GZ66O/formDetail/FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91?formInstId=\"+form_data_ngv['data'][0]['formInstanceId']+\"&isAdmin=true\"},[\"span\",{\"data-type\":\"text\"},[\"span\",{\"unlink\":{},\"data-type\":\"leaf\"},\"点击查看门店NGV\"]]],[\"span\",{\"data-type\":\"text\"},[\"span\",{\"unlink\":{},\"data-type\":\"leaf\"},\"\"]]]] # 富文本 超链接 NGV\n",
" except:\n",
" pass\n",
" # res=initiate_process(TOKEN,formUuid,processCode,tableField_lnsi0v71)\n",
" # print(res,tableField_lnsi0v71)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"<ipython-input-5-95d56a7271a7>:27: UserWarning: Pandas requires version '1.4.3' or newer of 'xlsxwriter' (version '1.3.8' currently installed).\n",
" holo_ads_report_message_group_scene_send_detail_d_all.to_excel(r'C:\\Users\\admin\\Desktop\\holo_ads_report_message_group_scene_send_detail_d_all.xlsx')\n"
]
}
],
"source": [
"# -*- coding: utf-8 -*-\n",
"import psycopg2\n",
"import pandas as pd\n",
"# 获得连接\n",
"conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n",
"# 获得游标对象,一个游标对象可以对数据库进行执行操作\n",
"cursor = conn.cursor()\n",
"\n",
"import datetime\n",
"now_time = datetime.datetime.now()\n",
"yes_time = now_time + datetime.timedelta(days=-1)\n",
"yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
"\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_message_group_scene_send_detail_d_all\" WHERE \"pt\" = '{yes_time_nyr}' ;\"\"\"\n",
"# 执行语句\n",
"cursor.execute(sql)\n",
"# 获取结果集的每一行\n",
"rows = cursor.fetchall()\n",
"# 获取所有字段名\n",
"all_fields = cursor.description\n",
"#执行结果转化为dataframe\n",
"col = []\n",
"for i in all_fields:\n",
" col.append(i[0])\n",
"holo_ads_report_message_group_scene_send_detail_d_all = pd.DataFrame(list(rows),columns=col)\n",
"holo_ads_report_message_group_scene_send_detail_d_all.to_excel(r'C:\\Users\\admin\\Desktop\\holo_ads_report_message_group_scene_send_detail_d_all.xlsx')\n",
"# 关闭数据库连接\n",
"cursor.close()\n",
"conn.close()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>date_fmt</th>\n",
" <th>id_own_group</th>\n",
" <th>group_name</th>\n",
" <th>id_own_org</th>\n",
" <th>org_name</th>\n",
" <th>region_name</th>\n",
" <th>branch_name</th>\n",
" <th>province_name</th>\n",
" <th>city_name</th>\n",
" <th>org_size</th>\n",
" <th>...</th>\n",
" <th>buy_sms_num</th>\n",
" <th>send_sms_num</th>\n",
" <th>msg_scene_cate_id</th>\n",
" <th>msg_scene_cate_name</th>\n",
" <th>msg_scene_id</th>\n",
" <th>msg_scene_name</th>\n",
" <th>msg_scene_code</th>\n",
" <th>final_send_quantity</th>\n",
" <th>etl_time</th>\n",
" <th>pt</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>20231210</td>\n",
" <td>10545724654284683189</td>\n",
" <td>北京兔师傅汽车科技有限公司</td>\n",
" <td>10545724654284683060</td>\n",
" <td>北京兔师傅汽车科技有限公司</td>\n",
" <td>华北区域</td>\n",
" <td>华北2区</td>\n",
" <td>北京市</td>\n",
" <td>北京市市辖区</td>\n",
" <td>小</td>\n",
" <td>...</td>\n",
" <td>7600</td>\n",
" <td>2303</td>\n",
" <td>3</td>\n",
" <td>卡</td>\n",
" <td>19</td>\n",
" <td>用卡消费提醒</td>\n",
" <td>DQ00300003</td>\n",
" <td>1</td>\n",
" <td>2023-12-11 05:21:23</td>\n",
" <td>20231210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>20231210</td>\n",
" <td>10545511425559925000</td>\n",
" <td>杭州超凡汽车维修服务有限公司</td>\n",
" <td>10545511425559924895</td>\n",
" <td>杭州超凡汽车维修服务有限公司</td>\n",
" <td>华东区域</td>\n",
" <td>华东4区</td>\n",
" <td>浙江省</td>\n",
" <td>杭州市</td>\n",
" <td>NA</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>150</td>\n",
" <td>2</td>\n",
" <td>关怀提醒</td>\n",
" <td>4</td>\n",
" <td>车辆保险提醒</td>\n",
" <td>DQ00200002</td>\n",
" <td>2</td>\n",
" <td>2023-12-11 05:21:23</td>\n",
" <td>20231210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>20231210</td>\n",
" <td>10545724654284683189</td>\n",
" <td>北京兔师傅汽车科技有限公司</td>\n",
" <td>10545724654284683060</td>\n",
" <td>北京兔师傅汽车科技有限公司</td>\n",
" <td>华北区域</td>\n",
" <td>华北2区</td>\n",
" <td>北京市</td>\n",
" <td>北京市市辖区</td>\n",
" <td>小</td>\n",
" <td>...</td>\n",
" <td>7600</td>\n",
" <td>2303</td>\n",
" <td>3</td>\n",
" <td>卡</td>\n",
" <td>6</td>\n",
" <td>用卡短信验证</td>\n",
" <td>DQ00300002</td>\n",
" <td>1</td>\n",
" <td>2023-12-11 05:21:23</td>\n",
" <td>20231210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>20231210</td>\n",
" <td>10545724654284683189</td>\n",
" <td>北京兔师傅汽车科技有限公司</td>\n",
" <td>10545724654284683060</td>\n",
" <td>北京兔师傅汽车科技有限公司</td>\n",
" <td>华北区域</td>\n",
" <td>华北2区</td>\n",
" <td>北京市</td>\n",
" <td>北京市市辖区</td>\n",
" <td>小</td>\n",
" <td>...</td>\n",
" <td>7600</td>\n",
" <td>2303</td>\n",
" <td>3</td>\n",
" <td>卡</td>\n",
" <td>19</td>\n",
" <td>用卡消费提醒</td>\n",
" <td>DQ00300003</td>\n",
" <td>1</td>\n",
" <td>2023-12-11 05:21:23</td>\n",
" <td>20231210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>20231210</td>\n",
" <td>10545724654284683189</td>\n",
" <td>北京兔师傅汽车科技有限公司</td>\n",
" <td>10545724654284683060</td>\n",
" <td>北京兔师傅汽车科技有限公司</td>\n",
" <td>华北区域</td>\n",
" <td>华北2区</td>\n",
" <td>北京市</td>\n",
" <td>北京市市辖区</td>\n",
" <td>小</td>\n",
" <td>...</td>\n",
" <td>7600</td>\n",
" <td>2303</td>\n",
" <td>3</td>\n",
" <td>卡</td>\n",
" <td>30</td>\n",
" <td>开卡通知</td>\n",
" <td>DQ00300004</td>\n",
" <td>1</td>\n",
" <td>2023-12-11 05:21:23</td>\n",
" <td>20231210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26399</th>\n",
" <td>20231210</td>\n",
" <td>11240984669917846525</td>\n",
" <td>清江浦区国丹汽车维修部</td>\n",
" <td>11240984669917854525</td>\n",
" <td>巴博士汽车养护</td>\n",
" <td>华东区域</td>\n",
" <td>华东10区</td>\n",
" <td>江苏省</td>\n",
" <td>淮安市</td>\n",
" <td>中</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>3</td>\n",
" <td>卡</td>\n",
" <td>19</td>\n",
" <td>用卡消费提醒</td>\n",
" <td>DQ00300003</td>\n",
" <td>1</td>\n",
" <td>2023-12-11 05:21:23</td>\n",
" <td>20231210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26400</th>\n",
" <td>20231210</td>\n",
" <td>11240984669917814054</td>\n",
" <td>大名县华裕汽车维修有限公司</td>\n",
" <td>11240984669917822056</td>\n",
" <td>大名县华裕汽车维修有限公司</td>\n",
" <td>华北区域</td>\n",
" <td>华北3区</td>\n",
" <td>河北省</td>\n",
" <td>邯郸市</td>\n",
" <td>中</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>11</td>\n",
" <td>2</td>\n",
" <td>关怀提醒</td>\n",
" <td>3</td>\n",
" <td>服务提醒</td>\n",
" <td>DQ00200001</td>\n",
" <td>1</td>\n",
" <td>2023-12-11 05:21:23</td>\n",
" <td>20231210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26401</th>\n",
" <td>20231210</td>\n",
" <td>11240984669917801615</td>\n",
" <td>甘井子区泉水街道车达人汽车美容中心</td>\n",
" <td>11240984669917809617</td>\n",
" <td>车达人一店</td>\n",
" <td>东北区域</td>\n",
" <td>东北2区</td>\n",
" <td>辽宁省</td>\n",
" <td>大连市</td>\n",
" <td>小</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>卡</td>\n",
" <td>19</td>\n",
" <td>用卡消费提醒</td>\n",
" <td>DQ00300003</td>\n",
" <td>1</td>\n",
" <td>2023-12-11 05:21:23</td>\n",
" <td>20231210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26402</th>\n",
" <td>20231210</td>\n",
" <td>11240984669917799649</td>\n",
" <td>迁安市爱车扳手汽修店</td>\n",
" <td>11240984669917807654</td>\n",
" <td>扳手车工厂</td>\n",
" <td>华北区域</td>\n",
" <td>华北1区</td>\n",
" <td>河北省</td>\n",
" <td>唐山市</td>\n",
" <td>中</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" <td>3</td>\n",
" <td>卡</td>\n",
" <td>19</td>\n",
" <td>用卡消费提醒</td>\n",
" <td>DQ00300003</td>\n",
" <td>1</td>\n",
" <td>2023-12-11 05:21:23</td>\n",
" <td>20231210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26403</th>\n",
" <td>20231210</td>\n",
" <td>11240984669917799649</td>\n",
" <td>迁安市爱车扳手汽修店</td>\n",
" <td>11240984669917807654</td>\n",
" <td>扳手车工厂</td>\n",
" <td>华北区域</td>\n",
" <td>华北1区</td>\n",
" <td>河北省</td>\n",
" <td>唐山市</td>\n",
" <td>中</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" <td>3</td>\n",
" <td>卡</td>\n",
" <td>19</td>\n",
" <td>用卡消费提醒</td>\n",
" <td>DQ00300003</td>\n",
" <td>1</td>\n",
" <td>2023-12-11 05:21:23</td>\n",
" <td>20231210</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>26404 rows × 24 columns</p>\n",
"</div>"
],
"text/plain": [
" date_fmt id_own_group group_name \n",
"0 20231210 10545724654284683189 北京兔师傅汽车科技有限公司 \\\n",
"1 20231210 10545511425559925000 杭州超凡汽车维修服务有限公司 \n",
"2 20231210 10545724654284683189 北京兔师傅汽车科技有限公司 \n",
"3 20231210 10545724654284683189 北京兔师傅汽车科技有限公司 \n",
"4 20231210 10545724654284683189 北京兔师傅汽车科技有限公司 \n",
"... ... ... ... \n",
"26399 20231210 11240984669917846525 清江浦区国丹汽车维修部 \n",
"26400 20231210 11240984669917814054 大名县华裕汽车维修有限公司 \n",
"26401 20231210 11240984669917801615 甘井子区泉水街道车达人汽车美容中心 \n",
"26402 20231210 11240984669917799649 迁安市爱车扳手汽修店 \n",
"26403 20231210 11240984669917799649 迁安市爱车扳手汽修店 \n",
"\n",
" id_own_org org_name region_name branch_name \n",
"0 10545724654284683060 北京兔师傅汽车科技有限公司 华北区域 华北2区 \\\n",
"1 10545511425559924895 杭州超凡汽车维修服务有限公司 华东区域 华东4区 \n",
"2 10545724654284683060 北京兔师傅汽车科技有限公司 华北区域 华北2区 \n",
"3 10545724654284683060 北京兔师傅汽车科技有限公司 华北区域 华北2区 \n",
"4 10545724654284683060 北京兔师傅汽车科技有限公司 华北区域 华北2区 \n",
"... ... ... ... ... \n",
"26399 11240984669917854525 巴博士汽车养护 华东区域 华东10区 \n",
"26400 11240984669917822056 大名县华裕汽车维修有限公司 华北区域 华北3区 \n",
"26401 11240984669917809617 车达人一店 东北区域 东北2区 \n",
"26402 11240984669917807654 扳手车工厂 华北区域 华北1区 \n",
"26403 11240984669917807654 扳手车工厂 华北区域 华北1区 \n",
"\n",
" province_name city_name org_size ... buy_sms_num send_sms_num \n",
"0 北京市 北京市市辖区 小 ... 7600 2303 \\\n",
"1 浙江省 杭州市 NA ... 0 150 \n",
"2 北京市 北京市市辖区 小 ... 7600 2303 \n",
"3 北京市 北京市市辖区 小 ... 7600 2303 \n",
"4 北京市 北京市市辖区 小 ... 7600 2303 \n",
"... ... ... ... ... ... ... \n",
"26399 江苏省 淮安市 中 ... 0 8 \n",
"26400 河北省 邯郸市 中 ... 0 11 \n",
"26401 辽宁省 大连市 小 ... 0 3 \n",
"26402 河北省 唐山市 中 ... 0 6 \n",
"26403 河北省 唐山市 中 ... 0 6 \n",
"\n",
" msg_scene_cate_id msg_scene_cate_name msg_scene_id msg_scene_name \n",
"0 3 卡 19 用卡消费提醒 \\\n",
"1 2 关怀提醒 4 车辆保险提醒 \n",
"2 3 卡 6 用卡短信验证 \n",
"3 3 卡 19 用卡消费提醒 \n",
"4 3 卡 30 开卡通知 \n",
"... ... ... ... ... \n",
"26399 3 卡 19 用卡消费提醒 \n",
"26400 2 关怀提醒 3 服务提醒 \n",
"26401 3 卡 19 用卡消费提醒 \n",
"26402 3 卡 19 用卡消费提醒 \n",
"26403 3 卡 19 用卡消费提醒 \n",
"\n",
" msg_scene_code final_send_quantity etl_time pt \n",
"0 DQ00300003 1 2023-12-11 05:21:23 20231210 \n",
"1 DQ00200002 2 2023-12-11 05:21:23 20231210 \n",
"2 DQ00300002 1 2023-12-11 05:21:23 20231210 \n",
"3 DQ00300003 1 2023-12-11 05:21:23 20231210 \n",
"4 DQ00300004 1 2023-12-11 05:21:23 20231210 \n",
"... ... ... ... ... \n",
"26399 DQ00300003 1 2023-12-11 05:21:23 20231210 \n",
"26400 DQ00200001 1 2023-12-11 05:21:23 20231210 \n",
"26401 DQ00300003 1 2023-12-11 05:21:23 20231210 \n",
"26402 DQ00300003 1 2023-12-11 05:21:23 20231210 \n",
"26403 DQ00300003 1 2023-12-11 05:21:23 20231210 \n",
"\n",
"[26404 rows x 24 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"holo_ads_report_message_group_scene_send_detail_d_all"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}