脚本
This commit is contained in:
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:\n",
|
||||
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\.libs\\libopenblas.EL2C6PLE4ZYW3ECEVIV3OXXGRN2NRFM2.gfortran-win_amd64.dll\n",
|
||||
"c:\\Users\\admin\\.conda\\envs\\F6processing\\lib\\site-packages\\numpy\\.libs\\libopenblas64__v0.3.21-gcc_10_3_0.dll\n",
|
||||
" warnings.warn(\"loaded more than 1 DLL from .libs:\"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"读取到 续约服务流程表单中 4381 条数据!\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",
|
||||
"# 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",
|
||||
"\n",
|
||||
"\n",
|
||||
"# 基础函数配置\n",
|
||||
"import pandas as pd\n",
|
||||
"import requests\n",
|
||||
"from pathlib import Path\n",
|
||||
"from urllib.parse import quote\n",
|
||||
"import json\n",
|
||||
"import numpy as np\n",
|
||||
"import time\n",
|
||||
"\n",
|
||||
"ROOT = Path('.').absolute() # 当前工作目录\n",
|
||||
"\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_new(token, formUuid, page, n):\n",
|
||||
" \"\"\" 函数功能:读取流程表单的所有数据 \"\"\"\n",
|
||||
"\n",
|
||||
" api = f'https://api.dingtalk.com//v1.0/yida/processes/instances?pageNumber={page}&pageSize={n}'\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",
|
||||
" \"instanceStatus\": \"RUNNING\"\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.post(api, headers=headers, json=formData)\n",
|
||||
" return res.json()\n",
|
||||
"def read_instances(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",
|
||||
"\n",
|
||||
"def update_instances(TOKEN, processInstanceId,code,name):\n",
|
||||
" \"\"\" 更新表单实例 \"\"\"\n",
|
||||
"\n",
|
||||
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances'\n",
|
||||
"\n",
|
||||
" headers = {\n",
|
||||
" \"Content-Type\": \"application/json\",\n",
|
||||
" \"x-acs-dingtalk-access-token\": TOKEN\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" data_new= {\n",
|
||||
" code : name \n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" payload = {\n",
|
||||
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
|
||||
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
|
||||
" \"userId\" : \"yida_pub_account\",\n",
|
||||
" \"language\" : \"zh_CN\",\n",
|
||||
" \"formInstanceId\" : processInstanceId,\n",
|
||||
" \"useLatestVersion\" : 'false',\n",
|
||||
" \"updateFormDataJson\" : json.dumps(data_new, cls=NpEncoder) #json.dumps(data_new, cls=NpEncoder)\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.put(api, headers=headers,json =payload)\n",
|
||||
"\n",
|
||||
" return res.json()\n",
|
||||
"\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",
|
||||
"TOKEN = generateToken() \n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# 读取续约服务流程\n",
|
||||
"FORMID = \"FORM-PE866MD1MJMU0WGLYRFLYEN5YN9L1I55Z7ZUK22\" # 续约服务流程\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_node = []\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_node.append(data)\n",
|
||||
"print(f'读取到 续约服务流程表单中 {len(ALL_DATA_node)} 条数据!')\n",
|
||||
"\n",
|
||||
"# 校验状态\n",
|
||||
"for i in range(0,len(ALL_DATA_node)):\n",
|
||||
" for a in range(len(data_NGV[\"org_code\"])):\n",
|
||||
" if ALL_DATA_node[i]['data']['textField_ksydghqw'] == data_NGV.loc[a,\"org_code\"]:\n",
|
||||
" if data_NGV.loc[a,\"active_status_fmt\"] == \"活跃\":\n",
|
||||
" if ALL_DATA_node[i]['data']['textField_ksydghr5']==\"否\":\n",
|
||||
" update_instances(TOKEN,ALL_DATA_node[i]['processInstanceId'],'textField_ksydghr5',\"是\")\n",
|
||||
" print(i,ALL_DATA_node[i]['data']['textField_ksydghr5'])\n",
|
||||
" elif data_NGV.loc[a,\"active_status_fmt\"] == \"不活跃\":\n",
|
||||
" if ALL_DATA_node[i]['data']['textField_ksydghr5']==\"是\":\n",
|
||||
" update_instances(TOKEN,ALL_DATA_node[i]['processInstanceId'],'textField_ksydghr5',\"否\")\n",
|
||||
" print(i,ALL_DATA_node[i]['data']['textField_ksydghr5'])\n",
|
||||
"for i in range(0,len(ALL_DATA_node)):\n",
|
||||
" for a in range(len(data_NGV[\"org_code\"])):\n",
|
||||
" if ALL_DATA_node[i]['data']['textField_ksydghqw'] == data_NGV.loc[a,\"org_code\"]:\n",
|
||||
" if data_NGV.loc[a,\"is_g\"] == \"1\":\n",
|
||||
" if ALL_DATA_node[i]['data']['textField_ksydghr8']==\"否\":\n",
|
||||
" update_instances(TOKEN,ALL_DATA_node[i]['processInstanceId'],'textField_ksydghr8',\"是\")\n",
|
||||
" print(i,ALL_DATA_node[i]['data']['textField_ksydghr5'])\n",
|
||||
" elif data_NGV.loc[a,\"is_g\"] == \"0\":\n",
|
||||
" if ALL_DATA_node[i]['data']['textField_ksydghr8']==\"是\":\n",
|
||||
" update_instances(TOKEN,ALL_DATA_node[i]['processInstanceId'],'textField_ksydghr8',\"否\")\n",
|
||||
" print(i,ALL_DATA_node[i]['data']['textField_ksydghr5'])\n",
|
||||
"for i in range(0,len(ALL_DATA_node)):\n",
|
||||
" for a in range(len(data_NGV[\"org_code\"])):\n",
|
||||
" if ALL_DATA_node[i]['data']['textField_ksydghr7'] != data_NGV.loc[a,\"bill_day_count_last_30_day\"]:\n",
|
||||
" update_instances(TOKEN,ALL_DATA_node[i]['processInstanceId'],'textField_ksydghr7',data_NGV.loc[a,\"bill_day_count_last_30_day\"])\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"bill_day_count_last_30_day"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"28"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"data_NGV.loc[0,\"bill_day_count_last_30_day\"]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"for i in range(0,len(ALL_DATA_node)):\n",
|
||||
" for a in range(len(data_NGV[\"org_code\"])):\n",
|
||||
" if ALL_DATA_node[i]['data']['textField_ksydghr7'] != data_NGV.loc[a,\"bill_day_count_last_30_day\"]:\n",
|
||||
" update_instances(TOKEN,ALL_DATA_node[i]['processInstanceId'],'textField_ksydghr7',data_NGV.loc[a,\"bill_day_count_last_30_day\"])\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"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"
|
||||
},
|
||||
"orig_nbformat": 4
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
Reference in New Issue
Block a user