97 lines
5.1 KiB
SQL
97 lines
5.1 KiB
SQL
-- 银城大喇叭 M1:定向提醒与必读阅读闭环。
|
|
-- 保留 M0 的全租户公开消息语义;定向规则只决定优先提醒/必读对象,不隐藏公开频道内容。
|
|
-- 可重复执行,需在 aihr_20260722_broadcast_mysql8.sql 之后执行。
|
|
|
|
SET @has_broadcast_required_read := (
|
|
SELECT COUNT(*) FROM information_schema.COLUMNS
|
|
WHERE table_schema = DATABASE() AND table_name = 'aihr_broadcast_message'
|
|
AND column_name = 'required_read'
|
|
);
|
|
SET @broadcast_m1_ddl := IF(
|
|
@has_broadcast_required_read = 0,
|
|
'ALTER TABLE aihr_broadcast_message ADD COLUMN required_read tinyint(1) NOT NULL DEFAULT 0 COMMENT ''是否必读'' AFTER content',
|
|
'SELECT 1'
|
|
);
|
|
PREPARE aihr_broadcast_m1_stmt FROM @broadcast_m1_ddl; EXECUTE aihr_broadcast_m1_stmt; DEALLOCATE PREPARE aihr_broadcast_m1_stmt;
|
|
|
|
-- 用于发布幂等重试时校验必读/定向载荷。历史 M0 消息保留 NULL,等价于非必读且未定向。
|
|
SET @has_broadcast_target_payload_hash := (
|
|
SELECT COUNT(*) FROM information_schema.COLUMNS
|
|
WHERE table_schema = DATABASE() AND table_name = 'aihr_broadcast_message'
|
|
AND column_name = 'target_payload_hash'
|
|
);
|
|
SET @broadcast_m1_ddl := IF(
|
|
@has_broadcast_target_payload_hash = 0,
|
|
'ALTER TABLE aihr_broadcast_message ADD COLUMN target_payload_hash char(64) DEFAULT NULL COMMENT ''必读及定向载荷SHA-256'' AFTER publish_request_hash',
|
|
'SELECT 1'
|
|
);
|
|
PREPARE aihr_broadcast_m1_stmt FROM @broadcast_m1_ddl; EXECUTE aihr_broadcast_m1_stmt; DEALLOCATE PREPARE aihr_broadcast_m1_stmt;
|
|
|
|
CREATE TABLE IF NOT EXISTS `aihr_broadcast_target_rule` (
|
|
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '定向规则ID',
|
|
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
|
|
`message_id` bigint NOT NULL COMMENT '消息ID',
|
|
`target_type` varchar(20) NOT NULL COMMENT 'PROJECT/POSITION/LEVEL',
|
|
`target_value` varchar(100) NOT NULL COMMENT '目标值',
|
|
`create_time` datetime NOT NULL COMMENT '创建时间',
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_aihr_broadcast_target_rule` (`tenant_id`, `message_id`, `target_type`, `target_value`),
|
|
KEY `idx_aihr_broadcast_target_rule_message` (`tenant_id`, `message_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='银城大喇叭定向规则快照';
|
|
|
|
CREATE TABLE IF NOT EXISTS `aihr_broadcast_target_recipient` (
|
|
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '定向对象快照ID',
|
|
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
|
|
`message_id` bigint NOT NULL COMMENT '消息ID',
|
|
`recipient_key` varchar(180) NOT NULL COMMENT '外部主体及映射账号唯一键',
|
|
`subject_ref` varchar(100) NOT NULL COMMENT '组织快照外部主体ID',
|
|
`user_id` bigint DEFAULT NULL COMMENT '匹配到的员工账号ID',
|
|
`target_status` varchar(20) NOT NULL COMMENT 'MATCHED/UNMATCHED',
|
|
`target_reason` varchar(100) NOT NULL COMMENT '项目/岗位/职级定向原因',
|
|
`create_time` datetime NOT NULL COMMENT '创建时间',
|
|
`update_time` datetime NOT NULL COMMENT '更新时间',
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_aihr_broadcast_target_recipient` (`tenant_id`, `message_id`, `recipient_key`),
|
|
KEY `idx_aihr_broadcast_target_recipient_user` (`tenant_id`, `user_id`, `message_id`, `target_status`),
|
|
KEY `idx_aihr_broadcast_target_recipient_message` (`tenant_id`, `message_id`, `target_status`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='银城大喇叭定向对象快照';
|
|
|
|
-- 与 M0 消息表保持同一租户事实排序规则,避免历史库的 utf8mb4_general_ci 与 MySQL 8 0900_ai_ci 混用。
|
|
SET @broadcast_m1_target_collation := (
|
|
SELECT collation_name FROM information_schema.columns
|
|
WHERE table_schema = DATABASE() AND table_name = 'aihr_knowledge_info' AND column_name = 'tenant_id'
|
|
LIMIT 1
|
|
);
|
|
SET @broadcast_m1_target_collation := COALESCE(@broadcast_m1_target_collation, @@collation_database);
|
|
|
|
SET @broadcast_target_rule_collation := (
|
|
SELECT table_collation FROM information_schema.tables
|
|
WHERE table_schema = DATABASE() AND table_name = 'aihr_broadcast_target_rule'
|
|
LIMIT 1
|
|
);
|
|
SET @broadcast_m1_ddl := IF(
|
|
@broadcast_target_rule_collation = @broadcast_m1_target_collation,
|
|
'SELECT 1',
|
|
CONCAT('ALTER TABLE aihr_broadcast_target_rule CONVERT TO CHARACTER SET utf8mb4 COLLATE ', @broadcast_m1_target_collation)
|
|
);
|
|
PREPARE aihr_broadcast_m1_stmt FROM @broadcast_m1_ddl; EXECUTE aihr_broadcast_m1_stmt; DEALLOCATE PREPARE aihr_broadcast_m1_stmt;
|
|
|
|
SET @broadcast_target_recipient_collation := (
|
|
SELECT table_collation FROM information_schema.tables
|
|
WHERE table_schema = DATABASE() AND table_name = 'aihr_broadcast_target_recipient'
|
|
LIMIT 1
|
|
);
|
|
SET @broadcast_m1_ddl := IF(
|
|
@broadcast_target_recipient_collation = @broadcast_m1_target_collation,
|
|
'SELECT 1',
|
|
CONCAT('ALTER TABLE aihr_broadcast_target_recipient CONVERT TO CHARACTER SET utf8mb4 COLLATE ', @broadcast_m1_target_collation)
|
|
);
|
|
PREPARE aihr_broadcast_m1_stmt FROM @broadcast_m1_ddl; EXECUTE aihr_broadcast_m1_stmt; DEALLOCATE PREPARE aihr_broadcast_m1_stmt;
|
|
|
|
SET @has_broadcast_required_read := NULL;
|
|
SET @has_broadcast_target_payload_hash := NULL;
|
|
SET @broadcast_m1_target_collation := NULL;
|
|
SET @broadcast_target_rule_collation := NULL;
|
|
SET @broadcast_target_recipient_collation := NULL;
|
|
SET @broadcast_m1_ddl := NULL;
|