Files
1/scheme/wl_statistics_scheme.py

82 lines
2.1 KiB
Python

#统计分析模块 入参/出参定义
from datetime import datetime
from enum import Enum
from typing import Optional, List
from pydantic import BaseModel, ConfigDict
from model.wl_score_model import Score
class AgeCompareOp(str, Enum):
"""年龄比较条件:大于/大于等于/小于/小于等于/等于/区间"""
gt = "gt"
ge = "ge"
lt = "lt"
le = "le"
eq = "eq"
between = "between"
class SortOrder(str, Enum):
"""排序方向:升序/降序"""
asc = "asc"
desc = "desc"
class ClassGenderStatOut(BaseModel):
"""班级多维度统计:总人数 + 男女分布"""
class_id: Optional[int] = None
total: int = 0
male_count: int = 0
female_count: int = 0
class ScoreShow(BaseModel):
exam_order:int=0
score:float=0
class ScoreOutLine(BaseModel):
stu_no:str=''
stu_name:str=''
scores:List[ScoreShow]=[]
class FailCountModel(BaseModel):
stu_name:str=''
class_id:int=0
scores:List[ScoreShow]=[]
class ClassAvgScoreOut(BaseModel):
"""每次考试每个班级的平均分"""
# DAO 返回的是 SQLAlchemy Row 对象,开 from_attributes 属性名读取
model_config = ConfigDict(from_attributes=True)
class_id:Optional[int]=None
exam_order:Optional[int]=None
avg_score:Optional[float]=None
class EmpTopOut(BaseModel):
"""就业薪资排名 Top N"""
model_config = ConfigDict(from_attributes=True)
stu_name:Optional[str]=None
class_id:Optional[int]=None
offer_time:Optional[datetime]=None
company_name:Optional[str]=None
salary:Optional[int]=None
class ClassAvgEmpTimeOut(BaseModel):
"""每个班级的平均就业时长"""
class_id: Optional[int] = None
# 单位:天,保留 1 位小数;为 None 表示该班无就业学生
avg_emp_time: Optional[float] = None
# 参与统计的人数,为 0 表示该班无就业学生
emp_stu_count: int = 0
class EmpTimeOut(BaseModel):
model_config = ConfigDict(from_attributes=True)
stu_name:str=''
emp_total_time:int|str=""# 单位为天,""表示没有开放简历或者没有拿到offer