增加定时同步组织架构
This commit is contained in:
@@ -8,7 +8,7 @@ def get_wecom_single() -> Wecom:
|
||||
wecom = Wecom(Settings().WECOM_CORPID, Settings().WECOM_CORPSECRET)
|
||||
WECOM_PROXY = Settings().WECOM_PROXY
|
||||
if WECOM_PROXY and WECOM_PROXY != "":
|
||||
wecom.BASE_URL = WECOM_PROXY
|
||||
wecom.BASE_URL = WECOM_PROXY + wecom.BASE_URL
|
||||
return wecom
|
||||
|
||||
|
||||
|
||||
0
service/sync/__init__.py
Normal file
0
service/sync/__init__.py
Normal file
38
service/sync/department.py
Normal file
38
service/sync/department.py
Normal file
@@ -0,0 +1,38 @@
|
||||
from service import get_wecom
|
||||
from model import get_session, Department
|
||||
from sqlmodel import delete, select
|
||||
|
||||
|
||||
async def sync_department():
|
||||
wecom = get_wecom()
|
||||
|
||||
department_res = await wecom.get_departments()
|
||||
|
||||
with get_session() as session:
|
||||
# 删除原来的数据
|
||||
stmt = delete(Department)
|
||||
session.execute(stmt)
|
||||
session.commit()
|
||||
|
||||
# DepartmentInfoItem(id=302, name='亮剑一部一组-梁鹏涛', name_en=None, department_leader=['LiangPengTao'], parentid=96, order=100000000)
|
||||
# 插入新的数据
|
||||
for index, item in enumerate(department_res):
|
||||
new_dept = Department(
|
||||
id=index + 1,
|
||||
wecom_dept_id=str(item.id),
|
||||
dname=str(item.name),
|
||||
name_en=str(item.name_en),
|
||||
department_leader=item.department_leader or [],
|
||||
parent_id=str(item.parentid),
|
||||
order=item.order or 0,
|
||||
)
|
||||
session.add(new_dept)
|
||||
session.commit()
|
||||
|
||||
|
||||
def check_department_datebase():
|
||||
with get_session() as session:
|
||||
has = session.exec(select(Department)).first()
|
||||
if not has:
|
||||
return False
|
||||
return True
|
||||
37
service/sync/employee.py
Normal file
37
service/sync/employee.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from service import get_wecom
|
||||
from model import get_session, Employee
|
||||
from sqlmodel import delete, select
|
||||
|
||||
|
||||
async def sync_department_user():
|
||||
wecom = get_wecom()
|
||||
|
||||
dept_res = await wecom.get_departments()
|
||||
|
||||
with get_session() as session:
|
||||
# 删除原来的数据
|
||||
stmt = delete(Employee)
|
||||
session.execute(stmt)
|
||||
session.commit()
|
||||
index_id = 1
|
||||
for dept in dept_res:
|
||||
user_res = await wecom.get_user_in_department(dept.id)
|
||||
for item in user_res:
|
||||
new_employee = Employee(
|
||||
id=index_id,
|
||||
wecom_user_id=item.userid,
|
||||
ename=item.name,
|
||||
dept_ids=[str(i) for i in item.department],
|
||||
open_userid=item.open_userid,
|
||||
)
|
||||
index_id += 1
|
||||
session.add(new_employee)
|
||||
session.commit()
|
||||
|
||||
|
||||
def check_employee_datebase():
|
||||
with get_session() as session:
|
||||
has = session.exec(select(Employee)).first()
|
||||
if not has:
|
||||
return False
|
||||
return True
|
||||
@@ -1,8 +1,8 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from wecom.exceptions.general import SDKException
|
||||
from wecom.schemas.token import AccessTokenInfo, AccessTokenParams
|
||||
from wecom.utils.requests import HttpxRequest
|
||||
from service.wecom.exceptions.general import SDKException
|
||||
from service.wecom.schemas.token import AccessTokenInfo, AccessTokenParams
|
||||
from service.wecom.utils.requests import HttpxRequest
|
||||
|
||||
BASE_URL: str = "https://qyapi.weixin.qq.com/cgi-bin"
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
from wecom.exceptions.general import SDKException
|
||||
from wecom.modules.base import WecomBaseClient
|
||||
from wecom.schemas.departments import (
|
||||
from service.wecom.exceptions.general import SDKException
|
||||
from service.wecom.modules.base import WecomBaseClient
|
||||
from service.wecom.schemas.departments import (
|
||||
CreateDepartmentInfo,
|
||||
CreateDepartmentParams,
|
||||
DepartmentInfo,
|
||||
DepartmentInfoItem,
|
||||
UpdateDepartmentInfo,
|
||||
UpdateDepartmentParams,
|
||||
)
|
||||
from wecom.utils.requests import HttpxRequest
|
||||
from service.wecom.utils.requests import HttpxRequest
|
||||
|
||||
|
||||
class WecomDepartmentClient(WecomBaseClient):
|
||||
@@ -63,7 +64,7 @@ class WecomDepartmentClient(WecomBaseClient):
|
||||
else:
|
||||
raise SDKException(resp.errcode, resp.errmsg)
|
||||
|
||||
async def get_departments(self, id: int = None) -> list[DepartmentInfo]:
|
||||
async def get_departments(self, id: int = None) -> list[DepartmentInfoItem]:
|
||||
"""
|
||||
获取部门列表
|
||||
@param id: 部门id。获取指定部门及其下的子部门。
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
from typing import Literal
|
||||
|
||||
from wecom.exceptions.general import SDKException
|
||||
from wecom.modules.base import WecomBaseClient
|
||||
from wecom.schemas.message import (
|
||||
from service.wecom.exceptions.general import SDKException
|
||||
from service.wecom.modules.base import WecomBaseClient
|
||||
from service.wecom.schemas.message import (
|
||||
MessageParams,
|
||||
RecallMessageInfo,
|
||||
RecallMessageParams,
|
||||
SendMessageInfo,
|
||||
)
|
||||
from wecom.utils.requests import HttpxRequest
|
||||
from service.wecom.utils.requests import HttpxRequest
|
||||
|
||||
|
||||
class WecomMessageClient(WecomBaseClient):
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from wecom.modules.base import WecomBaseClient
|
||||
from wecom.modules.department import WecomDepartmentClient
|
||||
from wecom.modules.message import WecomMessageClient
|
||||
from wecom.modules.users import WecomUsersClient
|
||||
from service.wecom.modules.base import WecomBaseClient
|
||||
from service.wecom.modules.department import WecomDepartmentClient
|
||||
from service.wecom.modules.message import WecomMessageClient
|
||||
from service.wecom.modules.users import WecomUsersClient
|
||||
|
||||
|
||||
class Wecom(
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
from wecom.exceptions.general import SDKException
|
||||
from wecom.modules.base import WecomBaseClient
|
||||
from wecom.schemas.departments import DepartmentInfo
|
||||
from wecom.schemas.users import DepartmentUserDetailInfo, DepartmentUserInfo, UserInfo
|
||||
from wecom.utils.requests import HttpxRequest
|
||||
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):
|
||||
@@ -45,7 +50,7 @@ class WecomUsersClient(WecomBaseClient):
|
||||
else:
|
||||
raise SDKException(resp.errcode, resp.errmsg)
|
||||
|
||||
async def get_user_in_department(self, department_id: int) -> dict:
|
||||
async def get_user_in_department(self, department_id: int) -> list[UserSimpleInfo]:
|
||||
"""
|
||||
读取部门成员简要信息
|
||||
@param department_id: 获取的部门id
|
||||
@@ -61,7 +66,7 @@ class WecomUsersClient(WecomBaseClient):
|
||||
resp = DepartmentUserInfo(**await HttpxRequest.get(url=url, params=params))
|
||||
|
||||
if resp.errcode == 0:
|
||||
return resp.model_dump(exclude={"errcode", "errmsg"})
|
||||
return resp.userlist
|
||||
else:
|
||||
raise SDKException(resp.errcode, resp.errmsg)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from typing import AnyStr, List
|
||||
from typing import List
|
||||
|
||||
from wecom.schemas.base import BaseSchema
|
||||
from service.wecom.schemas.base import BaseSchema
|
||||
|
||||
|
||||
class CreateDepartmentParams(BaseSchema):
|
||||
@@ -26,23 +26,23 @@ class UpdateDepartmentParams(CreateDepartmentParams): ...
|
||||
|
||||
class UpdateDepartmentInfo(BaseSchema):
|
||||
errcode: int
|
||||
errmsg: AnyStr
|
||||
errmsg: str
|
||||
|
||||
|
||||
class CreateDepartmentInfo(BaseSchema):
|
||||
errcode: int
|
||||
errmsg: AnyStr
|
||||
errmsg: str
|
||||
id: int
|
||||
|
||||
|
||||
class DepartmentInfo(BaseSchema):
|
||||
class DepartmentInfoItem(BaseSchema):
|
||||
"""
|
||||
部门单体响应数据
|
||||
"""
|
||||
|
||||
id: int
|
||||
name: AnyStr
|
||||
name_en: AnyStr | None = None
|
||||
name: str
|
||||
name_en: str | None = None
|
||||
department_leader: List[str] | None = None
|
||||
parentid: int | None = None
|
||||
order: int | None = None
|
||||
@@ -54,5 +54,5 @@ class DepartmentInfo(BaseSchema):
|
||||
"""
|
||||
|
||||
errcode: int
|
||||
errmsg: AnyStr
|
||||
department: List[DepartmentInfo]
|
||||
errmsg: str
|
||||
department: List[DepartmentInfoItem]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from typing import AnyStr, Literal
|
||||
from typing import Literal
|
||||
|
||||
from wecom.schemas.base import BaseSchema
|
||||
from service.wecom.schemas.base import BaseSchema
|
||||
|
||||
|
||||
class MessageParams(BaseSchema):
|
||||
@@ -24,9 +24,9 @@ class MessageParams(BaseSchema):
|
||||
touser、toparty、totag不能同时为空,后面不再强调
|
||||
"""
|
||||
|
||||
touser: AnyStr | None = None
|
||||
toparty: AnyStr | None = None
|
||||
totag: AnyStr | None = None
|
||||
touser: str | None = None
|
||||
toparty: str | None = None
|
||||
totag: str | None = None
|
||||
msgtype: Literal[
|
||||
"text", "image", "voice", "video", "textcard", "news", "mpnews", "markdown"
|
||||
]
|
||||
@@ -55,13 +55,13 @@ class SendMessageInfo(BaseSchema):
|
||||
"""
|
||||
|
||||
errcode: int
|
||||
errmsg: AnyStr
|
||||
invaliduser: AnyStr | None = None
|
||||
invalidparty: AnyStr | None = None
|
||||
invalidtag: AnyStr | None = None
|
||||
unlicenseduser: AnyStr | None = None
|
||||
msgid: AnyStr | None = None
|
||||
response_code: AnyStr | None = None
|
||||
errmsg: str
|
||||
invaliduser: str | None = None
|
||||
invalidparty: str | None = None
|
||||
invalidtag: str | None = None
|
||||
unlicenseduser: str | None = None
|
||||
msgid: str | None = None
|
||||
response_code: str | None = None
|
||||
|
||||
|
||||
class SendMessageInvalid(BaseSchema):
|
||||
@@ -70,11 +70,11 @@ class SendMessageInvalid(BaseSchema):
|
||||
|
||||
"""
|
||||
|
||||
errmsg: AnyStr
|
||||
invaliduser: AnyStr | None = None
|
||||
invalidparty: AnyStr | None = None
|
||||
invalidtag: AnyStr | None = None
|
||||
unlicenseduser: AnyStr | None = None
|
||||
errmsg: str
|
||||
invaliduser: str | None = None
|
||||
invalidparty: str | None = None
|
||||
invalidtag: str | None = None
|
||||
unlicenseduser: str | None = None
|
||||
|
||||
|
||||
class RecallMessageParams(BaseSchema):
|
||||
@@ -82,7 +82,7 @@ class RecallMessageParams(BaseSchema):
|
||||
撤回消息请求参数
|
||||
"""
|
||||
|
||||
msgid: AnyStr
|
||||
msgid: str
|
||||
|
||||
|
||||
class RecallMessageInfo(BaseSchema):
|
||||
@@ -91,4 +91,4 @@ class RecallMessageInfo(BaseSchema):
|
||||
"""
|
||||
|
||||
errcode: int
|
||||
errmsg: AnyStr
|
||||
errmsg: str
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from wecom.schemas.base import BaseSchema
|
||||
from service.wecom.schemas.base import BaseSchema
|
||||
|
||||
|
||||
class AccessTokenParams(BaseSchema):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from typing import AnyStr, List
|
||||
from typing import List
|
||||
|
||||
from wecom.schemas.base import BaseSchema
|
||||
from service.wecom.schemas.base import BaseSchema
|
||||
|
||||
|
||||
class UserInfo(BaseSchema):
|
||||
@@ -9,31 +9,31 @@ class UserInfo(BaseSchema):
|
||||
"""
|
||||
|
||||
errcode: int
|
||||
errmsg: AnyStr
|
||||
userid: AnyStr | None = None
|
||||
name: AnyStr | None = None
|
||||
errmsg: str
|
||||
userid: str | None = None
|
||||
name: str | None = None
|
||||
department: List[int] | None = None
|
||||
position: AnyStr | None = None
|
||||
moblie: AnyStr | None = None
|
||||
position: str | None = None
|
||||
moblie: str | None = None
|
||||
gender: int | None = None
|
||||
email: AnyStr | None = None
|
||||
email: str | None = None
|
||||
status: int | None = None
|
||||
|
||||
|
||||
class UserSimpleInfo(BaseSchema):
|
||||
userid: AnyStr
|
||||
name: AnyStr
|
||||
userid: str
|
||||
name: str
|
||||
department: List[int]
|
||||
open_userid: AnyStr | None = None
|
||||
open_userid: str | None = None
|
||||
|
||||
|
||||
class DepartmentUserInfo(BaseSchema):
|
||||
errcode: int
|
||||
errmsg: AnyStr
|
||||
errmsg: str
|
||||
userlist: List[UserSimpleInfo]
|
||||
|
||||
|
||||
class DepartmentUserDetailInfo(BaseSchema):
|
||||
errcode: int
|
||||
errmsg: AnyStr
|
||||
errmsg: str
|
||||
userlist: List[UserInfo]
|
||||
|
||||
Reference in New Issue
Block a user