organization_model.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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 to_base_json(self):
  80. json = {
  81. 'deptId': self.id,
  82. 'deptName': self.name,
  83. 'address': self.address,
  84. 'code': self.code,
  85. 'iconCls': self.iconcls,
  86. 'orderNum': self.seq,
  87. 'leader': self.leader,
  88. 'phone': self.phone,
  89. 'email': self.email,
  90. 'status': self.status
  91. }
  92. return json
  93. def role_json(self, role):
  94. return {
  95. 'roleId': role.id,
  96. 'roleName': role.name,
  97. 'deptId': self.id,
  98. }
  99. def group_json(self, group):
  100. return {
  101. 'groupId': group.id,
  102. 'groupName': group.name,
  103. 'deptId': self.id,
  104. }
  105. def to_tree_select_json(self):
  106. return {
  107. 'id': self.id,
  108. 'label': self.name,
  109. 'children': [org.to_tree_select_json() for org in self.children]
  110. }
  111. def to_parent_select_json(self):
  112. return {
  113. 'id': self.id,
  114. 'label': self.name,
  115. 'parent': [org.to_parent_select_json() for org in self.parent]
  116. }
  117. def get_pid(self):
  118. if self.parent:
  119. return self.parent.id
  120. return ''
  121. def get_pName(self):
  122. if self.parent:
  123. return self.parent.name
  124. return ''
  125. def get_id(self):
  126. return str(self.id)
  127. def __repr__(self):
  128. return '<Organization %r>\n' %(self.name)
  129. class DeptList(BaseModel):
  130. deptName: Optional[str] = ""
  131. class DeptInfo(BaseModel):
  132. deptId: Optional[str] = ""
  133. deptName: Optional[str] = ""
  134. leader: Optional[str] = ""
  135. phone: Optional[str] = ""
  136. orderNum: int
  137. address: Optional[str] = ""
  138. parentId: Optional[str] = ""
  139. status: str
  140. roles: Optional[list] = []
  141. groups: Optional[list] = []
  142. class DeptParent(BaseModel):
  143. deptId: str
  144. parentId: str
  145. orderNum: int