-- 公司消息 R1:员工点对点直达反馈。业务匿名不显示提交人,但保留内部账号用于本人查询和审计。 CREATE TABLE IF NOT EXISTS `aihr_direct_feedback` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '反馈ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `channel_code` varchar(20) NOT NULL COMMENT 'PRESIDENT/FINANCE/HR/AUDIT/OPERATIONS', `sender_user_id` bigint NOT NULL COMMENT '内部提交账号ID,不在业务处理接口返回', `sender_name` varchar(100) NOT NULL COMMENT '提交时员工姓名快照', `anonymous_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '业务展示是否匿名', `content` text NOT NULL COMMENT '反馈内容', `status` varchar(20) NOT NULL DEFAULT 'SUBMITTED' COMMENT 'SUBMITTED/REPLIED', `submit_request_key` varchar(100) NOT NULL COMMENT '员工提交幂等键', `submit_request_hash` char(64) NOT NULL COMMENT '提交载荷SHA-256', `reply_content` text DEFAULT NULL COMMENT '正式回复', `replied_by` bigint DEFAULT NULL COMMENT '回复账号ID', `replied_time` datetime DEFAULT NULL COMMENT '回复时间', `create_time` datetime NOT NULL COMMENT '提交时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_direct_feedback_submit` (`tenant_id`, `sender_user_id`, `submit_request_key`), KEY `idx_aihr_direct_feedback_inbox` (`tenant_id`, `channel_code`, `status`, `create_time`), KEY `idx_aihr_direct_feedback_sender` (`tenant_id`, `sender_user_id`, `create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工点对点直达反馈'; -- 与租户事实表保持相同排序规则,兼容历史库。 SET @direct_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 @direct_target_collation := COALESCE(@direct_target_collation, @@collation_database); SET @direct_table_collation := ( SELECT table_collation FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'aihr_direct_feedback' LIMIT 1 ); SET @direct_ddl := IF( @direct_table_collation = @direct_target_collation, 'SELECT 1', CONCAT('ALTER TABLE aihr_direct_feedback CONVERT TO CHARACTER SET utf8mb4 COLLATE ', @direct_target_collation) ); PREPARE aihr_direct_stmt FROM @direct_ddl; EXECUTE aihr_direct_stmt; DEALLOCATE PREPARE aihr_direct_stmt; SET @direct_target_collation := NULL; SET @direct_table_collation := NULL; SET @direct_ddl := NULL; -- 当前正式租户预置五个处理角色;具体人员仍由管理员按职责分配。 INSERT INTO `sys_role` (`role_id`, `tenant_id`, `role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `del_flag`, `create_by`, `create_time`, `remark`) SELECT seed.role_id, '000000', seed.role_name, seed.role_key, seed.role_sort, '1', 1, 1, '0', '0', 1, NOW(), '公司消息直通车固定处理角色' FROM ( SELECT 202607240000000101 AS role_id, '总裁直达处理' AS role_name, 'direct_president' AS role_key, 21 AS role_sort UNION ALL SELECT 202607240000000102, '财务直达处理', 'direct_finance', 22 UNION ALL SELECT 202607240000000103, '人力直达处理', 'direct_hr', 23 UNION ALL SELECT 202607240000000104, '审计直达处理', 'direct_audit', 24 UNION ALL SELECT 202607240000000105, '运营直达处理', 'direct_operations', 25 ) seed WHERE NOT EXISTS ( SELECT 1 FROM `sys_role` existing WHERE existing.tenant_id = '000000' AND existing.role_key = seed.role_key AND existing.del_flag = '0' ) AND NOT EXISTS ( SELECT 1 FROM `sys_role` existing WHERE existing.role_id = seed.role_id );