feat(work-report): add voice-first reporting flow
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
-- 工作上报正式提交幂等:首次部署可建表,已有表仅补请求键、载荷哈希和唯一索引。
|
||||
-- 历史行保留 NULL;MySQL 唯一索引允许多行 NULL。
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_work_report` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`report_type` varchar(20) NOT NULL COMMENT '类型 CASE/VIDEO/SOP/KNOWLEDGE',
|
||||
`title` varchar(100) NOT NULL COMMENT '标题',
|
||||
`content` varchar(2000) NOT NULL COMMENT '说明',
|
||||
`attachment_oss_id` bigint DEFAULT NULL COMMENT '附件OSS编号',
|
||||
`attachment_name` varchar(200) DEFAULT NULL COMMENT '附件名',
|
||||
`status` varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT '状态 PENDING/APPROVED/REJECTED',
|
||||
`submitter_user_id` bigint NOT NULL COMMENT '提交人用户ID',
|
||||
`submitter_identity` varchar(100) DEFAULT NULL COMMENT '提交人身份',
|
||||
`submitter_name` varchar(100) DEFAULT NULL COMMENT '提交人显示名',
|
||||
`reviewer_user_id` bigint DEFAULT NULL COMMENT '审核人用户ID',
|
||||
`reviewer_name` varchar(100) DEFAULT NULL COMMENT '审核人显示名',
|
||||
`review_note` varchar(500) DEFAULT NULL COMMENT '审核意见',
|
||||
`review_time` datetime DEFAULT NULL COMMENT '审核时间',
|
||||
`request_key` varchar(100) NOT NULL COMMENT '提交幂等键',
|
||||
`request_hash` char(64) NOT NULL COMMENT '提交载荷SHA-256',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_aihr_work_report_request` (`tenant_id`, `submitter_user_id`, `request_key`),
|
||||
KEY `idx_aihr_work_report_submitter` (`tenant_id`, `submitter_user_id`, `id`),
|
||||
KEY `idx_aihr_work_report_status` (`tenant_id`, `status`, `id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工作上报';
|
||||
|
||||
SET @has_work_report_request_key := (
|
||||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE table_schema = DATABASE() AND table_name = 'aihr_work_report' AND column_name = 'request_key'
|
||||
);
|
||||
SET @ddl_work_report_request_key := IF(
|
||||
@has_work_report_request_key = 0,
|
||||
'ALTER TABLE aihr_work_report ADD COLUMN request_key varchar(100) DEFAULT NULL COMMENT ''提交幂等键'' AFTER review_time',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE stmt_work_report_request_key FROM @ddl_work_report_request_key;
|
||||
EXECUTE stmt_work_report_request_key;
|
||||
DEALLOCATE PREPARE stmt_work_report_request_key;
|
||||
|
||||
SET @has_work_report_request_hash := (
|
||||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE table_schema = DATABASE() AND table_name = 'aihr_work_report' AND column_name = 'request_hash'
|
||||
);
|
||||
SET @ddl_work_report_request_hash := IF(
|
||||
@has_work_report_request_hash = 0,
|
||||
'ALTER TABLE aihr_work_report ADD COLUMN request_hash char(64) DEFAULT NULL COMMENT ''提交载荷SHA-256'' AFTER request_key',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE stmt_work_report_request_hash FROM @ddl_work_report_request_hash;
|
||||
EXECUTE stmt_work_report_request_hash;
|
||||
DEALLOCATE PREPARE stmt_work_report_request_hash;
|
||||
|
||||
SET @has_work_report_request_index := (
|
||||
SELECT COUNT(*) FROM information_schema.STATISTICS
|
||||
WHERE table_schema = DATABASE() AND table_name = 'aihr_work_report'
|
||||
AND index_name = 'uk_aihr_work_report_request'
|
||||
);
|
||||
SET @work_report_request_index_valid := (
|
||||
SELECT COUNT(*) FROM (
|
||||
SELECT index_name
|
||||
FROM information_schema.STATISTICS
|
||||
WHERE table_schema = DATABASE() AND table_name = 'aihr_work_report'
|
||||
AND index_name = 'uk_aihr_work_report_request'
|
||||
GROUP BY index_name
|
||||
HAVING MIN(non_unique) = 0
|
||||
AND COUNT(*) = 3
|
||||
AND SUM(sub_part IS NOT NULL) = 0
|
||||
AND GROUP_CONCAT(column_name ORDER BY seq_in_index SEPARATOR ',') =
|
||||
'tenant_id,submitter_user_id,request_key'
|
||||
) valid_work_report_request_index
|
||||
);
|
||||
SET @ddl_work_report_request_index := CASE
|
||||
WHEN @work_report_request_index_valid > 0 THEN 'SELECT 1'
|
||||
WHEN @has_work_report_request_index > 0 THEN
|
||||
'ALTER TABLE aihr_work_report DROP INDEX uk_aihr_work_report_request, ADD UNIQUE KEY uk_aihr_work_report_request (tenant_id, submitter_user_id, request_key)'
|
||||
ELSE
|
||||
'ALTER TABLE aihr_work_report ADD UNIQUE KEY uk_aihr_work_report_request (tenant_id, submitter_user_id, request_key)'
|
||||
END;
|
||||
PREPARE stmt_work_report_request_index FROM @ddl_work_report_request_index;
|
||||
EXECUTE stmt_work_report_request_index;
|
||||
DEALLOCATE PREPARE stmt_work_report_request_index;
|
||||
|
||||
-- 与租户事实表保持同一排序规则,兼容旧库 general_ci 与新 MySQL 8 库 0900_ai_ci。
|
||||
SET @work_report_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 @work_report_target_collation := COALESCE(@work_report_target_collation, @@collation_database);
|
||||
SET @work_report_current_collation := (
|
||||
SELECT table_collation FROM information_schema.TABLES
|
||||
WHERE table_schema = DATABASE() AND table_name = 'aihr_work_report'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @ddl_work_report_collation := IF(
|
||||
@work_report_current_collation = @work_report_target_collation,
|
||||
'SELECT 1',
|
||||
CONCAT('ALTER TABLE aihr_work_report CONVERT TO CHARACTER SET utf8mb4 COLLATE ', @work_report_target_collation)
|
||||
);
|
||||
PREPARE stmt_work_report_collation FROM @ddl_work_report_collation;
|
||||
EXECUTE stmt_work_report_collation;
|
||||
DEALLOCATE PREPARE stmt_work_report_collation;
|
||||
|
||||
SET @work_report_target_collation := NULL;
|
||||
SET @work_report_current_collation := NULL;
|
||||
SET @ddl_work_report_collation := NULL;
|
||||
Reference in New Issue
Block a user