- shared/base_repository.py 新增 batch_delete_r(返回 R,等价原 base_model 语义) - 20 个模块删除函数从 Model.batch_delete_r 改为 x_repo.batch_delete_r - shared/base_model.py 移除 classmethod(get_by_id/get_by_ids/get_all_active/exists/batch_delete_r),只留字段 + to_dict - 清理 base_model 多余 imports - 实测 dept 删除、批量删除及多模块读接口正常 Co-Authored-By: Claude <noreply@anthropic.com>
104 lines
3.0 KiB
Python
104 lines
3.0 KiB
Python
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 |