- 扩展 ToolConfig 配置类型,新增 external_api 类型
- 实现接口注册表,包含 90+ 睿美云开放接口定义
- 实现 TPOS SHA256WithRSA 签名鉴权
- 实现睿美云 API 客户端,支持多租户配置
- 新增代理路由 /api/ruimeiyun/call/{api_name}
- 支持接口权限控制和健康检查
This commit is contained in:
@@ -1,21 +1,21 @@
|
||||
"""任务通知渠道模型"""
|
||||
from datetime import datetime
|
||||
from sqlalchemy import Column, Integer, String, Enum, Boolean, DateTime
|
||||
from ..database import Base
|
||||
|
||||
|
||||
class TaskNotifyChannel(Base):
|
||||
"""任务通知渠道表(用于定时任务推送)"""
|
||||
__tablename__ = "platform_task_notify_channels"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
tenant_id = Column(String(50), nullable=False)
|
||||
channel_name = Column(String(100), nullable=False)
|
||||
channel_type = Column(Enum('dingtalk_bot', 'wecom_bot'), nullable=False)
|
||||
webhook_url = Column(String(500), nullable=False)
|
||||
sign_secret = Column(String(200)) # 钉钉加签密钥
|
||||
description = Column(String(255))
|
||||
is_enabled = Column(Boolean, default=True)
|
||||
|
||||
created_at = Column(DateTime, default=datetime.now)
|
||||
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||
"""任务通知渠道模型"""
|
||||
from datetime import datetime
|
||||
from sqlalchemy import Column, Integer, String, Enum, Boolean, DateTime
|
||||
from ..database import Base
|
||||
|
||||
|
||||
class TaskNotifyChannel(Base):
|
||||
"""任务通知渠道表(用于定时任务推送)"""
|
||||
__tablename__ = "platform_task_notify_channels"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
tenant_id = Column(String(50), nullable=False)
|
||||
channel_name = Column(String(100), nullable=False)
|
||||
channel_type = Column(Enum('dingtalk_bot', 'wecom_bot'), nullable=False)
|
||||
webhook_url = Column(String(500), nullable=False)
|
||||
sign_secret = Column(String(200)) # 钉钉加签密钥
|
||||
description = Column(String(255))
|
||||
is_enabled = Column(Boolean, default=True)
|
||||
|
||||
created_at = Column(DateTime, default=datetime.now)
|
||||
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||
|
||||
@@ -1,103 +1,103 @@
|
||||
"""定时任务相关模型"""
|
||||
from datetime import datetime
|
||||
from sqlalchemy import Column, BigInteger, Integer, String, Text, Enum, SmallInteger, TIMESTAMP, DateTime, JSON, Boolean
|
||||
from ..database import Base
|
||||
|
||||
|
||||
class ScheduledTask(Base):
|
||||
"""定时任务表"""
|
||||
__tablename__ = "platform_scheduled_tasks"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
tenant_id = Column(String(50))
|
||||
task_name = Column(String(100), nullable=False)
|
||||
task_desc = Column(String(500))
|
||||
|
||||
# 调度配置
|
||||
schedule_type = Column(Enum('simple', 'cron'), nullable=False, default='simple')
|
||||
time_points = Column(JSON) # JSON数组 ["08:00", "12:00"]
|
||||
cron_expression = Column(String(100))
|
||||
timezone = Column(String(50), default='Asia/Shanghai')
|
||||
|
||||
# 执行类型
|
||||
execution_type = Column(Enum('webhook', 'script'), nullable=False, default='script')
|
||||
|
||||
# Webhook配置
|
||||
webhook_url = Column(String(500))
|
||||
|
||||
# 脚本配置
|
||||
script_content = Column(Text)
|
||||
script_deps = Column(Text) # 脚本依赖
|
||||
|
||||
# 输入参数
|
||||
input_params = Column(JSON) # JSON格式
|
||||
|
||||
# 重试配置
|
||||
retry_count = Column(Integer, default=0)
|
||||
retry_interval = Column(Integer, default=60)
|
||||
|
||||
# 告警配置
|
||||
alert_on_failure = Column(Boolean, default=False)
|
||||
alert_webhook = Column(String(500))
|
||||
|
||||
# 通知配置
|
||||
notify_channels = Column(JSON) # 通知渠道ID列表
|
||||
notify_wecom_app_id = Column(Integer) # 企微应用ID
|
||||
|
||||
# 状态
|
||||
is_enabled = Column(Boolean, default=True)
|
||||
last_run_at = Column(DateTime)
|
||||
last_run_status = Column(Enum('success', 'failed', 'running'))
|
||||
last_run_message = Column(Text)
|
||||
|
||||
created_at = Column(DateTime, default=datetime.now)
|
||||
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||
|
||||
|
||||
class TaskLog(Base):
|
||||
"""任务执行日志"""
|
||||
__tablename__ = "platform_task_logs"
|
||||
|
||||
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
||||
task_id = Column(Integer, nullable=False)
|
||||
tenant_id = Column(String(50))
|
||||
trace_id = Column(String(100))
|
||||
|
||||
status = Column(Enum('running', 'success', 'failed'), nullable=False)
|
||||
started_at = Column(DateTime, nullable=False)
|
||||
finished_at = Column(DateTime)
|
||||
duration_ms = Column(Integer)
|
||||
|
||||
output = Column(Text)
|
||||
error = Column(Text)
|
||||
retry_count = Column(Integer, default=0)
|
||||
|
||||
created_at = Column(TIMESTAMP, default=datetime.now)
|
||||
|
||||
|
||||
class ScriptVar(Base):
|
||||
"""脚本变量存储"""
|
||||
__tablename__ = "platform_script_vars"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
task_id = Column(Integer, nullable=False)
|
||||
tenant_id = Column(String(50))
|
||||
var_key = Column(String(100), nullable=False)
|
||||
var_value = Column(Text) # JSON格式
|
||||
|
||||
created_at = Column(TIMESTAMP, default=datetime.now)
|
||||
updated_at = Column(TIMESTAMP, default=datetime.now, onupdate=datetime.now)
|
||||
|
||||
|
||||
class Secret(Base):
|
||||
"""密钥管理"""
|
||||
__tablename__ = "platform_secrets"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
tenant_id = Column(String(50)) # NULL为全局
|
||||
secret_key = Column(String(100), nullable=False)
|
||||
secret_value = Column(Text, nullable=False)
|
||||
description = Column(String(255))
|
||||
|
||||
created_at = Column(TIMESTAMP, default=datetime.now)
|
||||
updated_at = Column(TIMESTAMP, default=datetime.now, onupdate=datetime.now)
|
||||
"""定时任务相关模型"""
|
||||
from datetime import datetime
|
||||
from sqlalchemy import Column, BigInteger, Integer, String, Text, Enum, SmallInteger, TIMESTAMP, DateTime, JSON, Boolean
|
||||
from ..database import Base
|
||||
|
||||
|
||||
class ScheduledTask(Base):
|
||||
"""定时任务表"""
|
||||
__tablename__ = "platform_scheduled_tasks"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
tenant_id = Column(String(50))
|
||||
task_name = Column(String(100), nullable=False)
|
||||
task_desc = Column(String(500))
|
||||
|
||||
# 调度配置
|
||||
schedule_type = Column(Enum('simple', 'cron'), nullable=False, default='simple')
|
||||
time_points = Column(JSON) # JSON数组 ["08:00", "12:00"]
|
||||
cron_expression = Column(String(100))
|
||||
timezone = Column(String(50), default='Asia/Shanghai')
|
||||
|
||||
# 执行类型
|
||||
execution_type = Column(Enum('webhook', 'script'), nullable=False, default='script')
|
||||
|
||||
# Webhook配置
|
||||
webhook_url = Column(String(500))
|
||||
|
||||
# 脚本配置
|
||||
script_content = Column(Text)
|
||||
script_deps = Column(Text) # 脚本依赖
|
||||
|
||||
# 输入参数
|
||||
input_params = Column(JSON) # JSON格式
|
||||
|
||||
# 重试配置
|
||||
retry_count = Column(Integer, default=0)
|
||||
retry_interval = Column(Integer, default=60)
|
||||
|
||||
# 告警配置
|
||||
alert_on_failure = Column(Boolean, default=False)
|
||||
alert_webhook = Column(String(500))
|
||||
|
||||
# 通知配置
|
||||
notify_channels = Column(JSON) # 通知渠道ID列表
|
||||
notify_wecom_app_id = Column(Integer) # 企微应用ID
|
||||
|
||||
# 状态
|
||||
is_enabled = Column(Boolean, default=True)
|
||||
last_run_at = Column(DateTime)
|
||||
last_run_status = Column(Enum('success', 'failed', 'running'))
|
||||
last_run_message = Column(Text)
|
||||
|
||||
created_at = Column(DateTime, default=datetime.now)
|
||||
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||
|
||||
|
||||
class TaskLog(Base):
|
||||
"""任务执行日志"""
|
||||
__tablename__ = "platform_task_logs"
|
||||
|
||||
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
||||
task_id = Column(Integer, nullable=False)
|
||||
tenant_id = Column(String(50))
|
||||
trace_id = Column(String(100))
|
||||
|
||||
status = Column(Enum('running', 'success', 'failed'), nullable=False)
|
||||
started_at = Column(DateTime, nullable=False)
|
||||
finished_at = Column(DateTime)
|
||||
duration_ms = Column(Integer)
|
||||
|
||||
output = Column(Text)
|
||||
error = Column(Text)
|
||||
retry_count = Column(Integer, default=0)
|
||||
|
||||
created_at = Column(TIMESTAMP, default=datetime.now)
|
||||
|
||||
|
||||
class ScriptVar(Base):
|
||||
"""脚本变量存储"""
|
||||
__tablename__ = "platform_script_vars"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
task_id = Column(Integer, nullable=False)
|
||||
tenant_id = Column(String(50))
|
||||
var_key = Column(String(100), nullable=False)
|
||||
var_value = Column(Text) # JSON格式
|
||||
|
||||
created_at = Column(TIMESTAMP, default=datetime.now)
|
||||
updated_at = Column(TIMESTAMP, default=datetime.now, onupdate=datetime.now)
|
||||
|
||||
|
||||
class Secret(Base):
|
||||
"""密钥管理"""
|
||||
__tablename__ = "platform_secrets"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
tenant_id = Column(String(50)) # NULL为全局
|
||||
secret_key = Column(String(100), nullable=False)
|
||||
secret_value = Column(Text, nullable=False)
|
||||
description = Column(String(255))
|
||||
|
||||
created_at = Column(TIMESTAMP, default=datetime.now)
|
||||
updated_at = Column(TIMESTAMP, default=datetime.now, onupdate=datetime.now)
|
||||
|
||||
Reference in New Issue
Block a user