From a508d590ca7c5b72e66ec6178197aafff46552d2 Mon Sep 17 00:00:00 2001 From: qinghu762-afk Date: Mon, 14 Sep 2026 16:52:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/wl_advisor_api.py | 40 +++++++++++++++++++++++++++++++++++++ dao/wl_advisor_dao.py | 20 ++++++++++++++++--- scheme/wl_advisor_scheme.py | 1 - 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/api/wl_advisor_api.py b/api/wl_advisor_api.py index bdbda29..46e0b95 100644 --- a/api/wl_advisor_api.py +++ b/api/wl_advisor_api.py @@ -1,3 +1,5 @@ +# 顾问模块:独立接口,沿用原学生接口的依赖注入与返回方式。 + # 顾问模块:独立接口,沿用原学生接口的依赖注入与返回方式。 # FastAPI路由层,定义顾问管理相关接口,接收前端请求,参数校验,调用DAO层完成数据库操作 from fastapi import APIRouter, Depends, HTTPException, Query @@ -85,6 +87,43 @@ def get_advisor(adv_id: int, db: Session = Depends(get_db)): return advisor +# 查询顾问信息和该顾问名下的学生 +@router.get("/{adv_id}/students") +def get_advisor_students(adv_id: int, db: Session = Depends(get_db)): + if adv_id <= 0: + raise HTTPException(422, "顾问编号必须大于0") + advisor = wl_advisor_dao.get_advisor_with_students(db, adv_id) + if not advisor: + raise HTTPException(404, "顾问不存在") + + student_list = [] + for student in advisor.student_list: + student_list.append({ + "stu_no": student.stu_no, + "stu_name": student.stu_name, + "class_id": student.class_id, + "advisor_id": student.advisor_id, + "native_place": student.native_place, + "graduate_school": student.graduate_school, + "major": student.major, + "in_time": student.in_time, + "out_time": student.out_time, + "edu": student.edu, + "stu_age": student.stu_age, + "stu_gender": student.stu_gender, + }) + + return { + "adv_id": advisor.adv_id, + "adv_name": advisor.adv_name, + "adv_gender": advisor.adv_gender, + "adv_phone": advisor.adv_phone, + "adv_email": advisor.adv_email, + "adv_region": advisor.adv_region, + "student_list": student_list, + } + + @router.put("/{adv_id}", response_model=AdvisorOut) def update_advisor(adv_id: int, data: AdvisorUpdate, db: Session = Depends(get_db)): @@ -114,3 +153,4 @@ def delete_advisor(adv_id: int, db: Session = Depends(get_db)): raise HTTPException(404, "顾问不存在") # 返回成功信息 return {"msg": "删除成功"} + diff --git a/dao/wl_advisor_dao.py b/dao/wl_advisor_dao.py index 71f1f2d..9b2e9ca 100644 --- a/dao/wl_advisor_dao.py +++ b/dao/wl_advisor_dao.py @@ -1,8 +1,7 @@ -# 顾问模块DAO层:直接操作 advisor 表,沿用原学生 DAO 的写法。 -# DAO(Data Access Object) 数据访问层,封装数据库增删改查逻辑,供上层API调用 from sqlalchemy.orm import Session # 导入SQLAlchemy ORM数据库模型:顾问表实体 from model.wl_advisor_model import Advisor +from model.wl_student_model import Student # 导入Pydantic请求模型:新增、更新顾问的入参校验模型 from scheme.wl_advisor_scheme import AdvisorCreate, AdvisorUpdate @@ -56,6 +55,21 @@ def get_advisor_by_id(db: Session, adv_id: int) -> Advisor | None: ).first() # first() 取第一条,无结果返回None +# 查询顾问信息和该顾问名下的学生 +def get_advisor_with_students(db: Session, adv_id: int): + advisor = get_advisor_by_id(db, adv_id) + if not advisor: + return None + + # 学生表中的顾问外键字段名是 advisor_id + student_list = db.query(Student).filter( + Student.advisor_id == adv_id, + Student.is_deleted == 0 + ).all() + advisor.student_list = student_list + return advisor + + def update_advisor(db: Session, adv_id: int, data: AdvisorUpdate) -> Advisor | None: # 根据ID查询顾问 advisor = get_advisor_by_id(db, adv_id) @@ -88,4 +102,4 @@ def delete_advisor(db: Session, adv_id: int) -> bool: # 提交事务保存修改 db.commit() # 删除标记修改成功返回True - return True + return True \ No newline at end of file diff --git a/scheme/wl_advisor_scheme.py b/scheme/wl_advisor_scheme.py index 3d255bc..f5720b9 100644 --- a/scheme/wl_advisor_scheme.py +++ b/scheme/wl_advisor_scheme.py @@ -52,4 +52,3 @@ class AdvisorOut(BaseModel): # from_attributes = True:支持直接把SQLAlchemy ORM对象转为Pydantic模型 # 作用:ORM查询出来的数据库实体,可以直接赋值给AdvisorOut,自动读取属性 from_attributes = True -