feat: 增加技能管理模块试验性功能,等待优化
This commit is contained in:
@@ -56,6 +56,10 @@
|
||||
<groupId>tech.easyflow</groupId>
|
||||
<artifactId>easyflow-module-agent</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>tech.easyflow</groupId>
|
||||
<artifactId>easyflow-module-skill</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>tech.easyflow</groupId>
|
||||
<artifactId>easyflow-module-auth</artifactId>
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
CREATE TABLE IF NOT EXISTS `tb_skill_category` (
|
||||
`id` BIGINT NOT NULL COMMENT 'ID',
|
||||
`tenant_id` BIGINT NULL COMMENT '租户ID',
|
||||
`parent_id` BIGINT NULL COMMENT '父分类ID',
|
||||
`category_name` VARCHAR(128) NOT NULL COMMENT '分类名称',
|
||||
`level_no` INT DEFAULT 1 COMMENT '层级',
|
||||
`ancestors` VARCHAR(512) NULL COMMENT '祖级路径',
|
||||
`sort_no` INT DEFAULT 0 COMMENT '排序',
|
||||
`status` INT DEFAULT 1 COMMENT '状态',
|
||||
`created` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`created_by` BIGINT NULL COMMENT '创建人',
|
||||
`modified` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
`modified_by` BIGINT NULL COMMENT '修改人',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_skill_category_tenant_parent` (`tenant_id`, `parent_id`, `status`, `sort_no`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Skill 分类';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tb_skill` (
|
||||
`id` BIGINT NOT NULL COMMENT 'ID',
|
||||
`tenant_id` BIGINT NULL COMMENT '租户ID',
|
||||
`dept_id` BIGINT NULL COMMENT '部门ID',
|
||||
`category_id` BIGINT NULL COMMENT '分类ID',
|
||||
`name` VARCHAR(128) NOT NULL COMMENT 'Skill 名称',
|
||||
`display_name` VARCHAR(128) NULL COMMENT '展示名称',
|
||||
`description` VARCHAR(1024) NULL COMMENT '描述',
|
||||
`metadata_json` JSON NULL COMMENT '元数据',
|
||||
`skill_content` MEDIUMTEXT NULL COMMENT 'SKILL.md 内容',
|
||||
`enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
|
||||
`visibility_scope` VARCHAR(32) NULL COMMENT '可见范围',
|
||||
`source_type` VARCHAR(32) NULL COMMENT '来源类型',
|
||||
`package_hash` VARCHAR(128) NULL COMMENT '包 hash',
|
||||
`reference_count` INT DEFAULT 0 COMMENT '引用文档数量',
|
||||
`script_count` INT DEFAULT 0 COMMENT '脚本数量',
|
||||
`asset_count` INT DEFAULT 0 COMMENT '资产数量',
|
||||
`publish_status` VARCHAR(32) DEFAULT 'DRAFT' COMMENT '发布状态',
|
||||
`current_approval_instance_id` BIGINT NULL COMMENT '当前审批实例ID',
|
||||
`published_snapshot_json` JSON NULL COMMENT '已发布快照',
|
||||
`published_at` DATETIME NULL COMMENT '发布时间',
|
||||
`published_by` BIGINT NULL COMMENT '发布人',
|
||||
`created` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`created_by` BIGINT NULL COMMENT '创建人',
|
||||
`modified` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
`modified_by` BIGINT NULL COMMENT '修改人',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_skill_tenant_name` (`tenant_id`, `name`),
|
||||
KEY `idx_skill_tenant_category` (`tenant_id`, `category_id`, `enabled`),
|
||||
KEY `idx_skill_publish_status` (`publish_status`),
|
||||
KEY `idx_skill_created_by` (`created_by`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Skill';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tb_skill_reference` (
|
||||
`id` BIGINT NOT NULL COMMENT 'ID',
|
||||
`tenant_id` BIGINT NULL COMMENT '租户ID',
|
||||
`skill_id` BIGINT NOT NULL COMMENT 'Skill ID',
|
||||
`path` VARCHAR(512) NOT NULL COMMENT '逻辑路径',
|
||||
`name` VARCHAR(255) NULL COMMENT '文件名',
|
||||
`content` MEDIUMTEXT NULL COMMENT '内容',
|
||||
`content_hash` VARCHAR(128) NULL COMMENT '内容 hash',
|
||||
`size` BIGINT DEFAULT 0 COMMENT '大小',
|
||||
`metadata_json` JSON NULL COMMENT '元数据',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_skill_reference_path` (`skill_id`, `path`),
|
||||
KEY `idx_skill_reference_skill` (`skill_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Skill reference';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tb_skill_script` (
|
||||
`id` BIGINT NOT NULL COMMENT 'ID',
|
||||
`tenant_id` BIGINT NULL COMMENT '租户ID',
|
||||
`skill_id` BIGINT NOT NULL COMMENT 'Skill ID',
|
||||
`path` VARCHAR(512) NOT NULL COMMENT '逻辑路径',
|
||||
`language` VARCHAR(32) NULL COMMENT '脚本语言',
|
||||
`content` MEDIUMTEXT NULL COMMENT '内容',
|
||||
`content_hash` VARCHAR(128) NULL COMMENT '内容 hash',
|
||||
`size` BIGINT DEFAULT 0 COMMENT '大小',
|
||||
`metadata_json` JSON NULL COMMENT '元数据',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_skill_script_path` (`skill_id`, `path`),
|
||||
KEY `idx_skill_script_skill` (`skill_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Skill script';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tb_skill_asset` (
|
||||
`id` BIGINT NOT NULL COMMENT 'ID',
|
||||
`tenant_id` BIGINT NULL COMMENT '租户ID',
|
||||
`skill_id` BIGINT NOT NULL COMMENT 'Skill ID',
|
||||
`path` VARCHAR(512) NOT NULL COMMENT '逻辑路径',
|
||||
`name` VARCHAR(255) NULL COMMENT '文件名',
|
||||
`media_type` VARCHAR(128) NULL COMMENT '媒体类型',
|
||||
`content_ref` VARCHAR(128) NOT NULL COMMENT '内容引用',
|
||||
`content_hash` VARCHAR(128) NULL COMMENT '内容 hash',
|
||||
`size` BIGINT DEFAULT 0 COMMENT '大小',
|
||||
`metadata_json` JSON NULL COMMENT '元数据',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_skill_asset_path` (`skill_id`, `path`),
|
||||
KEY `idx_skill_asset_skill` (`skill_id`),
|
||||
KEY `idx_skill_asset_content_ref` (`content_ref`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Skill asset';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `tb_skill_asset_content` (
|
||||
`content_ref` VARCHAR(128) NOT NULL COMMENT '内容引用',
|
||||
`content_hash` VARCHAR(128) NOT NULL COMMENT '内容 hash',
|
||||
`file_path` VARCHAR(1024) NOT NULL COMMENT '文件路径',
|
||||
`media_type` VARCHAR(128) NULL COMMENT '媒体类型',
|
||||
`size` BIGINT DEFAULT 0 COMMENT '大小',
|
||||
`ref_count` INT DEFAULT 0 COMMENT '引用数',
|
||||
`created` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`modified` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||
PRIMARY KEY (`content_ref`),
|
||||
KEY `idx_skill_asset_content_hash` (`content_hash`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Skill asset 内容索引';
|
||||
@@ -0,0 +1,172 @@
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367400000000000001, 0, 0, '技能管理', '/ai/skill', '/ai/skill/SkillList', 'lucide:badge-check',
|
||||
1, '', 3, 0, '2026-06-05 20:00:00', 1, '2026-06-05 20:00:00', 1, '管理端 Skill 管理菜单'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367400000000000001
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367400000000000011, 367400000000000001, 1, '查询', '', '', '',
|
||||
0, '/api/v1/skill/query', 1, 0, '2026-06-05 20:00:00', 1, '2026-06-05 20:00:00', 1, 'Skill-查询'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367400000000000011
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367400000000000012, 367400000000000001, 1, '详情', '', '', '',
|
||||
0, '/api/v1/skill/getDetail', 2, 0, '2026-06-05 20:00:00', 1, '2026-06-05 20:00:00', 1, 'Skill-详情'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367400000000000012
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367400000000000013, 367400000000000001, 1, '保存', '', '', '',
|
||||
0, '/api/v1/skill/save', 3, 0, '2026-06-05 20:00:00', 1, '2026-06-05 20:00:00', 1, 'Skill-保存'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367400000000000013
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367400000000000014, 367400000000000001, 1, '更新', '', '', '',
|
||||
0, '/api/v1/skill/update', 4, 0, '2026-06-05 20:00:00', 1, '2026-06-05 20:00:00', 1, 'Skill-更新'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367400000000000014
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367400000000000015, 367400000000000001, 1, '删除', '', '', '',
|
||||
0, '/api/v1/skill/remove', 5, 0, '2026-06-05 20:00:00', 1, '2026-06-05 20:00:00', 1, 'Skill-删除'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367400000000000015
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367400000000000016, 367400000000000001, 1, '发布', '', '', '',
|
||||
0, '/api/v1/skill/submitPublishApproval', 6, 0, '2026-06-05 20:00:00', 1, '2026-06-05 20:00:00', 1, 'Skill-发布审批'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367400000000000016
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367400000000000017, 367400000000000001, 1, '下线', '', '', '',
|
||||
0, '/api/v1/skill/submitOfflineApproval', 7, 0, '2026-06-05 20:00:00', 1, '2026-06-05 20:00:00', 1, 'Skill-下线审批'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367400000000000017
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_menu` (
|
||||
`id`, `parent_id`, `menu_type`, `menu_title`, `menu_url`, `component`, `menu_icon`,
|
||||
`is_show`, `permission_tag`, `sort_no`, `status`, `created`, `created_by`, `modified`, `modified_by`, `remark`
|
||||
)
|
||||
SELECT
|
||||
367400000000000018, 367400000000000001, 1, '删除审批', '', '', '',
|
||||
0, '/api/v1/skill/submitDeleteApproval', 8, 0, '2026-06-05 20:00:00', 1, '2026-06-05 20:00:00', 1, 'Skill-删除审批'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_menu` WHERE `id` = 367400000000000018
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367400000000000101, 1, 367400000000000001
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367400000000000001
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367400000000000111, 1, 367400000000000011
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367400000000000011
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367400000000000112, 1, 367400000000000012
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367400000000000012
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367400000000000113, 1, 367400000000000013
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367400000000000013
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367400000000000114, 1, 367400000000000014
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367400000000000014
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367400000000000115, 1, 367400000000000015
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367400000000000015
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367400000000000116, 1, 367400000000000016
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367400000000000016
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367400000000000117, 1, 367400000000000017
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367400000000000017
|
||||
);
|
||||
|
||||
INSERT INTO `tb_sys_role_menu` (`id`, `role_id`, `menu_id`)
|
||||
SELECT 367400000000000118, 1, 367400000000000018
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM `tb_sys_role_menu` WHERE `role_id` = 1 AND `menu_id` = 367400000000000018
|
||||
);
|
||||
Reference in New Issue
Block a user