221 lines
8.8 KiB
Python
221 lines
8.8 KiB
Python
|
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)
|