dashboard/backend/models.py
2025-06-09 14:59:40 +08:00

221 lines
8.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)