脚本
This commit is contained in:
@@ -0,0 +1,703 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 59,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"读取到宜搭员工-ID对应表表单中 399 条数据!\n",
|
||||
"[流程]续约服务流程 表单中 773 条数据!\n",
|
||||
"新签节点化服务待办 表单中 45 条数据!\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# 基础函数配置\n",
|
||||
"import pandas as pd\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",
|
||||
"from datetime import date, timedelta\n",
|
||||
"import datetime\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(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 read_delete(token, formInstanceId):\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",
|
||||
" formData = {\n",
|
||||
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
|
||||
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
|
||||
" \"userId\" : \"yida_pub_account\",\n",
|
||||
" \"language\" : \"zh_CN\",\n",
|
||||
" \"formInstanceId\" : formInstanceId\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.delete(api, headers=headers, json=formData)\n",
|
||||
" return res.json()\n",
|
||||
"\n",
|
||||
"def read_new(FORMID,formData):\n",
|
||||
" \"\"\" 通过实例id 获取表单内容 \"\"\"\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",
|
||||
" payload = {\n",
|
||||
" \"formUuid\" : FORMID,\n",
|
||||
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
|
||||
" \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
|
||||
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
|
||||
" \"language\" : \"zh_CN\",\n",
|
||||
" \"userId\" : \"yida_pub_account\"\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.post(api, headers=headers, json=payload)\n",
|
||||
" print(res.json())\n",
|
||||
"\n",
|
||||
" return res.json()\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"def component(FORMID,TOKEN):\n",
|
||||
" \"\"\" 获取组件信息 \"\"\"\n",
|
||||
" api = f'https://api.dingtalk.com//v1.0/yida/forms/formFields'\n",
|
||||
"\n",
|
||||
" headers = {\n",
|
||||
" \"Content-Type\": \"application/json\",\n",
|
||||
" \"x-acs-dingtalk-access-token\": TOKEN\n",
|
||||
" }\n",
|
||||
" payload = {\n",
|
||||
" \"formUuid\" : FORMID,\n",
|
||||
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
|
||||
" # \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
|
||||
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
|
||||
" # \"language\" : \"zh_CN\",\n",
|
||||
" \"userId\" : \"yida_pub_account\"\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.get(api, headers=headers, json=payload)\n",
|
||||
"\n",
|
||||
" return res.json()\n",
|
||||
"def initiate_process(TOKEN,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\" : \"FORM-L8966281PTZA73CDBTGQBDLM628M2P4X1OYHL0\",\n",
|
||||
" \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
|
||||
" \"processCode\" : \"TPROC--L8966281PTZA73CDBTGQBDLM628M2Q7X1OYHL1\",\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.post(api, headers=headers, json=payload)\n",
|
||||
" return res.json()\n",
|
||||
"\n",
|
||||
"def delete_in_batches(FORMID,TOKEN,ALL_DATA_instance):\n",
|
||||
" \"\"\" 批量删除表单实例 \"\"\"\n",
|
||||
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchRemove'\n",
|
||||
"\n",
|
||||
" headers = {\n",
|
||||
" \"Content-Type\": \"application/json\",\n",
|
||||
" \"x-acs-dingtalk-access-token\": TOKEN\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" payload = {\n",
|
||||
" \"formUuid\" : FORMID,\n",
|
||||
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
|
||||
" \"asynchronousExecution\" : \"true\",\n",
|
||||
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
|
||||
" \"formInstanceIdList\" : json.dumps(ALL_DATA_instance, cls=NpEncoder),\n",
|
||||
" \"userId\" : \"yida_pub_account\",\n",
|
||||
" \"executeExpression\" : \"false\" # 不触发\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.post(api, headers=headers, json=payload)\n",
|
||||
" return res.json()\n",
|
||||
"\n",
|
||||
"def delete_in(TOKEN,formInstanceIdList):\n",
|
||||
" \"\"\" 逐条删除表单实例 \"\"\"\n",
|
||||
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances?appType=APP_UYZ0KG6L0CCNV80GZ66O&systemToken=XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2&userId=yida_pub_account&language=zh_CN&formInstanceId={formInstanceIdList}'\n",
|
||||
"\n",
|
||||
" headers = {\n",
|
||||
" \"Content-Type\": \"application/json\",\n",
|
||||
" \"x-acs-dingtalk-access-token\": TOKEN\n",
|
||||
" }\n",
|
||||
" res = requests.delete(api, headers=headers)\n",
|
||||
" return res.json()\n",
|
||||
"\n",
|
||||
"def read_instances_new(token, formUuid, page, n,modifiedFromTimeGMT,modifiedToTimeGMT):\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",
|
||||
" \"modifiedFromTimeGMT\":modifiedFromTimeGMT,\n",
|
||||
" \"modifiedToTimeGMT\":modifiedToTimeGMT,\n",
|
||||
" \"instanceStatus\" : \"RUNNING\"\n",
|
||||
" }\n",
|
||||
" res = requests.post(api, headers=headers, json=formData)\n",
|
||||
" return res.json()\n",
|
||||
"def read_gengxing(formInstanceId,data_new):\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",
|
||||
" payload = {\n",
|
||||
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
|
||||
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
|
||||
" \"userId\" : \"2268275546837446\", # 曹伟 id\n",
|
||||
" \"language\" : \"zh_CN\",\n",
|
||||
" \"useLatestVersion\" : \"false\",\n",
|
||||
" \"formInstanceId\" : formInstanceId,\n",
|
||||
" \"updateFormDataJson\" : json.dumps(data_new, cls=NpEncoder),\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.put(api, headers=headers, json=payload)\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",
|
||||
"'''读取员工对应关系:宜搭员工-ID对应表 '''\n",
|
||||
"FORMID = \"FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\n",
|
||||
"# 读取流程表单数据\n",
|
||||
"form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
|
||||
"PAGES = form_data.get('totalCount')//10 + 1\n",
|
||||
"ALL_DATA_staff = {}\n",
|
||||
"\"\"\" 获取全量数据 \"\"\"\n",
|
||||
"for i in range(1, PAGES+1):\n",
|
||||
" form_data = read_instances(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",
|
||||
"print(f'读取到宜搭员工-ID对应表表单中 {len(ALL_DATA_staff)} 条数据!')\n",
|
||||
"\n",
|
||||
"'''[流程]续约服务流程 读取近期修改的的流程------------------------------------------------------------------------------------------------------------------------''' \n",
|
||||
"FORMID = \"FORM-PE866MD1MJMU0WGLYRFLYEN5YN9L1I55Z7ZUK22\" # [流程]续约服务流程\n",
|
||||
"# 获取当前日期\n",
|
||||
"now_time = datetime.datetime.now()\n",
|
||||
"yes_time = now_time + datetime.timedelta(days=-1)\n",
|
||||
"yes_time_nyr1 = now_time.strftime('%Y-%m-%d')\n",
|
||||
"yes_time_nyr2 = yes_time.strftime('%Y-%m-%d')# 获取前1天日期\n",
|
||||
"# 读取流程表单数据\n",
|
||||
"form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100,modifiedFromTimeGMT=yes_time_nyr2,modifiedToTimeGMT=yes_time_nyr1)\n",
|
||||
"PAGES = form_data.get('totalCount')//100 + 1\n",
|
||||
"ALL_DATA = []\n",
|
||||
"\"\"\" 获取全量数据 \"\"\"\n",
|
||||
"for i in range(1, PAGES+1):\n",
|
||||
" form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100,modifiedFromTimeGMT=yes_time_nyr2,modifiedToTimeGMT=yes_time_nyr1)\n",
|
||||
" for data in form_data.get('data'):\n",
|
||||
" ALL_DATA.append(data)\n",
|
||||
"print(f'[流程]续约服务流程 表单中 {len(ALL_DATA)} 条数据!')\n",
|
||||
"\n",
|
||||
"data_list = ['employeeField_kykw5ege','employeeField_ksydght0','employeeField_ksirro5o','employeeField_ksydghrd','employeeField_ksydghre']\n",
|
||||
"for v in data_list:\n",
|
||||
" for i in range(0,len(ALL_DATA)):\n",
|
||||
" try:\n",
|
||||
" if \"(\" in str(ALL_DATA[i]['data'][v]) and \")\" in str(ALL_DATA[i]['data'][v]):\n",
|
||||
" # print(\"符号 () 存在\",ALL_DATA[i]['data'][v])\n",
|
||||
" pass\n",
|
||||
" else:\n",
|
||||
" print(\"符号 () 不存在\",ALL_DATA[i]['data'][v],ALL_DATA[i]['processInstanceId'],i,v)\n",
|
||||
" data_new = {\n",
|
||||
" v:[ALL_DATA_staff[ALL_DATA[i]['data'][v][0]]]\n",
|
||||
" }\n",
|
||||
" res = read_gengxing(ALL_DATA[i]['processInstanceId'],data_new) \n",
|
||||
" print(res)\n",
|
||||
" except:\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
"'''新签节点化服务待办 读取近期修改的的流程------------------------------------------------------------------------------------------------------------------------''' \n",
|
||||
"FORMID = \"FORM-L89662816B04LXH893M4K50Q7MIZ1SVQI08ALU2\" # 新签节点化服务待办 \n",
|
||||
"# 获取当前日期\n",
|
||||
"now_time = datetime.datetime.now()\n",
|
||||
"yes_time = now_time + datetime.timedelta(days=-1)\n",
|
||||
"yes_time_nyr1 = now_time.strftime('%Y-%m-%d')\n",
|
||||
"yes_time_nyr2 = yes_time.strftime('%Y-%m-%d')# 获取前1天日期\n",
|
||||
"# 读取流程表单数据\n",
|
||||
"form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100,modifiedFromTimeGMT=yes_time_nyr2,modifiedToTimeGMT=yes_time_nyr1)\n",
|
||||
"PAGES = form_data.get('totalCount')//100 + 1\n",
|
||||
"ALL_DATA = []\n",
|
||||
"\"\"\" 获取全量数据 \"\"\"\n",
|
||||
"for i in range(1, PAGES+1):\n",
|
||||
" form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100,modifiedFromTimeGMT=yes_time_nyr2,modifiedToTimeGMT=yes_time_nyr1)\n",
|
||||
" for data in form_data.get('data'):\n",
|
||||
" ALL_DATA.append(data)\n",
|
||||
"print(f'新签节点化服务待办 表单中 {len(ALL_DATA)} 条数据!')\n",
|
||||
"\n",
|
||||
"data_list = ['employeeField_la8zs59w','employeeField_la80kj0k','employeeField_lc5wh9h4','employeeField_lc8vmo70','employeeField_lc8w7jl9']\n",
|
||||
"for v in data_list:\n",
|
||||
" for i in range(0,len(ALL_DATA)):\n",
|
||||
" try:\n",
|
||||
" if \"(\" in str(ALL_DATA[i]['data'][v]) and \")\" in str(ALL_DATA[i]['data'][v]):\n",
|
||||
" # print(\"符号 () 存在\",ALL_DATA[i]['data'][v])\n",
|
||||
" pass\n",
|
||||
" else:\n",
|
||||
" print(\"符号 () 不存在\",ALL_DATA[i]['data'][v],ALL_DATA[i]['processInstanceId'],i,v)\n",
|
||||
" data_new = {\n",
|
||||
" v:[ALL_DATA_staff[ALL_DATA[i]['data'][v][0]]]\n",
|
||||
" }\n",
|
||||
" res = read_gengxing(ALL_DATA[i]['processInstanceId'],data_new) \n",
|
||||
" print(res)\n",
|
||||
" except:\n",
|
||||
" pass"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 刷全量数据"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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": [
|
||||
"读取到宜搭员工-ID对应表表单中 399 条数据!\n",
|
||||
"[流程]续约服务流程 表单中 2281 条数据!\n",
|
||||
"符号 () 不存在 ['陈晨'] 62b84346-8459-4f70-86b2-8b72ae2cc9da 1908 employeeField_kykw5ege\n",
|
||||
"{}\n",
|
||||
"符号 () 不存在 ['陈晨'] 62b84346-8459-4f70-86b2-8b72ae2cc9da 1908 employeeField_ksirro5o\n",
|
||||
"{}\n",
|
||||
"新签节点化服务待办 表单中 275 条数据!\n",
|
||||
"符号 () 不存在 ['薛昌翔'] 06912c50-48c1-447d-8bf6-627f7bcb8644 27 employeeField_la8zs59w\n",
|
||||
"符号 () 不存在 ['薛昌翔'] 45a90c16-5a00-43df-a566-e049f9d0d1f5 125 employeeField_la8zs59w\n",
|
||||
"符号 () 不存在 ['于洋'] b1a1058a-0169-4d96-999f-bfe2f9f7e6de 164 employeeField_la8zs59w\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# 基础函数配置\n",
|
||||
"import pandas as pd\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",
|
||||
"from datetime import date, timedelta\n",
|
||||
"import datetime\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(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 read_delete(token, formInstanceId):\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",
|
||||
" formData = {\n",
|
||||
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
|
||||
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
|
||||
" \"userId\" : \"yida_pub_account\",\n",
|
||||
" \"language\" : \"zh_CN\",\n",
|
||||
" \"formInstanceId\" : formInstanceId\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.delete(api, headers=headers, json=formData)\n",
|
||||
" return res.json()\n",
|
||||
"\n",
|
||||
"def read_new(FORMID,formData):\n",
|
||||
" \"\"\" 通过实例id 获取表单内容 \"\"\"\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",
|
||||
" payload = {\n",
|
||||
" \"formUuid\" : FORMID,\n",
|
||||
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
|
||||
" \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
|
||||
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
|
||||
" \"language\" : \"zh_CN\",\n",
|
||||
" \"userId\" : \"yida_pub_account\"\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.post(api, headers=headers, json=payload)\n",
|
||||
" print(res.json())\n",
|
||||
"\n",
|
||||
" return res.json()\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"def component(FORMID,TOKEN):\n",
|
||||
" \"\"\" 获取组件信息 \"\"\"\n",
|
||||
" api = f'https://api.dingtalk.com//v1.0/yida/forms/formFields'\n",
|
||||
"\n",
|
||||
" headers = {\n",
|
||||
" \"Content-Type\": \"application/json\",\n",
|
||||
" \"x-acs-dingtalk-access-token\": TOKEN\n",
|
||||
" }\n",
|
||||
" payload = {\n",
|
||||
" \"formUuid\" : FORMID,\n",
|
||||
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
|
||||
" # \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
|
||||
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
|
||||
" # \"language\" : \"zh_CN\",\n",
|
||||
" \"userId\" : \"yida_pub_account\"\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.get(api, headers=headers, json=payload)\n",
|
||||
"\n",
|
||||
" return res.json()\n",
|
||||
"def initiate_process(TOKEN,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\" : \"FORM-L8966281PTZA73CDBTGQBDLM628M2P4X1OYHL0\",\n",
|
||||
" \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
|
||||
" \"processCode\" : \"TPROC--L8966281PTZA73CDBTGQBDLM628M2Q7X1OYHL1\",\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.post(api, headers=headers, json=payload)\n",
|
||||
" return res.json()\n",
|
||||
"\n",
|
||||
"def delete_in_batches(FORMID,TOKEN,ALL_DATA_instance):\n",
|
||||
" \"\"\" 批量删除表单实例 \"\"\"\n",
|
||||
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/batchRemove'\n",
|
||||
"\n",
|
||||
" headers = {\n",
|
||||
" \"Content-Type\": \"application/json\",\n",
|
||||
" \"x-acs-dingtalk-access-token\": TOKEN\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" payload = {\n",
|
||||
" \"formUuid\" : FORMID,\n",
|
||||
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
|
||||
" \"asynchronousExecution\" : \"true\",\n",
|
||||
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
|
||||
" \"formInstanceIdList\" : json.dumps(ALL_DATA_instance, cls=NpEncoder),\n",
|
||||
" \"userId\" : \"yida_pub_account\",\n",
|
||||
" \"executeExpression\" : \"false\" # 不触发\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.post(api, headers=headers, json=payload)\n",
|
||||
" return res.json()\n",
|
||||
"\n",
|
||||
"def delete_in(TOKEN,formInstanceIdList):\n",
|
||||
" \"\"\" 逐条删除表单实例 \"\"\"\n",
|
||||
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances?appType=APP_UYZ0KG6L0CCNV80GZ66O&systemToken=XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2&userId=yida_pub_account&language=zh_CN&formInstanceId={formInstanceIdList}'\n",
|
||||
"\n",
|
||||
" headers = {\n",
|
||||
" \"Content-Type\": \"application/json\",\n",
|
||||
" \"x-acs-dingtalk-access-token\": TOKEN\n",
|
||||
" }\n",
|
||||
" res = requests.delete(api, headers=headers)\n",
|
||||
" return res.json()\n",
|
||||
"\n",
|
||||
"def read_instances_new(token, formUuid, page, n,modifiedFromTimeGMT,modifiedToTimeGMT):\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",
|
||||
" \"modifiedFromTimeGMT\":modifiedFromTimeGMT,\n",
|
||||
" \"modifiedToTimeGMT\":modifiedToTimeGMT,\n",
|
||||
" # \"instanceStatus\" : \"RUNNING\"\n",
|
||||
" }\n",
|
||||
" res = requests.post(api, headers=headers, json=formData)\n",
|
||||
" return res.json()\n",
|
||||
"def read_gengxing(formInstanceId,data_new):\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",
|
||||
" payload = {\n",
|
||||
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
|
||||
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
|
||||
" \"userId\" : \"2268275546837446\", # 曹伟 id\n",
|
||||
" \"language\" : \"zh_CN\",\n",
|
||||
" \"useLatestVersion\" : \"false\",\n",
|
||||
" \"formInstanceId\" : formInstanceId,\n",
|
||||
" \"updateFormDataJson\" : json.dumps(data_new, cls=NpEncoder),\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" res = requests.put(api, headers=headers, json=payload)\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",
|
||||
"'''读取员工对应关系:宜搭员工-ID对应表 '''\n",
|
||||
"FORMID = \"FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\n",
|
||||
"# 读取流程表单数据\n",
|
||||
"form_data = read_instances(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
|
||||
"PAGES = form_data.get('totalCount')//10 + 1\n",
|
||||
"ALL_DATA_staff = {}\n",
|
||||
"\"\"\" 获取全量数据 \"\"\"\n",
|
||||
"for i in range(1, PAGES+1):\n",
|
||||
" form_data = read_instances(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",
|
||||
"print(f'读取到宜搭员工-ID对应表表单中 {len(ALL_DATA_staff)} 条数据!')\n",
|
||||
"\n",
|
||||
"'''[流程]续约服务流程 读取近期修改的的流程------------------------------------------------------------------------------------------------------------------------''' \n",
|
||||
"FORMID = \"FORM-PE866MD1MJMU0WGLYRFLYEN5YN9L1I55Z7ZUK22\" # [流程]续约服务流程\n",
|
||||
"# 获取当前日期\n",
|
||||
"now_time = datetime.datetime.now()\n",
|
||||
"yes_time = now_time + datetime.timedelta(days=-10)\n",
|
||||
"yes_time_nyr1 = now_time.strftime('%Y-%m-%d')\n",
|
||||
"yes_time_nyr2 = yes_time.strftime('%Y-%m-%d')# 获取前1天日期\n",
|
||||
"# 读取流程表单数据\n",
|
||||
"form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100,modifiedFromTimeGMT=yes_time_nyr2,modifiedToTimeGMT=yes_time_nyr1)\n",
|
||||
"PAGES = form_data.get('totalCount')//100 + 1\n",
|
||||
"ALL_DATA = []\n",
|
||||
"\"\"\" 获取全量数据 \"\"\"\n",
|
||||
"for i in range(1, PAGES+1):\n",
|
||||
" form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100,modifiedFromTimeGMT=yes_time_nyr2,modifiedToTimeGMT=yes_time_nyr1)\n",
|
||||
" for data in form_data.get('data'):\n",
|
||||
" ALL_DATA.append(data)\n",
|
||||
"print(f'[流程]续约服务流程 表单中 {len(ALL_DATA)} 条数据!')\n",
|
||||
"\n",
|
||||
"data_list = ['employeeField_kykw5ege','employeeField_ksydght0','employeeField_ksirro5o','employeeField_ksydghrd','employeeField_ksydghre']\n",
|
||||
"for v in data_list:\n",
|
||||
" for i in range(0,len(ALL_DATA)):\n",
|
||||
" try:\n",
|
||||
" if \"(\" in str(ALL_DATA[i]['data'][v]) and \")\" in str(ALL_DATA[i]['data'][v]):\n",
|
||||
" # print(\"符号 () 存在\",ALL_DATA[i]['data'][v])\n",
|
||||
" pass\n",
|
||||
" else:\n",
|
||||
" print(\"符号 () 不存在\",ALL_DATA[i]['data'][v],ALL_DATA[i]['processInstanceId'],i,v)\n",
|
||||
" data_new = {\n",
|
||||
" v:[ALL_DATA_staff[ALL_DATA[i]['data'][v][0]]]\n",
|
||||
" }\n",
|
||||
" res = read_gengxing(ALL_DATA[i]['processInstanceId'],data_new) \n",
|
||||
" print(res)\n",
|
||||
" except:\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
"'''新签节点化服务待办 读取近期修改的的流程------------------------------------------------------------------------------------------------------------------------''' \n",
|
||||
"FORMID = \"FORM-L89662816B04LXH893M4K50Q7MIZ1SVQI08ALU2\" # 新签节点化服务待办 \n",
|
||||
"# 获取当前日期\n",
|
||||
"now_time = datetime.datetime.now()\n",
|
||||
"yes_time = now_time + datetime.timedelta(days=-10)\n",
|
||||
"yes_time_nyr1 = now_time.strftime('%Y-%m-%d')\n",
|
||||
"yes_time_nyr2 = yes_time.strftime('%Y-%m-%d')# 获取前1天日期\n",
|
||||
"# 读取流程表单数据\n",
|
||||
"form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100,modifiedFromTimeGMT=yes_time_nyr2,modifiedToTimeGMT=yes_time_nyr1)\n",
|
||||
"PAGES = form_data.get('totalCount')//100 + 1\n",
|
||||
"ALL_DATA = []\n",
|
||||
"\"\"\" 获取全量数据 \"\"\"\n",
|
||||
"for i in range(1, PAGES+1):\n",
|
||||
" form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100,modifiedFromTimeGMT=yes_time_nyr2,modifiedToTimeGMT=yes_time_nyr1)\n",
|
||||
" for data in form_data.get('data'):\n",
|
||||
" ALL_DATA.append(data)\n",
|
||||
"print(f'新签节点化服务待办 表单中 {len(ALL_DATA)} 条数据!')\n",
|
||||
"\n",
|
||||
"data_list = ['employeeField_la8zs59w','employeeField_la80kj0k','employeeField_lc5wh9h4','employeeField_lc8vmo70','employeeField_lc8w7jl9']\n",
|
||||
"for v in data_list:\n",
|
||||
" for i in range(0,len(ALL_DATA)):\n",
|
||||
" try:\n",
|
||||
" if \"(\" in str(ALL_DATA[i]['data'][v]) and \")\" in str(ALL_DATA[i]['data'][v]):\n",
|
||||
" # print(\"符号 () 存在\",ALL_DATA[i]['data'][v])\n",
|
||||
" pass\n",
|
||||
" else:\n",
|
||||
" print(\"符号 () 不存在\",ALL_DATA[i]['data'][v],ALL_DATA[i]['processInstanceId'],i,v)\n",
|
||||
" data_new = {\n",
|
||||
" v:[ALL_DATA_staff[ALL_DATA[i]['data'][v][0]]]\n",
|
||||
" }\n",
|
||||
" res = read_gengxing(ALL_DATA[i]['processInstanceId'],data_new) \n",
|
||||
" print(res)\n",
|
||||
" except:\n",
|
||||
" pass"
|
||||
]
|
||||
}
|
||||
],
|
||||
"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