From b9276c5dcc112205bdebf0693c51f97a3e6e3136 Mon Sep 17 00:00:00 2001 From: l90215 Date: Wed, 20 Aug 2025 17:52:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4=E7=9F=A5=E8=AF=86?= =?UTF-8?q?=E5=BA=93=E9=97=AE=E7=AD=94=E6=8E=A5=E5=85=A5=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=AF=8D=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/service/IPromptTemplateService.java | 7 + .../impl/PromptTemplateServiceImpl.java | 9 ++ .../ruoyi/chat/enums/promptTemplateEnum.java | 22 +++ .../service/chat/impl/SseServiceImpl.java | 131 ++++++++++-------- script/sql/ruoyi-ai.sql | 35 +++-- 5 files changed, 130 insertions(+), 74 deletions(-) create mode 100644 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/promptTemplateEnum.java diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IPromptTemplateService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IPromptTemplateService.java index 89cff106..5a123ef0 100644 --- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IPromptTemplateService.java +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IPromptTemplateService.java @@ -46,4 +46,11 @@ public interface IPromptTemplateService { * 校验并批量删除提示词模板信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 根据分类查询提示词模板 + * + * @param category 分类 + */ + PromptTemplateVo queryByCategory(String category); } diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/PromptTemplateServiceImpl.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/PromptTemplateServiceImpl.java index 85fdcd40..2f3a7572 100644 --- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/PromptTemplateServiceImpl.java +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/PromptTemplateServiceImpl.java @@ -109,4 +109,13 @@ public class PromptTemplateServiceImpl implements IPromptTemplateService { } return baseMapper.deleteBatchIds(ids) > 0; } + + @Override + public PromptTemplateVo queryByCategory(String category) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(PromptTemplate.class); + queryWrapper.eq(PromptTemplate::getCategory, category); + queryWrapper.orderByDesc(PromptTemplate::getUpdateTime); + queryWrapper.last("limit 1"); + return baseMapper.selectVoOne(queryWrapper); + } } \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/promptTemplateEnum.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/promptTemplateEnum.java new file mode 100644 index 00000000..f71128fd --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/promptTemplateEnum.java @@ -0,0 +1,22 @@ +package org.ruoyi.chat.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 提示词模板分类 + * + * @author evo + */ +@Getter +@AllArgsConstructor +public enum promptTemplateEnum { + CHAT(1, "chat"), + VECTOR(2, "vector"), + ; + + private final Integer code; + private final String desc; + +} + diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java index 18cf3713..a3892eeb 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java @@ -1,10 +1,12 @@ package org.ruoyi.chat.service.chat.impl; +import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollectionUtil; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import okhttp3.ResponseBody; +import org.ruoyi.chat.enums.promptTemplateEnum; import org.ruoyi.chat.factory.ChatServiceFactory; import org.ruoyi.chat.service.chat.IChatCostService; import org.ruoyi.chat.service.chat.IChatService; @@ -27,9 +29,11 @@ import org.ruoyi.domain.bo.ChatSessionBo; import org.ruoyi.domain.bo.QueryVectorBo; import org.ruoyi.domain.vo.ChatModelVo; import org.ruoyi.domain.vo.KnowledgeInfoVo; +import org.ruoyi.domain.vo.PromptTemplateVo; import org.ruoyi.service.IChatModelService; import org.ruoyi.service.IChatSessionService; import org.ruoyi.service.IKnowledgeInfoService; +import org.ruoyi.service.IPromptTemplateService; import org.ruoyi.service.VectorStoreService; import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.Resource; @@ -45,9 +49,8 @@ import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; -import java.util.ArrayList; import java.util.List; -import cn.dev33.satoken.stp.StpUtil; +import java.util.Objects; /** * @author ageer @@ -73,6 +76,9 @@ public class SseServiceImpl implements ISseService { private ChatModelVo chatModelVo; + // 提示词模板服务 + private final IPromptTemplateService promptTemplateService; + @Override public SseEmitter sseChat(ChatRequest chatRequest, HttpServletRequest request) { @@ -89,9 +95,9 @@ public class SseServiceImpl implements ISseService { // 设置对话角色 chatRequest.setRole(Message.Role.USER.getName()); - if(LoginHelper.isLogin()){ + if (LoginHelper.isLogin()) { - // 设置用户id + // 设置用户id chatRequest.setUserId(LoginHelper.getUserId()); @@ -100,10 +106,10 @@ public class SseServiceImpl implements ISseService { //待优化的地方 (这里请前端提交send的时候传递uuid进来或者sessionId) { // 设置会话id - if (chatRequest.getUuid() == null){ + if (chatRequest.getUuid() == null) { //暂时随机生成会话id chatRequest.setSessionId(System.currentTimeMillis()); - }else{ + } else { //这里或许需要修改一下,这里应该用uuid 或者 前端传递 sessionId chatRequest.setSessionId(chatRequest.getUuid()); } @@ -113,7 +119,7 @@ public class SseServiceImpl implements ISseService { // 保存消息记录 并扣除费用 chatCostService.deductToken(chatRequest); chatRequest.setUserId(chatCostService.getUserId()); - if(chatRequest.getSessionId()==null){ + if (chatRequest.getSessionId() == null) { ChatSessionBo chatSessionBo = new ChatSessionBo(); chatSessionBo.setUserId(chatCostService.getUserId()); chatSessionBo.setSessionTitle(getFirst10Characters(chatRequest.getPrompt())); @@ -130,29 +136,30 @@ public class SseServiceImpl implements ISseService { ChatModelVo currentModel = this.chatModelVo; String currentCategory = currentModel.getCategory(); ChatRetryHelper.executeWithRetry( - currentModel, - currentCategory, - chatModelService, - sseEmitter, - (modelForTry, onFailure) -> { - // 替换请求中的模型名称 - chatRequest.setModel(modelForTry.getModelName()); - // 以 emitter 实例为唯一键注册失败回调 - RetryNotifier.setFailureCallback(sseEmitter, onFailure); - try { - autoSelectServiceByCategoryAndInvoke(chatRequest, sseEmitter, modelForTry.getCategory()); - } finally { - // 不在此处清理,待下游结束/失败时清理 + currentModel, + currentCategory, + chatModelService, + sseEmitter, + (modelForTry, onFailure) -> { + // 替换请求中的模型名称 + chatRequest.setModel(modelForTry.getModelName()); + // 以 emitter 实例为唯一键注册失败回调 + RetryNotifier.setFailureCallback(sseEmitter, onFailure); + try { + autoSelectServiceByCategoryAndInvoke(chatRequest, sseEmitter, + modelForTry.getCategory()); + } finally { + // 不在此处清理,待下游结束/失败时清理 + } } - } ); } else { // 不重试不降级,直接调用 chatService.chat(chatRequest, sseEmitter); } } catch (Exception e) { - log.error(e.getMessage(),e); - SSEUtil.sendErrorEvent(sseEmitter,e.getMessage()); + log.error(e.getMessage(), e); + SSEUtil.sendErrorEvent(sseEmitter, e.getMessage()); } return sseEmitter; } @@ -169,7 +176,7 @@ public class SseServiceImpl implements ISseService { } else { chatModelVo = chatModelService.selectModelByName(chatRequest.getModel()); } - + if (chatModelVo == null) { throw new IllegalStateException("未找到模型名称:" + chatRequest.getModel()); } @@ -190,7 +197,7 @@ public class SseServiceImpl implements ISseService { IChatService service = chatServiceFactory.getChatService(category); service.chat(chatRequest, sseEmitter); } - + /** * 根据分类选择优先级最高的模型 */ @@ -220,23 +227,23 @@ public class SseServiceImpl implements ISseService { } /** - * 构建消息列表 + * 构建消息列表 */ - private void buildChatMessageList(ChatRequest chatRequest){ + private void buildChatMessageList(ChatRequest chatRequest) { List messages = chatRequest.getMessages(); - + // 处理知识库相关逻辑 String sysPrompt = processKnowledgeBase(chatRequest, messages); - + // 设置系统提示词 Message sysMessage = Message.builder() .content(sysPrompt) .role(Message.Role.SYSTEM) .build(); messages.add(0, sysMessage); - + chatRequest.setSysPrompt(sysPrompt); - + // 用户对话内容 String chatString = null; // 获取用户对话信息 @@ -250,54 +257,55 @@ public class SseServiceImpl implements ISseService { } chatRequest.setPrompt(chatString); } - + /** * 处理知识库相关逻辑 */ private String processKnowledgeBase(ChatRequest chatRequest, List messages) { if (StringUtils.isEmpty(chatRequest.getKid())) { - return getDefaultSystemPrompt(); + return getPromptTemplatePrompt(promptTemplateEnum.VECTOR.getDesc()); } - + try { // 查询知识库信息 KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(chatRequest.getKid())); if (knowledgeInfoVo == null) { log.warn("知识库信息不存在,kid: {}", chatRequest.getKid()); - return getDefaultSystemPrompt(); + return getPromptTemplatePrompt(promptTemplateEnum.VECTOR.getDesc()); } - + // 查询向量模型配置信息 ChatModelVo chatModel = chatModelService.selectModelByName(knowledgeInfoVo.getEmbeddingModelName()); if (chatModel == null) { log.warn("向量模型配置不存在,模型名称: {}", knowledgeInfoVo.getEmbeddingModelName()); - return getDefaultSystemPrompt(); + return getPromptTemplatePrompt(promptTemplateEnum.VECTOR.getDesc()); } - + // 构建向量查询参数 QueryVectorBo queryVectorBo = buildQueryVectorBo(chatRequest, knowledgeInfoVo, chatModel); - + // 获取向量查询结果 List nearestList = vectorStoreService.getQueryVector(queryVectorBo); - + // 添加知识库消息到上下文 addKnowledgeMessages(messages, nearestList); - + // 返回知识库系统提示词 return getKnowledgeSystemPrompt(knowledgeInfoVo); - + } catch (Exception e) { log.error("处理知识库信息失败: {}", e.getMessage(), e); - return getDefaultSystemPrompt(); + return getPromptTemplatePrompt(promptTemplateEnum.VECTOR.getDesc()); } } - + /** * 构建向量查询参数 */ - private QueryVectorBo buildQueryVectorBo(ChatRequest chatRequest, KnowledgeInfoVo knowledgeInfoVo, ChatModelVo chatModel) { + private QueryVectorBo buildQueryVectorBo(ChatRequest chatRequest, KnowledgeInfoVo knowledgeInfoVo, + ChatModelVo chatModel) { String content = chatRequest.getMessages().get(chatRequest.getMessages().size() - 1).getContent().toString(); - + QueryVectorBo queryVectorBo = new QueryVectorBo(); queryVectorBo.setQuery(content); queryVectorBo.setKid(chatRequest.getKid()); @@ -306,10 +314,10 @@ public class SseServiceImpl implements ISseService { queryVectorBo.setVectorModelName(knowledgeInfoVo.getVectorModelName()); queryVectorBo.setEmbeddingModelName(knowledgeInfoVo.getEmbeddingModelName()); queryVectorBo.setMaxResults(knowledgeInfoVo.getRetrieveLimit()); - + return queryVectorBo; } - + /** * 添加知识库消息到上下文 */ @@ -322,7 +330,7 @@ public class SseServiceImpl implements ISseService { messages.add(userMessage); } } - + /** * 获取知识库系统提示词 */ @@ -339,16 +347,29 @@ public class SseServiceImpl implements ISseService { } return sysPrompt; } - + + + /** + * 获取提示词模板提示词 + */ + private String getPromptTemplatePrompt(String category) { + PromptTemplateVo promptTemplateVo = promptTemplateService.queryByCategory(category); + if (Objects.isNull(promptTemplateVo) || StringUtils.isEmpty(promptTemplateVo.getTemplateContent())) { + return getDefaultSystemPrompt(); + } + return promptTemplateVo.getTemplateContent(); + } + /** * 获取默认系统提示词 */ private String getDefaultSystemPrompt() { String sysPrompt = chatModelVo != null ? chatModelVo.getSystemPrompt() : null; if (StringUtils.isEmpty(sysPrompt)) { - sysPrompt = "你是一个由RuoYI-AI开发的人工智能助手,名字叫熊猫助手。你擅长中英文对话,能够理解并处理各种问题,提供安全、有帮助、准确的回答。" + - "当前时间:" + DateUtils.getDate() + - "#注意:回复之前注意结合上下文和工具返回内容进行回复。"; + sysPrompt = "你是一个由RuoYI-AI开发的人工智能助手,名字叫RuoYI人工智能助手。" + + "你擅长中英文对话,能够理解并处理各种问题,提供安全、有帮助、准确的回答。" + + "当前时间:" + DateUtils.getDate() + + "#注意:回复之前注意结合上下文和工具返回内容进行回复。"; } return sysPrompt; } @@ -365,8 +386,8 @@ public class SseServiceImpl implements ISseService { InputStreamResource resource = new InputStreamResource(body.byteStream()); // 创建并返回ResponseEntity return ResponseEntity.ok() - .contentType(MediaType.parseMediaType("audio/mpeg")) - .body(resource); + .contentType(MediaType.parseMediaType("audio/mpeg")) + .body(resource); } else { // 如果ResponseBody为空,返回404状态码 return ResponseEntity.notFound().build(); diff --git a/script/sql/ruoyi-ai.sql b/script/sql/ruoyi-ai.sql index 2c824c8f..663fa1b4 100644 --- a/script/sql/ruoyi-ai.sql +++ b/script/sql/ruoyi-ai.sql @@ -647,28 +647,25 @@ INSERT INTO `sys_menu` VALUES (1929170702299045893, '提示词模板修改', 192 INSERT INTO `sys_menu` VALUES (1929170702299045894, '提示词模板删除', 1929170702299045890, '4', '#', '', NULL, 1, 0, 'F', '0', '0', 'system:promptTemplate:remove', '#', 103, 1, sysdate(), null, null, ''); INSERT INTO `sys_menu` VALUES (1929170702299045895, '提示词模板导出', 1929170702299045890, '5', '#', '', NULL, 1, 0, 'F', '0', '0', 'system:promptTemplate:export', '#', 103, 1, sysdate(), null, null, ''); +INSERT INTO sys_menu VALUES (2000, '在线开发', 0, 20, 'dev', '', '', 1, 0, 'M', '0', '0', '', 'carbon:development', 103, 1, '2025-07-11 19:38:05', 1, '2025-07-11 19:43:03', '在线开发目录'); +INSERT INTO sys_menu VALUES (1944213468857495553, '模型分组', 2000, 1, 'schemaGroup', 'dev/schemaGroup/index', null, 1, 0, 'C', '0', '0', null, '#', 103, 1, '2025-07-13 09:53:07', 1, '2025-07-13 09:54:45', '模型分组菜单'); +INSERT INTO sys_menu VALUES (1944229086906281985, '数据模型', 2000, 2, 'schema', 'dev/schema/index', null, 1, 0, 'C', '0', '0', null, '#', 103, 1, '2025-07-13 10:55:11', null, '2025-07-13 10:55:11', '数据模型菜单'); +INSERT INTO sys_menu VALUES (1946466176918249473, '模型字段管理', 2000, 3, 'schemaField', 'dev/schemaField/index', null, 1, 0, 'C', '0', '0', null, '#', 103, 1, '2025-07-19 15:04:35', null, '2025-07-19 15:04:35', '模型字段管理菜单'); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (2000, '在线开发', 0, 20, 'dev', '', '', 1, 0, 'M', '0', '0', '', 'carbon:development', 103, 1, '2025-07-11 19:38:05', 1, '2025-07-11 19:43:03', '在线开发目录'); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1944213468857495553, '模型分组', 2000, 1, 'schemaGroup', 'dev/schemaGroup/index', null, 1, 0, 'C', '0', '0', null, '#', 103, 1, '2025-07-13 09:53:07', 1, '2025-07-13 09:54:45', '模型分组菜单'); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1944229086906281985, '数据模型', 2000, 2, 'schema', 'dev/schema/index', null, 1, 0, 'C', '0', '0', null, '#', 103, 1, '2025-07-13 10:55:11', null, '2025-07-13 10:55:11', '数据模型菜单'); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1946466176918249473, '模型字段管理', 2000, 3, 'schemaField', 'dev/schemaField/index', null, 1, 0, 'C', '0', '0', null, '#', 103, 1, '2025-07-19 15:04:35', null, '2025-07-19 15:04:35', '模型字段管理菜单'); +INSERT INTO sys_menu VALUES (1944213468857495554, '模型分组查询', 1944213468857495553, 1, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaGroup:list', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); +INSERT INTO sys_menu VALUES (1944213468857495555, '模型分组新增', 1944213468857495553, 2, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaGroup:add', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); +INSERT INTO sys_menu VALUES (1944213468857495556, '模型分组修改', 1944213468857495553, 3, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaGroup:edit', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); +INSERT INTO sys_menu VALUES (1944213468857495557, '模型分组删除', 1944213468857495553, 4, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaGroup:remove', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1944213468857495554, '模型分组查询', 1944213468857495553, 1, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaGroup:list', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1944213468857495555, '模型分组新增', 1944213468857495553, 2, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaGroup:add', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1944213468857495556, '模型分组修改', 1944213468857495553, 3, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaGroup:edit', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1944213468857495557, '模型分组删除', 1944213468857495553, 4, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaGroup:remove', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); +INSERT INTO sys_menu VALUES (1944229086906281986, '模型数据查询', 1944229086906281985, 1, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schema:list', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); +INSERT INTO sys_menu VALUES (1944229086906281987, '模型数据新增', 1944229086906281985, 2, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schema:add', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); +INSERT INTO sys_menu VALUES (1944229086906281988, '模型数据修改', 1944229086906281985, 3, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schema:edit', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); +INSERT INTO sys_menu VALUES (1944229086906281989, '模型数据删除', 1944229086906281985, 4, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schema:remove', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); - -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1944229086906281986, '模型数据查询', 1944229086906281985, 1, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schema:list', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1944229086906281987, '模型数据新增', 1944229086906281985, 2, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schema:add', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1944229086906281988, '模型数据修改', 1944229086906281985, 3, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schema:edit', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1944229086906281989, '模型数据删除', 1944229086906281985, 4, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schema:remove', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); - - -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1946466176918249474, '模型字段管理查询', 1946466176918249473, 1, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaField:list', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1946466176918249475, '模型字段管理新增', 1946466176918249473, 2, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaField:add', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1946466176918249476, '模型字段管理修改', 1946466176918249473, 3, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaField:edit', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); -INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1946466176918249477, '模型字段管理删除', 1946466176918249473, 4, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaField:remove', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); +INSERT INTO sys_menu VALUES (1946466176918249474, '模型字段管理查询', 1946466176918249473, 1, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaField:list', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); +INSERT INTO sys_menu VALUES (1946466176918249475, '模型字段管理新增', 1946466176918249473, 2, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaField:add', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); +INSERT INTO sys_menu VALUES (1946466176918249476, '模型字段管理修改', 1946466176918249473, 3, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaField:edit', '#', 103, 1, '2025-06-24 19:06:58', null, null, ''); +INSERT INTO sys_menu VALUES (1946466176918249477, '模型字段管理删除', 1946466176918249473, 4, '#', '', null, 1, 0, 'F', '0', '0', 'dev:schemaField:remove', '#', 103, 1, '2025-06-24 19:06:58', null, null, '');