This commit is contained in:
Your Name
2026-08-11 17:39:41 +08:00
parent cfe4c82c90
commit 25467b9d91
350 changed files with 201115 additions and 132208 deletions
@@ -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='处方库表';