organization_model.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  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.config.const import DEPT_STATUS_DELETE
  7. from app.models.base_model import Base
  8. # organization_group_table = Table('organization_group', Base.metadata,
  9. # Column('group_id', Integer, ForeignKey('group.id')),
  10. # Column('organization_id', String(36), ForeignKey('organization.id')))
  11. # #构建对role表的关系
  12. organization_role_table = Table('organization_role', Base.metadata,
  13. Column('role_id', String(36), ForeignKey('role.id', ondelete='CASCADE')),
  14. Column('organization_id', String(36), ForeignKey('organization.id', ondelete='CASCADE')))
  15. class OrganizationModel(Base):
  16. __tablename__ = 'organization'
  17. id = Column(String(36), primary_key=True)
  18. created_at = Column(DateTime, default=datetime.now())
  19. updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now())
  20. name = Column(String(200))
  21. address = Column(String(200))
  22. code = Column(String(200))
  23. iconcls = Column(String(255))
  24. seq = Column(Integer)
  25. leader = Column(String(255))
  26. phone = Column(String(32))
  27. email = Column(String(64))
  28. status = Column(String(10), nullable=False, default="1")
  29. # groups = relationship('GroupModel',
  30. # secondary=organization_group_table,
  31. # backref=backref('organizations', lazy='dynamic'))
  32. roles = relationship('RoleModel',
  33. secondary=organization_role_table,
  34. backref=backref('organizations', lazy='dynamic'))
  35. organization_id = Column(String(36), ForeignKey('organization.id'))
  36. parent = relationship('OrganizationModel', remote_side=[id], backref='childrens', uselist=False)
  37. children = relationship('OrganizationModel')
  38. def to_json(self):
  39. json = {
  40. 'deptId': self.id,
  41. 'createTime': self.created_at,
  42. 'updateTime': self.updated_at,
  43. 'deptName': self.name,
  44. 'address': self.address,
  45. 'code': self.code,
  46. 'iconCls': self.iconcls,
  47. 'orderNum': self.seq,
  48. 'parentId': self.get_pid(),
  49. 'parentName': self.get_pName(),
  50. 'leader': self.leader,
  51. 'phone': self.phone,
  52. 'email': self.email,
  53. 'status': self.status,
  54. 'roles': [self.role_json(role) for role in self.roles],
  55. # 'groups': [self.group_json(group) for group in self.groups],
  56. 'children': [
  57. org.to_json() for org in self.children if org.status != DEPT_STATUS_DELETE
  58. ]
  59. }
  60. return json
  61. def to_dict(self):
  62. json = {
  63. 'deptId': self.id,
  64. 'createTime': self.created_at,
  65. 'updateTime': self.updated_at,
  66. 'deptName': self.name,
  67. 'address': self.address,
  68. 'code': self.code,
  69. 'iconCls': self.iconcls,
  70. 'orderNum': self.seq,
  71. 'parentId': self.get_pid(),
  72. 'parentName': self.get_pName(),
  73. 'leader': self.leader,
  74. 'phone': self.phone,
  75. 'email': self.email,
  76. 'status': self.status,
  77. 'roles': [self.role_json(role) for role in self.roles],
  78. }
  79. return json
  80. def to_base_json(self):
  81. json = {
  82. 'deptId': self.id,
  83. 'deptName': self.name,
  84. 'address': self.address,
  85. 'code': self.code,
  86. 'iconCls': self.iconcls,
  87. 'orderNum': self.seq,
  88. 'leader': self.leader,
  89. 'phone': self.phone,
  90. 'email': self.email,
  91. 'status': self.status
  92. }
  93. return json
  94. def role_json(self, role):
  95. return {
  96. 'roleId': role.id,
  97. 'roleName': role.name,
  98. 'deptId': self.id,
  99. }
  100. def group_json(self, group):
  101. return {
  102. 'groupId': group.id,
  103. 'groupName': group.name,
  104. 'deptId': self.id,
  105. }
  106. def to_tree_select_json(self):
  107. return {
  108. 'id': self.id,
  109. 'label': self.name,
  110. 'children': [org.to_tree_select_json() for org in self.children]
  111. }
  112. def to_parent_select_json(self):
  113. return {
  114. 'id': self.id,
  115. 'label': self.name,
  116. 'parent': [org.to_parent_select_json() for org in self.parent]
  117. }
  118. def get_pid(self):
  119. if self.parent:
  120. return self.parent.id
  121. return ''
  122. def get_pName(self):
  123. if self.parent:
  124. return self.parent.name
  125. return ''
  126. def get_id(self):
  127. return str(self.id)
  128. def __repr__(self):
  129. return '<Organization %r>\n' %(self.name)
  130. class DeptList(BaseModel):
  131. deptName: Optional[str] = ""
  132. class DeptInfo(BaseModel):
  133. deptId: Optional[str] = ""
  134. deptName: Optional[str] = ""
  135. leader: Optional[str] = ""
  136. phone: Optional[str] = ""
  137. orderNum: int
  138. address: Optional[str] = ""
  139. parentId: Optional[str] = ""
  140. status: Optional[str|int] = ""
  141. roles: Optional[list] = []
  142. groups: Optional[list] = []
  143. class DeptParent(BaseModel):
  144. deptId: str
  145. parentId: str
  146. orderNum: int
  147. class DeptStatus(BaseModel):
  148. deptId: str
  149. status: str