Files
DoubaoTeam/dao/employment.py
T

88 lines
3.2 KiB
Python

from sqlalchemy.orm import Session # 导入sqlalchemy会话对象
from models.employment import Employment # 导入就业ORM模型
from schemas.employment import EmploymentCreate, EmploymentUpdate # 导入pydantic新增、修改schema
from typing import Optional # 导入类型提示
def create_employment(db: Session, E: EmploymentCreate): #新增就业记录
try:
db_obj = Employment(**E.model_dump())
db.add(db_obj)
except:
db.rollback()
return False
else:
db.commit()
return db_obj
def get_employment_by_id(db: Session, emp_id: int): #根据主键id查询单条就业记录
return db.query(Employment).filter(Employment.id == emp_id # 匹配id
,Employment.is_deleted == 0).first() # 过滤逻辑删除,只查正常数据
def get_employment_by_student_id(db: Session, stu_id: int): #根据学生id查询该学生的就业信息
return db.query(Employment).filter(Employment.student_id == stu_id
,Employment.is_deleted == 0).first()
def get_employment_list(db: Session
,company_name: Optional[str] = None # 按公司名称模糊查询
,salary_min: Optional[float] = None # 薪资下限
,salary_max: Optional[float] = None): # 薪资上限
q = db.query(Employment).filter(Employment.is_deleted == 0) # 基础查询,只查询未删除数据
if company_name: # 如果传入公司名称,做模糊匹配
q = q.filter(Employment.company_name.like(f"%{company_name}%"))
if salary_min is not None: # 如果传入薪资下限
q = q.filter(Employment.salary >= salary_min)
if salary_max is not None: # 如果传入薪资上限
q = q.filter(Employment.salary <= salary_max)
return q.all() # 执行查询返回列表
def update_employment(db: Session, emp_id: int, E: EmploymentUpdate): #修改就业记录
"""
:param db: 数据库会话
:param emp_id: 需要修改的就业记录id
:param obj_in: 修改入参 EmploymentUpdate
:return: 修改完成的对象 / None(数据不存在)
"""
# 先查询这条记录是否存在且未删除
db_obj = get_employment_by_id(db, emp_id)
# 判断记录不存在直接返回None
if not db_obj:
return None
# 获取传入的非空字段字典
update_data = E.model_dump(exclude_unset=True)
# 循环遍历需要更新的字段,赋值给ORM对象
for k, v in update_data.items():
setattr(db_obj, k, v)
db.commit()
# 刷新对象获取最新数据
db.refresh(db_obj)
return db_obj
def delete_employment_logic(db: Session, emp_id: int):
"""
逻辑删除就业记录:不物理删除,设置is_deleted=1
:param db: 数据库会话
:param emp_id: 就业记录主键id
:return: True成功;False记录不存在
"""
# 查询目标记录
db_obj = get_employment_by_id(db, emp_id)
if not db_obj:
return False
# 设置逻辑删除标记为1
db_obj.is_deleted = 1
# 提交事务
db.commit()
return True