from sqlalchemy.dialects.mysql import LONGTEXT from sqlalchemy.orm import relationship from sqlalchemy import Column, String, ForeignKey from Utils.DataBase.MongoHelperUtils import get_mongodb from Utils.DataBase.SqlAlchemyUtils import Base, engine class ScoreCard(Base): __tablename__ = "scorecard" id = Column(String(16), primary_key=True) name = Column(String(16), unique=True, index=True) description = Column(LONGTEXT) subcategory_id = Column(String(16), ForeignKey("scorecard_subcategory.id")) subcategory = relationship("ScoreCardSubCategory", backref="scorecard", uselist=False) data_table = relationship("ScoreCardDataTable", backref="scorecard", uselist=False) index_table = relationship("ScoreCardIndexTable", backref="scorecard", uselist=False) rank_table = relationship("ScoreCardRankTable", backref="scorecard", uselist=False) process_table = relationship("ScoreCardProcessTable", backref="scorecard", uselist=False) scorecard_dp_ac_auth = relationship("ScoreCardDpAcAuth", back_populates="scorecard") def dict(self): __dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} __dict.update({"subcategory": self.subcategory.__str__()}) __dict.update({"data_table": None if not self.data_table else self.data_table.dict()}) __dict.update({"index_table": None if not self.index_table else self.index_table.dict()}) __dict.update({"rank_table": None if not self.rank_table else self.rank_table.dict()}) return __dict class ScoreCardDataTable(Base): __tablename__ = "scorecard_data_table" id = Column(String(16), primary_key=True) obj_id = Column(String(24)) scorecard_id = Column(String(16), ForeignKey("scorecard.id")) def dict(self): mongodb = get_mongodb() item = mongodb.find_data_by_id(dbname="打分卡配置", sheet="数据表", _id=self.obj_id) return item.get("data") class ScoreCardIndexTable(Base): __tablename__ = "scorecard_index_table" id = Column(String(16), primary_key=True) obj_id = Column(String(24)) scorecard_id = Column(String(16), ForeignKey("scorecard.id")) def dict(self): mongodb = get_mongodb() item = mongodb.find_data_by_id(dbname="打分卡配置", sheet="指标表", _id=self.obj_id) return item.get("data") class ScoreCardRankTable(Base): __tablename__ = "scorecard_rank_table" id = Column(String(16), primary_key=True) obj_id = Column(String(24)) scorecard_id = Column(String(16), ForeignKey("scorecard.id")) def dict(self): mongodb = get_mongodb() item = mongodb.find_data_by_id(dbname="打分卡配置", sheet="评级表", _id=self.obj_id) return item.get("data") class ScoreCardProcessTable(Base): __tablename__ = "scorecard_process_table" id = Column(String(16), primary_key=True) obj_id = Column(String(24)) scorecard_id = Column(String(16), ForeignKey("scorecard.id")) class ScoreCardDpAcAuth(Base): __tablename__ = "scorecard_dp_ac_auth" id = Column(String(16), primary_key=True) department_id = Column(String(16)) scorecard_id = Column(String(16), ForeignKey("scorecard.id")) scorecard = relationship("ScoreCard", back_populates="scorecard_dp_ac_auth") class ScoreCardSubCategory(Base): __tablename__ = "scorecard_subcategory" id = Column(String(16), primary_key=True) name = Column(String(32), unique=True, index=True) major_category_id = Column(String(16), ForeignKey("scorecard_major_category.id")) def __str__(self): return self.name def dict(self): __dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} __dict.pop("major_category_id") return __dict class ScoreCardMajorCategory(Base): __tablename__ = "scorecard_major_category" id = Column(String(16), primary_key=True) name = Column(String(32), unique=True, index=True) subcategories = relationship("ScoreCardSubCategory", backref="scorecard_major_category") def dict(self): __dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} __dict.update({"subcategories": [subcategory.dict() for subcategory in list(self.subcategories)]}) return __dict Base.metadata.create_all(bind=engine)