from datetime import datetime from sqlalchemy import Column, Integer, String, Table, ForeignKey, DateTime from sqlalchemy.orm import relationship, backref from app.models.base_model import Base organization_group_table = Table('organization_group', Base.metadata, Column('group_id', Integer, ForeignKey('group.id')), Column('organization_id', String(36), ForeignKey('organization.id'))) # #构建对role表的关系 organization_role_table = Table('organization_role', Base.metadata, Column('role_id', String(36), ForeignKey('role.id')), Column('organization_id', String(36), ForeignKey('organization.id'))) class OrganizationModel(Base): __tablename__ = 'organization' id = Column(String(36), primary_key=True) created_at = Column(DateTime, default=datetime.now()) updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now()) name = Column(String(200)) address = Column(String(200)) code = Column(String(200)) iconcls = Column(String(255)) seq = Column(Integer) leader = Column(String(255)) phone = Column(String(11)) email = Column(String(64)) status = Column(String(10), nullable=False, default="0") groups = relationship('GroupModel', secondary=organization_group_table, backref=backref('organizations', lazy='dynamic')) roles = relationship('RoleModel', secondary=organization_role_table, backref=backref('organizations', lazy='dynamic')) organization_id = Column(String(36), ForeignKey('organization.id')) parent = relationship('OrganizationModel', remote_side=[id], backref='childrens', uselist=False) children = relationship('OrganizationModel') def to_json(self): json = { 'deptId': self.id, 'createTime': self.created_at, 'updateTime': self.updated_at, 'deptName': self.name, 'address': self.address, 'code': self.code, 'iconCls': self.iconcls, 'orderNum': self.seq, 'parentId': self.get_pid(), 'parentName': self.get_pName(), 'leader': self.leader, 'phone': self.phone, 'email': self.email, 'status': self.status, 'roles': [self.role_json(role) for role in self.roles], 'groups': [self.group_json(group) for group in self.groups], 'children': [ org.to_json() for org in self.children ] } return json def role_json(self, role): return { 'roleId': role.id, 'roleName': role.name, 'deptId': self.id, } def group_json(self, group): return { 'groupId': group.id, 'groupName': group.name, 'deptId': self.id, } def to_tree_select_json(self): return { 'id': self.ID, 'label': self.NAME, 'children': [org.to_tree_select_json() for org in self.children] } def get_pid(self): if self.parent: return self.parent.ID return '' def get_pName(self): if self.parent: return self.parent.NAME return '' def get_id(self): return str(self.ID) def __repr__(self): return '\n' %(self.NAME)