- 21 个模块目录(auth/system/dictionary/configuration/cms/member/region/link/notice/job/log/upload/index) - 每个模块 router.py(合并模块导出多个 router)/schemas.py/service.py/repository.py/models.py - routers/v1.py 与 routers/__init__.py 改为直接引用 modules,前缀与权限串原样保留 - core/middleware.py 懒加载指向 modules.system.menu / modules.log;core/redis_client.py 指向 modules.job.scheduler - apps/views|services|forms 全部改为 re-export 垫片 - 迁移后 grep 守门通过:modules/core 无 apps/extensions 残留引用 - 实测登录、27+ 模块接口、写操作 commit、操作日志落库均正常 Co-Authored-By: Claude <noreply@anthropic.com>
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
"""
|
|
任务执行器模块
|
|
|
|
根据触发器标识执行对应任务的功能。
|
|
"""
|
|
|
|
import logging
|
|
from typing import Any, Dict
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class JobExecutor:
|
|
"""任务执行器:根据触发器标识调用对应的内部方法执行任务"""
|
|
|
|
def __init__(self):
|
|
self._handlers = {}
|
|
self._register_default_handlers()
|
|
|
|
def _register_default_handlers(self):
|
|
"""注册默认的任务处理器"""
|
|
self.register('send_sms', self._send_sms)
|
|
self.register('send_email', self._send_email)
|
|
self.register('sync_data', self._sync_data)
|
|
|
|
def register(self, trigger: str, handler):
|
|
"""注册任务处理器"""
|
|
self._handlers[trigger] = handler
|
|
logger.info(f"注册任务处理器: {trigger}")
|
|
|
|
def execute(self, trigger: str, **kwargs) -> Any:
|
|
"""执行任务"""
|
|
if trigger not in self._handlers:
|
|
raise KeyError(f"未注册的任务触发器: {trigger}(可用 job_executor.register() 注册处理器)")
|
|
|
|
handler = self._handlers[trigger]
|
|
logger.info(f"执行任务: {trigger}, 参数: {kwargs}")
|
|
return handler(**kwargs)
|
|
|
|
def _send_sms(self, **kwargs) -> Dict:
|
|
"""发送短信任务"""
|
|
logger.info(f"发送短信 [任务ID: {kwargs.get('job_id')}]")
|
|
return {'success': True, 'message': '短信发送成功'}
|
|
|
|
def _send_email(self, **kwargs) -> Dict:
|
|
"""发送邮件任务"""
|
|
logger.info(f"发送邮件 [任务ID: {kwargs.get('job_id')}]")
|
|
return {'success': True, 'message': '邮件发送成功'}
|
|
|
|
def _sync_data(self, **kwargs) -> Dict:
|
|
"""数据同步任务"""
|
|
logger.info(f"数据同步 [任务ID: {kwargs.get('job_id')}]")
|
|
return {'success': True, 'message': '数据同步成功'}
|
|
|
|
|
|
# 全局执行器实例
|
|
job_executor = JobExecutor()
|