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:
2026-03-09 16:24:32 +08:00
parent 9e56eff874
commit f1737f3bf0
3 changed files with 205 additions and 525 deletions

View File

@@ -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\"}";
}
}

View 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};
}
}
}

View File

@@ -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 '请求IDOpenClaw生成的唯一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');