88 lines
3.2 KiB
Python
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
|