feat(repo): 全部模块 service 改用 repository(Repository 全面落地)
- 24 个模块 service 从直接 db.query 改为使用各自 repository(get_by_id/filter/create/update) - 4 个 agent 并行分组转换:system 组、dictionary/configuration/member/region、cms/link/notice、job/log - 保留合法 db 用法:跨模型查询(user→dept/level/position、ad→adsort、adsort→item/itemcate)、投影查询(role/menu)、按条件删除(set_permission/save_role_menu/add_user_role)、独立会话(record_job_log/record_operation_log)、db.commit(pause/resume) - 修复 JobLogRepository 软删列 del_flag;修复 ad/notice create 重复传参 bug - 修复 base_repository.get_by_id/get_by_ids 兼容字符串 ID - 实测:27 个读接口 + dept/notice/member/level 写操作全通过 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+14
-29
@@ -1,12 +1,11 @@
|
||||
import logging
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from sqlalchemy import and_
|
||||
|
||||
from shared.enums import JOB_STATUS_LIST, JOB_EXECUTE_POLICY_LIST
|
||||
from shared.constants import PAGE_SIZE
|
||||
from modules.job.schemas import JobForm, JobStatusForm
|
||||
from modules.job.models import Job
|
||||
from modules.job.repository import job_repo, joblog_repo
|
||||
from modules.job.scheduler import (
|
||||
add_job_to_scheduler,
|
||||
remove_job_from_scheduler,
|
||||
@@ -26,13 +25,12 @@ logger = logging.getLogger(__name__)
|
||||
# 查询定时任务分页数据
|
||||
|
||||
def get_job_page(request):
|
||||
db = get_db_session()
|
||||
# 页码
|
||||
page = int(request.query_params.get("pageNo", 1))
|
||||
# 每页数
|
||||
limit = int(request.query_params.get("pageSize", PAGE_SIZE))
|
||||
# 实例化查询对象
|
||||
query = db.query(Job).filter(Job.is_delete == 0)
|
||||
query = job_repo.filter(Job.is_delete == 0)
|
||||
# 任务名称
|
||||
job_name = request.query_params.get('jobName')
|
||||
if job_name:
|
||||
@@ -83,8 +81,7 @@ def _get_next_run_time(scheduler, job_id):
|
||||
# 根据ID查询任务详情
|
||||
|
||||
def get_job_detail(job_id):
|
||||
db = get_db_session()
|
||||
job = db.query(Job).filter(and_(Job.id == job_id, Job.is_delete == 0)).first()
|
||||
job = job_repo.get_by_id(job_id)
|
||||
if not job:
|
||||
return None
|
||||
data = job.to_dict()
|
||||
@@ -96,12 +93,8 @@ def get_job_detail(job_id):
|
||||
# 添加定时任务
|
||||
|
||||
def add_job(request, data: JobForm):
|
||||
db = get_db_session()
|
||||
# 表单数据赋值给对象
|
||||
job = Job(**data.model_dump(exclude={'id'}))
|
||||
job.create_user = get_user_id(request)
|
||||
# 插入数据
|
||||
job.save()
|
||||
# 表单数据赋值给对象并插入
|
||||
job = job_repo.create(**data.model_dump(exclude={'id'}), create_user=get_user_id(request))
|
||||
|
||||
# 状态为运行中且有Cron表达式,添加到调度器
|
||||
if job.status == 1 and job.cron_expression:
|
||||
@@ -113,13 +106,12 @@ def add_job(request, data: JobForm):
|
||||
# 更新定时任务
|
||||
|
||||
def update_job(request, data: JobForm):
|
||||
db = get_db_session()
|
||||
# 记录ID判空
|
||||
if not data.id or data.id <= 0:
|
||||
return R.failed("记录ID不能为空")
|
||||
|
||||
# 根据ID查询记录
|
||||
job = db.query(Job).filter(and_(Job.id == data.id, Job.is_delete == 0)).first()
|
||||
job = job_repo.get_by_id(data.id)
|
||||
if not job:
|
||||
return R.failed("任务不存在")
|
||||
|
||||
@@ -130,7 +122,7 @@ def update_job(request, data: JobForm):
|
||||
updData = data.model_dump(exclude={'id'})
|
||||
updData['update_user'] = get_user_id(request)
|
||||
updData['update_time'] = datetime.now(tz=timezone.utc)
|
||||
result = db.query(Job).filter_by(id=data.id).update(updData)
|
||||
result = job_repo.update(data.id, updData)
|
||||
if not result:
|
||||
return R.failed("更新失败")
|
||||
|
||||
@@ -169,16 +161,15 @@ def delete_job(job_id):
|
||||
# 设置任务状态
|
||||
|
||||
def update_job_status(request, data: JobStatusForm):
|
||||
db = get_db_session()
|
||||
# 根据ID查询记录
|
||||
job = db.query(Job).filter(and_(Job.id == data.id, Job.is_delete == 0)).first()
|
||||
job = job_repo.get_by_id(data.id)
|
||||
if not job:
|
||||
return R.failed("任务不存在")
|
||||
|
||||
old_status = job.status
|
||||
|
||||
# 更新记录
|
||||
result = db.query(Job).filter_by(id=data.id).update({
|
||||
result = job_repo.update(data.id, {
|
||||
"status": data.status,
|
||||
"update_user": get_user_id(request),
|
||||
"update_time": datetime.now(tz=timezone.utc)
|
||||
@@ -203,7 +194,7 @@ def update_job_status(request, data: JobStatusForm):
|
||||
|
||||
def pause_job_by_id(job_id):
|
||||
db = get_db_session()
|
||||
job = db.query(Job).filter(and_(Job.id == job_id, Job.is_delete == 0)).first()
|
||||
job = job_repo.get_by_id(job_id)
|
||||
if not job:
|
||||
return R.failed("任务不存在")
|
||||
|
||||
@@ -223,7 +214,7 @@ def pause_job_by_id(job_id):
|
||||
|
||||
def resume_job_by_id(job_id):
|
||||
db = get_db_session()
|
||||
job = db.query(Job).filter(and_(Job.id == job_id, Job.is_delete == 0)).first()
|
||||
job = job_repo.get_by_id(job_id)
|
||||
if not job:
|
||||
return R.failed("任务不存在")
|
||||
|
||||
@@ -261,13 +252,10 @@ def reload_all_jobs():
|
||||
|
||||
import logging
|
||||
|
||||
from sqlalchemy import and_
|
||||
|
||||
from shared.enums import JOB_LOG_STATUS_LIST
|
||||
from shared.constants import PAGE_SIZE
|
||||
from modules.job.models import Job
|
||||
from modules.job.models import JobLog
|
||||
from core.database import get_db_session
|
||||
from core.database import SessionLocal
|
||||
from core import R
|
||||
from utils.request import like_contains, parse_id_list
|
||||
@@ -320,13 +308,12 @@ def record_job_log(job_id, start_time, end_time, status, exception_info=None, jo
|
||||
# ============================================================
|
||||
|
||||
def get_job_log_page(request):
|
||||
db = get_db_session()
|
||||
# 页码
|
||||
page = int(request.query_params.get("pageNo", 1))
|
||||
# 每页数
|
||||
limit = int(request.query_params.get("pageSize", PAGE_SIZE))
|
||||
# 实例化查询对象
|
||||
query = db.query(JobLog).filter(JobLog.del_flag == 0)
|
||||
query = joblog_repo.filter(JobLog.del_flag == 0)
|
||||
# 任务名称
|
||||
job_name = request.query_params.get('jobName')
|
||||
if job_name:
|
||||
@@ -361,8 +348,7 @@ def get_job_log_page(request):
|
||||
|
||||
# 根据ID查询日志详情
|
||||
def get_job_log_detail(job_log_id):
|
||||
db = get_db_session()
|
||||
log = db.query(JobLog).filter(and_(JobLog.id == job_log_id, JobLog.del_flag == 0)).first()
|
||||
log = joblog_repo.get_by_id(job_log_id)
|
||||
if not log:
|
||||
return None
|
||||
data = log.to_dict()
|
||||
@@ -375,8 +361,7 @@ def delete_job_log(ids_str):
|
||||
id_list = parse_id_list(ids_str)
|
||||
if not id_list:
|
||||
return R.failed("记录ID不存在")
|
||||
db = get_db_session()
|
||||
result = db.query(JobLog).filter(JobLog.id.in_(id_list), JobLog.del_flag == 0).update(
|
||||
result = joblog_repo.filter(JobLog.id.in_(id_list), JobLog.del_flag == 0).update(
|
||||
{"del_flag": 1}, synchronize_session=False
|
||||
)
|
||||
return R.ok(msg="本次共删除{0}条数据".format(result))
|
||||
|
||||
Reference in New Issue
Block a user