更新
This commit is contained in:
@@ -0,0 +1,198 @@
|
||||
-- 诊单/患者资料 AI:持久化表 + 报告读取/助手/智能分析/刷新/编辑五个独立 API 权限。
|
||||
-- 五个 perms 必须与 DiagnosisController action 一一对应,否则
|
||||
-- AuthMiddleware 会把未注册 URI 当作无需鉴权的普通接口直接放行。
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `zyt_diagnosis_ai_report` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '报告ID',
|
||||
`diagnosis_id` int unsigned NOT NULL COMMENT '诊单ID',
|
||||
`model_key` varchar(32) NOT NULL COMMENT '服务端模型配置键:qwen/openai',
|
||||
`model_name` varchar(100) NOT NULL DEFAULT '' COMMENT '生成时实际模型名称',
|
||||
`model_label` varchar(50) NOT NULL DEFAULT '' COMMENT '模型展示名',
|
||||
`report_content` mediumtext NOT NULL COMMENT '报告原始内容',
|
||||
`message_id` varchar(191) NOT NULL DEFAULT '' COMMENT 'Dify message_id',
|
||||
`prompt_version` varchar(50) NOT NULL DEFAULT '' COMMENT '提示词版本',
|
||||
`case_fingerprint` char(64) NOT NULL DEFAULT '' COMMENT '生成时病例内容SHA-256',
|
||||
`generated_by` int unsigned NOT NULL DEFAULT 0 COMMENT '最近生成管理员ID',
|
||||
`generated_time` int unsigned NOT NULL DEFAULT 0 COMMENT '最近生成时间',
|
||||
`edited_by` int unsigned NOT NULL DEFAULT 0 COMMENT '最近人工编辑管理员ID',
|
||||
`edited_time` int unsigned NOT NULL DEFAULT 0 COMMENT '最近人工编辑时间',
|
||||
`create_time` int unsigned NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`update_time` int unsigned NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_diagnosis_model` (`diagnosis_id`, `model_key`),
|
||||
KEY `idx_generated_by_time` (`generated_by`, `generated_time`),
|
||||
KEY `idx_edited_by_time` (`edited_by`, `edited_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='诊单AI报告';
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
SET @reception_menu_id := (
|
||||
SELECT `id`
|
||||
FROM `zyt_system_menu`
|
||||
WHERE `type` = 'C'
|
||||
AND (
|
||||
`perms` = 'doctor.appointment/lists'
|
||||
OR `component` = 'patient/reception/index'
|
||||
OR `component` LIKE '%patient/reception/index%'
|
||||
)
|
||||
ORDER BY `id`
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
SET @diagnosis_menu_id := (
|
||||
SELECT `id`
|
||||
FROM `zyt_system_menu`
|
||||
WHERE `type` = 'C'
|
||||
AND `perms` = 'tcm.diagnosis/lists'
|
||||
ORDER BY `id`
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
SET @ai_menu_pid := COALESCE(NULLIF(@reception_menu_id, 0), @diagnosis_menu_id, 0);
|
||||
|
||||
INSERT INTO `zyt_system_menu` (
|
||||
`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`,
|
||||
`selected`, `params`, `is_cache`, `is_show`, `is_disable`, `create_time`, `update_time`
|
||||
)
|
||||
SELECT
|
||||
@ai_menu_pid, 'A', '查看AI报告', '', 61,
|
||||
'tcm.diagnosis/aiReports', '', '',
|
||||
'', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.diagnosis/aiReports'
|
||||
);
|
||||
|
||||
INSERT INTO `zyt_system_menu` (
|
||||
`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`,
|
||||
`selected`, `params`, `is_cache`, `is_show`, `is_disable`, `create_time`, `update_time`
|
||||
)
|
||||
SELECT
|
||||
@ai_menu_pid, 'A', '使用AI助手', '', 62,
|
||||
'tcm.diagnosis/aiAssistant', '', '',
|
||||
'', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.diagnosis/aiAssistant'
|
||||
);
|
||||
|
||||
INSERT INTO `zyt_system_menu` (
|
||||
`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`,
|
||||
`selected`, `params`, `is_cache`, `is_show`, `is_disable`, `create_time`, `update_time`
|
||||
)
|
||||
SELECT
|
||||
@ai_menu_pid, 'A', 'AI智能分析', '', 65,
|
||||
'tcm.diagnosis/aiAnalysis', '', '',
|
||||
'', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.diagnosis/aiAnalysis'
|
||||
);
|
||||
|
||||
INSERT INTO `zyt_system_menu` (
|
||||
`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`,
|
||||
`selected`, `params`, `is_cache`, `is_show`, `is_disable`, `create_time`, `update_time`
|
||||
)
|
||||
SELECT
|
||||
@ai_menu_pid, 'A', '生成AI报告', '', 63,
|
||||
'tcm.diagnosis/generateAiReports', '', '',
|
||||
'', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.diagnosis/generateAiReports'
|
||||
);
|
||||
|
||||
INSERT INTO `zyt_system_menu` (
|
||||
`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`,
|
||||
`selected`, `params`, `is_cache`, `is_show`, `is_disable`, `create_time`, `update_time`
|
||||
)
|
||||
SELECT
|
||||
@ai_menu_pid, 'A', '编辑AI报告', '', 64,
|
||||
'tcm.diagnosis/editAiReport', '', '',
|
||||
'', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.diagnosis/editAiReport'
|
||||
);
|
||||
|
||||
SET @diagnosis_ai_read_menu_id := (
|
||||
SELECT `id` FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.diagnosis/aiReports'
|
||||
ORDER BY `id` LIMIT 1
|
||||
);
|
||||
SET @diagnosis_ai_refresh_menu_id := (
|
||||
SELECT `id` FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.diagnosis/generateAiReports'
|
||||
ORDER BY `id` LIMIT 1
|
||||
);
|
||||
SET @diagnosis_ai_assistant_menu_id := (
|
||||
SELECT `id` FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.diagnosis/aiAssistant'
|
||||
ORDER BY `id` LIMIT 1
|
||||
);
|
||||
SET @diagnosis_ai_analysis_menu_id := (
|
||||
SELECT `id` FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.diagnosis/aiAnalysis'
|
||||
ORDER BY `id` LIMIT 1
|
||||
);
|
||||
SET @diagnosis_ai_edit_menu_id := (
|
||||
SELECT `id` FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.diagnosis/editAiReport'
|
||||
ORDER BY `id` LIMIT 1
|
||||
);
|
||||
|
||||
-- 能看接诊台/只读病例/诊单列表的角色继承读取已保存报告。
|
||||
INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`, `menu_id`)
|
||||
SELECT DISTINCT `role_menu`.`role_id`, @diagnosis_ai_read_menu_id
|
||||
FROM `zyt_system_role_menu` AS `role_menu`
|
||||
INNER JOIN `zyt_system_menu` AS `menu` ON `menu`.`id` = `role_menu`.`menu_id`
|
||||
WHERE @diagnosis_ai_read_menu_id IS NOT NULL
|
||||
AND (
|
||||
`menu`.`perms` IN (
|
||||
'doctor.appointment/lists',
|
||||
'doctor.appointment/reception',
|
||||
'tcm.diagnosis/lists',
|
||||
'tcm.diagnosis/readonlyDetail',
|
||||
'tcm.diagnosis/detail'
|
||||
)
|
||||
OR `menu`.`id` IN (@reception_menu_id, @diagnosis_menu_id)
|
||||
);
|
||||
|
||||
-- 已获准查看该诊单 AI 资料的角色可使用按病例范围受控的问诊助手。
|
||||
INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`, `menu_id`)
|
||||
SELECT `role_id`, @diagnosis_ai_assistant_menu_id
|
||||
FROM `zyt_system_role_menu`
|
||||
WHERE @diagnosis_ai_read_menu_id IS NOT NULL
|
||||
AND @diagnosis_ai_assistant_menu_id IS NOT NULL
|
||||
AND `menu_id` = @diagnosis_ai_read_menu_id;
|
||||
|
||||
-- 接诊台结构化分析使用独立权限,默认授予已能读取诊单 AI 资料的角色,之后可独立撤销。
|
||||
INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`, `menu_id`)
|
||||
SELECT `role_id`, @diagnosis_ai_analysis_menu_id
|
||||
FROM `zyt_system_role_menu`
|
||||
WHERE @diagnosis_ai_read_menu_id IS NOT NULL
|
||||
AND @diagnosis_ai_analysis_menu_id IS NOT NULL
|
||||
AND `menu_id` = @diagnosis_ai_read_menu_id;
|
||||
|
||||
-- 能读取报告的角色默认继承生成权限,之后可独立撤销。
|
||||
INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`, `menu_id`)
|
||||
SELECT `role_id`, @diagnosis_ai_refresh_menu_id
|
||||
FROM `zyt_system_role_menu`
|
||||
WHERE @diagnosis_ai_read_menu_id IS NOT NULL
|
||||
AND @diagnosis_ai_refresh_menu_id IS NOT NULL
|
||||
AND `menu_id` = @diagnosis_ai_read_menu_id;
|
||||
|
||||
-- 编辑仅继承给已有诊单编辑能力的角色。
|
||||
INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`, `menu_id`)
|
||||
SELECT DISTINCT `role_menu`.`role_id`, @diagnosis_ai_edit_menu_id
|
||||
FROM `zyt_system_role_menu` AS `role_menu`
|
||||
INNER JOIN `zyt_system_menu` AS `menu` ON `menu`.`id` = `role_menu`.`menu_id`
|
||||
WHERE @diagnosis_ai_edit_menu_id IS NOT NULL
|
||||
AND `menu`.`perms` IN ('tcm.diagnosis/edit');
|
||||
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user