Merge remote-tracking branch 'origin/conding' into conding

This commit is contained in:
test1
2026-09-22 10:54:43 +08:00
9 changed files with 61 additions and 63 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:
+2 -2
View File
@@ -15,7 +15,7 @@ def get_grade(stu_id: int,db=Depends(get_db)):
raise HTTPException(status_code=500,detail=f'数据库查询异常:{str(e)}')
@gradeAPI.post('/grade',response_model=GradeResponse,summary='添加学生成绩')
def post_grade(o:GradeRequest=Form(),db=Depends(get_db)):
def post_grade(o:GradeRequest,db=Depends(get_db)):
d=o.model_dump()
r=add_grade_dao(g=d,db=db)
if not r:
@@ -25,7 +25,7 @@ def post_grade(o:GradeRequest=Form(),db=Depends(get_db)):
@gradeAPI.put('/{score_id}',summary='成绩修改')
def put_grade(
score_id: int
,o:GradeUpdate=Form()
,o:GradeUpdate
,db=Depends(get_db)
):
old_obj = get_score_by_id_dao(score_id=score_id, db=db)
+2 -2
View File
@@ -44,7 +44,7 @@ def del_students(stu_id:int
,db=Depends(get_db)):
rows=delete_student_dao( stu_id=stu_id,db=db )
if not rows:
raise HTTPException(status_code=500,detail='没有删除')
raise HTTPException(status_code=404,detail='对象已被删除')
return {'code':200,'totals':rows,'detail':'删除成功'}
@StudentAPI.post('/students',tags=['学⽣基本信息管理模块'],response_model=StugetResponse,summary='学生信息新增接口',description='新增学生信息')
@@ -53,5 +53,5 @@ def add_students(s:StudentRequest
d=s.model_dump(exclude_unset=True)
stu_new=add_student_dao(o=d,db=db)
if not stu_new:
raise HTTPException(status_code=500,detail='添加失败')
raise HTTPException(status_code=404,detail='添加失败')
return stu_new
+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()
+6 -4
View File
@@ -7,13 +7,15 @@ from model.all_model import *
# 根据id查询单条有效成绩
def get_score_by_id_dao(score_id:int, db):
return db.query(WlScore).filter(
WlScore.id == score_id
,WlScore.delete_status==1
WlScore.score_id == score_id
,WlScore.delete_status==0
).first()
# 根据stu_id+exam_order查重(新增、修改时校验重复)
def get_score_by_stu_exam_order_dao(stu_id:str,exam_order:int,db):
return db.query(WlScore).filter(WlScore.stu_id==stu_id,WlScore.exam_order==exam_order,WlScore.delete_status==0).first()
return db.query(WlScore).filter(WlScore.stu_id==stu_id
,WlScore.exam_order==exam_order
,WlScore.delete_status==0).first()
def get_grade_dao( stu_id:int , db):
@@ -52,7 +54,7 @@ def delete_grade_dao(stu_id:int,db):
rows = db.query(WlScore).filter(
WlScore.stu_id == stu_id,
WlScore.delete_status == 0
).update({'delete_status':1})
).update({'delete_status':1,'delete_time':datetime.now()})
except:
db.rollback()
return False
+4 -2
View File
@@ -28,12 +28,14 @@ def delete_student_dao(stu_id,db):
def update_student_dao(stu_id,update_data,db):
try:
rows = db.query( Student_Model ).filter( Student_Model.stu_id == stu_id,Student_Model.delete_status == 0).update( update_data )
rows = (db.query( Student_Model )
.filter( Student_Model.stu_id == stu_id,Student_Model.delete_status == 0)
.update( update_data ))
db.commit()
except:
db.rollback()
return False
else:
db.commit()
return rows
def get_student_dao(stu_id:Optional[int]
+13 -22
View File
@@ -5,22 +5,16 @@ 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 and self.offer_issuance_date:
if self.employment_opening_date > self.offer_issuance_date:
raise ValueError('offer下发日期不能早于就业开放日期')
return self
@@ -28,13 +22,10 @@ class EmploymentRequest(BaseModel):
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
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
+7 -8
View File
@@ -1,21 +1,20 @@
from model.all_model import *
from pydantic import BaseModel, Field, field_validator
from fastapi import HTTPException,Form
from pydantic import BaseModel, Field
class GradeRequest(BaseModel):
stu_id:int = Form(description="学生编号")
exam_order:int = Form(description='考核序次')
score:float = Form(description='成绩')
stu_id:int = Field(description="学生编号")
exam_order:int = Field(description='考核序次')
score:float = Field(description='成绩')
class GradeResponse(BaseModel):
code: int = 200
detail: str = 'OK'
score_id: float
stu_id:int
exam_order:int
score:float
class GradeUpdate(BaseModel):
exam_order: int | None = Form( description="考核序次")
score: float | None = Form( description="成绩")
exam_order: int | None = Field( None,description="考核序次")
score: float | None = Field( None,description="成绩")
+1
View File
@@ -52,6 +52,7 @@ class StugetResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
code:int = 200
detail:str = 'ok'
stu_id:int | None = None
class_id: int | None = None
stu_name: str | None = None
age: int | None = None