| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- from datetime import datetime
- from typing import Optional
- from pydantic import BaseModel
- 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', ondelete='CASCADE')),
- Column('organization_id', String(36), ForeignKey('organization.id', ondelete='CASCADE')))
- 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(32))
- 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 '<Organization %r>\n' %(self.name)
- class DeptList(BaseModel):
- deptName: Optional[str] = ""
- class DeptInfo(BaseModel):
- deptId: Optional[str] = ""
- deptName: Optional[str] = ""
- leader: Optional[str] = ""
- phone: Optional[str] = ""
- orderNum: int
- address: Optional[str] = ""
- parentId: Optional[str] = ""
- status: str
- roles: list
- groups: Optional[list] = []
- class DeptParent(BaseModel):
- deptId: str
- parentId: str
- orderNum: int
|