from datetime import date from fastapi import APIRouter,Depends,HTTPException,Query from stu_jiuye.dao import * from stu_jiuye.request import PostRequest, EmpResponse, AddRequest,AddResponse,CompRequest,CompResponse from stu_jiuye.database import get_db CURD=APIRouter() @CURD.get('/emp',summary='查询就业信息') def get_stuinfo( #查询学生就业信息 sname:str| None = Query(None,description='学生姓名') ,class_id:int| None = Query(None,description='班级编号') ,employment_company:str|None=Query(None,description='公司名称') ,min_salary:int|None=Query(None,description='最小薪资范围') ,max_salary:int|None=Query(None,description='最大薪资范围') ,somewhere:str|None=Query(None,description='公司地区') ,employment_open_start: date | None = Query(None,description='就业开放起始时间') ,employment_open_end: date | None = Query(None,description='就业开放结束时间') ,offer_recived_start: date | None = Query(None,description='offer下发起始时间') ,offer_recived_end: date | None = Query(None,description='offer下发结束时间') ,db=Depends(get_db) ): #查询条件 r=get_emp_dao( #调用函数 sname, class_id, employment_company, min_salary, max_salary, somewhere, employment_open_start, employment_open_end, offer_recived_start, offer_recived_end, 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) #解析 d.pop('create_time', None) d.pop('is_deleted', None) if not d: raise HTTPException(status_code=400, detail='没有需要更新的字段') r = update_emp_dao(id=id, update_data=d, db=db) #调用更新函数 if not r: raise HTTPException(status_code=404, 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())\ .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)\ .filter(Employments.is_deleted==0)\ .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) ,Employments.is_deleted==0)\ .all() if not q: return {'平均就业时常': '暂无数据'} total = sum((i.offer_recived_time - i.employment_open_time).total_seconds() for i in q) avg_days=total /len(q)/86400 #一天86400秒 return { '人数': len(q), '平均就业时常(天)': round(avg_days, 2) } '''