from datetime import datetime, timezone from fastapi.logger import logger from modules.system.dept.schemas import DeptForm from modules.system.dept.models import Dept from modules.system.dept.repository import dept_repo from core.database import get_db_session from core import R from core.security import get_user_id from utils.request import like_contains, parse_id_list # 查询部门数据 def get_dept_page(request): # 实例化查询对象 query = dept_repo.filter(Dept.is_delete == 0) # 部门名称 name = request.query_params.get('name') if name: # 部门名称模糊查询 query = query.filter(Dept.name.like(like_contains(name), escape='\\')) # 查询数据 dept_list = query.order_by(Dept.sort.asc()).all() # 实例化数组对象 result = [] # 遍历数据源 if dept_list: for item in dept_list: # 对象转字典 data = item.to_dict() # 加入列表 result.append(data) # 返回结果 return R.ok(data=result) # 根据ID查询部门 def get_dept_detail(dept_id): # 根据ID查询部门 dept = dept_repo.get_by_id(dept_id) # 查询结果判空 if not dept: return None # 对象转字典 data = dept.to_dict() # 返回结果 return data # 添加部门 def add_dept(request, data: DeptForm): # 唯一性校验 if dept_repo.filter(Dept.name == data.name, Dept.is_delete == 0).first(): return R.failed("部门名称不能重复") # 表单数据赋值给对象并插入 dept_repo.create(**data.model_dump(exclude={'id'}), create_user=get_user_id(request)) # 返回结果 return R.ok(msg="添加成功") # 更新部门 def update_dept(request, data: DeptForm): # 记录ID判空 if not data.id or data.id <= 0: return R.failed("记录ID不能为空") # 唯一性校验(排除自身) if dept_repo.filter(Dept.name == data.name, Dept.id != data.id, Dept.is_delete == 0).first(): return R.failed("部门名称不能重复") # 根据ID查询记录 if not dept_repo.get_by_id(data.id): return R.failed("记录不存在") # 构造更新数据(排除 id) updData = data.model_dump(exclude={'id'}) updData['update_user'] = get_user_id(request) updData['update_time'] = datetime.now(tz=timezone.utc) result = dept_repo.update(data.id, updData) # 提交数据 if not result: return R.failed("更新失败") # 返回结果 return R.ok(msg="更新成功") # 删除部门 def delete_dept(dept_id): return dept_repo.batch_delete_r(dept_id) # 获取部门列表 def get_dept_list(): # 查询部门数据列表 dept_rows = dept_repo.filter(Dept.is_delete == 0).order_by(Dept.sort.asc()).all() # 实例化列表 dept_list = [] # 遍历数据源 if dept_rows: for v in dept_rows: # 对象转字典 item = v.to_dict() # 加入数组 dept_list.append(item) # 返回结果 return dept_list