70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
from sqlalchemy import and_, or_
|
|||
|
|
from sqlalchemy.orm import Session
|
||
|
|
from model.advisor import Advisor
|
||
|
|
from model.student import Student
|
||
|
|
from scheme.advisor_scheme import AdvisorCreate
|
||
|
|
# 新增顾问信息(前端传过来的、且已经 scheme 校验好的数据)
|
||
|
|
|
||
|
|
def create_advisor(db: Session, advisor: AdvisorCreate) -> Advisor:
|
||
|
|
db_advisor = Advisor(
|
||
|
|
advisor_no=advisor.advisor_no,
|
||
|
|
name=advisor.name,
|
||
|
|
gender=advisor.gender,
|
||
|
|
phone=advisor.phone,
|
||
|
|
remark=advisor.remark,
|
||
|
|
)
|
||
|
|
db.add(db_advisor)
|
||
|
|
db.commit()
|
||
|
|
db.refresh(db_advisor)
|
||
|
|
return db_advisor
|
||
|
|
|
||
|
|
# 顾问信息查询:支持全部查询 / 模糊搜索(匹配顾问编号、姓名)
|
||
|
|
def get_advisor_list(db: Session, search_keyword: str = None):
|
||
|
|
q = db.query(Advisor).filter(Advisor.statu == 1)
|
||
|
|
if search_keyword:
|
||
|
|
q = q.filter(
|
||
|
|
or_(
|
||
|
|
Advisor.advisor_no.like(f"%{search_keyword}%"),
|
||
|
|
Advisor.name.like(f"%{search_keyword}%"),
|
||
|
|
)
|
||
|
|
)
|
||
|
|
return q.all()
|
||
|
|
|
||
|
|
|
||
|
|
# 根据顾问编号查询单个存在的顾问
|
||
|
|
def get_advisor_by_no(db: Session, advisor_no: str):
|
||
|
|
return (
|
||
|
|
db.query(Advisor)
|
||
|
|
.filter(and_(Advisor.advisor_no == advisor_no, Advisor.statu == 1))
|
||
|
|
.first()
|
||
|
|
)
|
||
|
|
|
||
|
|
# 查询该顾问名下所有学生
|
||
|
|
def get_students_by_advisor_no(db: Session, advisor_no: str):
|
||
|
|
return (
|
||
|
|
db.query(Student)
|
||
|
|
.filter(and_(Student.advisor_no == advisor_no, Student.statu == 1))
|
||
|
|
.all()
|
||
|
|
)
|
||
|
|
|
||
|
|
# 更新顾问信息(setattr(obj, "k", "v") 动态赋值)
|
||
|
|
def update_advisor(db: Session, advisor_no: str, update_data: dict):
|
||
|
|
advisor = get_advisor_by_no(db, advisor_no)
|
||
|
|
if not advisor:
|
||
|
|
return None
|
||
|
|
update_data.pop("advisor_no", None)
|
||
|
|
for k, v in update_data.items():
|
||
|
|
setattr(advisor, k, v)
|
||
|
|
db.commit()
|
||
|
|
db.refresh(advisor)
|
||
|
|
return advisor
|
||
|
|
|
||
|
|
# 删除顾问:逻辑删除
|
||
|
|
def delete_advisor(db: Session, advisor_no: str):
|
||
|
|
advisor = get_advisor_by_no(db, advisor_no)
|
||
|
|
if not advisor:
|
||
|
|
return None
|
||
|
|
advisor.statu = 0
|
||
|
|
db.commit()
|
||
|
|
return advisor
|