From 59f81833a30475063c6dc686a14449893f138260 Mon Sep 17 00:00:00 2001 From: wolin_chenyulin001 <123@163.com> Date: Tue, 22 Sep 2026 10:41:26 +0800 Subject: [PATCH] api,dao --- PythonProject/api/employment_api.py | 17 +++------- PythonProject/dao/employment_dao.py | 26 +++++++++----- PythonProject/schema/employment_schema.py | 41 +++++++++-------------- 3 files changed, 39 insertions(+), 45 deletions(-) diff --git a/PythonProject/api/employment_api.py b/PythonProject/api/employment_api.py index 9db9cff..783ca98 100644 --- a/PythonProject/api/employment_api.py +++ b/PythonProject/api/employment_api.py @@ -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: diff --git a/PythonProject/dao/employment_dao.py b/PythonProject/dao/employment_dao.py index 5ce81a0..cd3fe5c 100644 --- a/PythonProject/dao/employment_dao.py +++ b/PythonProject/dao/employment_dao.py @@ -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() diff --git a/PythonProject/schema/employment_schema.py b/PythonProject/schema/employment_schema.py index 28a6078..9bc9a26 100644 --- a/PythonProject/schema/employment_schema.py +++ b/PythonProject/schema/employment_schema.py @@ -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 \ No newline at end of file + 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