liu
11 小时以前 5d34bdd3c426bb2ca5f6627424ae67984f745603
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
-- ============================================================
-- 企业微信模块建表脚本(活动 / 报名 / 通知)
-- 目标库:mom-jssm(36.213.150.237:10000)
-- 说明:项目不使用多租户,因此不含 tenant_id 字段
--
-- 活动封面、详情图片、报名提交的图片/附件都不落本模块的表:
-- 统一走 system_storage_attachment 中间表,
-- 活动封面 record_type = 'wxcp_activity',活动详情图片 record_type = 'wxcp_activity_detail',
-- 图片通知 record_type = 'wxcp_activity_image',附件通知 record_type = 'wxcp_activity_file',
-- 报名附件 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 '活动标题',
  `activity_type`      tinyint      NOT NULL DEFAULT 5                     COMMENT '活动模板:1纯通知 2单条消息 3图片通知 4附件通知 5数据采集/评价',
  `content`            text                                                COMMENT '活动详情',
  `button_text`        varchar(32)           DEFAULT NULL                  COMMENT '卡片按钮文案',
  `rating_enabled`     bit(1)       NOT NULL DEFAULT b'0'                  COMMENT '是否开启评价',
  `rating_title`       varchar(128)          DEFAULT NULL                  COMMENT '评价标题',
  `rating_max`         int          NOT NULL DEFAULT 5                     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 '参与说明(成员提交的文字内容)',
  `rating_score`  int                   DEFAULT NULL                      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 '通知正文',
  `notice_type`   tinyint      NOT NULL DEFAULT 1                         COMMENT '通知模板:1纯文本 2图文卡片(填报/链接) 3文件通知 4图文消息',
  `summary`       varchar(512)          DEFAULT NULL                      COMMENT '摘要(图文卡片/图文消息)',
  `link_url`      varchar(1024)         DEFAULT NULL                      COMMENT '跳转链接(填报/详情)',
  `link_btn_text` varchar(32)           DEFAULT NULL                      COMMENT '链接按钮文案',
  `cover_url`     varchar(1024)         DEFAULT NULL                      COMMENT '图文消息封面图地址',
  `file_blob_id`  bigint                DEFAULT NULL                      COMMENT '文件通知的附件 Blob ID',
  `file_name`     varchar(255)          DEFAULT NULL                      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;
 
-- ============================================================
-- 活动自定义采集字段(数据采集/评价模板使用)
-- ============================================================
CREATE TABLE IF NOT EXISTS `wxcp_activity_field` (
  `id`            bigint       NOT NULL AUTO_INCREMENT                    COMMENT '编号',
  `activity_id`   bigint       NOT NULL                                   COMMENT '活动编号',
  `field_label`   varchar(128) NOT NULL                                   COMMENT '字段名称',
  `field_type`    varchar(32)  NOT NULL DEFAULT 'text'                    COMMENT '字段类型:text/textarea/number/date/select/radio/checkbox/rating',
  `field_options` varchar(1000)         DEFAULT NULL                      COMMENT '选项,多个用英文逗号分隔',
  `required`      bit(1)       NOT NULL DEFAULT b'0'                      COMMENT '是否必填',
  `placeholder`   varchar(255)          DEFAULT NULL                      COMMENT '输入提示',
  `sort_no`       int          NOT NULL DEFAULT 0                         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`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '企业微信活动采集字段';
 
-- ============================================================
-- 报名采集值
-- ============================================================
CREATE TABLE IF NOT EXISTS `wxcp_activity_signup_value` (
  `id`           bigint        NOT NULL AUTO_INCREMENT                    COMMENT '编号',
  `signup_id`    bigint        NOT NULL                                   COMMENT '报名记录编号',
  `activity_id`  bigint        NOT NULL                                   COMMENT '活动编号',
  `field_id`     bigint        NOT NULL                                   COMMENT '字段编号',
  `field_label`  varchar(128)  NOT NULL                                   COMMENT '字段名称(快照)',
  `field_type`   varchar(32)            DEFAULT NULL                      COMMENT '字段类型(快照)',
  `field_value`  varchar(2000)          DEFAULT NULL                      COMMENT '字段值,多选用英文逗号分隔',
  `sort_no`      int           NOT NULL DEFAULT 0                         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_signup_id` (`signup_id`),
  KEY `idx_activity_id` (`activity_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '企业微信活动报名采集值';
 
-- ============================================================
-- 升级脚本:活动多模板字段(已建库环境执行,新库无需执行)
-- 具体见 docs/sql/wxcp_activity_templates_20261021.sql
-- ============================================================