organization_model.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. from datetime import datetime
  2. from typing import Optional
  3. from pydantic import BaseModel
  4. from sqlalchemy import Column, Integer, String, Table, ForeignKey, DateTime
  5. from sqlalchemy.orm import relationship, backref
  6. from app.models.base_model import Base
  7. # organization_group_table = Table('organization_group', Base.metadata,
  8. # Column('group_id', Integer, ForeignKey('group.id')),
  9. # Column('organization_id', String(36), ForeignKey('organization.id')))
  10. # #构建对role表的关系
  11. organization_role_table = Table('organization_role', Base.metadata,
  12. Column('role_id', String(36), ForeignKey('role.id', ondelete='CASCADE')),
  13. Column('organization_id', String(36), ForeignKey('organization.id', ondelete='CASCADE')))
  14. class OrganizationModel(Base):
  15. __tablename__ = 'organization'
  16. id = Column(String(36), primary_key=True)
  17. created_at = Column(DateTime, default=datetime.now())
  18. updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now())
  19. name = Column(String(200))
  20. address = Column(String(200))
  21. code = Column(String(200))
  22. iconcls = Column(String(255))
  23. seq = Column(Integer)
  24. leader = Column(String(255))
  25. phone = Column(String(32))
  26. email = Column(String(64))
  27. status = Column(String(10), nullable=False, default="0")
  28. # groups = relationship('GroupModel',
  29. # secondary=organization_group_table,
  30. # backref=backref('organizations', lazy='dynamic'))
  31. roles = relationship('RoleModel',
  32. secondary=organization_role_table,
  33. backref=backref('organizations', lazy='dynamic'))
  34. organization_id = Column(String(36), ForeignKey('organization.id'))
  35. parent = relationship('OrganizationModel', remote_side=[id], backref='childrens', uselist=False)
  36. children = relationship('OrganizationModel')
  37. def to_json(self):
  38. json = {
  39. 'deptId': self.id,
  40. 'createTime': self.created_at,
  41. 'updateTime': self.updated_at,
  42. 'deptName': self.name,
  43. 'address': self.address,
  44. 'code': self.code,
  45. 'iconCls': self.iconcls,
  46. 'orderNum': self.seq,
  47. 'parentId': self.get_pid(),
  48. 'parentName': self.get_pName(),
  49. 'leader': self.leader,
  50. 'phone': self.phone,
  51. 'email': self.email,
  52. 'status': self.status,
  53. 'roles': [self.role_json(role) for role in self.roles],
  54. # 'groups': [self.group_json(group) for group in self.groups],
  55. 'children': [
  56. org.to_json() for org in self.children
  57. ]
  58. }
  59. return json
  60. def role_json(self, role):
  61. return {
  62. 'roleId': role.id,
  63. 'roleName': role.name,
  64. 'deptId': self.id,
  65. }
  66. def group_json(self, group):
  67. return {
  68. 'groupId': group.id,
  69. 'groupName': group.name,
  70. 'deptId': self.id,
  71. }
  72. def to_tree_select_json(self):
  73. return {
  74. 'id': self.id,
  75. 'label': self.name,
  76. 'children': [org.to_tree_select_json() for org in self.children]
  77. }
  78. def to_parent_select_json(self):
  79. return {
  80. 'id': self.id,
  81. 'label': self.name,
  82. 'parent': [org.to_parent_select_json() for org in self.parent]
  83. }
  84. def get_pid(self):
  85. if self.parent:
  86. return self.parent.id
  87. return ''
  88. def get_pName(self):
  89. if self.parent:
  90. return self.parent.name
  91. return ''
  92. def get_id(self):
  93. return str(self.id)
  94. def __repr__(self):
  95. return '<Organization %r>\n' %(self.name)
  96. class DeptList(BaseModel):
  97. deptName: Optional[str] = ""
  98. class DeptInfo(BaseModel):
  99. deptId: Optional[str] = ""
  100. deptName: Optional[str] = ""
  101. leader: Optional[str] = ""
  102. phone: Optional[str] = ""
  103. orderNum: int
  104. address: Optional[str] = ""
  105. parentId: Optional[str] = ""
  106. status: str
  107. roles: list
  108. groups: Optional[list] = []
  109. class DeptParent(BaseModel):
  110. deptId: str
  111. parentId: str
  112. orderNum: int