organization_model.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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 to_dict(self):
  61. json = {
  62. 'deptId': self.id,
  63. 'createTime': self.created_at,
  64. 'updateTime': self.updated_at,
  65. 'deptName': self.name,
  66. 'address': self.address,
  67. 'code': self.code,
  68. 'iconCls': self.iconcls,
  69. 'orderNum': self.seq,
  70. 'parentId': self.get_pid(),
  71. 'parentName': self.get_pName(),
  72. 'leader': self.leader,
  73. 'phone': self.phone,
  74. 'email': self.email,
  75. 'status': self.status,
  76. 'roles': [self.role_json(role) for role in self.roles],
  77. }
  78. return json
  79. def role_json(self, role):
  80. return {
  81. 'roleId': role.id,
  82. 'roleName': role.name,
  83. 'deptId': self.id,
  84. }
  85. def group_json(self, group):
  86. return {
  87. 'groupId': group.id,
  88. 'groupName': group.name,
  89. 'deptId': self.id,
  90. }
  91. def to_tree_select_json(self):
  92. return {
  93. 'id': self.id,
  94. 'label': self.name,
  95. 'children': [org.to_tree_select_json() for org in self.children]
  96. }
  97. def to_parent_select_json(self):
  98. return {
  99. 'id': self.id,
  100. 'label': self.name,
  101. 'parent': [org.to_parent_select_json() for org in self.parent]
  102. }
  103. def get_pid(self):
  104. if self.parent:
  105. return self.parent.id
  106. return ''
  107. def get_pName(self):
  108. if self.parent:
  109. return self.parent.name
  110. return ''
  111. def get_id(self):
  112. return str(self.id)
  113. def __repr__(self):
  114. return '<Organization %r>\n' %(self.name)
  115. class DeptList(BaseModel):
  116. deptName: Optional[str] = ""
  117. class DeptInfo(BaseModel):
  118. deptId: Optional[str] = ""
  119. deptName: Optional[str] = ""
  120. leader: Optional[str] = ""
  121. phone: Optional[str] = ""
  122. orderNum: int
  123. address: Optional[str] = ""
  124. parentId: Optional[str] = ""
  125. status: str
  126. roles: Optional[list] = []
  127. groups: Optional[list] = []
  128. class DeptParent(BaseModel):
  129. deptId: str
  130. parentId: str
  131. orderNum: int