修复项目人员修改头像没有上传到VO平台
parent
e2d88d5121
commit
df917bbe01
|
|
@ -0,0 +1,163 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
VO平台批量删除人员信息工具
|
||||||
|
根据admitGuid批量删除人员信息
|
||||||
|
"""
|
||||||
|
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
import hashlib
|
||||||
|
import time
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
BASEURL = "http://wo-api.uni-ubi.com/"
|
||||||
|
ADMIT_DELETE = BASEURL + "v2/admit/delete"
|
||||||
|
PROJECTGUID = "A2BE33DBF303460FA27ED953D424B7D0"
|
||||||
|
PROJECTID = 199
|
||||||
|
APPKEY = "B08CE344534C477991C78CFA7C399589"
|
||||||
|
APPSECRET = "35D8F5F71DD9408585ADC0D26294031B"
|
||||||
|
DELGUIDS = "D10D8B66345D4E969F18398A892D24F8" #可以放多个
|
||||||
|
|
||||||
|
|
||||||
|
def md5(data: str) -> str:
|
||||||
|
"""
|
||||||
|
MD5加密
|
||||||
|
|
||||||
|
Args:
|
||||||
|
data: 输入字符串
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
MD5加密后的字符串(小写)
|
||||||
|
"""
|
||||||
|
return hashlib.md5(data.encode('utf-8')).hexdigest().lower()
|
||||||
|
|
||||||
|
|
||||||
|
def get_auth_token() -> dict:
|
||||||
|
"""
|
||||||
|
获取认证token
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
包含token和projectGuid的字典
|
||||||
|
"""
|
||||||
|
timestamp = str(int(time.time() * 1000))
|
||||||
|
|
||||||
|
sign_str = APPKEY + timestamp + APPSECRET
|
||||||
|
sign = md5(sign_str)
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
'appKey': APPKEY,
|
||||||
|
'timestamp': timestamp,
|
||||||
|
'sign': sign,
|
||||||
|
'projectGuid': PROJECTGUID
|
||||||
|
}
|
||||||
|
|
||||||
|
url = f"{BASEURL}v1/{PROJECTGUID}/auth"
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.get(url, headers=headers, timeout=30)
|
||||||
|
result = response.json()
|
||||||
|
if result.get('result') == 1:
|
||||||
|
return {
|
||||||
|
'token': result.get('data'),
|
||||||
|
'projectGuid': PROJECTGUID
|
||||||
|
}
|
||||||
|
return None
|
||||||
|
except Exception as e:
|
||||||
|
print(f"获取token失败: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def delete_personnel(admit_guid: str, token_info: dict) -> dict:
|
||||||
|
"""
|
||||||
|
删除人员信息
|
||||||
|
|
||||||
|
Args:
|
||||||
|
admit_guid: 人员admitGuid
|
||||||
|
token_info: 认证token信息
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
删除结果
|
||||||
|
"""
|
||||||
|
timestamp = str(int(time.time() * 1000))
|
||||||
|
|
||||||
|
sign_str = APPKEY + timestamp + APPSECRET
|
||||||
|
sign = md5(sign_str)
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
'appKey': APPKEY,
|
||||||
|
'timestamp': timestamp,
|
||||||
|
'token': token_info['token'],
|
||||||
|
'sign': sign,
|
||||||
|
'projectGuid': PROJECTGUID
|
||||||
|
}
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
'projectId': PROJECTID,
|
||||||
|
'admitGuids': admit_guid
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.post(ADMIT_DELETE, json=payload, headers=headers, timeout=30)
|
||||||
|
result = response.json()
|
||||||
|
return result
|
||||||
|
except requests.exceptions.RequestException as e:
|
||||||
|
return {'success': False, 'error': str(e)}
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""主函数"""
|
||||||
|
print('=' * 60)
|
||||||
|
print('VO平台批量删除人员信息工具')
|
||||||
|
print('=' * 60)
|
||||||
|
|
||||||
|
admit_guids = [guid.strip() for guid in DELGUIDS.split(',') if guid.strip()]
|
||||||
|
|
||||||
|
print(f'\n共 {len(admit_guids)} 个admitGuid待删除:')
|
||||||
|
for i, guid in enumerate(admit_guids, 1):
|
||||||
|
print(f' {i}. {guid}')
|
||||||
|
|
||||||
|
print('\n正在获取认证token...')
|
||||||
|
token_info = get_auth_token()
|
||||||
|
|
||||||
|
if not token_info:
|
||||||
|
print('获取token失败,无法继续删除操作')
|
||||||
|
return
|
||||||
|
|
||||||
|
print('✓ token获取成功')
|
||||||
|
|
||||||
|
print('\n开始删除...')
|
||||||
|
|
||||||
|
success_count = 0
|
||||||
|
fail_count = 0
|
||||||
|
failed_guids = []
|
||||||
|
|
||||||
|
for i, guid in enumerate(admit_guids, 1):
|
||||||
|
print(f'\n正在删除第 {i} 个 ({guid})...')
|
||||||
|
result = delete_personnel(guid, token_info)
|
||||||
|
|
||||||
|
if result.get('result') == 1 or result.get('success'):
|
||||||
|
print(f' ✓ 第 {i} 个删除成功')
|
||||||
|
success_count += 1
|
||||||
|
else:
|
||||||
|
print(f' ✗ 第 {i} 个删除失败')
|
||||||
|
if 'msg' in result:
|
||||||
|
print(f' 错误信息: {result.get("msg")}')
|
||||||
|
fail_count += 1
|
||||||
|
failed_guids.append(guid)
|
||||||
|
|
||||||
|
print('\n' + '=' * 60)
|
||||||
|
print('删除结果统计:')
|
||||||
|
print('=' * 60)
|
||||||
|
print(f'成功: {success_count} 个')
|
||||||
|
print(f'失败: {fail_count} 个')
|
||||||
|
|
||||||
|
if fail_count == 0:
|
||||||
|
print('\n✓ 所有人员信息删除成功!')
|
||||||
|
else:
|
||||||
|
print(f'\n✗ 部分人员信息删除失败!')
|
||||||
|
print(f' 失败的admitGuid: {",".join(failed_guids)}')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
@ -350,6 +350,7 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
|
||||||
iProUserInoutRecordService.addRecord(proProjectInfoSubdeptsUsers);
|
iProUserInoutRecordService.addRecord(proProjectInfoSubdeptsUsers);
|
||||||
}else {
|
}else {
|
||||||
ProProjectInfoSubdeptsUsers deptUser = users.get(0);
|
ProProjectInfoSubdeptsUsers deptUser = users.get(0);
|
||||||
|
boolean isChangePic=!Objects.equals(proProjectInfoSubdeptsUsers.getUserPicture(),deptUser.getUserPicture());
|
||||||
deptUser.setUserName(proProjectInfoSubdeptsUsers.getUserName());
|
deptUser.setUserName(proProjectInfoSubdeptsUsers.getUserName());
|
||||||
deptUser.setWorkType(proProjectInfoSubdeptsUsers.getWorkType());
|
deptUser.setWorkType(proProjectInfoSubdeptsUsers.getWorkType());
|
||||||
deptUser.setUserPhone(proProjectInfoSubdeptsUsers.getUserPhone());
|
deptUser.setUserPhone(proProjectInfoSubdeptsUsers.getUserPhone());
|
||||||
|
|
@ -361,9 +362,8 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
|
||||||
/**
|
/**
|
||||||
* 考勤需要信息改变时推送信息...
|
* 考勤需要信息改变时推送信息...
|
||||||
*/
|
*/
|
||||||
if(!Objects.equals(proProjectInfoSubdeptsUsers.getUserName(),deptUser.getUserName()) || !Objects.equals(proProjectInfoSubdeptsUsers.getCardCode(),deptUser.getCardCode()) ||
|
if(isChangePic || ( StringUtils.isNotEmpty(deptUser.getUserPicture()) && StringUtils.isEmpty(deptUser.getFaceGuid()))){
|
||||||
!Objects.equals(proProjectInfoSubdeptsUsers.getUserPhone(),deptUser.getUserPhone()) || !Objects.equals(proProjectInfoSubdeptsUsers.getUserPicture(),deptUser.getUserPicture())){
|
uniService.syncUniUser(deptUser,false);
|
||||||
uniService.syncUniUser(proProjectInfoSubdeptsUsers,false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -336,11 +336,13 @@ public class UniServiceImpl implements IUniService {
|
||||||
List<String> admitGuidList = new ArrayList<>();
|
List<String> admitGuidList = new ArrayList<>();
|
||||||
for (ProProjectInfoSubdeptsUsers u : userList) {
|
for (ProProjectInfoSubdeptsUsers u : userList) {
|
||||||
String admitGuid = u.getAdmitGuid();
|
String admitGuid = u.getAdmitGuid();
|
||||||
if (StringUtils.isNotEmpty(admitGuid)) {
|
//String faceId=u.getFaceGuid();
|
||||||
admitGuidList.add(admitGuid);
|
|
||||||
}else{
|
|
||||||
syncUniUser(u,true);
|
syncUniUser(u,true);
|
||||||
}
|
// if (StringUtils.isNotEmpty(admitGuid)||StringUtils.isNotEmpty(faceId)) {
|
||||||
|
// admitGuidList.add(admitGuid);
|
||||||
|
// }else{
|
||||||
|
// syncUniUser(u,true);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
for (int i = 0; i < admitGuidList.size(); i += 50) {
|
for (int i = 0; i < admitGuidList.size(); i += 50) {
|
||||||
String admitGuids = "";
|
String admitGuids = "";
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,7 @@ export function updateUser(data) {
|
||||||
nickName: data.nickName,
|
nickName: data.nickName,
|
||||||
userType: data.userType,
|
userType: data.userType,
|
||||||
workType: data.workType,
|
workType: data.workType,
|
||||||
|
cardCode: data.cardCode,
|
||||||
sex: data.sex,
|
sex: data.sex,
|
||||||
avatar: data.avatar,
|
avatar: data.avatar,
|
||||||
status: data.status,
|
status: data.status,
|
||||||
|
|
|
||||||
|
|
@ -673,6 +673,7 @@ function reset() {
|
||||||
nickName: undefined,
|
nickName: undefined,
|
||||||
password: undefined,
|
password: undefined,
|
||||||
phonenumber: undefined,
|
phonenumber: undefined,
|
||||||
|
cardCode: undefined,
|
||||||
cardImgPos: undefined,
|
cardImgPos: undefined,
|
||||||
cardImgInv: undefined,
|
cardImgInv: undefined,
|
||||||
avatar: undefined,
|
avatar: undefined,
|
||||||
|
|
@ -734,6 +735,7 @@ function handleUpdate(row) {
|
||||||
form.value.userInfos = obj;
|
form.value.userInfos = obj;
|
||||||
form.value.cardImgPos = obj.cardImgPos || "";
|
form.value.cardImgPos = obj.cardImgPos || "";
|
||||||
form.value.cardImgInv = obj.cardImgInv || "";
|
form.value.cardImgInv = obj.cardImgInv || "";
|
||||||
|
form.value.cardCode = response.data.cardCode || obj.cardCode || "";
|
||||||
postOptions.value = response.posts;
|
postOptions.value = response.posts;
|
||||||
form.value.postIds = response.postIds;
|
form.value.postIds = response.postIds;
|
||||||
form.value.roleIds = response.roleIds;
|
form.value.roleIds = response.roleIds;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue