Files
1/dao/wl_emp_dao.py
T
2026-09-21 20:16:09 +08:00

100 lines
3.2 KiB
Python

from sqlalchemy.orm import Session
from model.wl_emp_model import Emp
from model.wl_student_model import Student
from scheme.wl_emp_scheme import EmpCreate, EmpUpdate
class EmpDAO:
@staticmethod
def get_student(db: Session, stu_no: str):
"""按学号查未删除的学生"""
return db.query(Student).filter(
Student.stu_no == stu_no,
Student.is_deleted == 0,
).first()
@staticmethod
def list_emps(db: Session, skip: int = 0, limit: int = 100, company_name: str = None):
"""查询就业列表,顺带把学生姓名带上"""
q = db.query(Emp).filter(Emp.is_deleted == 0)
if company_name:
q = q.filter(Emp.company_name.like(f"%{company_name}%"))
emp_list = q.offset(skip).limit(limit).all()
for e in emp_list:
stu = db.query(Student).filter(
Student.stu_no == e.stu_no,
Student.is_deleted == 0,
).first()
e.stu_name = stu.stu_name if stu else None
return emp_list
@staticmethod
def get_emp(db: Session, stu_no: str):
"""按学号查就业信息"""
emp = db.query(Emp).filter(
Emp.stu_no == stu_no,
Emp.is_deleted == 0,
).first()
if emp:
stu = EmpDAO.get_student(db, stu_no)
emp.stu_name = stu.stu_name if stu else None
return emp
@staticmethod
def create_emp(db: Session, emp_data: EmpCreate):
"""新增就业信息;如果这个学生之前被删过,就把那条记录复活"""
# stu_no 是主键,已删除的记录也占着这个主键,所以查的时候要连已删除的一起查
exist = db.query(Emp).filter(Emp.stu_no == emp_data.stu_no).first()
if exist and exist.is_deleted == 0:
raise ValueError("该学生的就业信息已存在")
# exclude_none:没传的字段不写进去,交给数据库默认值
data = emp_data.model_dump(exclude_none=True)
stu = EmpDAO.get_student(db, emp_data.stu_no)
if exist:
# 复活旧记录
for k, v in data.items():
setattr(exist, k, v)
exist.is_deleted = 0
db.commit()
db.refresh(exist)
exist.stu_name = stu.stu_name if stu else None
return exist
db_emp = Emp(**data)
db.add(db_emp)
db.commit()
db.refresh(db_emp)
db_emp.stu_name = stu.stu_name if stu else None
return db_emp
@staticmethod
def update_emp(db: Session, stu_no: str, emp_data: EmpUpdate):
"""修改就业信息"""
db_emp = EmpDAO.get_emp(db, stu_no)
if not db_emp:
return None
update_dict = emp_data.model_dump(exclude_unset=True)
for k, v in update_dict.items():
setattr(db_emp, k, v)
db.commit()
db.refresh(db_emp)
return db_emp
@staticmethod
def delete_emp(db: Session, stu_no: str):
"""逻辑删除,修改 is_deleted=1"""
db_emp = EmpDAO.get_emp(db, stu_no)
if not db_emp:
return None
db_emp.is_deleted = 1
db.commit()
return db_emp