缺陷:执行速度慢 1s 一条数据,无多线程
(如果有更好的方法,可以告知我)
脚本功能介绍:
-
批量判断创建不存在部门,更新成员到部门
-
xlsx 模板格式:
工作表1:
| 湛江事业群 | 运维部 | 网络部 |
| 湛江事业群 | 技术部 | 后台部 |
工作表2:
| 张三 |
| 李四 |
#!/usr/bin/env python3
# -*- coding:utf8 -*
import requests
from xlrd import open_workbook
import re
import pprint
from multiprocessing import Process
def get_token():
"""
获取 token
:return:
"""
dict_new = {
\'corpid\': \'\',
\'corpsecret\': \'\'
}
url = \'https://api.exmail.qq.com/cgi-bin/gettoken\'
getr = requests.get(url=url, params=dict_new)
access_token_new = getr.json().get(\'access_token\')
return access_token_new
def get_department_members(department_id_new):
"""
获取所有员工 userid
:param department_id_new:
:return:
"""
dict_new = {
"access_token": str(access_token),
"department_id": str(department_id_new),
"fetch_child": int(1)
}
url = "https://api.exmail.qq.com/cgi-bin/user/simplelist"
get_department_members_new = requests.get(url=url, params=dict_new, timeout=300).json()[\'userlist\']
return get_department_members_new
def find_department(name_new):
"""
精准查询部门
:param name_new:
:return:
"""
dict_new = {
"name": str(name_new),
"fuzzy": 0,
}
url = \'https://api.exmail.qq.com/cgi-bin/department/search?access_token=\' + str(access_token)
post_find_department = requests.post(url=url, json=dict_new, timeout=300).json()[\'department\']
return post_find_department
def find_name_userid(dict_list, name_new):
"""
遍历查询 userid
:param dict_list:
:param name_new:
:return:
"""
for dict_new in dict_list:
if dict_new[\'name\'] == str(name_new):
id_new = dict_new[\'userid\']
return id_new
def create_department(name_new, parentid_new):
"""
创建部门
:param name_new:
:param parentid_new:
:return:
"""
dict_new = {
"name": str(name_new),
"parentid": int(parentid_new),
}
url = \'https://api.exmail.qq.com/cgi-bin/department/create?access_token=\' + str(access_token)
post_create_department = requests.post(url=url, json=dict_new).json()
return post_create_department
def update_member(userid_new, department_new):
"""
更新成员信息
:param userid_new:
:param department_new:
:return:
"""
dict_new = {
"userid": str(userid_new),
"department": [int(department_new)]
}
url = \'https://api.exmail.qq.com/cgi-bin/user/update?access_token=\' + str(access_token)
get_update_member = requests.post(url=url, json=dict_new, timeout=300).json()
return get_update_member
def update_userid_department(user_in, department_in, members_in):
"""
高级 更新成员信息
:param user_in:
:param department_in:
:param members_in:
:return:
"""
userid_new = find_name_userid(members_in, user_in)
department_new = find_department(department_in)[0][\'id\']
updata_member_new = update_member(userid_new, department_new)
return updata_member_new
def open_xlxs(filename_new, sheets_id):
data_xlrd = open_workbook(str(filename_new))
table_xlrd_new = data_xlrd.sheets()[int(sheets_id)]
return table_xlrd_new
def get_members(userid_new):
dict_new = {
"access_token": access_token,
"userid": userid_new
}
url = \'https://api.exmail.qq.com/cgi-bin/user/get\'
get_members_new = requests.get(url=url, params=dict_new, timeout=300).json()
return get_members_new
if __name__ == \'__main__\':
access_token = get_token()
members_list = get_department_members(1)
table_xlrd = open_xlxs(\'alist.xlsx\', 0)
table_xlrd_0 = open_xlxs(\'alist.xlsx\', 1)
if table_xlrd.nrows == table_xlrd_0.nrows:
ranit_xlrd_nrows = table_xlrd.nrows
print(\'总行数: \' + str(ranit_xlrd_nrows))
for ranit_xlrd in range(ranit_xlrd_nrows):
print(\'##### \' + str(ranit_xlrd) + \' #####\')
line_tablexlrd = table_xlrd.row_values(ranit_xlrd)
# 定义全局变量
global line_ranint
global parentid_line
global end_id
global end_department
global brack_id
line_ranint = \'\'
parentid_line = 0
end_id = 0
brack_id = 0
end_department = \'\'
line_tablelist = []
line_findlist = []
# 遍历列表执行
for ranit in range(table_xlrd.row_len(ranit_xlrd)):
if line_tablexlrd[ranit]:
line_ranint = line_ranint + line_tablexlrd[ranit] + \'/\'
line_tablelist.append(line_ranint)
line_findlist.extend(find_department(line_tablexlrd[ranit]))
start_for = find_department(line_tablelist[-1].split(\'/\')[-2])
for statfor in start_for:
if statfor[\'path\'] == line_tablelist[-1][:-1]:
name_start = table_xlrd_0.row_values(ranit_xlrd)[0]
update_start = update_member(get_members(find_name_userid(members_list, name_start))[\'userid\'],
statfor[\'id\'])[\'errmsg\']
brack_id = 1
print(name_start + \' 员工更新部门状态: \' + update_start + "\n" +
name_start + \' 员工更新部门路径:\' + statfor[\'path\'])
if brack_id == 0:
for ranit in range(len(line_tablelist)):
for findranit in line_findlist:
if findranit[\'path\'] == line_tablelist[ranit][:-1]:
parentid_line = findranit[\'id\']
print(\'路径绝对匹配: \' + findranit[\'path\'])
break
elif findranit[\'path\'] == line_tablelist[ranit-1][:-1]:
create_status = create_department(line_tablexlrd[ranit], parentid_line)
if create_status[\'errcode\'] == 0:
findranit_append = find_department(line_tablexlrd[ranit])
print(\'创建值: \' + line_tablelist[ranit][:-1] + \' / id : \' + str(create_status[\'id\']))
line_findlist.extend(findranit_append)
parentid_line = create_status[\'id\']
end_id = create_status[\'id\']
end_department = line_tablelist[ranit][:-1]
elif create_status[\'errcode\'] == 60008:
findranit_err_path = []
for findranit_err in line_findlist:
if findranit_err[\'name\'] == line_tablexlrd[ranit] \
and findranit_err[\'path\'] == line_tablelist[ranit][:-1]:
parentid_line = findranit_err[\'id\']
findranit_err_path.append(findranit_err[\'path\'])
end_id = findranit_err[\'id\']
end_department = findranit_err[\'path\']
print(\'存在值: \' + findranit_err_path[0])
break
if ranit == (len(line_tablelist)) - 1:
name_ranit = table_xlrd_0.row_values(ranit_xlrd)[0]
update_status = update_member(get_members(find_name_userid(members_list, name_ranit))[\'userid\'],
end_id)[\'errmsg\']
print(name_ranit + \' 员工更新部门状态: \' + update_status)
print(name_ranit + \' 员工更新部门路径:\' + end_department)
else:
print(\'错误: 表单不一致 对比值:\' + str(table_xlrd.nrows) + \' != \' + str(table_xlrd_0.nrows))