feat(aihr): complete company message R1-R3
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
-- 公司消息 R2:单文件异步提炼、原文件受控下载及消息追问上下文。
|
||||
-- 可重复执行,需在 aihr_20260723_broadcast_targeting_mysql8.sql 之后执行。
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_broadcast_attachment` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '公司文件ID',
|
||||
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
|
||||
`message_id` bigint DEFAULT NULL COMMENT '绑定的公司消息ID',
|
||||
`oss_id` bigint NOT NULL COMMENT '原文件OSS编号',
|
||||
`file_name` varchar(255) NOT NULL COMMENT '原文件名',
|
||||
`file_size` bigint NOT NULL COMMENT '文件字节数',
|
||||
`content_type` varchar(100) NOT NULL COMMENT '内容类型',
|
||||
`status` varchar(20) NOT NULL DEFAULT 'QUEUED' COMMENT 'QUEUED/PROCESSING/READY/FAILED',
|
||||
`extracted_text` longtext DEFAULT NULL COMMENT '提取文本,仅供服务端上下文使用',
|
||||
`summary` varchar(1000) DEFAULT NULL COMMENT 'AI提炼摘要',
|
||||
`error_message` varchar(500) DEFAULT NULL COMMENT '公开失败说明',
|
||||
`uploaded_by` bigint NOT NULL COMMENT '上传账号ID',
|
||||
`create_time` datetime NOT NULL COMMENT '上传时间',
|
||||
`update_time` datetime NOT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_aihr_broadcast_attachment_oss` (`tenant_id`, `oss_id`),
|
||||
UNIQUE KEY `uk_aihr_broadcast_attachment_message` (`tenant_id`, `message_id`),
|
||||
KEY `idx_aihr_broadcast_attachment_queue` (`status`, `update_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='银城大喇叭公司文件提炼';
|
||||
|
||||
SET @has_broadcast_attachment_id := (
|
||||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE table_schema = DATABASE() AND table_name = 'aihr_broadcast_message'
|
||||
AND column_name = 'attachment_id'
|
||||
);
|
||||
SET @broadcast_attachment_ddl := IF(
|
||||
@has_broadcast_attachment_id = 0,
|
||||
'ALTER TABLE aihr_broadcast_message ADD COLUMN attachment_id bigint DEFAULT NULL COMMENT ''公司文件ID'' AFTER content, ADD KEY idx_aihr_broadcast_message_attachment (tenant_id, attachment_id)',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE aihr_broadcast_attachment_stmt FROM @broadcast_attachment_ddl; EXECUTE aihr_broadcast_attachment_stmt; DEALLOCATE PREPARE aihr_broadcast_attachment_stmt;
|
||||
|
||||
SET @broadcast_attachment_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_attachment_target_collation := COALESCE(@broadcast_attachment_target_collation, @@collation_database);
|
||||
SET @broadcast_attachment_table_collation := (
|
||||
SELECT table_collation FROM information_schema.tables
|
||||
WHERE table_schema = DATABASE() AND table_name = 'aihr_broadcast_attachment'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @broadcast_attachment_ddl := IF(
|
||||
@broadcast_attachment_table_collation = @broadcast_attachment_target_collation,
|
||||
'SELECT 1',
|
||||
CONCAT('ALTER TABLE aihr_broadcast_attachment CONVERT TO CHARACTER SET utf8mb4 COLLATE ', @broadcast_attachment_target_collation)
|
||||
);
|
||||
PREPARE aihr_broadcast_attachment_stmt FROM @broadcast_attachment_ddl; EXECUTE aihr_broadcast_attachment_stmt; DEALLOCATE PREPARE aihr_broadcast_attachment_stmt;
|
||||
|
||||
SET @has_broadcast_attachment_id := NULL;
|
||||
SET @broadcast_attachment_target_collation := NULL;
|
||||
SET @broadcast_attachment_table_collation := NULL;
|
||||
SET @broadcast_attachment_ddl := NULL;
|
||||
@@ -0,0 +1,71 @@
|
||||
-- 公司消息 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
|
||||
);
|
||||
Reference in New Issue
Block a user