model.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. from datetime import datetime
  2. from typing import List, Optional
  3. from sqlalchemy import Column, String, Integer, ForeignKey, DateTime, JSON
  4. from sqlalchemy.orm import Mapped, mapped_column, relationship
  5. from app.common.enums import PermissionFilterStrategy
  6. from app.core.base_model import EnterpriseMixin, PaymentModelMixin, TenantMixin
  7. class DepartmentModel(PaymentModelMixin, TenantMixin, EnterpriseMixin):
  8. """部门模型"""
  9. __tablename__ = "pay_department"
  10. __table_args__ = {"comment": "部门表"}
  11. __permission_strategy__ = PermissionFilterStrategy.ENTERPRISE_BASED
  12. id: Mapped[int] = mapped_column(primary_key=True, index=True, comment="主键ID")
  13. department_id: Mapped[str] = mapped_column(String(64), unique=True, nullable=False, comment="部门ID")
  14. department_name: Mapped[str] = mapped_column(String(128), nullable=False, comment="部门名称")
  15. department_code: Mapped[Optional[str]] = mapped_column(String(64), comment="部门编码")
  16. parent_department_id: Mapped[Optional[str]] = mapped_column(String(64), comment="上级部门ID")
  17. status: Mapped[str] = mapped_column(String(32), default="NORMAL", comment="状态")
  18. sort_order: Mapped[Optional[int]] = mapped_column(Integer, comment="排序值")
  19. leader_employee_id: Mapped[Optional[str]] = mapped_column(String(64), comment="部门负责人ID")
  20. leader_employee_name: Mapped[Optional[str]] = mapped_column(String(128), comment="部门负责人姓名")
  21. created_time: Mapped[datetime] = mapped_column(DateTime, default=datetime.now, comment="创建时间")
  22. updated_time: Mapped[datetime] = mapped_column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
  23. # 关联关系
  24. parent_department = relationship("DepartmentModel", remote_side=[department_id], backref="sub_departments", primaryjoin="DepartmentModel.parent_department_id == DepartmentModel.department_id")
  25. def __repr__(self):
  26. return f"<DepartmentModel(department_id={self.department_id}, department_name={self.department_name})>"