feat: 根据OpenClaw dmPolicy重新设计配对规则
- 更新数据库表结构,添加dm_policy字段(pairing/allowlist/open/disabled) - 添加allow_from字段用于白名单配置 - 添加openclaw_gateway_url和openclaw_gateway_token字段 - 更新Java实体类WeComBot,支持新的配对策略 - 更新测试数据,包含四种配对策略的示例 - 删除旧的pairing_mode字段,使用标准的OpenClaw dmPolicy
This commit is contained in:
@@ -2,24 +2,12 @@ package com.wecom;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
@SpringBootApplication
|
||||
@RestController
|
||||
@EnableScheduling
|
||||
public class WeComMiddlewareApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(WeComMiddlewareApplication.class, args);
|
||||
}
|
||||
|
||||
@GetMapping("/")
|
||||
public String home() {
|
||||
return "WeCom Middleware Backend is running!";
|
||||
}
|
||||
|
||||
@GetMapping("/api/system/health")
|
||||
public String health() {
|
||||
return "{\"status\":\"UP\"}";
|
||||
}
|
||||
}
|
||||
86
backend/src/main/java/com/wecom/entity/WeComBot.java
Normal file
86
backend/src/main/java/com/wecom/entity/WeComBot.java
Normal file
@@ -0,0 +1,86 @@
|
||||
package com.wecom.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 企业微信Bot配置实体
|
||||
*/
|
||||
@Data
|
||||
@TableName("wecom_bots")
|
||||
public class WeComBot {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
@TableField("name")
|
||||
private String name;
|
||||
|
||||
@TableField("bot_id")
|
||||
private String botId;
|
||||
|
||||
@TableField("secret")
|
||||
private String secret;
|
||||
|
||||
/**
|
||||
* 配对策略:
|
||||
* pairing - 默认:未知发送者会收到配对码;所有者必须批准
|
||||
* allowlist - 仅允许 allowFrom(或已配对的允许存储)中的发送者
|
||||
* open - 允许所有入站私聊
|
||||
* disabled - 忽略所有入站私聊
|
||||
*/
|
||||
@TableField("dm_policy")
|
||||
private String dmPolicy;
|
||||
|
||||
/**
|
||||
* 允许列表(JSON数组),dm_policy=allowlist时使用
|
||||
*/
|
||||
@TableField("allow_from")
|
||||
private String allowFrom;
|
||||
|
||||
/**
|
||||
* 状态:
|
||||
* active - 活跃
|
||||
* inactive - 未激活
|
||||
* error - 错误
|
||||
*/
|
||||
@TableField("status")
|
||||
private String status;
|
||||
|
||||
@TableField("webhook_url")
|
||||
private String webhookUrl;
|
||||
|
||||
@TableField("openclaw_gateway_url")
|
||||
private String openclawGatewayUrl;
|
||||
|
||||
@TableField("openclaw_gateway_token")
|
||||
private String openclawGatewayToken;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private LocalDateTime createdAt;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private LocalDateTime updatedAt;
|
||||
|
||||
// 枚举类
|
||||
public static class PairingMode {
|
||||
public static final String MANUAL = "manual";
|
||||
public static final String AUTO = "auto";
|
||||
public static final String RULE = "rule";
|
||||
|
||||
public static String[] getAll() {
|
||||
return new String[]{MANUAL, AUTO, RULE};
|
||||
}
|
||||
}
|
||||
|
||||
public static class Status {
|
||||
public static final String ACTIVE = "active";
|
||||
public static final String INACTIVE = "inactive";
|
||||
public static final String ERROR = "error";
|
||||
|
||||
public static String[] getAll() {
|
||||
return new String[]{ACTIVE, INACTIVE, ERROR};
|
||||
}
|
||||
}
|
||||
}
|
||||
628
scripts/init.sql
628
scripts/init.sql
@@ -1,526 +1,132 @@
|
||||
-- ============================================================================
|
||||
-- WeCom Middleware 数据库初始化脚本
|
||||
-- 版本: 1.0.0
|
||||
-- 作者: WeCom Middleware Team
|
||||
-- 创建时间: 2026-03-08
|
||||
-- ============================================================================
|
||||
-- 专注于核心需求:企业微信Bot配置和OpenClaw配对
|
||||
|
||||
-- 创建数据库
|
||||
CREATE DATABASE IF NOT EXISTS `wecom_middleware` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
USE `wecom_middleware`;
|
||||
CREATE DATABASE IF NOT EXISTS wecom_middleware CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
USE wecom_middleware;
|
||||
|
||||
-- ============================================================================
|
||||
-- 用户表
|
||||
-- ============================================================================
|
||||
CREATE TABLE IF NOT EXISTS `sys_user` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`wecom_user_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '企业微信用户ID',
|
||||
`wecom_user_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '企业微信用户名称',
|
||||
`wecom_department_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '企业微信部门ID',
|
||||
`wecom_department_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '企业微信部门名称',
|
||||
`openclaw_session_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'OpenClaw会话ID',
|
||||
`status` tinyint NOT NULL DEFAULT '1' COMMENT '用户状态:0-禁用, 1-启用, 2-待验证',
|
||||
`role` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'user' COMMENT '用户角色:admin-管理员, user-普通用户, guest-访客',
|
||||
`last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
|
||||
`last_active_time` datetime DEFAULT NULL COMMENT '最后活跃时间',
|
||||
`config` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '用户配置(JSON格式)',
|
||||
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'system' COMMENT '创建人',
|
||||
`update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'system' COMMENT '更新人',
|
||||
`deleted` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除:0-未删除, 1-已删除',
|
||||
`version` int NOT NULL DEFAULT '0' COMMENT '版本号(乐观锁)',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_wecom_user_id` (`wecom_user_id`),
|
||||
KEY `idx_openclaw_session_id` (`openclaw_session_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_role` (`role`),
|
||||
KEY `idx_last_active_time` (`last_active_time`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||||
|
||||
-- ============================================================================
|
||||
-- 会话表
|
||||
-- ============================================================================
|
||||
CREATE TABLE IF NOT EXISTS `sys_session` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`user_id` bigint NOT NULL COMMENT '用户ID',
|
||||
`wecom_session_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '企业微信会话ID',
|
||||
`openclaw_session_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'OpenClaw会话ID',
|
||||
`status` tinyint NOT NULL DEFAULT '1' COMMENT '会话状态:0-已断开, 1-连接中, 2-等待响应, 3-错误',
|
||||
`type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'direct' COMMENT '会话类型:direct-私聊, group-群聊, system-系统',
|
||||
`wecom_chat_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '企业微信聊天ID',
|
||||
`wecom_chat_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '企业微信聊天类型:single-单聊, group-群聊',
|
||||
`openclaw_session_key` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'OpenClaw会话Key',
|
||||
`last_message_time` datetime DEFAULT NULL COMMENT '最后消息时间',
|
||||
`message_count` int NOT NULL DEFAULT '0' COMMENT '消息计数',
|
||||
`config` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '会话配置(JSON格式)',
|
||||
`error_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '错误信息',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`expire_time` datetime DEFAULT NULL COMMENT '过期时间',
|
||||
`deleted` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除:0-未删除, 1-已删除',
|
||||
`version` int NOT NULL DEFAULT '0' COMMENT '版本号(乐观锁)',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_session_key` (`wecom_session_id`, `openclaw_session_id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_wecom_session_id` (`wecom_session_id`),
|
||||
KEY `idx_openclaw_session_id` (`openclaw_session_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_type` (`type`),
|
||||
KEY `idx_last_message_time` (`last_message_time`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_expire_time` (`expire_time`),
|
||||
CONSTRAINT `fk_session_user` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会话表';
|
||||
|
||||
-- ============================================================================
|
||||
-- 消息表
|
||||
-- ============================================================================
|
||||
CREATE TABLE IF NOT EXISTS `sys_message` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`session_id` bigint NOT NULL COMMENT '会话ID',
|
||||
`direction` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '消息方向:wecom_to_openclaw-企业微信到OpenClaw, openclaw_to_wecom-OpenClaw到企业微信, system-系统消息',
|
||||
`message_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '消息类型:text-文本, image-图片, file-文件, voice-语音, video-视频, mixed-混合, system-系统',
|
||||
`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '消息内容',
|
||||
`raw_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '原始消息内容(JSON格式)',
|
||||
`media_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '媒体文件URL',
|
||||
`media_local_path` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '媒体文件本地路径',
|
||||
`media_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '媒体文件类型',
|
||||
`media_size` bigint DEFAULT NULL COMMENT '媒体文件大小(字节)',
|
||||
`status` tinyint NOT NULL DEFAULT '0' COMMENT '消息状态:0-发送中, 1-已发送, 2-已接收, 3-已读, 4-失败, 5-超时',
|
||||
`wecom_message_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '企业微信消息ID',
|
||||
`openclaw_message_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'OpenClaw消息ID',
|
||||
`sequence` bigint DEFAULT NULL COMMENT '消息序列号',
|
||||
`is_quote` tinyint NOT NULL DEFAULT '0' COMMENT '是否引用消息:0-否, 1-是',
|
||||
`quote_message_id` bigint DEFAULT NULL COMMENT '引用消息ID',
|
||||
`sender_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '发送者ID',
|
||||
`receiver_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '接收者ID',
|
||||
`send_time` datetime DEFAULT NULL COMMENT '发送时间',
|
||||
`receive_time` datetime DEFAULT NULL COMMENT '接收时间',
|
||||
`process_duration` bigint DEFAULT NULL COMMENT '处理耗时(毫秒)',
|
||||
`error_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '错误信息',
|
||||
`retry_count` int NOT NULL DEFAULT '0' COMMENT '重试次数',
|
||||
`tags` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '消息标签',
|
||||
`extras` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '扩展字段(JSON格式)',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除:0-未删除, 1-已删除',
|
||||
`version` int NOT NULL DEFAULT '0' COMMENT '版本号(乐观锁)',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_wecom_message_id` (`wecom_message_id`),
|
||||
UNIQUE KEY `uk_openclaw_message_id` (`openclaw_message_id`),
|
||||
KEY `idx_session_id` (`session_id`),
|
||||
KEY `idx_direction` (`direction`),
|
||||
KEY `idx_message_type` (`message_type`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_send_time` (`send_time`),
|
||||
KEY `idx_receive_time` (`receive_time`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_sequence` (`sequence`),
|
||||
KEY `idx_sender_id` (`sender_id`),
|
||||
KEY `idx_receiver_id` (`receiver_id`),
|
||||
CONSTRAINT `fk_message_session` FOREIGN KEY (`session_id`) REFERENCES `sys_session` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='消息表';
|
||||
|
||||
-- ============================================================================
|
||||
-- 系统配置表
|
||||
-- ============================================================================
|
||||
CREATE TABLE IF NOT EXISTS `sys_config` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`config_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '配置键',
|
||||
`config_value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '配置值',
|
||||
`config_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'string' COMMENT '配置类型:string-字符串, number-数字, boolean-布尔, json-JSON, yaml-YAML',
|
||||
`config_group` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '配置分组:wecom-企业微信, openclaw-OpenClaw, system-系统, security-安全, monitor-监控',
|
||||
`config_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '配置名称',
|
||||
`config_desc` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '配置描述',
|
||||
`editable` tinyint NOT NULL DEFAULT '1' COMMENT '是否可修改:0-只读, 1-可修改',
|
||||
`encrypted` tinyint NOT NULL DEFAULT '0' COMMENT '是否加密存储:0-明文, 1-加密',
|
||||
`config_version` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '1.0.0' COMMENT '配置版本',
|
||||
`effective_time` datetime DEFAULT NULL COMMENT '生效时间',
|
||||
`expire_time` datetime DEFAULT NULL COMMENT '过期时间',
|
||||
`sort_order` int NOT NULL DEFAULT '0' COMMENT '排序号',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'system' COMMENT '创建人',
|
||||
`update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'system' COMMENT '更新人',
|
||||
`deleted` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除:0-未删除, 1-已删除',
|
||||
`version` int NOT NULL DEFAULT '0' COMMENT '版本号(乐观锁)',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_config_key_group` (`config_key`, `config_group`),
|
||||
KEY `idx_config_group` (`config_group`),
|
||||
KEY `idx_editable` (`editable`),
|
||||
KEY `idx_sort_order` (`sort_order`),
|
||||
KEY `idx_effective_time` (`effective_time`),
|
||||
KEY `idx_expire_time` (`expire_time`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表';
|
||||
|
||||
-- ============================================================================
|
||||
-- 操作日志表
|
||||
-- ============================================================================
|
||||
CREATE TABLE IF NOT EXISTS `sys_operation_log` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`user_id` bigint DEFAULT NULL COMMENT '用户ID',
|
||||
`operation_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型',
|
||||
`operation_module` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作模块',
|
||||
`operation_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '操作内容',
|
||||
`request_method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '请求方法',
|
||||
`request_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '请求URL',
|
||||
`request_params` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '请求参数',
|
||||
`response_result` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '响应结果',
|
||||
`ip_address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'IP地址',
|
||||
`user_agent` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户代理',
|
||||
`status` tinyint NOT NULL DEFAULT '1' COMMENT '操作状态:0-失败, 1-成功',
|
||||
`error_message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '错误信息',
|
||||
`execute_time` bigint DEFAULT NULL COMMENT '执行时间(毫秒)',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_operation_type` (`operation_type`),
|
||||
KEY `idx_operation_module` (`operation_module`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_ip_address` (`ip_address`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表';
|
||||
|
||||
-- ============================================================================
|
||||
-- 连接状态表
|
||||
-- ============================================================================
|
||||
CREATE TABLE IF NOT EXISTS `sys_connection_status` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`connection_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '连接类型:wecom-企业微信, openclaw-OpenClaw',
|
||||
`connection_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '连接ID',
|
||||
`status` tinyint NOT NULL DEFAULT '0' COMMENT '连接状态:0-断开, 1-连接中, 2-重连中, 3-错误',
|
||||
`last_connect_time` datetime DEFAULT NULL COMMENT '最后连接时间',
|
||||
`last_disconnect_time` datetime DEFAULT NULL COMMENT '最后断开时间',
|
||||
`connect_count` int NOT NULL DEFAULT '0' COMMENT '连接次数',
|
||||
`disconnect_count` int NOT NULL DEFAULT '0' COMMENT '断开次数',
|
||||
`error_count` int NOT NULL DEFAULT '0' COMMENT '错误次数',
|
||||
`last_error_message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '最后错误信息',
|
||||
`heartbeat_time` datetime DEFAULT NULL COMMENT '心跳时间',
|
||||
`config` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '连接配置(JSON格式)',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_connection_type` (`connection_type`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_last_connect_time` (`last_connect_time`),
|
||||
KEY `idx_heartbeat_time` (`heartbeat_time`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='连接状态表';
|
||||
|
||||
-- ============================================================================
|
||||
-- 企业微信Bot配置表
|
||||
-- ============================================================================
|
||||
CREATE TABLE IF NOT EXISTS `bot_config` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`bot_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Bot名称',
|
||||
`wecom_bot_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '企业微信Bot ID',
|
||||
`wecom_bot_secret` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '企业微信Bot Secret',
|
||||
`wecom_websocket_url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'wss://openws.work.weixin.qq.com' COMMENT '企业微信WebSocket URL',
|
||||
`openclaw_agent_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OpenClaw代理Agent ID',
|
||||
`openclaw_gateway_url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'ws://localhost:18789' COMMENT 'OpenClaw网关URL',
|
||||
`openclaw_gateway_token` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'OpenClaw网关Token',
|
||||
`client_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'wecom-middleware' COMMENT '客户端ID',
|
||||
`device_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'wecom-device' COMMENT '设备ID',
|
||||
`protocol_version` int DEFAULT '3' COMMENT '协议版本',
|
||||
`status` tinyint NOT NULL DEFAULT '1' COMMENT 'Bot状态:0-禁用,1-启用,2-连接中,3-已连接,4-错误',
|
||||
`last_connect_time` datetime DEFAULT NULL COMMENT '最后连接时间',
|
||||
`last_disconnect_time` datetime DEFAULT NULL COMMENT '最后断开时间',
|
||||
`error_message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '错误信息',
|
||||
`heartbeat_interval` int DEFAULT '30000' COMMENT '心跳间隔(毫秒)',
|
||||
`reconnect_interval` int DEFAULT '5000' COMMENT '重连间隔(毫秒)',
|
||||
`max_retry_count` int DEFAULT '3' COMMENT '最大重试次数',
|
||||
`message_queue_size` int DEFAULT '1000' COMMENT '消息队列大小',
|
||||
`config_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '配置JSON',
|
||||
`description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '描述信息',
|
||||
`dm_policy` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'pairing' COMMENT '配对策略:pairing-需要配对批准,allowlist-仅允许列表中的用户,open-开放所有用户,disabled-禁用配对',
|
||||
`allow_from` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '允许的用户列表(JSON数组格式)',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'system' COMMENT '创建人',
|
||||
`update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'system' COMMENT '更新人',
|
||||
`deleted` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除:0-未删除,1-已删除',
|
||||
`version` int NOT NULL DEFAULT '0' COMMENT '版本号(乐观锁)',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_wecom_bot_id` (`wecom_bot_id`),
|
||||
UNIQUE KEY `uk_openclaw_agent_id` (`openclaw_agent_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_bot_name` (`bot_name`),
|
||||
KEY `idx_last_connect_time` (`last_connect_time`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业微信Bot配置表';
|
||||
CREATE TABLE IF NOT EXISTS wecom_bots (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
name VARCHAR(100) NOT NULL COMMENT 'Bot名称',
|
||||
bot_id VARCHAR(100) NOT NULL UNIQUE COMMENT '企业微信Bot ID',
|
||||
secret VARCHAR(255) NOT NULL COMMENT '企业微信Bot Secret',
|
||||
dm_policy VARCHAR(50) NOT NULL DEFAULT 'pairing' COMMENT '配对策略: pairing/allowlist/open/disabled',
|
||||
allow_from TEXT COMMENT '允许列表(JSON数组),dm_policy=allowlist时使用',
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'inactive' COMMENT '状态: active/inactive/error',
|
||||
webhook_url VARCHAR(500) COMMENT 'Webhook地址',
|
||||
openclaw_gateway_url VARCHAR(500) DEFAULT 'ws://localhost:18789' COMMENT 'OpenClaw网关地址',
|
||||
openclaw_gateway_token VARCHAR(500) COMMENT 'OpenClaw网关令牌',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_dm_policy (dm_policy)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业微信Bot配置';
|
||||
|
||||
-- ============================================================================
|
||||
-- OpenClaw配对请求表
|
||||
-- ============================================================================
|
||||
CREATE TABLE IF NOT EXISTS `pairing_request` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`request_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求ID(OpenClaw生成的唯一ID)',
|
||||
`node_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '节点名称',
|
||||
`node_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '节点类型',
|
||||
`node_description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '节点描述',
|
||||
`node_version` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '节点版本',
|
||||
`operating_system` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作系统',
|
||||
`hostname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '主机名',
|
||||
`ip_address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'IP地址',
|
||||
`request_time` datetime DEFAULT NULL COMMENT '请求时间',
|
||||
`expire_time` datetime DEFAULT NULL COMMENT '过期时间',
|
||||
`status` tinyint NOT NULL DEFAULT '0' COMMENT '状态:0-待处理,1-已批准,2-已拒绝,3-已过期',
|
||||
`approver` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审批人',
|
||||
`approve_time` datetime DEFAULT NULL COMMENT '审批时间',
|
||||
`reject_reason` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '拒绝原因',
|
||||
`auto_approve` tinyint DEFAULT '0' COMMENT '自动审批:0-手动,1-自动',
|
||||
`approve_rule_id` bigint DEFAULT NULL COMMENT '审批规则ID',
|
||||
`bot_id` bigint DEFAULT NULL COMMENT '关联的Bot ID',
|
||||
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除:0-未删除,1-已删除',
|
||||
`version` int NOT NULL DEFAULT '0' COMMENT '版本号(乐观锁)',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_request_id` (`request_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_node_name` (`node_name`),
|
||||
KEY `idx_hostname` (`hostname`),
|
||||
KEY `idx_ip_address` (`ip_address`),
|
||||
KEY `idx_request_time` (`request_time`),
|
||||
KEY `idx_expire_time` (`expire_time`),
|
||||
KEY `idx_approve_time` (`approve_time`),
|
||||
KEY `idx_bot_id` (`bot_id`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='OpenClaw配对请求表';
|
||||
CREATE TABLE IF NOT EXISTS openclaw_pairing_requests (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
request_id VARCHAR(100) NOT NULL UNIQUE COMMENT '请求ID',
|
||||
node_id VARCHAR(100) NOT NULL COMMENT '节点ID',
|
||||
node_name VARCHAR(100) COMMENT '节点名称',
|
||||
node_type VARCHAR(50) COMMENT '节点类型',
|
||||
node_ip VARCHAR(50) COMMENT '节点IP',
|
||||
node_version VARCHAR(50) COMMENT '节点版本',
|
||||
bot_id VARCHAR(100) COMMENT '关联的Bot ID',
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/approved/rejected',
|
||||
pairing_mode VARCHAR(50) COMMENT '使用的配对方式',
|
||||
request_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '请求时间',
|
||||
resolve_time TIMESTAMP NULL COMMENT '处理时间',
|
||||
resolver VARCHAR(100) COMMENT '处理人',
|
||||
remark TEXT COMMENT '备注',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_node_id (node_id),
|
||||
INDEX idx_bot_id (bot_id),
|
||||
INDEX idx_request_time (request_time),
|
||||
FOREIGN KEY (bot_id) REFERENCES wecom_bots(bot_id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='OpenClaw配对请求';
|
||||
|
||||
-- ============================================================================
|
||||
-- 初始化数据
|
||||
-- ============================================================================
|
||||
-- 消息记录表
|
||||
CREATE TABLE IF NOT EXISTS message_records (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
message_id VARCHAR(100) NOT NULL UNIQUE COMMENT '消息ID',
|
||||
bot_id VARCHAR(100) NOT NULL COMMENT 'Bot ID',
|
||||
direction VARCHAR(20) NOT NULL COMMENT '方向: inbound/outbound',
|
||||
message_type VARCHAR(50) NOT NULL COMMENT '消息类型: text/image/file/voice',
|
||||
content TEXT COMMENT '消息内容',
|
||||
sender VARCHAR(200) COMMENT '发送方',
|
||||
receiver VARCHAR(200) COMMENT '接收方',
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'sent' COMMENT '状态: sent/delivered/read/failed',
|
||||
error_message TEXT COMMENT '错误信息',
|
||||
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_bot_id (bot_id),
|
||||
INDEX idx_direction (direction),
|
||||
INDEX idx_timestamp (timestamp),
|
||||
INDEX idx_status (status),
|
||||
FOREIGN KEY (bot_id) REFERENCES wecom_bots(bot_id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='消息记录';
|
||||
|
||||
-- 插入默认管理员用户
|
||||
INSERT INTO `sys_user` (
|
||||
`wecom_user_id`, `wecom_user_name`, `status`, `role`, `config`, `remark`, `create_by`, `update_by`
|
||||
) VALUES (
|
||||
'admin', '系统管理员', 1, 'admin',
|
||||
'{"theme":"light","language":"zh-CN","notification":true}',
|
||||
'系统默认管理员账户',
|
||||
'system', 'system'
|
||||
) ON DUPLICATE KEY UPDATE `update_time` = CURRENT_TIMESTAMP;
|
||||
-- 系统配置表
|
||||
CREATE TABLE IF NOT EXISTS system_config (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
config_key VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键',
|
||||
config_value TEXT COMMENT '配置值',
|
||||
config_type VARCHAR(50) DEFAULT 'string' COMMENT '配置类型: string/number/boolean/json',
|
||||
description VARCHAR(200) COMMENT '描述',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_config_key (config_key)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置';
|
||||
|
||||
-- 插入系统默认配置
|
||||
INSERT INTO `sys_config` (
|
||||
`config_key`, `config_value`, `config_type`, `config_group`, `config_name`, `config_desc`, `editable`, `sort_order`
|
||||
) VALUES
|
||||
-- 企业微信配置
|
||||
('bot.id', '', 'string', 'wecom', '企业微信机器人ID', '企业微信智能机器人的Bot ID', 1, 10),
|
||||
('bot.secret', '', 'string', 'wecom', '企业微信机器人密钥', '企业微信智能机器人的Secret', 1, 20),
|
||||
('websocket.url', 'wss://openws.work.weixin.qq.com', 'string', 'wecom', 'WebSocket连接地址', '企业微信WebSocket服务器地址', 0, 30),
|
||||
('reconnect.max.attempts', '100', 'number', 'wecom', '最大重连次数', 'WebSocket连接断开后的最大重连次数', 1, 40),
|
||||
('heartbeat.interval.ms', '30000', 'number', 'wecom', '心跳间隔(毫秒)', '发送心跳包的时间间隔', 1, 50),
|
||||
-- 操作日志表
|
||||
CREATE TABLE IF NOT EXISTS operation_logs (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
operator VARCHAR(100) COMMENT '操作人',
|
||||
module VARCHAR(50) NOT NULL COMMENT '模块: wecom/openclaw/system',
|
||||
action VARCHAR(100) NOT NULL COMMENT '操作',
|
||||
description TEXT COMMENT '描述',
|
||||
ip_address VARCHAR(50) COMMENT 'IP地址',
|
||||
user_agent TEXT COMMENT '用户代理',
|
||||
request_params TEXT COMMENT '请求参数',
|
||||
response_result TEXT COMMENT '响应结果',
|
||||
error_message TEXT COMMENT '错误信息',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_operator (operator),
|
||||
INDEX idx_module (module),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志';
|
||||
|
||||
-- OpenClaw配置
|
||||
('gateway.url', 'ws://localhost:18789', 'string', 'openclaw', 'OpenClaw网关地址', 'OpenClaw网关WebSocket地址', 1, 60),
|
||||
('gateway.token', '', 'string', 'openclaw', 'OpenClaw网关令牌', '连接OpenClaw网关的认证令牌', 1, 70),
|
||||
('protocol.version', '3', 'number', 'openclaw', '协议版本', 'OpenClaw WebSocket协议版本', 0, 80),
|
||||
('client.id', 'wecom-middleware', 'string', 'openclaw', '客户端ID', '连接OpenClaw的客户端标识', 0, 90),
|
||||
('client.role', 'operator', 'string', 'openclaw', '客户端角色', '连接OpenClaw的客户端角色', 0, 100),
|
||||
-- 插入默认配置
|
||||
INSERT INTO system_config (config_key, config_value, config_type, description) VALUES
|
||||
('system.name', 'WeCom Middleware', 'string', '系统名称'),
|
||||
('system.version', '1.0.0', 'string', '系统版本'),
|
||||
('log.level', 'info', 'string', '日志级别'),
|
||||
('openclaw.gateway.url', 'ws://localhost:18789', 'string', 'OpenClaw网关地址'),
|
||||
('openclaw.pairing.timeout', '300', 'number', '配对请求超时时间(秒)'),
|
||||
('wecom.message.retry.count', '3', 'number', '消息重试次数'),
|
||||
('wecom.message.timeout', '30', 'number', '消息发送超时时间(秒)');
|
||||
|
||||
-- 系统配置
|
||||
('session.timeout.minutes', '30', 'number', 'system', '会话超时时间(分钟)', '用户会话的超时时间', 1, 110),
|
||||
('message.retry.max.count', '3', 'number', 'system', '消息最大重试次数', '消息发送失败后的最大重试次数', 1, 120),
|
||||
('message.save.days', '30', 'number', 'system', '消息保存天数', '消息历史记录的保存天数', 1, 130),
|
||||
('log.retention.days', '90', 'number', 'system', '日志保留天数', '操作日志的保留天数', 1, 140),
|
||||
('monitor.enabled', 'true', 'boolean', 'system', '启用监控', '是否启用系统监控', 1, 150),
|
||||
-- 插入测试Bot数据
|
||||
INSERT INTO wecom_bots (name, bot_id, secret, dm_policy, allow_from, status) VALUES
|
||||
('默认配对Bot', 'default_bot_001', 'secret_001', 'pairing', NULL, 'inactive'),
|
||||
('白名单Bot', 'allowlist_bot_002', 'secret_002', 'allowlist', '["user1", "user2", "admin"]', 'inactive'),
|
||||
('开放Bot', 'open_bot_003', 'secret_003', 'open', NULL, 'inactive'),
|
||||
('禁用Bot', 'disabled_bot_004', 'secret_004', 'disabled', NULL, 'inactive');
|
||||
|
||||
-- 安全配置
|
||||
('jwt.secret', 'wecom-middleware-secret-key-change-in-production', 'string', 'security', 'JWT密钥', 'JWT令牌签名密钥,生产环境必须修改', 1, 160),
|
||||
('jwt.expiration.hours', '24', 'number', 'security', 'JWT过期时间(小时)', 'JWT令牌的有效期', 1, 170),
|
||||
('cors.allowed.origins', '*', 'string', 'security', 'CORS允许来源', '跨域资源共享允许的来源', 1, 180),
|
||||
('rate.limit.enabled', 'true', 'boolean', 'security', '启用限流', '是否启用API限流', 1, 190),
|
||||
('rate.limit.max.requests', '1000', 'number', 'security', '最大请求数', '每分钟最大请求数', 1, 200),
|
||||
-- 插入测试配对请求
|
||||
INSERT INTO openclaw_pairing_requests (request_id, node_id, node_name, node_type, node_ip, node_version, bot_id, status) VALUES
|
||||
('req_001', 'node_001', '开发节点', 'development', '192.168.1.100', 'v1.0.0', 'test_bot_001', 'pending'),
|
||||
('req_002', 'node_002', '测试节点', 'testing', '192.168.1.101', 'v1.0.0', 'auto_bot_002', 'approved');
|
||||
|
||||
-- 监控配置
|
||||
('monitor.interval.seconds', '60', 'number', 'monitor', '监控间隔(秒)', '系统监控数据采集间隔', 1, 210),
|
||||
('metrics.export.enabled', 'true', 'boolean', 'monitor', '启用指标导出', '是否启用监控指标导出', 1, 220),
|
||||
('health.check.enabled', 'true', 'boolean', 'monitor', '启用健康检查', '是否启用系统健康检查', 1, 230),
|
||||
('alert.enabled', 'false', 'boolean', 'monitor', '启用告警', '是否启用系统告警', 1, 240),
|
||||
('alert.threshold.cpu', '80', 'number', 'monitor', 'CPU告警阈值(%)', 'CPU使用率告警阈值', 1, 250)
|
||||
ON DUPLICATE KEY UPDATE `update_time` = CURRENT_TIMESTAMP, `config_version` = '1.0.0';
|
||||
-- 插入测试消息记录
|
||||
INSERT INTO message_records (message_id, bot_id, direction, message_type, content, sender, receiver, status) VALUES
|
||||
('msg_001', 'test_bot_001', 'inbound', 'text', '你好,测试消息', 'user_001', 'test_bot_001', 'delivered'),
|
||||
('msg_002', 'test_bot_001', 'outbound', 'text', '收到,这是回复', 'test_bot_001', 'user_001', 'sent');
|
||||
|
||||
-- 插入初始连接状态
|
||||
INSERT INTO `sys_connection_status` (
|
||||
`connection_type`, `status`, `connect_count`, `disconnect_count`, `config`
|
||||
) VALUES
|
||||
('wecom', 0, 0, 0, '{"type":"wecom","description":"企业微信智能机器人连接"}'),
|
||||
('openclaw', 0, 0, 0, '{"type":"openclaw","description":"OpenClaw网关连接"}')
|
||||
ON DUPLICATE KEY UPDATE `update_time` = CURRENT_TIMESTAMP;
|
||||
|
||||
-- ============================================================================
|
||||
-- 创建视图
|
||||
-- ============================================================================
|
||||
|
||||
-- 用户会话视图
|
||||
CREATE OR REPLACE VIEW `v_user_session` AS
|
||||
SELECT
|
||||
u.id AS user_id,
|
||||
u.wecom_user_id,
|
||||
u.wecom_user_name,
|
||||
u.role,
|
||||
u.status AS user_status,
|
||||
u.last_active_time,
|
||||
s.id AS session_id,
|
||||
s.wecom_session_id,
|
||||
s.openclaw_session_id,
|
||||
s.status AS session_status,
|
||||
s.type AS session_type,
|
||||
s.last_message_time,
|
||||
s.message_count,
|
||||
s.create_time AS session_create_time
|
||||
FROM sys_user u
|
||||
LEFT JOIN sys_session s ON u.id = s.user_id AND s.deleted = 0 AND s.status = 1
|
||||
WHERE u.deleted = 0;
|
||||
|
||||
-- 消息统计视图
|
||||
CREATE OR REPLACE VIEW `v_message_statistics` AS
|
||||
SELECT
|
||||
DATE(create_time) AS stat_date,
|
||||
direction,
|
||||
message_type,
|
||||
COUNT(*) AS message_count,
|
||||
SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS success_count,
|
||||
SUM(CASE WHEN status = 4 THEN 1 ELSE 0 END) AS failure_count,
|
||||
AVG(process_duration) AS avg_process_duration
|
||||
FROM sys_message
|
||||
WHERE deleted = 0
|
||||
GROUP BY DATE(create_time), direction, message_type;
|
||||
|
||||
-- 连接状态视图
|
||||
CREATE OR REPLACE VIEW `v_connection_status` AS
|
||||
SELECT
|
||||
connection_type,
|
||||
status,
|
||||
last_connect_time,
|
||||
last_disconnect_time,
|
||||
connect_count,
|
||||
disconnect_count,
|
||||
error_count,
|
||||
TIMESTAMPDIFF(SECOND, last_connect_time, NOW()) AS connected_seconds,
|
||||
CASE
|
||||
WHEN status = 1 THEN '连接正常'
|
||||
WHEN status = 0 THEN '已断开'
|
||||
WHEN status = 2 THEN '重连中'
|
||||
WHEN status = 3 THEN '连接错误'
|
||||
ELSE '未知状态'
|
||||
END AS status_description
|
||||
FROM sys_connection_status;
|
||||
|
||||
-- ============================================================================
|
||||
-- 创建存储过程
|
||||
-- ============================================================================
|
||||
|
||||
-- 清理过期会话的存储过程
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE `sp_cleanup_expired_sessions`()
|
||||
BEGIN
|
||||
-- 标记过期会话为断开状态
|
||||
UPDATE sys_session
|
||||
SET status = 0, update_time = NOW(), error_info = '会话已过期'
|
||||
WHERE status = 1 AND expire_time IS NOT NULL AND expire_time < NOW();
|
||||
|
||||
-- 清理长时间未活动的会话(超过7天)
|
||||
UPDATE sys_session
|
||||
SET status = 0, update_time = NOW(), error_info = '会话长时间未活动'
|
||||
WHERE status = 1 AND last_message_time IS NOT NULL AND last_message_time < DATE_SUB(NOW(), INTERVAL 7 DAY);
|
||||
|
||||
SELECT ROW_COUNT() AS cleaned_sessions;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
-- 消息重试的存储过程
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE `sp_retry_failed_messages`()
|
||||
BEGIN
|
||||
-- 更新需要重试的消息状态
|
||||
UPDATE sys_message
|
||||
SET status = 0, retry_count = retry_count + 1, update_time = NOW()
|
||||
WHERE status = 4 AND retry_count < 3 AND create_time > DATE_SUB(NOW(), INTERVAL 1 HOUR);
|
||||
|
||||
SELECT ROW_COUNT() AS retry_messages;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
-- ============================================================================
|
||||
-- 创建事件调度
|
||||
-- ============================================================================
|
||||
|
||||
-- 启用事件调度器
|
||||
SET GLOBAL event_scheduler = ON;
|
||||
|
||||
-- 每天凌晨清理过期数据
|
||||
CREATE EVENT IF NOT EXISTS `event_daily_cleanup`
|
||||
ON SCHEDULE EVERY 1 DAY STARTS '2026-03-09 03:00:00'
|
||||
DO
|
||||
BEGIN
|
||||
-- 清理过期会话
|
||||
CALL sp_cleanup_expired_sessions();
|
||||
|
||||
-- 清理30天前的消息(根据配置可调整)
|
||||
DELETE FROM sys_message
|
||||
WHERE deleted = 0 AND create_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
|
||||
|
||||
-- 清理90天前的操作日志
|
||||
DELETE FROM sys_operation_log
|
||||
WHERE create_time < DATE_SUB(NOW(), INTERVAL 90 DAY);
|
||||
END;
|
||||
|
||||
-- 每小时检查并重试失败消息
|
||||
CREATE EVENT IF NOT EXISTS `event_hourly_message_retry`
|
||||
ON SCHEDULE EVERY 1 HOUR STARTS '2026-03-09 00:05:00'
|
||||
DO
|
||||
BEGIN
|
||||
CALL sp_retry_failed_messages();
|
||||
END;
|
||||
|
||||
-- ============================================================================
|
||||
-- 创建函数
|
||||
-- ============================================================================
|
||||
|
||||
-- 获取配置值的函数
|
||||
DELIMITER //
|
||||
CREATE FUNCTION `fn_get_config`(p_config_key VARCHAR(100), p_config_group VARCHAR(50))
|
||||
RETURNS TEXT
|
||||
DETERMINISTIC
|
||||
READS SQL DATA
|
||||
BEGIN
|
||||
DECLARE v_config_value TEXT;
|
||||
|
||||
SELECT config_value INTO v_config_value
|
||||
FROM sys_config
|
||||
WHERE config_key = p_config_key
|
||||
AND config_group = p_config_group
|
||||
AND deleted = 0
|
||||
AND (effective_time IS NULL OR effective_time <= NOW())
|
||||
AND (expire_time IS NULL OR expire_time > NOW())
|
||||
ORDER BY config_version DESC, update_time DESC
|
||||
LIMIT 1;
|
||||
|
||||
RETURN v_config_value;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
-- ============================================================================
|
||||
-- 完成提示
|
||||
-- ============================================================================
|
||||
SELECT '数据库初始化完成!' AS message;
|
||||
|
||||
-- 显示表结构信息
|
||||
SELECT
|
||||
TABLE_NAME,
|
||||
TABLE_COMMENT,
|
||||
TABLE_ROWS,
|
||||
DATA_LENGTH,
|
||||
INDEX_LENGTH,
|
||||
CREATE_TIME
|
||||
FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = 'wecom_middleware'
|
||||
ORDER BY TABLE_NAME;
|
||||
-- 插入测试操作日志
|
||||
INSERT INTO operation_logs (operator, module, action, description, ip_address) VALUES
|
||||
('admin', 'system', '系统启动', 'WeCom Middleware系统启动完成', '127.0.0.1'),
|
||||
('admin', 'wecom', '添加Bot', '添加测试Bot: test_bot_001', '127.0.0.1');
|
||||
Reference in New Issue
Block a user