Files
wecom-wnzs-adapter/service/wecom/modules/users.py
2026-01-15 19:24:52 +08:00

97 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from service.wecom.exceptions.general import SDKException
from service.wecom.modules.base import WecomBaseClient
from service.wecom.schemas.departments import DepartmentInfo
from service.wecom.schemas.users import (
DepartmentUserDetailInfo,
DepartmentUserInfo,
UserInfo,
UserSimpleInfo,
)
from service.wecom.utils.requests import HttpxRequest
class WecomUsersClient(WecomBaseClient):
async def get_user(self, userid: str) -> dict:
"""
读取成员
@param userid: 成员UserID。对应管理端的账号企业内必须唯一。不区分大小写长度为1~64个字节
@return: 成员信息
"""
url = self.BASE_URL + "/user/get"
params = {"access_token": await self.access_token, "userid": userid}
resp = UserInfo(**await HttpxRequest.get(url=url, params=params))
if resp.errcode == 0:
return resp.model_dump(exclude={"errcode", "errmsg"})
else:
raise SDKException(resp.errcode, resp.errmsg)
async def get_user_in_department_detail(self, department_id: str) -> dict:
"""
读取部门成员完整信息
@param department_id: 获取的部门id
@return: 部门成员信息
"""
url = self.BASE_URL + "/user/list"
params = {
"access_token": await self.access_token,
"department_id": department_id,
}
resp = DepartmentUserDetailInfo(
**await HttpxRequest.get(url=url, params=params)
)
if resp.errcode == 0:
return resp.model_dump(exclude={"errcode", "errmsg"})
else:
raise SDKException(resp.errcode, resp.errmsg)
async def get_user_in_department(self, department_id: int) -> list[UserSimpleInfo]:
"""
读取部门成员简要信息
@param department_id: 获取的部门id
@return: 部门成员信息
"""
url = self.BASE_URL + "/user/simplelist"
params = {
"access_token": await self.access_token,
"department_id": department_id,
}
resp = DepartmentUserInfo(**await HttpxRequest.get(url=url, params=params))
if resp.errcode == 0:
return resp.userlist
else:
raise SDKException(resp.errcode, resp.errmsg)
@staticmethod
def convert_userid(userid: str, decrypt: bool = False):
"""
学工号/企业微信ID转换方法
@param userid: 学工号/企业微信ID
@param decrypt: 是否解密
@return: 转换后的学工号/企业微信ID
"""
if decrypt:
year = str(int(userid[10:12]) + 1945)
no = str(int(userid[2:9]) - 115342)
no = no[1:7]
userid = year + no
else:
userid = (
"8"
+ userid[2:3]
+ str(int(userid[-6:]) + 1115342)
+ userid[8:9]
+ str(int(userid[0:4]) - 1945)
)
return userid