114 lines
4.6 KiB
Python
114 lines
4.6 KiB
Python
from fastapi import APIRouter,Depends, HTTPException,Query
|
|
from sqlalchemy.orm import Session
|
|
from database import get_db
|
|
from dao.employments import get_student_id,get_class_id,add_update_employment,get_student_multi_condition
|
|
from dao.student import get_student_by_id
|
|
from schemas.employments import Emp_Class,Emp_add_update,Emp_multi_Conditions
|
|
from typing import List,Optional
|
|
from dao.employments import delete_employment
|
|
router = APIRouter(
|
|
prefix="/employment", tags=["学生就业管理"] # 该路由下所有路径的前缀
|
|
)
|
|
|
|
# 1. GET /employment/students/{student_id} 获取单个学生就业信息
|
|
@router.get("/students/{student_id}", response_model=Emp_Class, summary="获取单个学生就业信息")
|
|
def get_student_employment(student_id: str, db: Session = Depends(get_db)):
|
|
stu = get_student_by_id(db, student_id)
|
|
if not stu:
|
|
raise HTTPException(status_code=404, detail="学生不存在")
|
|
isbool = get_student_id(db, student_id)
|
|
if not isbool:
|
|
raise HTTPException(status_code=404, detail="学生不存在")
|
|
return Emp_Class(
|
|
id=stu.id,
|
|
name=stu.name,
|
|
class_name=stu.class_name,
|
|
offer_open=isbool.offer_open if isbool else None,
|
|
offer_review=isbool.offer_review if isbool else None,
|
|
emp=isbool.emp if isbool else None,
|
|
sal=isbool.sal if isbool else None,
|
|
is_deleted=isbool.is_deleted
|
|
)
|
|
|
|
|
|
# 2. GET /employment/class/{class_id} 获取班级全部学生就业信息
|
|
@router.get("/class/{class_id}", response_model=List[Emp_Class], summary="获取班级下所有学生就业信息")
|
|
def get_class_employment(class_id: str, db: Session = Depends(get_db)):
|
|
rows =get_class_id(db, class_id)
|
|
result_list = []
|
|
for stu, isbool in rows:
|
|
if not stu:
|
|
raise HTTPException(status_code=404, detail="学生不存在")
|
|
if not isbool:
|
|
raise HTTPException(status_code=404, detail="学生不存在")
|
|
result_list.append(Emp_Class(
|
|
id=stu.id,
|
|
name=stu.name,
|
|
class_name=stu.class_name,
|
|
offer_open=isbool.offer_open if isbool else None,
|
|
offer_review=isbool.offer_review if isbool else None,
|
|
emp=isbool.emp if isbool else None,
|
|
sal=isbool.sal if isbool else None,
|
|
is_deleted=isbool.is_deleted
|
|
))
|
|
return result_list
|
|
|
|
# 3. POST /employment/students/{student_id} 添加/更新就业信息
|
|
@router.post("/students/{student_id}", response_model=Emp_Class, summary="新增或更新学生就业信息")
|
|
def upsert_student_employment(
|
|
student_id: str,
|
|
emp_data: Emp_add_update,
|
|
db: Session = Depends(get_db)
|
|
):
|
|
stu = get_student_by_id(db, student_id)
|
|
if not stu:
|
|
raise HTTPException(status_code=404, detail="学生不存在,请先创建学生基础信息")
|
|
emp = add_update_employment(db, student_id, emp_data, stu)
|
|
|
|
return Emp_Class(
|
|
id=stu.id,
|
|
name=stu.name,
|
|
class_name=stu.class_name,
|
|
offer_open=emp.offer_open,
|
|
offer_review=emp.offer_review,
|
|
emp=emp.emp,
|
|
sal=emp.sal,
|
|
is_deleted=emp.is_deleted
|
|
)
|
|
#多条件查询
|
|
@router.get("/query", response_model=List[Emp_Class], summary="多条件查询就业信息")
|
|
def multi_query_employment(
|
|
mid: Optional[str] = Query(default=None, title="学生id", description="主键"),#title是前端可以看到的输入框内容
|
|
name: Optional[str] = Query(default=None, title="学生姓名"),
|
|
min_sal: Optional[float] = Query(default=None, ge=0, title="最低薪资"),
|
|
max_sal: Optional[float] = Query(default=None, ge=0, title="最高薪资"),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
rows = get_student_multi_condition(db, mid, name, min_sal, max_sal)
|
|
result_list = []
|
|
|
|
for stu, isbool in rows:
|
|
result_list.append(Emp_Class(
|
|
id=stu.id,
|
|
name=stu.name,
|
|
class_name=stu.class_name,
|
|
offer_open=isbool.offer_open if isbool else None,
|
|
offer_review=isbool.offer_review if isbool else None,
|
|
emp=isbool.emp if isbool else None,
|
|
sal=isbool.sal if isbool else None,
|
|
is_deleted=isbool.is_deleted if isbool else False # ← 修复了 NoneType 报错
|
|
))
|
|
|
|
return result_list
|
|
|
|
|
|
@router.post('/deleted',summary="逻辑删除学生就业信息")
|
|
def delete_emp( student_id:str,db: Session = Depends(get_db)):
|
|
delete_employment(db,student_id)
|
|
if delete_employment(db,student_id):
|
|
return f"学生id:{student_id}删除成功"
|
|
else:
|
|
raise HTTPException(status_code=404, detail="学生不存在,请先创建学生基础信息")
|
|
|
|
|