增加定时同步组织架构
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from sqlmodel import Session, SQLModel, create_engine
|
||||
|
||||
from config import Settings
|
||||
from model.model import Department, Employee, Tenant
|
||||
from model.model import Department, Employee
|
||||
|
||||
PGSQL = Settings().PGSQL
|
||||
|
||||
@@ -18,3 +18,9 @@ def get_engine():
|
||||
|
||||
def get_session():
|
||||
return Session(get_engine())
|
||||
|
||||
|
||||
__all__ = [
|
||||
"Department",
|
||||
"Employee",
|
||||
]
|
||||
|
||||
125
model/model.py
125
model/model.py
@@ -1,85 +1,92 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
from sqlalchemy import JSON, Column, DateTime, func
|
||||
from sqlmodel import JSON, Field, SQLModel
|
||||
from sqlalchemy import Column, DateTime, JSON, func
|
||||
from sqlmodel import Field, SQLModel
|
||||
|
||||
|
||||
class TenantTimeMixin(SQLModel):
|
||||
tenant_id: int = Field(index=True, description="租户ID")
|
||||
class Department(SQLModel, table=True):
|
||||
id: Optional[int] = Field(default=None, primary_key=True)
|
||||
|
||||
created_at: datetime = Field(
|
||||
sa_column=Column(
|
||||
DateTime(timezone=True),
|
||||
server_default=func.now(),
|
||||
nullable=False,
|
||||
)
|
||||
wecom_dept_id: str = Field(default=None, index=True)
|
||||
|
||||
dname: str = Field(
|
||||
max_length=100,
|
||||
description="部门名称",
|
||||
)
|
||||
|
||||
updated_at: datetime = Field(
|
||||
sa_column=Column(
|
||||
DateTime(timezone=True),
|
||||
server_default=func.now(),
|
||||
onupdate=func.now(),
|
||||
nullable=False,
|
||||
)
|
||||
name_en: str = Field(
|
||||
max_length=100,
|
||||
description="部门英文名",
|
||||
)
|
||||
|
||||
department_leader: list[str] = Field(
|
||||
default_factory=list,
|
||||
sa_column=Column(JSON),
|
||||
description="部门负责人 user_id 列表",
|
||||
)
|
||||
|
||||
class Department(TenantTimeMixin, SQLModel, table=True):
|
||||
id: int | None = Field(default=None, primary_key=True)
|
||||
|
||||
dname: str = Field(max_length=100)
|
||||
name_en: str = Field(max_length=100)
|
||||
|
||||
department_leader: list[int] = Field(default_factory=list, sa_column=Column(JSON))
|
||||
|
||||
parent_id: int = Field(default=0, index=True)
|
||||
parent_id: str = Field(default=0, index=True)
|
||||
order: int = Field(default=0)
|
||||
|
||||
|
||||
class Employee(TenantTimeMixin, SQLModel, table=True):
|
||||
id: int | None = Field(default=None, primary_key=True)
|
||||
|
||||
ename: str = Field(max_length=100)
|
||||
|
||||
dept_id: int = Field(foreign_key="department.id", index=True)
|
||||
|
||||
open_userid: str = Field(max_length=100, index=True)
|
||||
|
||||
|
||||
class Tenant(SQLModel, table=True):
|
||||
id: int | None = Field(default=None, primary_key=True)
|
||||
|
||||
# ========== 基础信息 ==========
|
||||
name: str = Field(max_length=100, index=True, description="租户名称 / 企业名称")
|
||||
|
||||
# ========== 企业微信配置 ==========
|
||||
wecom_corp_id: str = Field(max_length=64, index=True, description="企业微信 CorpID")
|
||||
|
||||
wecom_corp_secret: str = Field(max_length=128, description="企业微信应用 Secret")
|
||||
|
||||
wecom_agent_id: int = Field(description="企业微信应用 AgentId")
|
||||
|
||||
wecom_token: str = Field(max_length=64, description="企业微信回调 Token")
|
||||
|
||||
wecom_encoding_aes_key: str = Field(
|
||||
max_length=64, description="企业微信回调 EncodingAESKey"
|
||||
)
|
||||
|
||||
# ========== 时间字段 ==========
|
||||
created_at: datetime = Field(
|
||||
default_factory=datetime.now,
|
||||
sa_column=Column(
|
||||
DateTime(timezone=True),
|
||||
server_default=func.now(),
|
||||
nullable=False,
|
||||
)
|
||||
),
|
||||
)
|
||||
|
||||
updated_at: datetime = Field(
|
||||
default_factory=datetime.now,
|
||||
sa_column=Column(
|
||||
DateTime(timezone=True),
|
||||
server_default=func.now(),
|
||||
onupdate=func.now(),
|
||||
nullable=False,
|
||||
)
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class Employee(SQLModel, table=True):
|
||||
id: Optional[int] = Field(default=None, primary_key=True)
|
||||
|
||||
wecom_user_id: str = Field(default=None, index=True)
|
||||
|
||||
ename: str = Field(
|
||||
max_length=100,
|
||||
description="员工姓名",
|
||||
)
|
||||
|
||||
dept_ids: list[str] = Field(
|
||||
default_factory=list,
|
||||
sa_column=Column(JSON),
|
||||
description="部门ID",
|
||||
)
|
||||
|
||||
open_userid: str | None = Field(
|
||||
default=None,
|
||||
max_length=100,
|
||||
index=True,
|
||||
description="企业微信 user_id",
|
||||
)
|
||||
|
||||
created_at: datetime = Field(
|
||||
default_factory=datetime.now,
|
||||
sa_column=Column(
|
||||
DateTime(timezone=True),
|
||||
server_default=func.now(),
|
||||
nullable=False,
|
||||
),
|
||||
)
|
||||
|
||||
updated_at: datetime = Field(
|
||||
default_factory=datetime.now,
|
||||
sa_column=Column(
|
||||
DateTime(timezone=True),
|
||||
server_default=func.now(),
|
||||
onupdate=func.now(),
|
||||
nullable=False,
|
||||
),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user