新增
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
-- 角色表新增数据范围(数据隔离)字段
|
||||
-- 1=全部数据(免隔离,root 默认全部)
|
||||
-- 2=本部门及子部门(按 admin_dept 关联 + dept 树的后代汇总可见 admin_id)
|
||||
-- 3=仅本部门
|
||||
-- 4=仅本人
|
||||
-- 迁移后保持旧行为:所有现有角色默认 1(全部),需要管理员按需逐角色改为 2/3/4 激活隔离
|
||||
ALTER TABLE `zyt_system_role`
|
||||
ADD COLUMN `data_scope` tinyint(1) NOT NULL DEFAULT 1
|
||||
COMMENT '数据范围:1全部 2本部门及下级 3仅本部门 4仅本人' AFTER `sort`;
|
||||
-- 角色表新增数据范围(数据隔离)字段
|
||||
-- 1=全部数据(免隔离,root 默认全部)
|
||||
-- 2=本部门及子部门(按 admin_dept 关联 + dept 树的后代汇总可见 admin_id)
|
||||
-- 3=仅本部门
|
||||
-- 4=仅本人
|
||||
-- 迁移后保持旧行为:所有现有角色默认 1(全部),需要管理员按需逐角色改为 2/3/4 激活隔离
|
||||
ALTER TABLE `zyt_system_role`
|
||||
ADD COLUMN `data_scope` tinyint(1) NOT NULL DEFAULT 1
|
||||
COMMENT '数据范围:1全部 2本部门及下级 3仅本部门 4仅本人' AFTER `sort`;
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
-- 处方库 AI 双模型解释:持久化表 + 读取/刷新/编辑三个独立 API 权限。
|
||||
-- 三个 perms 必须与 PrescriptionLibraryController action 一一对应,否则
|
||||
-- AuthMiddleware 会把未注册 URI 当作无需鉴权的普通接口直接放行。
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `zyt_prescription_library_ai_report` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '报告ID',
|
||||
`prescription_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 '提示词版本',
|
||||
`prescription_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_prescription_model` (`prescription_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 @prescription_library_menu_id := (
|
||||
SELECT `id`
|
||||
FROM `zyt_system_menu`
|
||||
WHERE `type` = 'C'
|
||||
AND (
|
||||
`component` = 'consumer/prescription/list'
|
||||
OR `component` LIKE '%consumer/prescription/list%'
|
||||
)
|
||||
ORDER BY `id`
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
-- 读取已保存报告:打开弹窗只读库,不调用上游模型。
|
||||
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
|
||||
COALESCE(@prescription_library_menu_id, 0), 'A', '查看AI解释', '', 51,
|
||||
'tcm.prescriptionLibrary/aiReports', '', '',
|
||||
'', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.prescriptionLibrary/aiReports'
|
||||
);
|
||||
|
||||
-- 刷新报告:固定同时生成 qwen/openai,不接受前端模型配置。
|
||||
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
|
||||
COALESCE(@prescription_library_menu_id, 0), 'A', '刷新AI解释', '', 52,
|
||||
'tcm.prescriptionLibrary/generateAiReports', '', '',
|
||||
'', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.prescriptionLibrary/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
|
||||
COALESCE(@prescription_library_menu_id, 0), 'A', '查询待生成AI解释', '', 54,
|
||||
'tcm.prescriptionLibrary/missingAiReports', '', '',
|
||||
'', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.prescriptionLibrary/missingAiReports'
|
||||
);
|
||||
|
||||
-- 人工编辑必须是独立权限,不能依赖刷新权限隐式放行。
|
||||
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
|
||||
COALESCE(@prescription_library_menu_id, 0), 'A', '编辑AI解释', '', 53,
|
||||
'tcm.prescriptionLibrary/editAiReport', '', '',
|
||||
'', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.prescriptionLibrary/editAiReport'
|
||||
);
|
||||
|
||||
SET @prescription_ai_read_menu_id := (
|
||||
SELECT `id` FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.prescriptionLibrary/aiReports'
|
||||
ORDER BY `id` LIMIT 1
|
||||
);
|
||||
SET @prescription_ai_refresh_menu_id := (
|
||||
SELECT `id` FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.prescriptionLibrary/generateAiReports'
|
||||
ORDER BY `id` LIMIT 1
|
||||
);
|
||||
SET @prescription_ai_missing_menu_id := (
|
||||
SELECT `id` FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.prescriptionLibrary/missingAiReports'
|
||||
ORDER BY `id` LIMIT 1
|
||||
);
|
||||
SET @prescription_ai_edit_menu_id := (
|
||||
SELECT `id` FROM `zyt_system_menu`
|
||||
WHERE `perms` = 'tcm.prescriptionLibrary/editAiReport'
|
||||
ORDER BY `id` LIMIT 1
|
||||
);
|
||||
|
||||
-- 已能查看处方库/处方的角色继承“读取已保存报告”。
|
||||
INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`, `menu_id`)
|
||||
SELECT DISTINCT `role_menu`.`role_id`, @prescription_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 @prescription_ai_read_menu_id IS NOT NULL
|
||||
AND (
|
||||
`menu`.`perms` IN (
|
||||
'tcm.prescriptionLibrary/lists',
|
||||
'tcm.prescriptionLibrary/detail',
|
||||
'tcm.prescriptionLibrary/aiReport',
|
||||
'wcf.prescription/lists',
|
||||
'wcf.prescription/read'
|
||||
)
|
||||
OR `menu`.`id` = @prescription_library_menu_id
|
||||
);
|
||||
|
||||
-- 保持现有 AI 生成能力:能读取 AI 报告的角色默认继承刷新权限,之后可独立撤销。
|
||||
INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`, `menu_id`)
|
||||
SELECT `role_id`, @prescription_ai_refresh_menu_id
|
||||
FROM `zyt_system_role_menu`
|
||||
WHERE @prescription_ai_read_menu_id IS NOT NULL
|
||||
AND @prescription_ai_refresh_menu_id IS NOT NULL
|
||||
AND `menu_id` = @prescription_ai_read_menu_id;
|
||||
|
||||
-- 能刷新单处方 AI 报告的角色继承批量发现权限;接口本身仍独立鉴权。
|
||||
INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`, `menu_id`)
|
||||
SELECT `role_id`, @prescription_ai_missing_menu_id
|
||||
FROM `zyt_system_role_menu`
|
||||
WHERE @prescription_ai_refresh_menu_id IS NOT NULL
|
||||
AND @prescription_ai_missing_menu_id IS NOT NULL
|
||||
AND `menu_id` = @prescription_ai_refresh_menu_id;
|
||||
|
||||
-- 编辑仅继承给已有处方库编辑能力的角色,权限项本身仍可独立配置。
|
||||
INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`, `menu_id`)
|
||||
SELECT DISTINCT `role_menu`.`role_id`, @prescription_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 @prescription_ai_edit_menu_id IS NOT NULL
|
||||
AND (
|
||||
`menu`.`perms` IN (
|
||||
'tcm.prescriptionLibrary/edit',
|
||||
'wcf.prescription/edit'
|
||||
)
|
||||
);
|
||||
|
||||
COMMIT;
|
||||
@@ -1,17 +1,17 @@
|
||||
-- 处方库表
|
||||
CREATE TABLE IF NOT EXISTS `zyt_prescription_library` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`prescription_name` varchar(100) NOT NULL DEFAULT '' COMMENT '处方名称',
|
||||
`formula_type` varchar(20) NOT NULL DEFAULT '主方' COMMENT '处方类型:主方、辅方',
|
||||
`herbs` text COMMENT '药材列表JSON:[{name, dosage}]',
|
||||
`is_public` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否公开:0-仅自己可见 1-所有人可见',
|
||||
`creator_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建人ID',
|
||||
`creator_name` varchar(50) NOT NULL DEFAULT '' COMMENT '创建人姓名',
|
||||
`create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
|
||||
`delete_time` int(10) unsigned DEFAULT NULL COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_creator` (`creator_id`),
|
||||
KEY `idx_is_public` (`is_public`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='处方库表';
|
||||
-- 处方库表
|
||||
CREATE TABLE IF NOT EXISTS `zyt_prescription_library` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`prescription_name` varchar(100) NOT NULL DEFAULT '' COMMENT '处方名称',
|
||||
`formula_type` varchar(20) NOT NULL DEFAULT '主方' COMMENT '处方类型:主方、辅方',
|
||||
`herbs` text COMMENT '药材列表JSON:[{name, dosage}]',
|
||||
`is_public` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否公开:0-仅自己可见 1-所有人可见',
|
||||
`creator_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建人ID',
|
||||
`creator_name` varchar(50) NOT NULL DEFAULT '' COMMENT '创建人姓名',
|
||||
`create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
|
||||
`delete_time` int(10) unsigned DEFAULT NULL COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_creator` (`creator_id`),
|
||||
KEY `idx_is_public` (`is_public`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='处方库表';
|
||||
|
||||
Reference in New Issue
Block a user