-- ============================================================ -- 企业微信模块建表脚本(活动 / 报名 / 通知) -- 目标库:mom-jssm(36.213.150.237:10000) -- 说明:项目不使用多租户,因此不含 tenant_id 字段 -- -- 活动封面、报名提交的图片/附件都不落本模块的表: -- 统一走 system_storage_attachment 中间表, -- 活动封面 record_type = 'wxcp_activity',报名附件 record_type = 'wxcp_activity_signup' -- ============================================================ -- ---------------------------- -- 活动主表 -- ---------------------------- CREATE TABLE IF NOT EXISTS `wxcp_activity` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', `title` varchar(128) NOT NULL COMMENT '活动标题', `content` text COMMENT '活动详情', `location` varchar(255) DEFAULT '' COMMENT '活动地点', `start_time` datetime DEFAULT NULL COMMENT '活动开始时间', `end_time` datetime DEFAULT NULL COMMENT '活动结束时间', `signup_start_time` datetime DEFAULT NULL COMMENT '报名开始时间', `signup_end_time` datetime DEFAULT NULL COMMENT '报名结束时间', `signup_limit` int NOT NULL DEFAULT 0 COMMENT '报名人数上限,0 表示不限', `signup_count` int NOT NULL DEFAULT 0 COMMENT '已报名人数(冗余,便于列表展示)', `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态:0草稿 1已发布 2已结束 3已取消', `push_scope` tinyint NOT NULL DEFAULT 0 COMMENT '推送范围:0全员 1指定部门 2指定成员', `push_target` varchar(1024) DEFAULT '' COMMENT '推送目标:部门ID或成员账号,多个用逗号分隔', `push_status` tinyint NOT NULL DEFAULT 0 COMMENT '推送状态:0未推送 1已推送', `push_time` datetime DEFAULT NULL COMMENT '最近推送时间', `remark` varchar(512) DEFAULT '' COMMENT '备注', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`), KEY `idx_status` (`status`), KEY `idx_start_time` (`start_time`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '企业微信活动'; -- ---------------------------- -- 活动报名记录表 -- 唯一性(同一活动同一成员只能报一次)在 Service 层校验,不加唯一索引—— -- 因为 deleted 是逻辑删除,唯一索引会与"取消报名后重新报名"冲突。 -- ---------------------------- CREATE TABLE IF NOT EXISTS `wxcp_activity_signup` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', `activity_id` bigint NOT NULL COMMENT '活动编号', `wx_user_id` varchar(128) DEFAULT '' COMMENT '企业微信成员账号(UserId),为空表示未通过企业微信授权直接填写表单', `name` varchar(64) DEFAULT '' COMMENT '姓名', `mobile` varchar(32) DEFAULT '' COMMENT '手机号', `dept_name` varchar(255) DEFAULT '' COMMENT '部门名称', `content` text COMMENT '参与说明(成员提交的文字内容)', `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态:0已报名 1已取消 2已签到', `signup_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '报名时间', `check_in_time` datetime DEFAULT NULL COMMENT '签到时间', `remark` varchar(512) DEFAULT '' COMMENT '备注', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`), KEY `idx_activity_id` (`activity_id`), KEY `idx_wx_user_id` (`wx_user_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '企业微信活动报名记录'; -- ---------------------------- -- 通知表 -- ---------------------------- CREATE TABLE IF NOT EXISTS `wxcp_notice` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', `title` varchar(128) NOT NULL COMMENT '通知标题', `content` text COMMENT '通知正文', `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态:0草稿 1已发布 2已撤回', `push_scope` tinyint NOT NULL DEFAULT 0 COMMENT '推送范围:0全员 1指定部门 2指定成员', `push_target` varchar(1024) DEFAULT '' COMMENT '推送目标:部门ID或成员账号,多个用逗号分隔', `push_status` tinyint NOT NULL DEFAULT 0 COMMENT '推送状态:0未推送 1已推送', `push_time` datetime DEFAULT NULL COMMENT '最近推送时间', `remark` varchar(512) DEFAULT '' COMMENT '备注', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`), KEY `idx_status` (`status`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '企业微信通知'; -- ============================================================ -- 升级脚本:封面图从「业务表存地址」改为「附件中间表」 -- 已建过库的环境执行一次即可;新库执行上面的 CREATE TABLE 已是最新结构,无需执行 -- MySQL 的 ADD/DROP COLUMN 不支持 IF NOT EXISTS,这里先判断再执行 -- ============================================================ SET @exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'wxcp_activity' AND column_name = 'cover_url'); SET @sql = IF(@exists > 0, 'ALTER TABLE `wxcp_activity` DROP COLUMN `cover_url`', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;