organization_model.py 3.5 KB

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