Files
F6--/其它系统脚本/宜搭续约表单人员信息文本问题处理.ipynb
T
2026-01-30 11:28:35 +08:00

704 lines
31 KiB
Plaintext

{
"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
}