from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, Float, Text, JSON from sqlalchemy.orm import relationship from database import Base class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) username = Column(String, unique=True, index=True) email = Column(String, nullable=True) full_name = Column(String, nullable=True) hashed_password = Column(String) disabled = Column(Boolean, default=False) class Talent(Base): __tablename__ = "talents" id = Column(String, primary_key=True, index=True) idcode = Column(String, nullable=True, index=True) name = Column(String, index=True) gender = Column(String, nullable=True) birthDate = Column(String, nullable=True) title = Column(String, nullable=True) position = Column(String, nullable=True) education = Column(String, nullable=True) educationBackground = Column(String, nullable=True) address = Column(String, nullable=True) academicDirection = Column(String, nullable=True) talentPlan = Column(String, nullable=True) officeLocation = Column(String, nullable=True) email = Column(String, nullable=True) phone = Column(String, nullable=True) tutorType = Column(String, nullable=True) papers = Column(String, nullable=True) projects = Column(String, nullable=True) photo = Column(Text, nullable=True) eduWorkHistory = Column(Text, nullable=True) researchDirection = Column(Text, nullable=True) recentProjects = Column(Text, nullable=True) representativePapers = Column(Text, nullable=True) patents = Column(Text, nullable=True) evaluationData = Column(JSON, nullable=True) class Lab(Base): __tablename__ = "labs" id = Column(String, primary_key=True, index=True) idcode = Column(String, nullable=True, index=True) # 基本信息 name = Column(String, index=True) # 中心名称 center_number = Column(String, nullable=True) # 中心编号 school = Column(String, nullable=True) # 所属学校 department = Column(String, nullable=True) # 主管部门 field = Column(String, nullable=True) # 所属领域 # 年度数据 - 存储为JSON格式,包含多年数据 annual_data = Column(JSON, nullable=True) # 当前年度的主要信息(用于快速查询和显示) current_year = Column(String, nullable=True) # 当前评估年份 # 技术攻关与创新情况 innovation_situation = Column(Text, nullable=True) # 总体情况 overall_situation = Column(Text, nullable=True) # 工程化案例 engineering_cases = Column(Text, nullable=True) # 行业服务情况 industry_service = Column(Text, nullable=True) # 学科发展支撑情况 discipline_support = Column(Text, nullable=True) # 人才培养情况 talent_cultivation = Column(Text, nullable=True) # 研究队伍建设情况 team_building = Column(Text, nullable=True) # 主管部门、依托单位支持情况 department_support = Column(Text, nullable=True) # 仪器设备开放共享情况 equipment_sharing = Column(Text, nullable=True) # 学风建设情况 academic_style = Column(Text, nullable=True) # 技术委员会工作情况 technical_committee = Column(Text, nullable=True) # 下一年度工作计划 next_year_plan = Column(Text, nullable=True) # 问题与建议 problems_suggestions = Column(Text, nullable=True) # 工程中心负责人意见 director_opinion = Column(Text, nullable=True) # 依托单位意见 institution_opinion = Column(Text, nullable=True) # 研究方向/学术带头人 research_directions = Column(Text, nullable=True) # 统计数据字段 national_awards_first = Column(Integer, default=0) # 国家级科技奖励一等奖 national_awards_second = Column(Integer, default=0) # 国家级科技奖励二等奖 provincial_awards_first = Column(Integer, default=0) # 省、部级科技奖励一等奖 provincial_awards_second = Column(Integer, default=0) # 省、部级科技奖励二等奖 valid_patents = Column(Integer, default=0) # 有效专利 other_ip = Column(Integer, default=0) # 其他知识产权 international_standards = Column(Integer, default=0) # 国际/国家标准 industry_standards = Column(Integer, default=0) # 行业/地方标准 # 专利转化相关 patent_transfer_contracts = Column(Integer, default=0) # 专利转让合同项数 patent_transfer_amount = Column(Float, default=0.0) # 专利转让合同金额 patent_license_contracts = Column(Integer, default=0) # 专利许可合同项数 patent_license_amount = Column(Float, default=0.0) # 专利许可合同金额 patent_valuation_contracts = Column(Integer, default=0) # 专利作价合同项数 patent_valuation_amount = Column(Float, default=0.0) # 专利作价金额 # 项目合作 project_contracts = Column(Integer, default=0) # 项目合同项数 project_amount = Column(Float, default=0.0) # 项目合同金额 # 学科信息 discipline_1 = Column(String, nullable=True) # 依托学科1 discipline_2 = Column(String, nullable=True) # 依托学科2 discipline_3 = Column(String, nullable=True) # 依托学科3 # 人才培养数据 doctoral_students = Column(Integer, default=0) # 在读博士生 master_students = Column(Integer, default=0) # 在读硕士生 graduated_doctoral = Column(Integer, default=0) # 当年毕业博士 graduated_master = Column(Integer, default=0) # 当年毕业硕士 undergraduate_courses = Column(Integer, default=0) # 承担本科课程 graduate_courses = Column(Integer, default=0) # 承担研究生课程 textbooks = Column(Integer, default=0) # 大专院校教材 # 人员结构 professors = Column(Integer, default=0) # 教授人数 associate_professors = Column(Integer, default=0) # 副教授人数 lecturers = Column(Integer, default=0) # 讲师人数 domestic_visitors = Column(Integer, default=0) # 国内访问学者 foreign_visitors = Column(Integer, default=0) # 国外访问学者 postdoc_in = Column(Integer, default=0) # 本年度进站博士后 postdoc_out = Column(Integer, default=0) # 本年度出站博士后 # 基础设施 center_area = Column(Float, default=0.0) # 工程中心面积 new_area = Column(Float, default=0.0) # 当年新增面积 fixed_personnel = Column(Integer, default=0) # 固定人员 mobile_personnel = Column(Integer, default=0) # 流动人员 # 经费情况 total_funding = Column(Float, default=0.0) # 当年项目到账总经费 vertical_funding = Column(Float, default=0.0) # 纵向经费 horizontal_funding = Column(Float, default=0.0) # 横向经费 # 服务情况 technical_consultations = Column(Integer, default=0) # 技术咨询次数 training_services = Column(Integer, default=0) # 培训服务人次 # 原有字段保留兼容性 personnel = Column(String, nullable=True) nationalProjects = Column(String, nullable=True) otherProjects = Column(String, nullable=True) achievements = Column(String, nullable=True) labAchievements = Column(Text, nullable=True) image = Column(Text, nullable=True) score = Column(Integer, nullable=True) evaluationData = Column(JSON, nullable=True) sub_dimension_evaluations = Column(JSON, nullable=True) class DashboardData(Base): __tablename__ = "dashboard" id = Column(Integer, primary_key=True) paperCount = Column(Integer) patentCount = Column(Integer) highImpactPapers = Column(Integer) keyProjects = Column(Integer) fundingAmount = Column(String) researcherStats = Column(JSON) class News(Base): __tablename__ = "news" id = Column(Integer, primary_key=True, index=True) title = Column(String) date = Column(String) dashboard_id = Column(Integer, ForeignKey("dashboard.id")) dashboard = relationship("DashboardData", back_populates="news_items") # 添加反向关系 DashboardData.news_items = relationship("News", back_populates="dashboard") class Dimension(Base): __tablename__ = "dimensions" id = Column(Integer, primary_key=True, index=True) name = Column(String, index=True) weight = Column(Float, default=1.0) category = Column(String, nullable=True) # talent 或 lab description = Column(Text, nullable=True) parent_id = Column(Integer, ForeignKey("dimensions.id"), nullable=True) # 自引用关系,用于树形结构 children = relationship("Dimension", back_populates="parent", cascade="all, delete-orphan") parent = relationship("Dimension", back_populates="children", remote_side=[id]) # 存储子维度的JSON数据 sub_dimensions = Column(JSON, nullable=True)