Files
student_manage_system/stu_jiuye/CURD_api.py
T
2026-09-22 10:48:49 +08:00

120 lines
5.6 KiB
Python

import datetime
from fastapi import APIRouter,Depends,HTTPException
from dao import *
from stu_jiuye.request import PostRequest, EmpResponse, AddRequest,AddResponse,CompRequest,CompResponse
from database import get_db
CURD=APIRouter()
@CURD.get('/emp',summary='查询就业信息')
def get_stuinfo( #查询学生就业信息
sname:str| None = None
,class_num:int| None = None
,employment_company:str|None=None
,min_salary:int=0
,max_salary:int|None=None
,somewhere:str|None=None
,employment_open_time:datetime.date|None=None
,offer_recived_time:datetime.date|None=None
,db=Depends(get_db)
): #查询条件
r=get_emp_dao( #调用函数
sname,
class_num,
employment_company,
min_salary,
max_salary,
somewhere,
employment_open_time,
offer_recived_time,
db
)
if r:
return r #成功返回
raise HTTPException(status_code=404, detail='名单不存在!') #失败返回错误信息
@CURD.post('/emp',response_model=EmpResponse,summary='新增就业信息')
def add_stuinfo( #新增学生就业信息
p:PostRequest,db=Depends(get_db)
): #调用请求体
d=p.model_dump() #解析成字典
r=add_employment_dao(o=d,db=db) #调用函数
if not r:
raise HTTPException(status_code=500, detail='服务器繁忙,请稍后添加!') #失败返回错误
return EmpResponse(totals=1, data=d) #成功返回响应体
@CURD.post('/emp/company',response_model=CompResponse,summary='新增公司信息')
def add_company( #新增公司表信息
c:CompRequest,db=Depends(get_db)
):
d = c.model_dump() #解析
r = add_company_dao(o=d, db=db) #调用添加公司函数
if not r:
raise HTTPException(status_code=500, detail='服务器繁忙,请稍后添加!') #失败返回错误信息
return CompResponse(totals=1, data=d) #成功返回响应体
@CURD.post('/emp/company/address',response_model=AddResponse,summary='新增公司所在区域')
def add_address( #新增公司地址区域信息
add:AddRequest,db=Depends(get_db)
):
d = add.model_dump() #解析
r = add_address_dao(o=d, db=db) #调用添加地址函数
if not r:
raise HTTPException(status_code=500, detail='服务器繁忙,请稍后添加!') #失败返回错误信息
return AddResponse(totals=1, data=d) #成功返回响应体
@CURD.put('/emp',summary='更改就业信息')
def updata_stuinfo( #更新数据模块
up:PostRequest
,id:int
,db=Depends(get_db)
): #根据id选择对象
d = up.model_dump(exclude_unset=True) #解析
r = update_emp_dao(id=id, update_data=d, db=db) #调用更新函数
if not r:
raise HTTPException(status_code=500, detail='没有更新!') #失败返回错误信息
return {'code': 200, 'totals': r, 'detail': '更新成功'} #成功返回信息
@CURD.delete('/emp/{id}',summary='删除就业信息')
def delete_stuinfo( #删除模块
id:int
,db=Depends(get_db)
): #根据id选择对象
rows = delete_emp_dao(id, db) #调用删除函数
if not rows:
raise HTTPException(status_code=500, detail='没有删除!') #失败返回错误信息
return {'code': 200, 'totals': rows, 'detail': '删除成功'} #成功返回信息
@CURD.get('/Top5',summary='就业薪资Top5')
def salarytop5(db=Depends(get_db)):
q = db.query(Employments,Company.employment_company) \
.join(Company, Employments.company_id == Company.id) \
.filter(Employments.is_deleted == 0)\
.order_by(Employments.employment_salary.desc())\
.offset(0).limit(5) .all()
return [{'学生姓名':i.sname,'学生班级编号':i.class_num,'就业时间':i.offer_recived_time,'公司':employment_company} for i,employment_company in q]
@CURD.get('/worktime',summary='学生就业时常')
def worktime(db=Depends(get_db)):
q = db.query(Employments).all()
return [{'学生姓名':i.sname,'就业时常':f'{i.offer_recived_time-i.employment_open_time}' if i.offer_recived_time and i.employment_open_time else '暂无数据'} for i in q]
@CURD.get('/avgworktime',summary='学生平均就业时常')
def avgworktime(db=Depends(get_db)):
q = db.query(Employments)\
.filter(Employments.employment_open_time.isnot(None)
,Employments.offer_recived_time.isnot(None))\
.all()
if not q:
return {'平均就业时常': '暂无数据'}
s=0
for i in q:
s+=(i.offer_recived_time - i.employment_open_time)
avg=s/len(q)
return f'平均就业时常:{avg}'