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: e.stu_name = e.student.stu_name 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() emp.stu_name =emp.student.stu_name 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