95 lines
4.9 KiB
Python
95 lines
4.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
from datetime import date, datetime
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class EmploymentBase(BaseModel):
|
|
student_id: str = Field(..., max_length=20, description="学生ID")
|
|
class_id: Optional[str] = Field(None, max_length=64, description="班级ID")
|
|
education: Optional[str] = Field(None, max_length=20, description="学历:专科/本科/硕士/博士")
|
|
code: str = Field(..., max_length=12, description="就业城市编码")
|
|
job_title: str = Field(..., max_length=50, description="就业岗位名称")
|
|
company_name: str = Field(..., max_length=128, description="就业公司名称")
|
|
salary: Optional[float] = Field(None, description="就业月薪(元)")
|
|
offer_date: date = Field(..., description="offer下发/签约时间")
|
|
resume_open_date: Optional[date] = Field(None, description="简历开放时间")
|
|
employment_int: int = Field(..., description="就业状态:1=已就业,2=升学,3=灵活就业")
|
|
|
|
|
|
class EmploymentUpsert(EmploymentBase):
|
|
pass
|
|
|
|
|
|
class EmploymentUpdate(BaseModel):
|
|
class_id: Optional[str] = Field(None, max_length=64, description="班级ID")
|
|
education: Optional[str] = Field(None, max_length=20, description="学历")
|
|
code: Optional[str] = Field(None, max_length=12, description="就业城市编码")
|
|
job_title: Optional[str] = Field(None, max_length=50, description="就业岗位名称")
|
|
company_name: Optional[str] = Field(None, max_length=128, description="就业公司名称")
|
|
salary: Optional[float] = Field(None, description="就业月薪(元)")
|
|
offer_date: Optional[date] = Field(None, description="offer下发/签约时间")
|
|
resume_open_date: Optional[date] = Field(None, description="简历开放时间")
|
|
employment_int: Optional[int] = Field(None, description="就业状态:1=已就业,2=升学,3=灵活就业")
|
|
|
|
model_config = ConfigDict(
|
|
json_schema_extra={
|
|
"example": {
|
|
"class_id": "c01",
|
|
"education": "本科",
|
|
"code": "310115",
|
|
"job_title": "AI开发工程师",
|
|
"company_name": "上海拼多多",
|
|
"salary": 25000,
|
|
"offer_date": "2026-08-01",
|
|
"resume_open_date": "2026-05-15",
|
|
"employment_int": 1,
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
class EmploymentOut(BaseModel):
|
|
emp_id: str = Field(..., max_length=32, description="就业记录ID")
|
|
student_id: str = Field(..., max_length=20, description="学生ID")
|
|
class_id: Optional[str] = Field(None, max_length=64, description="班级ID")
|
|
education: Optional[str] = Field(None, max_length=20, description="学历")
|
|
code: str = Field(..., max_length=12, description="就业城市编码")
|
|
job_title: str = Field(..., max_length=50, description="就业岗位名称")
|
|
company_name: str = Field(..., max_length=128, description="就业公司名称")
|
|
salary: Optional[float] = Field(None, description="就业月薪(元)")
|
|
offer_date: date = Field(..., description="offer下发/签约时间")
|
|
resume_open_date: Optional[date] = Field(None, description="简历开放时间")
|
|
employment_int: int = Field(..., description="就业状态")
|
|
is_deleted: int = Field(..., description="是否删除 0否1是")
|
|
create_time: datetime = Field(..., description="创建时间")
|
|
update_time: datetime = Field(..., description="更新时间")
|
|
|
|
|
|
# ==================== 新增功能点 ====================
|
|
|
|
class ClassEmploymentStats(BaseModel):
|
|
class_id: str = Field(..., description="班级ID")
|
|
total_count: int = Field(..., description="班级总就业记录数")
|
|
employed_count: int = Field(..., description="已就业")
|
|
graduate_count: int = Field(..., description="升学")
|
|
flexible_count: int = Field(..., description="灵活就业")
|
|
employment_rate: float = Field(..., description="就业率(%)")
|
|
avg_salary: Optional[float] = Field(None, description="平均薪资")
|
|
max_salary: Optional[float] = Field(None, description="最高薪资")
|
|
min_salary: Optional[float] = Field(None, description="最低薪资")
|
|
job_title_distribution: dict = Field(..., description="各岗位人数分布")
|
|
|
|
|
|
class SalaryMarketComparison(BaseModel):
|
|
code: str = Field(..., description="城市编码")
|
|
job_title: str = Field(..., description="岗位名称")
|
|
sample_count: int = Field(..., description="行情样本数")
|
|
avg_salary: Optional[float] = Field(None, description="行情平均薪资")
|
|
max_salary: Optional[float] = Field(None, description="行情最高薪资")
|
|
min_salary: Optional[float] = Field(None, description="行情最低薪资")
|
|
current_student_id: str = Field(..., description="学生ID")
|
|
current_salary: Optional[float] = Field(None, description="当前学生薪资")
|
|
deviation_percent: Optional[float] = Field(None, description="偏差百分比")
|
|
advice: str = Field(..., description="薪资建议") |