feat(aihr): complete company message R1-R3

This commit is contained in:
2026-07-24 23:25:15 +08:00
parent 5d864a1444
commit 342f84a9de
37 changed files with 2479 additions and 42 deletions
@@ -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
);