organization_model.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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 get_pid(self):
  79. if self.parent:
  80. return self.parent.id
  81. return ''
  82. def get_pName(self):
  83. if self.parent:
  84. return self.parent.name
  85. return ''
  86. def get_id(self):
  87. return str(self.id)
  88. def __repr__(self):
  89. return '<Organization %r>\n' %(self.name)
  90. class DeptList(BaseModel):
  91. deptName: Optional[str] = ""
  92. class DeptInfo(BaseModel):
  93. deptId: Optional[str] = ""
  94. deptName: Optional[str] = ""
  95. leader: Optional[str] = ""
  96. phone: Optional[str] = ""
  97. orderNum: int
  98. address: Optional[str] = ""
  99. parentId: Optional[str] = ""
  100. status: str
  101. roles: list
  102. groups: Optional[list] = []
  103. class DeptParent(BaseModel):
  104. deptId: str
  105. parentId: str
  106. orderNum: int