脚本
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
import re
|
||||
from datetime import datetime
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from pathlib import Path
|
||||
from urllib.parse import quote
|
||||
from io import BytesIO
|
||||
|
||||
ROOT = Path('.').absolute() # 当前工作目录
|
||||
|
||||
|
||||
# 生成 token,参数不需要修改
|
||||
def generateToken() -> str:
|
||||
""" 生成 token """
|
||||
|
||||
token_api = 'https://api.dingtalk.com/v1.0/oauth2/accessToken'
|
||||
|
||||
# 该信息在钉钉开放应用中
|
||||
data = {
|
||||
"appKey": "ding5kqocon5s9oph5uq",
|
||||
"appSecret": 'HL1jgsIIfLAC0eTH0A1m4mwxUDqbgsiPeCCGGE3ocM6qJBTIW7Ivt9drxF_Z4Kb_'
|
||||
}
|
||||
|
||||
res = requests.post(token_api, json=data)
|
||||
TOKEN = res.json()['accessToken']
|
||||
|
||||
return TOKEN
|
||||
|
||||
def getOperationRecords(TOKEN,ID):
|
||||
""" 函数功能:获取流程表单的审批记录 --F6客户服务 应用 """
|
||||
appType = "APP_UYZ0KG6L0CCNV80GZ66O"
|
||||
systemToken = "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2"
|
||||
userId = "yida_pub_account"
|
||||
|
||||
api = f'https://api.dingtalk.com/v1.0/yida/processes/operationRecords?appType={appType}&systemToken={systemToken}&userId={userId}&language=zh_CN&processInstanceId={ID}'
|
||||
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
"x-acs-dingtalk-access-token": TOKEN
|
||||
}
|
||||
|
||||
res = requests.get(api, headers=headers)
|
||||
res_new = res.json()
|
||||
records_new = res_new.get('result')
|
||||
|
||||
records_new = [item for item in records_new if item.get('type') == "TODO"]
|
||||
# showName_new = records_new[0].get('showName')
|
||||
# taskId = records_new[0].get('taskId')
|
||||
operatorUserId = records_new[0]['operatorUserId']
|
||||
return operatorUserId
|
||||
|
||||
def read_instances_new(TOKEN, formUuid, page, n):
|
||||
""" 函数功能:读取流程表单的所有数据 """
|
||||
|
||||
api = f'https://api.dingtalk.com//v1.0/yida/processes/instances?pageNumber={page}&pageSize={n}'
|
||||
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
"x-acs-dingtalk-access-token": TOKEN
|
||||
}
|
||||
|
||||
formData = {
|
||||
"appType": "APP_UYZ0KG6L0CCNV80GZ66O",
|
||||
"systemToken": "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
|
||||
"userId": "yida_pub_account", # 超级管理员账号
|
||||
"language": "zh_CN",
|
||||
"formUuid": formUuid,
|
||||
# "searchFieldJson": json.dumps(searchField), # 如果增加上这一项会要求升级宜搭存储
|
||||
"instanceStatus": "RUNNING"
|
||||
}
|
||||
|
||||
res = requests.post(api, headers=headers, json=formData)
|
||||
return res.json()
|
||||
|
||||
def instances(TOKEN,data_new,formInstanceId):
|
||||
api = f'https://api.dingtalk.com//v1.0/yida/forms/instances'
|
||||
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
"x-acs-dingtalk-access-token": TOKEN
|
||||
}
|
||||
|
||||
payload = {
|
||||
"appType" : "APP_UYZ0KG6L0CCNV80GZ66O",
|
||||
"systemToken" : "XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2",
|
||||
"userId" : "2268275546837446",
|
||||
"language" : "zh_CN",
|
||||
"formInstanceId" : formInstanceId,
|
||||
"useLatestVersion" : 'false',
|
||||
"updateFormDataJson" : json.dumps(data_new, cls=NpEncoder) #json.dumps(data_new, cls=NpEncoder)
|
||||
}
|
||||
|
||||
res = requests.put(api, headers=headers,json =payload)
|
||||
res_new = res.json()
|
||||
return res_new
|
||||
# print(i,res_new)
|
||||
|
||||
|
||||
class NpEncoder(json.JSONEncoder):
|
||||
def default(self, obj):
|
||||
if isinstance(obj, np.integer):
|
||||
return int(obj)
|
||||
elif isinstance(obj, np.floating):
|
||||
return float(obj)
|
||||
elif isinstance(obj, np.ndarray):
|
||||
return obj.tolist()
|
||||
else:
|
||||
return super(NpEncoder, self).default(obj)
|
||||
|
||||
|
||||
""" 处理流程开始 """
|
||||
# 每日工作计划
|
||||
FORMID = "FORM-4V966N81OMEEH85QDP8XW4AH1AIZ2GKRLZTML21"
|
||||
TOKEN = generateToken()
|
||||
|
||||
json_data = {}
|
||||
json_data_new = []
|
||||
read_data = read_instances_new(TOKEN, FORMID, 1, 100)
|
||||
PAGES = read_data.get('totalCount')//100 + 1
|
||||
# print(read_instances_new,read_data.get('totalCount'))
|
||||
for a in range(1,PAGES + 1):
|
||||
read_data = read_instances_new(TOKEN, FORMID, a, 100)
|
||||
for i in range(0,len(read_data["data"])):
|
||||
json_data[read_data["data"][i]['processInstanceId']]=read_data["data"][i]['data']['employeeField_lmeqk429_id'][0] # id 对于 运营负责人
|
||||
for key, value in json_data.items():
|
||||
operatorUserId = getOperationRecords(TOKEN,key)
|
||||
if operatorUserId != value:
|
||||
# print(f"Key: {key}, Value: {value},operatorUserId:{operatorUserId}")
|
||||
data_one = {
|
||||
'employeeField_lmrga6dh' : operatorUserId , # 自主派发 运营顾问
|
||||
}
|
||||
data_two = {
|
||||
'employeeField_lnsi0v6w' : operatorUserId # 自动派发 运营顾问
|
||||
}
|
||||
data_new= {
|
||||
'employeeField_lmeqk429' : operatorUserId , # 运营顾问
|
||||
'tableField_lmelabau' : [data_one],
|
||||
'tableField_lnsi0v71': [data_two]
|
||||
}
|
||||
res_one = instances(TOKEN,data_new,key)
|
||||
print(key,res_one)
|
||||
Reference in New Issue
Block a user