🎉初次提交
This commit is contained in:
296
provider/aufe/jwc/model.py
Normal file
296
provider/aufe/jwc/model.py
Normal file
@@ -0,0 +1,296 @@
|
||||
from typing import Dict, List, Optional, Any
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class AcademicDataItem(BaseModel):
|
||||
"""学术信息数据项,用于直接反序列化JSON数组中的元素"""
|
||||
|
||||
completed_courses: int = Field(0, alias="courseNum")
|
||||
failed_courses: int = Field(0, alias="coursePas")
|
||||
gpa: float = Field(0, alias="gpa")
|
||||
current_term: str = Field("", alias="zxjxjhh")
|
||||
pending_courses: int = Field(0, alias="courseNum_bxqyxd")
|
||||
|
||||
|
||||
class AcademicInfo(BaseModel):
|
||||
"""学术信息数据模型 - 兼容旧版API"""
|
||||
|
||||
completed_courses: int = Field(0, alias="count")
|
||||
failed_courses: int = Field(0, alias="countNotPass")
|
||||
gpa: float = Field(0, alias="gpa")
|
||||
|
||||
|
||||
# ==================== 学期和成绩相关模型 ====================
|
||||
|
||||
|
||||
class TermInfo(BaseModel):
|
||||
"""学期信息模型"""
|
||||
|
||||
term_id: str = Field("", description="学期ID,如:2024-2025-2-1")
|
||||
term_name: str = Field("", description="学期名称,如:2024-2025春季学期")
|
||||
|
||||
|
||||
class ScoreRecord(BaseModel):
|
||||
"""成绩记录模型"""
|
||||
|
||||
sequence: int = Field(0, description="序号")
|
||||
term_id: str = Field("", description="学期ID")
|
||||
course_code: str = Field("", description="课程代码")
|
||||
course_class: str = Field("", description="课程班级")
|
||||
course_name_cn: str = Field("", description="课程名称(中文)")
|
||||
course_name_en: str = Field("", description="课程名称(英文)")
|
||||
credits: str = Field("", description="学分")
|
||||
hours: int = Field(0, description="学时")
|
||||
course_type: str = Field("", description="课程性质")
|
||||
exam_type: str = Field("", description="考试性质")
|
||||
score: str = Field("", description="成绩")
|
||||
retake_score: Optional[str] = Field(None, description="重修成绩")
|
||||
makeup_score: Optional[str] = Field(None, description="补考成绩")
|
||||
|
||||
|
||||
class TermScoreResponse(BaseModel):
|
||||
"""学期成绩响应模型"""
|
||||
|
||||
page_size: int = Field(50, description="每页大小")
|
||||
page_num: int = Field(1, description="页码")
|
||||
total_count: int = Field(0, description="总记录数")
|
||||
records: List[ScoreRecord] = Field(default_factory=list, description="成绩记录列表")
|
||||
|
||||
|
||||
# ==================== 原有模型继续 ====================
|
||||
|
||||
|
||||
class TrainingPlanDataItem(BaseModel):
|
||||
"""培养方案数据项"""
|
||||
|
||||
plan_name: str = "" # 第一项为培养方案名称
|
||||
plan_id: str = "" # 第二项为培养方案ID
|
||||
|
||||
|
||||
class TrainingPlanResponseWrapper(BaseModel):
|
||||
"""培养方案响应模型"""
|
||||
|
||||
count: int = 0
|
||||
data: List[List[str]] = []
|
||||
|
||||
|
||||
class TrainingPlanInfo(BaseModel):
|
||||
"""培养方案信息模型 - 兼容旧版API"""
|
||||
|
||||
plan_name: str = Field("", alias="pyfa")
|
||||
current_term: str = Field("", alias="term")
|
||||
pending_courses: int = Field(0, alias="courseCount")
|
||||
major_name: str = Field("", alias="major")
|
||||
grade: str = Field("", alias="grade")
|
||||
|
||||
|
||||
class CourseSelectionStatusDirectResponse(BaseModel):
|
||||
"""选课状态响应模型新格式"""
|
||||
|
||||
term_name: str = Field("", alias="zxjxjhm")
|
||||
status_code: str = Field("", alias="retString")
|
||||
|
||||
|
||||
class CourseSelectionStatus(BaseModel):
|
||||
"""选课状态信息"""
|
||||
|
||||
can_select: bool = Field(False, alias="isCanSelect")
|
||||
start_time: str = Field("", alias="startTime")
|
||||
end_time: str = Field("", alias="endTime")
|
||||
|
||||
|
||||
class CourseId(BaseModel):
|
||||
"""课程ID信息"""
|
||||
|
||||
evaluated_people: str = Field("", alias="evaluatedPeople")
|
||||
coure_sequence_number: str = Field("", alias="coureSequenceNumber")
|
||||
evaluation_content_number: str = Field("", alias="evaluationContentNumber")
|
||||
|
||||
|
||||
class Questionnaire(BaseModel):
|
||||
"""问卷信息"""
|
||||
|
||||
questionnaire_number: str = Field("", alias="questionnaireNumber")
|
||||
questionnaire_name: str = Field("", alias="questionnaireName")
|
||||
|
||||
|
||||
class Course(BaseModel):
|
||||
"""课程基本信息"""
|
||||
|
||||
id: Optional[CourseId] = None
|
||||
questionnaire: Optional[Questionnaire] = Field(None, alias="questionnaire")
|
||||
evaluated_people: str = Field("", alias="evaluatedPeople")
|
||||
is_evaluated: str = Field("", alias="isEvaluated")
|
||||
evaluation_content: str = Field("", alias="evaluationContent")
|
||||
|
||||
|
||||
class CourseListResponse(BaseModel):
|
||||
"""课程列表响应"""
|
||||
|
||||
not_finished_num: int = Field(0, alias="notFinishedNum")
|
||||
evaluation_num: int = Field(0, alias="evaluationNum")
|
||||
data: List[Course] = Field(default_factory=list, alias="data")
|
||||
msg: str = Field("", alias="msg")
|
||||
result: str = "success" # 设置默认值
|
||||
|
||||
|
||||
class EvaluationResponse(BaseModel):
|
||||
"""评价提交响应"""
|
||||
|
||||
result: str = ""
|
||||
msg: str = ""
|
||||
data: Any = None
|
||||
|
||||
|
||||
class EvaluationRequestParam(BaseModel):
|
||||
"""评价请求参数"""
|
||||
|
||||
opt_type: str = "submit"
|
||||
token_value: str = ""
|
||||
questionnaire_code: str = ""
|
||||
evaluation_content: str = ""
|
||||
evaluated_people_number: str = ""
|
||||
count: str = ""
|
||||
zgpj: str = ""
|
||||
rating_items: Dict[str, str] = {}
|
||||
|
||||
def to_form_data(self) -> Dict[str, str]:
|
||||
"""将对象转换为表单数据映射"""
|
||||
form_data = {
|
||||
"optType": self.opt_type,
|
||||
"tokenValue": self.token_value,
|
||||
"questionnaireCode": self.questionnaire_code,
|
||||
"evaluationContent": self.evaluation_content,
|
||||
"evaluatedPeopleNumber": self.evaluated_people_number,
|
||||
"count": self.count,
|
||||
"zgpj": self.zgpj,
|
||||
}
|
||||
# 添加评分项
|
||||
form_data.update(self.rating_items)
|
||||
return form_data
|
||||
|
||||
|
||||
class ExamScheduleItem(BaseModel):
|
||||
"""考试安排项目 - 校统考格式"""
|
||||
|
||||
title: str = "" # 考试标题,包含课程名、时间、地点等信息
|
||||
start: str = "" # 考试日期 (YYYY-MM-DD)
|
||||
color: str = "" # 显示颜色
|
||||
|
||||
|
||||
class OtherExamRecord(BaseModel):
|
||||
"""其他考试记录"""
|
||||
|
||||
term_code: str = Field("", alias="ZXJXJHH") # 学期代码
|
||||
term_name: str = Field("", alias="ZXJXJHM") # 学期名称
|
||||
exam_name: str = Field("", alias="KSMC") # 考试名称
|
||||
course_code: str = Field("", alias="KCH") # 课程代码
|
||||
course_name: str = Field("", alias="KCM") # 课程名称
|
||||
class_number: str = Field("", alias="KXH") # 课序号
|
||||
student_id: str = Field("", alias="XH") # 学号
|
||||
student_name: str = Field("", alias="XM") # 姓名
|
||||
exam_location: str = Field("", alias="KSDD") # 考试地点
|
||||
exam_date: str = Field("", alias="KSRQ") # 考试日期
|
||||
exam_time: str = Field("", alias="KSSJ") # 考试时间
|
||||
note: str = Field("", alias="BZ") # 备注
|
||||
row_number: str = Field("", alias="RN") # 行号
|
||||
|
||||
|
||||
class OtherExamResponse(BaseModel):
|
||||
"""其他考试查询响应"""
|
||||
|
||||
page_size: int = Field(0, alias="pageSize")
|
||||
page_num: int = Field(0, alias="pageNum")
|
||||
page_context: Dict[str, int] = Field(default_factory=dict, alias="pageContext")
|
||||
records: List[OtherExamRecord] = Field(default_factory=list, alias="records")
|
||||
|
||||
|
||||
class UnifiedExamInfo(BaseModel):
|
||||
"""统一考试信息模型 - 对外提供的统一格式"""
|
||||
|
||||
course_name: str = "" # 课程名称
|
||||
exam_date: str = "" # 考试日期 (YYYY-MM-DD)
|
||||
exam_time: str = "" # 考试时间
|
||||
exam_location: str = "" # 考试地点
|
||||
exam_type: str = "" # 考试类型 (校统考/其他考试)
|
||||
note: str = "" # 备注信息
|
||||
|
||||
|
||||
class ExamInfoResponse(BaseModel):
|
||||
"""考试信息统一响应模型"""
|
||||
|
||||
exams: List[UnifiedExamInfo] = Field(default_factory=list)
|
||||
total_count: int = 0
|
||||
|
||||
|
||||
# ==================== 错误响应模型 ====================
|
||||
|
||||
|
||||
class ErrorAcademicInfo(AcademicInfo):
|
||||
"""错误的学术信息数据模型"""
|
||||
|
||||
completed_courses: int = Field(-1, alias="count")
|
||||
failed_courses: int = Field(-1, alias="countNotPass")
|
||||
gpa: float = Field(-1.0, alias="gpa")
|
||||
|
||||
|
||||
class ErrorTrainingPlanInfo(TrainingPlanInfo):
|
||||
"""错误的培养方案信息模型"""
|
||||
|
||||
plan_name: str = Field("请求失败,请稍后重试", alias="pyfa")
|
||||
current_term: str = Field("", alias="term")
|
||||
pending_courses: int = Field(-1, alias="courseCount")
|
||||
major_name: str = Field("请求失败", alias="major")
|
||||
grade: str = Field("", alias="grade")
|
||||
|
||||
|
||||
class ErrorCourseSelectionStatus(CourseSelectionStatus):
|
||||
"""错误的选课状态信息"""
|
||||
|
||||
can_select: bool = Field(False, alias="isCanSelect")
|
||||
start_time: str = Field("请求失败", alias="startTime")
|
||||
end_time: str = Field("请求失败", alias="endTime")
|
||||
|
||||
|
||||
class ErrorCourse(Course):
|
||||
"""错误的课程基本信息"""
|
||||
|
||||
id: Optional[CourseId] = None
|
||||
questionnaire: Optional[Questionnaire] = None
|
||||
evaluated_people: str = Field("请求失败", alias="evaluatedPeople")
|
||||
is_evaluated: str = Field("否", alias="isEvaluated")
|
||||
evaluation_content: str = Field("请求失败,请稍后重试", alias="evaluationContent")
|
||||
|
||||
|
||||
class ErrorCourseListResponse(CourseListResponse):
|
||||
"""错误的课程列表响应"""
|
||||
|
||||
not_finished_num: int = Field(-1, alias="notFinishedNum")
|
||||
evaluation_num: int = Field(-1, alias="evaluationNum")
|
||||
data: List[Course] = Field(default_factory=list, alias="data")
|
||||
msg: str = Field("网络请求失败,已进行多次重试", alias="msg")
|
||||
result: str = "failed"
|
||||
|
||||
|
||||
class ErrorEvaluationResponse(EvaluationResponse):
|
||||
"""错误的评价提交响应"""
|
||||
|
||||
result: str = "failed"
|
||||
msg: str = "网络请求失败,已进行多次重试"
|
||||
data: Any = None
|
||||
|
||||
|
||||
class ErrorExamInfoResponse(ExamInfoResponse):
|
||||
"""错误的考试信息响应模型"""
|
||||
|
||||
exams: List[UnifiedExamInfo] = Field(default_factory=list)
|
||||
total_count: int = -1
|
||||
|
||||
|
||||
class ErrorTermScoreResponse(BaseModel):
|
||||
"""错误的学期成绩响应模型"""
|
||||
|
||||
page_size: int = Field(-1, description="每页大小")
|
||||
page_num: int = Field(-1, description="页码")
|
||||
total_count: int = Field(-1, description="总记录数")
|
||||
records: List[ScoreRecord] = Field(default_factory=list, description="成绩记录列表")
|
||||
Reference in New Issue
Block a user