Files
DjangoAdmin_FastAPI_EleVue/modules/job/job_executor.py
T
ClaudeandClaude 64a5504396 feat(phase4): 全部业务模块迁移到 modules/(结构迁移)
- 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>
2026-08-07 10:13:30 +08:00

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()