This commit is contained in:
2026-09-22 10:41:26 +08:00
parent 9e13a01c76
commit 59f81833a3
3 changed files with 39 additions and 45 deletions
+5 -12
View File
@@ -1,8 +1,6 @@
from fastapi import APIRouter, Query, Depends, HTTPException, Path
from util.database import get_db
from fastapi import APIRouter, Query, Depends, HTTPException, Path,Form
from dao import employment_dao
from dao.employment_dao import get_emp_dao, add_emp_dao, check_stu_dao, update_emp_dao, delete_emp_dao
from dao.employment_dao import add_emp_dao, update_emp_dao, delete_emp_dao
from schema.employment_schema import EmploymentRequest,EmploymentResponse
from util.database import get_db
from typing import Optional
@@ -18,19 +16,14 @@ def get_emp_info1(stu_id: Optional[int]=Path(description='学生编号')
raise HTTPException(status_code=404, detail='该学生就业信息不存在')
@emp_api.get('/employment/class/{class_id}',response_model=EmploymentResponse,summary='获取班级学生就业信息')
def get_emp_info2(class_id: Optional[int],db=Depends(get_db)):
def get_emp_info2(class_id: Optional[int]=Path(description='班级编号')
,db=Depends(get_db)):
if class_id:
return employment_dao.get_emp_dao(class_id=class_id,db=db)
raise HTTPException(status_code=404, detail='该班级就业信息不存在')
@emp_api.post('/employment/students/{stu_id}',response_model=EmploymentResponse,summary='新增学生就业信息')
def create_emp_info(stu_id:int,emp:EmploymentRequest,db=Depends(get_db)):
if not check_stu_dao(stu_id,db):
raise HTTPException(status_code=404, detail='该学生不存在,无法添加就业信息')
emp.stu_id = stu_id
exist = db.query(employment_dao.Employment_info).filter(employment_dao.Employment_info.stu_id == stu_id,employment_dao.Employment_info.delete_status == 0).first()
if exist:
raise HTTPException(status_code=409,detail='该学生已有就业信息,请勿重复增加!')
def create_emp_info(emp:EmploymentRequest=Form(),db=Depends(get_db)):
d=emp.model_dump(exclude_unset=False)
r=add_emp_dao(d,db)
if not r:
+18 -8
View File
@@ -1,7 +1,8 @@
from fastapi import HTTPException
from fastapi import HTTPException, APIRouter
from model.all_model import Employment_info, ClassManagement, Student_Model
from datetime import datetime
emp_api = APIRouter()
def get_emp_dao(stu_id=None,class_id=None,company_name=None,min_salary=None,max_salary=None,db=None):
try:
q = db.query(Employment_info).\
@@ -41,18 +42,25 @@ def get_emp_dao(stu_id=None,class_id=None,company_name=None,min_salary=None,max_
def add_emp_dao(o,db):
try:
stu = db.query(Student_Model).filter(Student_Model.stu_id == o['stu_id'], Student_Model.delete_status == 0).first()
if not stu:
raise HTTPException(status_code=404, detail='该学生不存在,无法添加就业信息')
exist = db.query(Employment_info).filter(Employment_info.stu_id == o['stu_id'],
Employment_info.delete_status == 0).first()
if exist:
raise HTTPException(status_code=409, detail='该学生已有就业信息,请勿重复增加!')
e1 = Employment_info(**o)
db.add(e1)
db.commit()
return e1
return o
except HTTPException:
raise
except Exception as e:
db.rollback()
raise HTTPException(status_code=500, detail=f'新增就业信息失败: {e}')
def check_stu_dao(stu_id,db):
stu = db.query(Student_Model).filter(Student_Model.stu_id == stu_id,Student_Model.delete_status == 0).first()
return stu
def update_emp_dao(stu_id,o,db):
try:
rows = db.query(Employment_info).filter(Employment_info.stu_id == stu_id,Employment_info.delete_status == 0).first()
@@ -65,7 +73,9 @@ def update_emp_dao(stu_id,o,db):
def delete_emp_dao(stu_id,db):
try:
rows = db.query(Employment_info).filter(Employment_info.stu_id == stu_id,Employment_info.delete_status == 0).delete()
rows = db.query(Employment_info)\
.filter(Employment_info.stu_id == stu_id,Employment_info.delete_status == 0)\
.update({'delete_status':1,'delete_time': datetime.now()})
db.commit()
except:
db.rollback()
+16 -25
View File
@@ -5,36 +5,27 @@ from typing import Optional
class EmploymentRequest(BaseModel):
stu_id: int=Field(ge=1)
email: str|None
employment_opening_date:date
offer_issuance_date:date
company_name:str
company_address:str|None
salary:float
@field_validator('stu_id')
@classmethod
def check_stu_id(cls,v):
if v <= 0:
raise ValueError('输入有误,学生ID必须大于0')
return v
email: str|None = None
employment_opening_date:date|None = None
offer_issuance_date:date|None = None
company_name:str|None = None
company_address:str|None = None
salary:float|None = None
@model_validator(mode='after')
def check_date(self):
if self.employment_opening_date > self.offer_issuance_date:
raise ValueError('offer下发日期不能早于就业开放日期')
if self.employment_opening_date and self.offer_issuance_date:
if self.employment_opening_date > self.offer_issuance_date:
raise ValueError('offer下发日期不能早于就业开放日期')
return self
class EmploymentResponse(BaseModel):
code:int = 200
detail:str = 'OK'
emp_id:int
stu_id: int
stu_name:Optional[str] = None
class_id:int
email: str | None
employment_opening_date: date
offer_issuance_date: date
company_name: str
company_address: str | None
salary: float
stu_id:int
email: str|None = None
employment_opening_date:date|None = None
offer_issuance_date:date|None = None
company_name:str|None = None
company_address:str|None = None
salary:float|None = None