Browse Source

ceshi代码

Crazy 2 weeks ago
parent
commit
432a8c9d24
100 changed files with 1 additions and 4634 deletions
  1. 1 1
      pom.xml
  2. 0 27
      yudao-module-ai/pom.xml
  3. 0 32
      yudao-module-ai/yudao-module-ai-api/pom.xml
  4. 0 4
      yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/api/package-info.java
  5. 0 54
      yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/AiChatRoleEnum.java
  6. 0 16
      yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/DictTypeConstants.java
  7. 0 60
      yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/ErrorCodeConstants.java
  8. 0 37
      yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/image/AiImageStatusEnum.java
  9. 0 39
      yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/knowledge/AiKnowledgeDocumentStatusEnum.java
  10. 0 37
      yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/music/AiMusicGenerateModeEnum.java
  11. 0 39
      yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/music/AiMusicStatusEnum.java
  12. 0 42
      yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/write/AiWriteTypeEnum.java
  13. 0 64
      yudao-module-ai/yudao-module-ai-biz/pom.xml
  14. 0 114
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/AiChatConversationController.java
  15. 0 29
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/AiChatMessageController.http
  16. 0 120
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/AiChatMessageController.java
  17. 0 16
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/conversation/AiChatConversationCreateMyReqVO.java
  18. 0 26
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/conversation/AiChatConversationPageReqVO.java
  19. 0 71
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/conversation/AiChatConversationRespVO.java
  20. 0 39
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/conversation/AiChatConversationUpdateMyReqVO.java
  21. 0 29
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessagePageReqVO.java
  22. 0 50
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessageRespVO.java
  23. 0 25
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessageSendReqVO.java
  24. 0 36
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessageSendRespVO.java
  25. 0 42
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/AiImageController.http
  26. 0 139
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/AiImageController.java
  27. 0 52
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImageDrawReqVO.java
  28. 0 35
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImagePageReqVO.java
  29. 0 14
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImagePublicPageReqVO.java
  30. 0 60
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImageRespVO.java
  31. 0 18
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImageUpdateReqVO.java
  32. 0 20
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/midjourney/AiMidjourneyActionReqVO.java
  33. 0 35
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/midjourney/AiMidjourneyImagineReqVO.java
  34. 0 50
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/AiKnowledgeController.java
  35. 0 51
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/AiKnowledgeDocumentController.java
  36. 0 51
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/AiKnowledgeSegmentController.java
  37. 0 14
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/document/AiKnowledgeDocumentPageReqVO.java
  38. 0 38
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/document/AiKnowledgeDocumentRespVO.java
  39. 0 26
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/document/AiKnowledgeDocumentUpdateReqVO.java
  40. 0 36
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/knowledge/AiKnowledgeCreateReqVO.java
  41. 0 46
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/knowledge/AiKnowledgeDocumentCreateReqVO.java
  42. 0 14
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/knowledge/AiKnowledgePageReqVO.java
  43. 0 26
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/knowledge/AiKnowledgeRespVO.java
  44. 0 32
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/knowledge/AiKnowledgeUpdateReqVO.java
  45. 0 20
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/segment/AiKnowledgeSegmentPageReqVO.java
  46. 0 34
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/segment/AiKnowledgeSegmentRespVO.java
  47. 0 17
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/segment/AiKnowledgeSegmentSearchReqVO.java
  48. 0 17
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/segment/AiKnowledgeSegmentUpdateReqVO.java
  49. 0 22
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/segment/AiKnowledgeSegmentUpdateStatusReqVO.java
  50. 0 59
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/mindmap/AiMindMapController.java
  51. 0 15
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/mindmap/vo/AiMindMapGenerateReqVO.java
  52. 0 30
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/mindmap/vo/AiMindMapPageReqVO.java
  53. 0 36
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/mindmap/vo/AiMindMapRespVO.java
  54. 0 84
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/AiApiKeyController.java
  55. 0 84
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/AiChatModelController.java
  56. 0 124
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/AiChatRoleController.java
  57. 0 25
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/apikey/AiApiKeyPageReqVO.java
  58. 0 28
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/apikey/AiApiKeyRespVO.java
  59. 0 34
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/apikey/AiApiKeySaveReqVO.java
  60. 0 20
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatModel/AiChatModelPageReqVO.java
  61. 0 45
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatModel/AiChatModelRespVO.java
  62. 0 50
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatModel/AiChatModelSaveReqVO.java
  63. 0 20
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatRole/AiChatRolePageReqVO.java
  64. 0 57
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatRole/AiChatRoleRespVO.java
  65. 0 32
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatRole/AiChatRoleSaveMyReqVO.java
  66. 0 54
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatRole/AiChatRoleSaveReqVO.java
  67. 0 26
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/AiMusicController.http
  68. 0 98
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/AiMusicController.java
  69. 0 42
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/vo/AiMusicPageReqVO.java
  70. 0 70
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/vo/AiMusicRespVO.java
  71. 0 18
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/vo/AiMusicUpdateMyReqVO.java
  72. 0 18
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/vo/AiMusicUpdateReqVO.java
  73. 0 57
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/vo/AiSunoGenerateReqVO.java
  74. 0 59
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/write/AiWriteController.java
  75. 0 39
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/write/vo/AiWriteGenerateReqVO.java
  76. 0 33
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/write/vo/AiWritePageReqVO.java
  77. 0 54
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/write/vo/AiWriteRespVO.java
  78. 0 4
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/app/package-info.java
  79. 0 6
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/package-info.java
  80. 0 107
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/chat/AiChatConversationDO.java
  81. 0 104
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/chat/AiChatMessageDO.java
  82. 0 120
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/image/AiImageDO.java
  83. 0 76
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/knowledge/AiKnowledgeDO.java
  84. 0 92
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/knowledge/AiKnowledgeDocumentDO.java
  85. 0 62
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/knowledge/AiKnowledgeSegmentDO.java
  86. 0 59
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/mindmap/AiMindMapDO.java
  87. 0 55
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/model/AiApiKeyDO.java
  88. 0 82
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/model/AiChatModelDO.java
  89. 0 84
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/model/AiChatRoleDO.java
  90. 0 118
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/music/AiMusicDO.java
  91. 0 96
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/write/AiWriteDO.java
  92. 0 38
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/chat/AiChatConversationMapper.java
  93. 0 59
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/chat/AiChatMessageMapper.java
  94. 0 57
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/image/AiImageMapper.java
  95. 0 24
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/knowledge/AiKnowledgeDocumentMapper.java
  96. 0 26
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/knowledge/AiKnowledgeMapper.java
  97. 0 34
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/knowledge/AiKnowledgeSegmentMapper.java
  98. 0 26
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/mindmap/AiMindMapMapper.java
  99. 0 35
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/model/AiApiKeyMapper.java
  100. 0 43
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/model/AiChatModelMapper.java

+ 1 - 1
pom.xml

@@ -18,7 +18,7 @@
 <!--        <module>yudao-module-member</module>-->
 <!--        <module>yudao-module-bpm</module>-->
 <!--        <module>yudao-module-report</module>-->
-        <module>yudao-module-mp</module>
+<!--        <module>yudao-module-mp</module>-->
 <!--        <module>yudao-module-pay</module>-->
 <!--        <module>yudao-module-mall</module>-->
 <!--        <module>yudao-module-crm</module>-->

+ 0 - 27
yudao-module-ai/pom.xml

@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <groupId>cn.iocoder.boot</groupId>
-        <artifactId>yudao</artifactId>
-        <version>${revision}</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-    <modules>
-        <module>yudao-module-ai-api</module>
-        <module>yudao-module-ai-biz</module>
-        <module>yudao-spring-boot-starter-ai</module>
-    </modules>
-    <packaging>pom</packaging>
-    <artifactId>yudao-module-ai</artifactId>
-
-    <name>${project.artifactId}</name>
-    <description>
-        ai 模块下,接入 LLM 大模型,支持聊天、绘图、音乐、写作、思维导图等功能。
-        目前已接入各种模型,不限于:
-          国内:通义千问、文心一言、讯飞星火、智谱 GLM、DeepSeek
-          国外:OpenAI、Ollama、Midjourney、StableDiffusion、Suno
-    </description>
-
-</project>

+ 0 - 32
yudao-module-ai/yudao-module-ai-api/pom.xml

@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <groupId>cn.iocoder.boot</groupId>
-        <artifactId>yudao-module-ai</artifactId>
-        <version>${revision}</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>yudao-module-ai-api</artifactId>
-    <packaging>jar</packaging>
-
-    <name>${project.artifactId}</name>
-    <description>
-        ai 模块 API,暴露给其它模块调用
-    </description>
-
-    <dependencies>
-        <dependency>
-            <groupId>cn.iocoder.boot</groupId>
-            <artifactId>yudao-common</artifactId>
-        </dependency>
-
-        <!-- 参数校验 -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-validation</artifactId>
-            <optional>true</optional>
-        </dependency>
-    </dependencies>
-</project>

+ 0 - 4
yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/api/package-info.java

@@ -1,4 +0,0 @@
-/**
- * 占位,没有特别的作用
- */
-package cn.iocoder.yudao.module.ai.api;

+ 0 - 54
yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/AiChatRoleEnum.java

@@ -1,54 +0,0 @@
-package cn.iocoder.yudao.module.ai.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * AI 内置聊天角色的枚举
- *
- * @author xiaoxin
- */
-@AllArgsConstructor
-@Getter
-public enum AiChatRoleEnum {
-
-    AI_WRITE_ROLE("写作助手", """
-            你是一位出色的写作助手,能够帮助用户生成创意和灵感,并在用户提供场景和提示词时生成对应的回复。你的任务包括:
-            1.	撰写建议:根据用户提供的主题或问题,提供详细的写作建议、情节发展方向、角色设定以及背景描写,确保内容结构清晰、有逻辑。
-            2.	回复生成:根据用户提供的场景和提示词,生成合适的对话或文字回复,确保语气和风格符合场景需求。
-            除此之外不需要除了正文内容外的其他回复,如标题、开头、任何解释性语句或道歉。
-            """),
-
-    AI_MIND_MAP_ROLE("导图助手", """
-             你是一位非常优秀的思维导图助手,你会把用户的所有提问都总结成思维导图,然后以 Markdown 格式输出。markdown 只需要输出一级标题,二级标题,三级标题,四级标题,最多输出四级,除此之外不要输出任何其他 markdown 标记。下面是一个合格的例子:
-             # Geek-AI 助手
-             ## 完整的开源系统
-             ### 前端开源
-             ### 后端开源
-             ## 支持各种大模型
-             ### OpenAI
-             ### Azure
-             ### 文心一言
-             ### 通义千问
-             ## 集成多种收费方式
-             ### 支付宝
-             ### 微信
-            除此之外不要任何解释性语句。
-            """),
-
-    AI_KNOWLEDGE_ROLE("知识库助手", """
-                给你提供一些数据参考:{info},请回答我的问题。
-                请你跟进数据参考与工具返回结果回复用户的请求。
-                """);
-
-    /**
-     * 角色名
-     */
-    private final String name;
-
-    /**
-     * 角色设定
-     */
-    private final String systemMessage;
-
-}

+ 0 - 16
yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/DictTypeConstants.java

@@ -1,16 +0,0 @@
-package cn.iocoder.yudao.module.ai.enums;
-
-/**
- * AI 字典类型的枚举类
- *
- * @author xiaoxin
- */
-public interface DictTypeConstants {
-
-    // ========== AI Write ==========
-    String AI_WRITE_FORMAT = "ai_write_format"; // 写作格式
-    String AI_WRITE_LENGTH = "ai_write_length"; // 写作长度
-    String AI_WRITE_LANGUAGE = "ai_write_language"; // 写作语言
-    String AI_WRITE_TONE = "ai_write_tone"; // 写作语气
-
-}

+ 0 - 60
yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/ErrorCodeConstants.java

@@ -1,60 +0,0 @@
-package cn.iocoder.yudao.module.ai.enums;
-
-import cn.iocoder.yudao.framework.common.exception.ErrorCode;
-
-/**
- * AI 错误码枚举类
- * <p>
- * ai 系统,使用 1-040-000-000 段
- */
-public interface ErrorCodeConstants {
-
-    // ========== API 密钥 1-040-000-000 ==========
-    ErrorCode API_KEY_NOT_EXISTS = new ErrorCode(1_040_000_000, "API 密钥不存在");
-    ErrorCode API_KEY_DISABLE = new ErrorCode(1_040_000_001, "API 密钥已禁用!");
-    ErrorCode API_KEY_MIDJOURNEY_NOT_FOUND = new ErrorCode(1_040_000_900, "Midjourney 模型不存在");
-    ErrorCode API_KEY_SUNO_NOT_FOUND = new ErrorCode(1_040_000_901, "Suno 模型不存在");
-    ErrorCode API_KEY_IMAGE_NODE_FOUND = new ErrorCode(1_040_000_902, "平台({}) 图片模型未配置");
-
-    // ========== API 聊天模型 1-040-001-000 ==========
-    ErrorCode CHAT_MODEL_NOT_EXISTS = new ErrorCode(1_040_001_000, "模型不存在!");
-    ErrorCode CHAT_MODEL_DISABLE = new ErrorCode(1_040_001_001, "模型({})已禁用!");
-    ErrorCode CHAT_MODEL_DEFAULT_NOT_EXISTS = new ErrorCode(1_040_001_002, "操作失败,找不到默认聊天模型");
-
-    // ========== API 聊天模型 1-040-002-000 ==========
-    ErrorCode CHAT_ROLE_NOT_EXISTS = new ErrorCode(1_040_002_000, "聊天角色不存在");
-    ErrorCode CHAT_ROLE_DISABLE = new ErrorCode(1_040_001_001, "聊天角色({})已禁用!");
-
-    // ========== API 聊天会话 1-040-003-000 ==========
-
-    ErrorCode CHAT_CONVERSATION_NOT_EXISTS = new ErrorCode(1_040_003_000, "对话不存在!");
-    ErrorCode CHAT_CONVERSATION_MODEL_ERROR = new ErrorCode(1_040_003_001, "操作失败,该聊天模型的配置不完整");
-
-    // ========== API 聊天消息 1-040-004-000 ==========
-
-    ErrorCode CHAT_MESSAGE_NOT_EXIST = new ErrorCode(1_040_004_000, "消息不存在!");
-    ErrorCode CHAT_STREAM_ERROR = new ErrorCode(1_040_004_001, "对话生成异常!");
-
-    // ========== API 绘画 1-040-005-000 ==========
-
-    ErrorCode IMAGE_NOT_EXISTS = new ErrorCode(1_022_005_000, "图片不存在!");
-    ErrorCode IMAGE_MIDJOURNEY_SUBMIT_FAIL = new ErrorCode(1_022_005_001, "Midjourney 提交失败!原因:{}");
-    ErrorCode IMAGE_CUSTOM_ID_NOT_EXISTS = new ErrorCode(1_022_005_002, "Midjourney 按钮 customId 不存在! {}");
-    ErrorCode IMAGE_FAIL = new ErrorCode(1_022_005_002, "图片绘画失败! {}");
-
-    // ========== API 音乐 1-040-006-000 ==========
-    ErrorCode MUSIC_NOT_EXISTS = new ErrorCode(1_022_006_000, "音乐不存在!");
-
-    // ========== API 写作 1-022-007-000 ==========
-    ErrorCode WRITE_NOT_EXISTS = new ErrorCode(1_022_007_000, "作文不存在!");
-    ErrorCode WRITE_STREAM_ERROR = new ErrorCode(1_022_07_001, "写作生成异常!");
-
-    // ========== API 思维导图 1-040-008-000 ==========
-    ErrorCode MIND_MAP_NOT_EXISTS = new ErrorCode(1_040_008_000, "思维导图不存在!");
-
-    // ========== API 知识库 1-022-008-000 ==========
-    ErrorCode KNOWLEDGE_NOT_EXISTS = new ErrorCode(1_022_008_000, "知识库不存在!");
-    ErrorCode KNOWLEDGE_DOCUMENT_NOT_EXISTS = new ErrorCode(1_022_008_001, "文档不存在!");
-    ErrorCode KNOWLEDGE_SEGMENT_NOT_EXISTS = new ErrorCode(1_022_008_002, "段落不存在!");
-
-}

+ 0 - 37
yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/image/AiImageStatusEnum.java

@@ -1,37 +0,0 @@
-package cn.iocoder.yudao.module.ai.enums.image;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * AI 绘画状态的枚举
- *
- * @author fansili
- */
-@AllArgsConstructor
-@Getter
-public enum AiImageStatusEnum {
-
-    IN_PROGRESS(10, "进行中"),
-    SUCCESS(20, "已完成"),
-    FAIL(30, "已失败");
-
-    /**
-     * 状态
-     */
-    private final Integer status;
-    /**
-     * 状态名
-     */
-    private final String name;
-
-    public static AiImageStatusEnum valueOfStatus(Integer status) {
-        for (AiImageStatusEnum statusEnum : AiImageStatusEnum.values()) {
-            if (statusEnum.getStatus().equals(status)) {
-                return statusEnum;
-            }
-        }
-        throw new IllegalArgumentException("未知会话状态: " + status);
-    }
-
-}

+ 0 - 39
yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/knowledge/AiKnowledgeDocumentStatusEnum.java

@@ -1,39 +0,0 @@
-package cn.iocoder.yudao.module.ai.enums.knowledge;
-
-import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-import java.util.Arrays;
-
-/**
- * AI 知识库-文档状态的枚举
- *
- * @author xiaoxin
- */
-@AllArgsConstructor
-@Getter
-public enum AiKnowledgeDocumentStatusEnum implements IntArrayValuable {
-
-    IN_PROGRESS(10, "索引中"),
-    SUCCESS(20, "可用"),
-    FAIL(30, "失败");
-
-    /**
-     * 状态
-     */
-    private final Integer status;
-
-    /**
-     * 状态名
-     */
-    private final String name;
-
-    public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AiKnowledgeDocumentStatusEnum::getStatus).toArray();
-
-    @Override
-    public int[] array() {
-        return ARRAYS;
-    }
-
-}

+ 0 - 37
yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/music/AiMusicGenerateModeEnum.java

@@ -1,37 +0,0 @@
-package cn.iocoder.yudao.module.ai.enums.music;
-
-import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-import java.util.Arrays;
-
-/**
- * AI 音乐生成模式的枚举
- *
- * @author xiaoxin
- */
-@AllArgsConstructor
-@Getter
-public enum AiMusicGenerateModeEnum implements IntArrayValuable {
-
-    DESCRIPTION(1, "描述模式"),
-    LYRIC(2, "歌词模式");
-
-    /**
-     * 模式
-     */
-    private final Integer mode;
-    /**
-     * 模式名
-     */
-    private final String name;
-
-    public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AiMusicGenerateModeEnum::getMode).toArray();
-
-    @Override
-    public int[] array() {
-        return ARRAYS;
-    }
-
-}

+ 0 - 39
yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/music/AiMusicStatusEnum.java

@@ -1,39 +0,0 @@
-package cn.iocoder.yudao.module.ai.enums.music;
-
-import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-import java.util.Arrays;
-
-/**
- * AI 音乐状态的枚举
- *
- * @author xiaoxin
- */
-@AllArgsConstructor
-@Getter
-public enum AiMusicStatusEnum implements IntArrayValuable {
-
-    IN_PROGRESS(10, "进行中"),
-    SUCCESS(20, "已完成"),
-    FAIL(30, "已失败");
-
-    /**
-     * 状态
-     */
-    private final Integer status;
-
-    /**
-     * 状态名
-     */
-    private final String name;
-
-    public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AiMusicStatusEnum::getStatus).toArray();
-
-    @Override
-    public int[] array() {
-        return ARRAYS;
-    }
-
-}

+ 0 - 42
yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/write/AiWriteTypeEnum.java

@@ -1,42 +0,0 @@
-package cn.iocoder.yudao.module.ai.enums.write;
-
-import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-import java.util.Arrays;
-
-/**
- * AI 写作类型的枚举
- *
- * @author xiaoxin
- */
-@AllArgsConstructor
-@Getter
-public enum AiWriteTypeEnum implements IntArrayValuable {
-
-    WRITING(1, "撰写", "请撰写一篇关于 [{}] 的文章。文章的内容格式:{},语气:{},语言:{},长度:{}。请确保涵盖主要内容,不需要除了正文内容外的其他回复,如标题、额外的解释或道歉。"),
-    REPLY(2, "回复", "请针对如下内容:[{}] 做个回复。回复内容参考:[{}], 回复格式:{},语气:{},语言:{},长度:{}。不需要除了正文内容外的其他回复,如标题、开头、额外的解释或道歉。");
-
-    /**
-     * 类型
-     */
-    private final Integer type;
-    /**
-     * 类型名
-     */
-    private final String name;
-
-    /**
-     * 模版
-     */
-    private final String prompt;
-
-    public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AiWriteTypeEnum::getType).toArray();
-
-    @Override
-    public int[] array() {
-        return ARRAYS;
-    }
-
-}

+ 0 - 64
yudao-module-ai/yudao-module-ai-biz/pom.xml

@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <groupId>cn.iocoder.boot</groupId>
-        <artifactId>yudao-module-ai</artifactId>
-        <version>${revision}</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>yudao-module-ai-biz</artifactId>
-
-    <name>${project.artifactId}</name>
-    <description>
-        ai 模块下,接入 LLM 大模型,支持聊天、绘图、音乐、写作、思维导图等功能。
-        目前已接入各种模型,不限于:
-        国内:通义千问、文心一言、讯飞星火、智谱 GLM、DeepSeek
-        国外:OpenAI、Ollama、Midjourney、StableDiffusion、Suno
-    </description>
-
-    <dependencies>
-        <dependency>
-            <groupId>cn.iocoder.boot</groupId>
-            <artifactId>yudao-module-ai-api</artifactId>
-            <version>${revision}</version>
-        </dependency>
-
-        <!-- 业务组件 -->
-        <dependency>
-            <groupId>cn.iocoder.boot</groupId>
-            <artifactId>yudao-spring-boot-starter-ai</artifactId>
-            <version>${revision}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>cn.iocoder.boot</groupId>
-            <artifactId>yudao-spring-boot-starter-biz-tenant</artifactId>
-        </dependency>
-
-        <!-- Web 相关 -->
-        <dependency>
-            <groupId>cn.iocoder.boot</groupId>
-            <artifactId>yudao-spring-boot-starter-security</artifactId>
-        </dependency>
-
-        <!-- DB 相关 -->
-        <dependency>
-            <groupId>cn.iocoder.boot</groupId>
-            <artifactId>yudao-spring-boot-starter-mybatis</artifactId>
-        </dependency>
-
-        <!-- Job 相关 -->
-        <dependency>
-            <groupId>cn.iocoder.boot</groupId>
-            <artifactId>yudao-spring-boot-starter-job</artifactId>
-        </dependency>
-
-        <!-- Test 测试相关 -->
-        <dependency>
-            <groupId>cn.iocoder.boot</groupId>
-            <artifactId>yudao-spring-boot-starter-test</artifactId>
-        </dependency>
-    </dependencies>
-</project>

+ 0 - 114
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/AiChatConversationController.java

@@ -1,114 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.chat;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjUtil;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.conversation.AiChatConversationCreateMyReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.conversation.AiChatConversationPageReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.conversation.AiChatConversationRespVO;
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.conversation.AiChatConversationUpdateMyReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO;
-import cn.iocoder.yudao.module.ai.service.chat.AiChatConversationService;
-import cn.iocoder.yudao.module.ai.service.chat.AiChatMessageService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.Map;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
-import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-
-@Tag(name = "管理后台 - AI 聊天对话")
-@RestController
-@RequestMapping("/ai/chat/conversation")
-@Validated
-public class AiChatConversationController {
-
-    @Resource
-    private AiChatConversationService chatConversationService;
-    @Resource
-    private AiChatMessageService chatMessageService;
-
-    @PostMapping("/create-my")
-    @Operation(summary = "创建【我的】聊天对话")
-    public CommonResult<Long> createChatConversationMy(@RequestBody @Valid AiChatConversationCreateMyReqVO createReqVO) {
-        return success(chatConversationService.createChatConversationMy(createReqVO, getLoginUserId()));
-    }
-
-    @PutMapping("/update-my")
-    @Operation(summary = "更新【我的】聊天对话")
-    public CommonResult<Boolean> updateChatConversationMy(@RequestBody @Valid AiChatConversationUpdateMyReqVO updateReqVO) {
-        chatConversationService.updateChatConversationMy(updateReqVO, getLoginUserId());
-        return success(true);
-    }
-
-    @GetMapping("/my-list")
-    @Operation(summary = "获得【我的】聊天对话列表")
-    public CommonResult<List<AiChatConversationRespVO>> getChatConversationMyList() {
-        List<AiChatConversationDO> list = chatConversationService.getChatConversationListByUserId(getLoginUserId());
-        return success(BeanUtils.toBean(list, AiChatConversationRespVO.class));
-    }
-
-    @GetMapping("/get-my")
-    @Operation(summary = "获得【我的】聊天对话")
-    @Parameter(name = "id", required = true, description = "对话编号", example = "1024")
-    public CommonResult<AiChatConversationRespVO> getChatConversationMy(@RequestParam("id") Long id) {
-        AiChatConversationDO conversation = chatConversationService.getChatConversation(id);
-        if (conversation != null && ObjUtil.notEqual(conversation.getUserId(), getLoginUserId())) {
-            conversation = null;
-        }
-        return success(BeanUtils.toBean(conversation, AiChatConversationRespVO.class));
-    }
-
-    @DeleteMapping("/delete-my")
-    @Operation(summary = "删除聊天对话")
-    @Parameter(name = "id", required = true, description = "对话编号", example = "1024")
-    public CommonResult<Boolean> deleteChatConversationMy(@RequestParam("id") Long id) {
-        chatConversationService.deleteChatConversationMy(id, getLoginUserId());
-        return success(true);
-    }
-
-    @DeleteMapping("/delete-by-unpinned")
-    @Operation(summary = "删除未置顶的聊天对话")
-    public CommonResult<Boolean> deleteChatConversationMyByUnpinned() {
-        chatConversationService.deleteChatConversationMyByUnpinned(getLoginUserId());
-        return success(true);
-    }
-
-    // ========== 对话管理 ==========
-
-    @GetMapping("/page")
-    @Operation(summary = "获得对话分页", description = "用于【对话管理】菜单")
-    @PreAuthorize("@ss.hasPermission('ai:chat-conversation:query')")
-    public CommonResult<PageResult<AiChatConversationRespVO>> getChatConversationPage(AiChatConversationPageReqVO pageReqVO) {
-        PageResult<AiChatConversationDO> pageResult = chatConversationService.getChatConversationPage(pageReqVO);
-        if (CollUtil.isEmpty(pageResult.getList())) {
-            return success(PageResult.empty());
-        }
-        // 拼接关联数据
-        Map<Long, Integer> messageCountMap = chatMessageService.getChatMessageCountMap(
-                convertList(pageResult.getList(), AiChatConversationDO::getId));
-        return success(BeanUtils.toBean(pageResult, AiChatConversationRespVO.class,
-                conversation -> conversation.setMessageCount(messageCountMap.getOrDefault(conversation.getId(), 0))));
-    }
-
-    @Operation(summary = "管理员删除对话")
-    @DeleteMapping("/delete-by-admin")
-    @Parameter(name = "id", required = true, description = "对话编号", example = "1024")
-    @PreAuthorize("@ss.hasPermission('ai:chat-conversation:delete')")
-    public CommonResult<Boolean> deleteChatConversationByAdmin(@RequestParam("id") Long id) {
-        chatConversationService.deleteChatConversationByAdmin(id);
-        return success(true);
-    }
-
-}

+ 0 - 29
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/AiChatMessageController.http

@@ -1,29 +0,0 @@
-### 发送消息(段式)
-POST {{baseUrl}}/ai/chat/message/send
-Content-Type: application/json
-Authorization: {{token}}
-tenant-id: {{adminTenentId}}
-
-{
-  "conversationId": "1781604279872581724",
-  "content": "你是 OpenAI 么?"
-}
-
-### 发送消息(流式)
-POST {{baseUrl}}/ai/chat/message/send-stream
-Content-Type: application/json
-Authorization: {{token}}
-tenant-id: {{adminTenentId}}
-
-{
-  "conversationId": "1781604279872581724",
-  "content": "1+1=?"
-}
-
-### 获得指定对话的消息列表
-GET {{baseUrl}}/ai/chat/message/list-by-conversation-id?conversationId=1781604279872581649
-Authorization: {{token}}
-
-### 删除消息
-DELETE {{baseUrl}}/ai/chat/message/delete?id=50
-Authorization: {{token}}

+ 0 - 120
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/AiChatMessageController.java

@@ -1,120 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.chat;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjUtil;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message.AiChatMessagePageReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message.AiChatMessageRespVO;
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message.AiChatMessageSendReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message.AiChatMessageSendRespVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO;
-import cn.iocoder.yudao.module.ai.service.chat.AiChatConversationService;
-import cn.iocoder.yudao.module.ai.service.chat.AiChatMessageService;
-import cn.iocoder.yudao.module.ai.service.model.AiChatRoleService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.annotation.security.PermitAll;
-import jakarta.validation.Valid;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import reactor.core.publisher.Flux;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
-import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-
-@Tag(name = "管理后台 - 聊天消息")
-@RestController
-@RequestMapping("/ai/chat/message")
-@Slf4j
-public class AiChatMessageController {
-
-    @Resource
-    private AiChatMessageService chatMessageService;
-    @Resource
-    private AiChatConversationService chatConversationService;
-    @Resource
-    private AiChatRoleService chatRoleService;
-
-    @Operation(summary = "发送消息(段式)", description = "一次性返回,响应较慢")
-    @PostMapping("/send")
-    public CommonResult<AiChatMessageSendRespVO> sendMessage(@Valid @RequestBody AiChatMessageSendReqVO sendReqVO) {
-        return success(chatMessageService.sendMessage(sendReqVO, getLoginUserId()));
-    }
-
-    @Operation(summary = "发送消息(流式)", description = "流式返回,响应较快")
-    @PostMapping(value = "/send-stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
-    @PermitAll // 解决 SSE 最终响应的时候,会被 Access Denied 拦截的问题
-    public Flux<CommonResult<AiChatMessageSendRespVO>> sendChatMessageStream(@Valid @RequestBody AiChatMessageSendReqVO sendReqVO) {
-        return chatMessageService.sendChatMessageStream(sendReqVO, getLoginUserId());
-    }
-
-    @Operation(summary = "获得指定对话的消息列表")
-    @GetMapping("/list-by-conversation-id")
-    @Parameter(name = "conversationId", required = true, description = "对话编号", example = "1024")
-    public CommonResult<List<AiChatMessageRespVO>> getChatMessageListByConversationId(
-            @RequestParam("conversationId") Long conversationId) {
-        AiChatConversationDO conversation = chatConversationService.getChatConversation(conversationId);
-        if (conversation == null || ObjUtil.notEqual(conversation.getUserId(), getLoginUserId())) {
-            return success(Collections.emptyList());
-        }
-        List<AiChatMessageDO> messageList = chatMessageService.getChatMessageListByConversationId(conversationId);
-        return success(BeanUtils.toBean(messageList, AiChatMessageRespVO.class));
-    }
-
-    @Operation(summary = "删除消息")
-    @DeleteMapping("/delete")
-    @Parameter(name = "id", required = true, description = "消息编号", example = "1024")
-    public CommonResult<Boolean> deleteChatMessage(@RequestParam("id") Long id) {
-        chatMessageService.deleteChatMessage(id, getLoginUserId());
-        return success(true);
-    }
-
-    @Operation(summary = "删除指定对话的消息")
-    @DeleteMapping("/delete-by-conversation-id")
-    @Parameter(name = "conversationId", required = true, description = "对话编号", example = "1024")
-    public CommonResult<Boolean> deleteChatMessageByConversationId(@RequestParam("conversationId") Long conversationId) {
-        chatMessageService.deleteChatMessageByConversationId(conversationId, getLoginUserId());
-        return success(true);
-    }
-
-    // ========== 对话管理 ==========
-
-    @GetMapping("/page")
-    @Operation(summary = "获得消息分页", description = "用于【对话管理】菜单")
-    @PreAuthorize("@ss.hasPermission('ai:chat-conversation:query')")
-    public CommonResult<PageResult<AiChatMessageRespVO>> getChatMessagePage(AiChatMessagePageReqVO pageReqVO) {
-        PageResult<AiChatMessageDO> pageResult = chatMessageService.getChatMessagePage(pageReqVO);
-        if (CollUtil.isEmpty(pageResult.getList())) {
-            return success(PageResult.empty());
-        }
-        // 拼接数据
-        Map<Long, AiChatRoleDO> roleMap = chatRoleService.getChatRoleMap(
-                convertSet(pageResult.getList(), AiChatMessageDO::getRoleId));
-        return success(BeanUtils.toBean(pageResult, AiChatMessageRespVO.class,
-                respVO -> MapUtils.findAndThen(roleMap, respVO.getRoleId(), role -> respVO.setRoleName(role.getName()))));
-    }
-
-    @Operation(summary = "管理员删除消息")
-    @DeleteMapping("/delete-by-admin")
-    @Parameter(name = "id", required = true, description = "消息编号", example = "1024")
-    @PreAuthorize("@ss.hasPermission('ai:chat-message:delete')")
-    public CommonResult<Boolean> deleteChatMessageByAdmin(@RequestParam("id") Long id) {
-        chatMessageService.deleteChatMessageByAdmin(id);
-        return success(true);
-    }
-
-}

+ 0 - 16
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/conversation/AiChatConversationCreateMyReqVO.java

@@ -1,16 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.chat.vo.conversation;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 聊天对话创建【我的】 Request VO")
-@Data
-public class AiChatConversationCreateMyReqVO {
-
-    @Schema(description = "聊天角色编号", example = "666")
-    private Long roleId;
-
-    @Schema(description = "知识库编号", example = "1204")
-    private Long knowledgeId;
-
-}

+ 0 - 26
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/conversation/AiChatConversationPageReqVO.java

@@ -1,26 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.chat.vo.conversation;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDateTime;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - AI 聊天对话的分页 Request VO")
-@Data
-public class AiChatConversationPageReqVO extends PageParam {
-
-    @Schema(description = "用户编号", example = "1024")
-    private Long userId;
-
-    @Schema(description = "对话标题", example = "你好")
-    private String title;
-
-    @Schema(description = "创建时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
-
-}

+ 0 - 71
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/conversation/AiChatConversationRespVO.java

@@ -1,71 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.chat.vo.conversation;
-
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO;
-import com.fhs.core.trans.anno.Trans;
-import com.fhs.core.trans.constant.TransType;
-import com.fhs.core.trans.vo.VO;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Schema(description = "管理后台 - AI 聊天对话 Response VO")
-@Data
-public class AiChatConversationRespVO implements VO {
-
-    @Schema(description = "对话编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
-    private Long id;
-
-    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
-    private Long userId;
-
-    @Schema(description = "对话标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是一个标题")
-    private String title;
-
-    @Schema(description = "是否置顶", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
-    private Boolean pinned;
-
-    @Schema(description = "角色编号", example = "1")
-    @Trans(type = TransType.SIMPLE, target = AiChatRoleDO.class, fields = {"name", "avatar"}, refs = {"roleName", "roleAvatar"})
-    private Long roleId;
-
-    @Schema(description = "模型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @Trans(type = TransType.SIMPLE, target = AiChatModelDO.class, fields = "name", ref = "modelName")
-    private Long modelId;
-
-    @Schema(description = "模型标志", requiredMode = Schema.RequiredMode.REQUIRED, example = "ERNIE-Bot-turbo-0922")
-    private String model;
-
-    @Schema(description = "模型名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
-    private String modelName;
-
-    @Schema(description = "角色设定", example = "一个快乐的程序员")
-    private String systemMessage;
-
-    @Schema(description = "温度参数", requiredMode = Schema.RequiredMode.REQUIRED, example = "0.8")
-    private Double temperature;
-
-    @Schema(description = "单条回复的最大 Token 数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "4096")
-    private Integer maxTokens;
-
-    @Schema(description = "上下文的最大 Message 数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
-    private Integer maxContexts;
-
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    private LocalDateTime createTime;
-
-    // ========== 关联 role 信息 ==========
-
-    @Schema(description = "角色头像", example = "https://www.iocoder.cn/1.png")
-    private String roleAvatar;
-
-    @Schema(description = "角色名字", example = "小黄")
-    private String roleName;
-
-    // ========== 仅在【对话管理】时加载 ==========
-
-    @Schema(description = "消息数量", example = "20")
-    private Integer messageCount;
-
-}

+ 0 - 39
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/conversation/AiChatConversationUpdateMyReqVO.java

@@ -1,39 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.chat.vo.conversation;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 聊天对话更新【我的】 Request VO")
-@Data
-public class AiChatConversationUpdateMyReqVO {
-
-    @Schema(description = "对话编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
-    @NotNull(message = "对话编号不能为空")
-    private Long id;
-
-    @Schema(description = "对话标题", example = "我是一个标题")
-    private String title;
-
-    @Schema(description = "是否置顶", example = "true")
-    private Boolean pinned;
-
-    @Schema(description = "模型编号", example = "1")
-    private Long modelId;
-
-    @Schema(description = "知识库编号", example = "1")
-    private Long knowledgeId;
-
-    @Schema(description = "角色设定", example = "一个快乐的程序员")
-    private String systemMessage;
-
-    @Schema(description = "温度参数", example = "0.8")
-    private Double temperature;
-
-    @Schema(description = "单条回复的最大 Token 数量", example = "4096")
-    private Integer maxTokens;
-
-    @Schema(description = "上下文的最大 Message 数量", example = "10")
-    private Integer maxContexts;
-
-}

+ 0 - 29
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessagePageReqVO.java

@@ -1,29 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDateTime;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - AI 聊天消息的分页 Request VO")
-@Data
-public class AiChatMessagePageReqVO extends PageParam {
-
-    @Schema(description = "对话编号", example = "2048")
-    private Long conversationId;
-
-    @Schema(description = "用户编号", example = "1024")
-    private Long userId;
-
-    @Schema(description = "消息内容", example = "你好")
-    private String content;
-
-    @Schema(description = "创建时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
-
-}

+ 0 - 50
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessageRespVO.java

@@ -1,50 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Schema(description = "管理后台 - AI 聊天消息 Response VO")
-@Data
-public class AiChatMessageRespVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
-    private Long id;
-
-    @Schema(description = "对话编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
-    private Long conversationId;
-
-    @Schema(description = "回复消息编号", example = "1024")
-    private Long replyId;
-
-    @Schema(description = "消息类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "role")
-    private String type; // 参见 MessageType 枚举类
-
-    @Schema(description = "用户编号", example = "4096")
-    private Long userId;
-
-    @Schema(description = "角色编号", example = "888")
-    private Long roleId;
-
-    @Schema(description = "模型标志", requiredMode = Schema.RequiredMode.REQUIRED, example = "gpt-3.5-turbo")
-    private String model;
-
-    @Schema(description = "模型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "123")
-    private Long modelId;
-
-    @Schema(description = "聊天内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,你好啊")
-    private String content;
-
-    @Schema(description = "是否携带上下文", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
-    private Boolean useContext;
-
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-05-12 12:51")
-    private LocalDateTime createTime;
-
-    // ========== 仅在【对话管理】时加载 ==========
-
-    @Schema(description = "角色名字", example = "小黄")
-    private String roleName;
-
-}

+ 0 - 25
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessageSendReqVO.java

@@ -1,25 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-@Schema(description = "管理后台 - AI 聊天消息发送 Request VO")
-@Data
-public class AiChatMessageSendReqVO {
-
-    @Schema(description = "聊天对话编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
-    @NotNull(message = "聊天对话编号不能为空")
-    private Long conversationId;
-
-    @Schema(description = "聊天内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "帮我写个 Java 算法")
-    @NotEmpty(message = "聊天内容不能为空")
-    private String content;
-
-    @Schema(description = "是否携带上下文", example = "true")
-    private Boolean useContext;
-
-}

+ 0 - 36
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessageSendRespVO.java

@@ -1,36 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Schema(description = "管理后台 - AI 聊天消息发送 Response VO")
-@Data
-public class AiChatMessageSendRespVO {
-
-    @Schema(description = "发送消息", requiredMode = Schema.RequiredMode.REQUIRED)
-    private Message send;
-
-    @Schema(description = "接收消息", requiredMode = Schema.RequiredMode.REQUIRED)
-    private Message receive;
-
-    @Schema(description = "消息")
-    @Data
-    public static class Message {
-
-        @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
-        private Long id;
-
-        @Schema(description = "消息类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "role")
-        private String type; // 参见 MessageType 枚举类
-
-        @Schema(description = "聊天内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,你好啊")
-        private String content;
-
-        @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
-        private LocalDateTime createTime;
-
-    }
-
-}

+ 0 - 42
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/AiImageController.http

@@ -1,42 +0,0 @@
-### 生成图片:OpenAI(DALL)
-POST {{baseUrl}}/ai/image/draw
-Content-Type: application/json
-Authorization: {{token}}
-
-{
-  "platform": "OpenAI",
-  "prompt": "可爱的小喵星人",
-  "model": "dall-e-3",
-  "height": "1024",
-  "width": "1024",
-  "options": {
-    "style": "vivid"
-  }
-}
-
-### 生成图片:StableDiffusion
-POST {{baseUrl}}/ai/image/draw
-Content-Type: application/json
-Authorization: {{token}}
-
-{
-  "platform": "StableDiffusion",
-  "prompt": "中国长城",
-  "model": "stable-diffusion-v1-6",
-  "height": "1024",
-  "width": "1024",
-  "style": "vivid"
-}
-
-### 生成图片:生成图片(Midjourney)
-POST {{baseUrl}}/ai/image/midjourney/imagine
-Content-Type: application/json
-Authorization: {{token}}
-
-{
-  "prompt": "中国旗袍",
-  "model": "midjourney",
-  "width": "1",
-  "height": "1",
-  "version": "6.0"
-}

+ 0 - 139
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/AiImageController.java

@@ -1,139 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.image;
-
-import cn.hutool.core.util.ObjUtil;
-import cn.iocoder.yudao.framework.ai.core.model.midjourney.api.MidjourneyApi;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
-import cn.iocoder.yudao.module.ai.controller.admin.image.vo.*;
-import cn.iocoder.yudao.module.ai.controller.admin.image.vo.midjourney.AiMidjourneyActionReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.image.vo.midjourney.AiMidjourneyImagineReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO;
-import cn.iocoder.yudao.module.ai.service.image.AiImageService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.annotation.security.PermitAll;
-import jakarta.validation.Valid;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-
-@Tag(name = "管理后台 - AI 绘画")
-@RestController
-@RequestMapping("/ai/image")
-@Slf4j
-public class AiImageController {
-
-    @Resource
-    private AiImageService imageService;
-
-    @GetMapping("/my-page")
-    @Operation(summary = "获取【我的】绘图分页")
-    public CommonResult<PageResult<AiImageRespVO>> getImagePageMy(@Validated AiImagePageReqVO pageReqVO) {
-        PageResult<AiImageDO> pageResult = imageService.getImagePageMy(getLoginUserId(), pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AiImageRespVO.class));
-    }
-
-    @GetMapping("/public-page")
-    @Operation(summary = "获取公开的绘图分页")
-    public CommonResult<PageResult<AiImageRespVO>> getImagePagePublic(AiImagePublicPageReqVO pageReqVO) {
-        PageResult<AiImageDO> pageResult = imageService.getImagePagePublic(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AiImageRespVO.class));
-    }
-
-    @GetMapping("/get-my")
-    @Operation(summary = "获取【我的】绘图记录")
-    @Parameter(name = "id", required = true, description = "绘画编号", example = "1024")
-    public CommonResult<AiImageRespVO> getImageMy(@RequestParam("id") Long id) {
-        AiImageDO image = imageService.getImage(id);
-        if (image == null || ObjUtil.notEqual(getLoginUserId(), image.getUserId())) {
-            return success(null);
-        }
-        return success(BeanUtils.toBean(image, AiImageRespVO.class));
-    }
-
-    @GetMapping("/my-list-by-ids")
-    @Operation(summary = "获取【我的】绘图记录列表")
-    @Parameter(name = "ids", required = true, description = "绘画编号数组", example = "1024,2048")
-    public CommonResult<List<AiImageRespVO>> getImageListMyByIds(@RequestParam("ids") List<Long> ids) {
-        List<AiImageDO> imageList = imageService.getImageList(ids);
-        imageList.removeIf(item -> !ObjUtil.equal(getLoginUserId(), item.getUserId()));
-        return success(BeanUtils.toBean(imageList, AiImageRespVO.class));
-    }
-
-    @Operation(summary = "生成图片")
-    @PostMapping("/draw")
-    public CommonResult<Long> drawImage(@Valid @RequestBody AiImageDrawReqVO drawReqVO) {
-        return success(imageService.drawImage(getLoginUserId(), drawReqVO));
-    }
-
-    @Operation(summary = "删除【我的】绘画记录")
-    @DeleteMapping("/delete-my")
-    @Parameter(name = "id", required = true, description = "绘画编号", example = "1024")
-    public CommonResult<Boolean> deleteImageMy(@RequestParam("id") Long id) {
-        imageService.deleteImageMy(id, getLoginUserId());
-        return success(true);
-    }
-
-    // ================ midjourney 专属 ================
-
-    @Operation(summary = "【Midjourney】生成图片")
-    @PostMapping("/midjourney/imagine")
-    public CommonResult<Long> midjourneyImagine(@Valid @RequestBody AiMidjourneyImagineReqVO reqVO) {
-        Long imageId = imageService.midjourneyImagine(getLoginUserId(), reqVO);
-        return success(imageId);
-    }
-
-    @Operation(summary = "【Midjourney】通知图片进展", description = "由 Midjourney Proxy 回调")
-    @PostMapping("/midjourney/notify") // 必须是 POST 方法,否则会报错
-    @PermitAll
-    @TenantIgnore
-    public CommonResult<Boolean> midjourneyNotify(@Valid @RequestBody MidjourneyApi.Notify notify) {
-        imageService.midjourneyNotify(notify);
-        return success(true);
-    }
-
-    @Operation(summary = "【Midjourney】Action 操作(二次生成图片)", description = "例如说:放大、缩小、U1、U2 等")
-    @PostMapping("/midjourney/action")
-    public CommonResult<Long> midjourneyAction(@Valid @RequestBody AiMidjourneyActionReqVO reqVO) {
-        Long imageId = imageService.midjourneyAction(getLoginUserId(), reqVO);
-        return success(imageId);
-    }
-
-    // ================ 绘图管理 ================
-
-    @GetMapping("/page")
-    @Operation(summary = "获得绘画分页")
-    @PreAuthorize("@ss.hasPermission('ai:image:query')")
-    public CommonResult<PageResult<AiImageRespVO>> getImagePage(@Valid AiImagePageReqVO pageReqVO) {
-        PageResult<AiImageDO> pageResult = imageService.getImagePage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AiImageRespVO.class));
-    }
-
-    @PutMapping("/update")
-    @Operation(summary = "更新绘画")
-    @PreAuthorize("@ss.hasPermission('ai:image:update')")
-    public CommonResult<Boolean> updateImage(@Valid @RequestBody AiImageUpdateReqVO updateReqVO) {
-        imageService.updateImage(updateReqVO);
-        return success(true);
-    }
-
-    @DeleteMapping("/delete")
-    @Operation(summary = "删除绘画")
-    @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('ai:image:delete')")
-    public CommonResult<Boolean> deleteImage(@RequestParam("id") Long id) {
-        imageService.deleteImage(id);
-        return success(true);
-    }
-
-}

+ 0 - 52
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImageDrawReqVO.java

@@ -1,52 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.image.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
-import lombok.Data;
-import org.springframework.ai.openai.OpenAiImageOptions;
-import org.springframework.ai.stabilityai.api.StabilityAiImageOptions;
-
-import java.util.Map;
-
-@Schema(description = "管理后台 - AI 绘画 Request VO")
-@Data
-public class AiImageDrawReqVO {
-
-    @Schema(description = "模型平台", requiredMode = Schema.RequiredMode.REQUIRED, example = "OpenAI")
-    private String platform; // 参见 AiPlatformEnum 枚举
-
-    @Schema(description = "提示词", requiredMode = Schema.RequiredMode.REQUIRED, example = "画一个长城")
-    @NotEmpty(message = "提示词不能为空")
-    @Size(max = 1200, message = "提示词最大 1200")
-    private String prompt;
-
-    @Schema(description = "模型", requiredMode = Schema.RequiredMode.REQUIRED, example = "stable-diffusion-v1-6")
-    @NotEmpty(message = "模型不能为空")
-    private String model;
-
-    /**
-     * 1. dall-e-2 模型:256x256、512x512、1024x1024
-     * 2. dall-e-3 模型:1024x1024, 1792x1024, 或 1024x1792
-     */
-    @Schema(description = "图片高度")
-    @NotNull(message = "图片高度不能为空")
-    private Integer height;
-
-    @Schema(description = "图片宽度")
-    @NotNull(message = "图片宽度不能为空")
-    private Integer width;
-
-    // ========== 各平台绘画的拓展参数 ==========
-
-    /**
-     * 绘制参数,不同 platform 的不同参数
-     *
-     * 1. {@link OpenAiImageOptions}
-     * 2. {@link StabilityAiImageOptions}
-     */
-    @Schema(description = "绘制参数")
-    private Map<String, String> options;
-
-}

+ 0 - 35
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImagePageReqVO.java

@@ -1,35 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.image.vo;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDateTime;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - AI 绘画分页 Request VO")
-@Data
-public class AiImagePageReqVO extends PageParam {
-
-    @Schema(description = "用户编号", example = "28987")
-    private Long userId;
-
-    @Schema(description = "平台", example = "OpenAI")
-    private String platform;
-
-    @Schema(description = "提示词", example = "1")
-    private String prompt;
-
-    @Schema(description = "绘画状态", example = "1")
-    private Integer status;
-
-    @Schema(description = "是否发布", example = "1")
-    private Boolean publicStatus;
-
-    @Schema(description = "创建时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
-
-}

+ 0 - 14
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImagePublicPageReqVO.java

@@ -1,14 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.image.vo;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 绘画公开的分页 Request VO")
-@Data
-public class AiImagePublicPageReqVO extends PageParam {
-
-    @Schema(description = "提示词")
-    private String prompt;
-
-}

+ 0 - 60
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImageRespVO.java

@@ -1,60 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.image.vo;
-
-import cn.iocoder.yudao.framework.ai.core.model.midjourney.api.MidjourneyApi;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Map;
-
-@Schema(description = "管理后台 - AI 绘画 Response VO")
-@Data
-public class AiImageRespVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    private Long id;
-
-    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    private Long userId;
-
-    @Schema(description = "平台", requiredMode = Schema.RequiredMode.REQUIRED, example = "OpenAI")
-    private String platform;  // 参见 AiPlatformEnum 枚举
-
-    @Schema(description = "模型", requiredMode = Schema.RequiredMode.REQUIRED, example = "stable-diffusion-v1-6")
-    private String model;
-
-    @Schema(description = "提示词", requiredMode = Schema.RequiredMode.REQUIRED, example = "南极的小企鹅")
-    private String prompt;
-
-    @Schema(description = "图片宽度", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
-    private Integer width;
-
-    @Schema(description = "图片高度", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
-    private Integer height;
-
-    @Schema(description = "绘画状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
-    private Integer status;
-
-    @Schema(description = "是否发布", requiredMode = Schema.RequiredMode.REQUIRED, example = "public")
-    private Boolean publicStatus;
-
-    @Schema(description = "图片地址", example = "https://www.iocoder.cn/1.png")
-    private String picUrl;
-
-    @Schema(description = "绘画错误信息", example = "图片错误信息")
-    private String errorMessage;
-
-    @Schema(description = "绘制参数")
-    private Map<String, String> options;
-
-    @Schema(description = "mj buttons 按钮")
-    private List<MidjourneyApi.Button> buttons;
-
-    @Schema(description = "完成时间")
-    private LocalDateTime finishTime;
-
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    private LocalDateTime createTime;
-
-}

+ 0 - 18
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImageUpdateReqVO.java

@@ -1,18 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.image.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 绘画修改 Request VO")
-@Data
-public class AiImageUpdateReqVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15583")
-    @NotNull(message = "编号不能为空")
-    private Long id;
-
-    @Schema(description = "是否发布", example = "true")
-    private Boolean publicStatus;
-
-}

+ 0 - 20
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/midjourney/AiMidjourneyActionReqVO.java

@@ -1,20 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.image.vo.midjourney;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 绘图操作(Midjourney) Request VO")
-@Data
-public class AiMidjourneyActionReqVO {
-
-    @Schema(description = "图片编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "图片编号不能为空")
-    private Long id;
-
-    @Schema(description = "操作按钮编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "MJ::JOB::variation::4::06aa3e66-0e97-49cc-8201-e0295d883de4")
-    @NotEmpty(message = "操作按钮编号不能为空")
-    private String customId;
-
-}

+ 0 - 35
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/midjourney/AiMidjourneyImagineReqVO.java

@@ -1,35 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.image.vo.midjourney;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 绘画生成(Midjourney) Request VO")
-@Data
-public class AiMidjourneyImagineReqVO {
-
-    @Schema(description = "提示词", requiredMode = Schema.RequiredMode.REQUIRED, example = "中国神龙")
-    @NotEmpty(message = "提示词不能为空!")
-    private String prompt;
-
-    @Schema(description = "模型", requiredMode = Schema.RequiredMode.REQUIRED, example = "midjourney")
-    @NotEmpty(message = "模型不能为空")
-    private String model; // 参考 MidjourneyApi.ModelEnum
-
-    @Schema(description = "图片宽度", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "图片宽度不能为空")
-    private Integer width;
-
-    @Schema(description = "图片高度", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "图片高度不能为空")
-    private Integer height;
-
-    @Schema(description = "版本号", requiredMode = Schema.RequiredMode.REQUIRED, example = "6.0")
-    @NotEmpty(message = "版本号不能为空")
-    private String version;
-
-    @Schema(description = "参考图", example = "https://www.iocoder.cn/x.png")
-    private String referImageUrl;
-
-}

+ 0 - 50
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/AiKnowledgeController.java

@@ -1,50 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.knowledge.AiKnowledgeCreateReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.knowledge.AiKnowledgePageReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.knowledge.AiKnowledgeRespVO;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.knowledge.AiKnowledgeUpdateReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeDO;
-import cn.iocoder.yudao.module.ai.service.knowledge.AiKnowledgeService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-
-@Tag(name = "管理后台 - AI 知识库")
-@RestController
-@RequestMapping("/ai/knowledge")
-@Validated
-public class AiKnowledgeController {
-
-    @Resource
-    private AiKnowledgeService knowledgeService;
-
-    @GetMapping("/page")
-    @Operation(summary = "获取知识库分页")
-    public CommonResult<PageResult<AiKnowledgeRespVO>> getKnowledgePage(@Valid AiKnowledgePageReqVO pageReqVO) {
-        PageResult<AiKnowledgeDO> pageResult = knowledgeService.getKnowledgePage(getLoginUserId(), pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AiKnowledgeRespVO.class));
-    }
-
-    @PostMapping("/create")
-    @Operation(summary = "创建知识库")
-    public CommonResult<Long> createKnowledge(@RequestBody @Valid AiKnowledgeCreateReqVO createReqVO) {
-        return success(knowledgeService.createKnowledge(createReqVO, getLoginUserId()));
-    }
-
-    @PutMapping("/update")
-    @Operation(summary = "更新知识库")
-    public CommonResult<Boolean> updateKnowledge(@RequestBody @Valid AiKnowledgeUpdateReqVO updateReqVO) {
-        knowledgeService.updateKnowledge(updateReqVO, getLoginUserId());
-        return success(true);
-    }
-}

+ 0 - 51
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/AiKnowledgeDocumentController.java

@@ -1,51 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.document.AiKnowledgeDocumentPageReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.document.AiKnowledgeDocumentRespVO;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.document.AiKnowledgeDocumentUpdateReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.knowledge.AiKnowledgeDocumentCreateReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeDocumentDO;
-import cn.iocoder.yudao.module.ai.service.knowledge.AiKnowledgeDocumentService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
-@Tag(name = "管理后台 - AI 知识库文档")
-@RestController
-@RequestMapping("/ai/knowledge/document")
-@Validated
-public class AiKnowledgeDocumentController {
-
-    @Resource
-    private AiKnowledgeDocumentService documentService;
-
-    @PostMapping("/create")
-    @Operation(summary = "新建文档")
-    public CommonResult<Long> createKnowledgeDocument(@Valid AiKnowledgeDocumentCreateReqVO reqVO) {
-        Long knowledgeDocumentId = documentService.createKnowledgeDocument(reqVO);
-        return success(knowledgeDocumentId);
-    }
-
-    @GetMapping("/page")
-    @Operation(summary = "获取文档分页")
-    public CommonResult<PageResult<AiKnowledgeDocumentRespVO>> getKnowledgeDocumentPage(@Valid AiKnowledgeDocumentPageReqVO pageReqVO) {
-        PageResult<AiKnowledgeDocumentDO> pageResult = documentService.getKnowledgeDocumentPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AiKnowledgeDocumentRespVO.class));
-    }
-
-    @PutMapping("/update")
-    @Operation(summary = "更新文档")
-    public CommonResult<Boolean> updateKnowledgeDocument(@Valid @RequestBody AiKnowledgeDocumentUpdateReqVO reqVO) {
-        documentService.updateKnowledgeDocument(reqVO);
-        return success(true);
-    }
-
-}

+ 0 - 51
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/AiKnowledgeSegmentController.java

@@ -1,51 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.segment.AiKnowledgeSegmentPageReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.segment.AiKnowledgeSegmentRespVO;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.segment.AiKnowledgeSegmentUpdateReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.segment.AiKnowledgeSegmentUpdateStatusReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeSegmentDO;
-import cn.iocoder.yudao.module.ai.service.knowledge.AiKnowledgeSegmentService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
-@Tag(name = "管理后台 - AI 知识库段落")
-@RestController
-@RequestMapping("/ai/knowledge/segment")
-@Validated
-public class AiKnowledgeSegmentController {
-
-    @Resource
-    private AiKnowledgeSegmentService segmentService;
-
-    @GetMapping("/page")
-    @Operation(summary = "获取段落分页")
-    public CommonResult<PageResult<AiKnowledgeSegmentRespVO>> getKnowledgeSegmentPage(@Valid AiKnowledgeSegmentPageReqVO pageReqVO) {
-        PageResult<AiKnowledgeSegmentDO> pageResult = segmentService.getKnowledgeSegmentPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AiKnowledgeSegmentRespVO.class));
-    }
-
-    @PutMapping("/update")
-    @Operation(summary = "更新段落内容")
-    public CommonResult<Boolean> updateKnowledgeSegment(@Valid @RequestBody AiKnowledgeSegmentUpdateReqVO reqVO) {
-        segmentService.updateKnowledgeSegment(reqVO);
-        return success(true);
-    }
-
-    @PutMapping("/update-status")
-    @Operation(summary = "启禁用段落内容")
-    public CommonResult<Boolean> updateKnowledgeSegmentStatus(@Valid @RequestBody AiKnowledgeSegmentUpdateStatusReqVO reqVO) {
-        segmentService.updateKnowledgeSegmentStatus(reqVO);
-        return success(true);
-    }
-
-}

+ 0 - 14
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/document/AiKnowledgeDocumentPageReqVO.java

@@ -1,14 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.document;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 知识库文档的分页 Request VO")
-@Data
-public class AiKnowledgeDocumentPageReqVO extends PageParam {
-
-    @Schema(description = "文档名称", example = "Java 开发手册")
-    private String name;
-
-}

+ 0 - 38
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/document/AiKnowledgeDocumentRespVO.java

@@ -1,38 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.document;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 知识库-文档 Response VO")
-@Data
-public class AiKnowledgeDocumentRespVO extends PageParam {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24790")
-    private Long id;
-
-    @Schema(description = "知识库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24790")
-    private Long knowledgeId;
-
-    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "Java 开发手册")
-    private String name;
-
-    @Schema(description = "内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "Java 是一门面向对象的语言.....")
-    private String content;
-
-    @Schema(description = "文档 url", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://doc.iocoder.cn")
-    private String url;
-
-    @Schema(description = "token 数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
-    private Integer tokens;
-
-    @Schema(description = "字符数", requiredMode = Schema.RequiredMode.REQUIRED, example = "1008")
-    private Integer wordCount;
-
-    @Schema(description = "切片状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    private Integer sliceStatus;
-
-    @Schema(description = "文档状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    private Integer status;
-
-}

+ 0 - 26
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/document/AiKnowledgeDocumentUpdateReqVO.java

@@ -1,26 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.document;
-
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.common.validation.InEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-
-@Schema(description = "管理后台 - AI 更新 知识库-文档 Request VO")
-@Data
-public class AiKnowledgeDocumentUpdateReqVO {
-
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15583")
-    @NotNull(message = "编号不能为空")
-    private Long id;
-
-    @Schema(description = "是否启用", example = "1")
-    @InEnum(CommonStatusEnum.class)
-    private Integer status;
-
-    @Schema(description = "名称", example = "Java 开发手册")
-    private String name;
-
-}

+ 0 - 36
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/knowledge/AiKnowledgeCreateReqVO.java

@@ -1,36 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.knowledge;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-import java.util.List;
-
-@Schema(description = "管理后台 - AI 知识库创建 Request VO")
-@Data
-public class AiKnowledgeCreateReqVO {
-
-    @Schema(description = "知识库名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "ruoyi-vue-pro 用户指南")
-    @NotBlank(message = "知识库名称不能为空")
-    private String name;
-
-    @Schema(description = "知识库描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "存储 ruoyi-vue-pro 操作文档")
-    private String description;
-
-    @Schema(description = "可见权限,只能选择哪些人可见", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,2,3]")
-    private List<Long> visibilityPermissions;
-
-    @Schema(description = "嵌入模型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "嵌入模型不能为空")
-    private Long modelId;
-
-    @Schema(description = "相似性阈值", requiredMode = Schema.RequiredMode.REQUIRED, example = "0.5")
-    @NotNull(message = "相似性阈值不能为空")
-    private Double similarityThreshold;
-
-    @Schema(description = "topK", requiredMode = Schema.RequiredMode.REQUIRED, example = "3")
-    @NotNull(message = "topK 不能为空")
-    private Integer topK;
-
-}

+ 0 - 46
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/knowledge/AiKnowledgeDocumentCreateReqVO.java

@@ -1,46 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.knowledge;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-import org.hibernate.validator.constraints.URL;
-
-
-@Schema(description = "管理后台 - AI 知识库文档的创建 Request VO")
-@Data
-public class AiKnowledgeDocumentCreateReqVO {
-
-    @Schema(description = "知识库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1204")
-    @NotNull(message = "知识库编号不能为空")
-    private Long knowledgeId;
-
-    @Schema(description = "文档名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "三方登陆")
-    @NotBlank(message = "文档名称不能为空")
-    private String name;
-
-    @Schema(description = "文档 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://doc.iocoder.cn")
-    @URL(message = "文档 URL 格式不正确")
-    private String url;
-
-    @Schema(description = "每个段落的目标 token 数", requiredMode = Schema.RequiredMode.REQUIRED, example = "800")
-    @NotNull(message = "每个段落的目标 token 数不能为空")
-    private Integer defaultSegmentTokens;
-
-    @Schema(description = "每个段落的最小字符数", requiredMode = Schema.RequiredMode.REQUIRED, example = "350")
-    @NotNull(message = "每个段落的最小字符数不能为空")
-    private Integer minSegmentWordCount;
-
-    @Schema(description = "丢弃阈值:低于此阈值的段落会被丢弃", requiredMode = Schema.RequiredMode.REQUIRED, example = "5")
-    @NotNull(message = "丢弃阈值不能为空")
-    private Integer minChunkLengthToEmbed;
-
-    @Schema(description = "最大段落数", requiredMode = Schema.RequiredMode.REQUIRED, example = "10000")
-    @NotNull(message = "最大段落数不能为空")
-    private Integer maxNumSegments;
-
-    @Schema(description = "分块是否保留分隔符", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
-    @NotNull(message = "分块是否保留分隔符不能为空")
-    private Boolean keepSeparator;
-
-}

+ 0 - 14
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/knowledge/AiKnowledgePageReqVO.java

@@ -1,14 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.knowledge;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 知识库的分页 Request VO")
-@Data
-public class AiKnowledgePageReqVO extends PageParam {
-
-    @Schema(description = "知识库名称", example = "Java 开发手册")
-    private String name;
-
-}

+ 0 - 26
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/knowledge/AiKnowledgeRespVO.java

@@ -1,26 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.knowledge;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-
-@Schema(description = "管理后台 - AI 知识库 Response VO")
-@Data
-public class AiKnowledgeRespVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24790")
-    private Long id;
-
-    @Schema(description = "知识库名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "ruoyi-vue-pro 用户指南")
-    private String name;
-
-    @Schema(description = "知识库描述", example = "帮助你快速构建系统")
-    private String description;
-
-    @Schema(description = "模型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "14")
-    private Long modelId;
-
-    @Schema(description = "模型标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "qwen-72b-chat")
-    private String model;
-
-}

+ 0 - 32
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/knowledge/AiKnowledgeUpdateReqVO.java

@@ -1,32 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.knowledge;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-import java.util.List;
-
-@Schema(description = "管理后台 - AI 知识库更新【我的】 Request VO")
-@Data
-public class AiKnowledgeUpdateReqVO {
-
-    @Schema(description = "对话编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1204")
-    @NotNull(message = "知识库编号不能为空")
-    private Long id;
-
-    @Schema(description = "知识库名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "")
-    @NotBlank(message = "知识库名称不能为空")
-    private String name;
-
-    @Schema(description = "知识库描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "")
-    private String description;
-
-    @Schema(description = "可见权限,只能选择哪些人可见", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3")
-    private List<Long> visibilityPermissions;
-
-    @Schema(description = "嵌入模型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "嵌入模型不能为空")
-    private Long modelId;
-
-}

+ 0 - 20
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/segment/AiKnowledgeSegmentPageReqVO.java

@@ -1,20 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.segment;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 知识库分段的分页 Request VO")
-@Data
-public class AiKnowledgeSegmentPageReqVO extends PageParam {
-
-    @Schema(description = "分段状态", example = "1")
-    private Integer status;
-
-    @Schema(description = "文档编号", example = "1")
-    private Integer documentId;
-
-    @Schema(description = "分段内容关键字", example = "Java 开发")
-    private String keyword;
-
-}

+ 0 - 34
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/segment/AiKnowledgeSegmentRespVO.java

@@ -1,34 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.segment;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 知识库-文档 Response VO")
-@Data
-public class AiKnowledgeSegmentRespVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24790")
-    private Long id;
-
-    @Schema(description = "文档编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24790")
-    private Long documentId;
-
-    @Schema(description = "知识库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24790")
-    private Long knowledgeId;
-
-    @Schema(description = "向量库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1858496a-1dde-4edf-a43e-0aed08f37f8c")
-    private String vectorId;
-
-    @Schema(description = "切片内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "Java 开发手册")
-    private String content;
-
-    @Schema(description = "token 数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
-    private Integer tokens;
-
-    @Schema(description = "字符数", requiredMode = Schema.RequiredMode.REQUIRED, example = "1008")
-    private Integer wordCount;
-
-    @Schema(description = "文档状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    private Integer status;
-
-}

+ 0 - 17
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/segment/AiKnowledgeSegmentSearchReqVO.java

@@ -1,17 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.segment;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-
-@Schema(description = "管理后台 - AI 知识库段落召回 Request VO")
-@Data
-public class AiKnowledgeSegmentSearchReqVO {
-
-    @Schema(description = "知识库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24790")
-    private Long knowledgeId;
-
-    @Schema(description = "内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "Java 学习路线")
-    private String content;
-
-}

+ 0 - 17
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/segment/AiKnowledgeSegmentUpdateReqVO.java

@@ -1,17 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.segment;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-
-@Schema(description = "管理后台 - AI 更新 知识库-段落 request VO")
-@Data
-public class AiKnowledgeSegmentUpdateReqVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24790")
-    private Long id;
-
-    @Schema(description = "切片内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "Java 开发手册")
-    private String content;
-
-}

+ 0 - 22
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/knowledge/vo/segment/AiKnowledgeSegmentUpdateStatusReqVO.java

@@ -1,22 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.segment;
-
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.common.validation.InEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-
-@Schema(description = "管理后台 - AI 知识库段落的更新状态 Request VO")
-@Data
-public class AiKnowledgeSegmentUpdateStatusReqVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24790")
-    private Long id;
-
-    @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "是否启用不能为空")
-    @InEnum(CommonStatusEnum.class)
-    private Integer status;
-
-}

+ 0 - 59
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/mindmap/AiMindMapController.java

@@ -1,59 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.mindmap;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapGenerateReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapPageReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapRespVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.mindmap.AiMindMapDO;
-import cn.iocoder.yudao.module.ai.service.mindmap.AiMindMapService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.annotation.security.PermitAll;
-import jakarta.validation.Valid;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import reactor.core.publisher.Flux;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-
-@Tag(name = "管理后台 - AI 思维导图")
-@RestController
-@RequestMapping("/ai/mind-map")
-public class AiMindMapController {
-
-    @Resource
-    private AiMindMapService mindMapService;
-
-    @PostMapping(value = "/generate-stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
-    @Operation(summary = "导图生成(流式)", description = "流式返回,响应较快")
-    @PermitAll  // 解决 SSE 最终响应的时候,会被 Access Denied 拦截的问题
-    public Flux<CommonResult<String>> generateMindMap(@RequestBody @Valid AiMindMapGenerateReqVO generateReqVO) {
-        return mindMapService.generateMindMap(generateReqVO, getLoginUserId());
-    }
-
-    // ================ 导图管理 ================
-
-    @DeleteMapping("/delete")
-    @Operation(summary = "删除思维导图")
-    @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('ai:mind-map:delete')")
-    public CommonResult<Boolean> deleteMindMap(@RequestParam("id") Long id) {
-        mindMapService.deleteMindMap(id);
-        return success(true);
-    }
-
-    @GetMapping("/page")
-    @Operation(summary = "获得思维导图分页")
-    @PreAuthorize("@ss.hasPermission('ai:mind-map:query')")
-    public CommonResult<PageResult<AiMindMapRespVO>> getMindMapPage(@Valid AiMindMapPageReqVO pageReqVO) {
-        PageResult<AiMindMapDO> pageResult = mindMapService.getMindMapPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AiMindMapRespVO.class));
-    }
-
-}

+ 0 - 15
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/mindmap/vo/AiMindMapGenerateReqVO.java

@@ -1,15 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotBlank;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 思维导图生成 Request VO")
-@Data
-public class AiMindMapGenerateReqVO {
-
-    @Schema(description = "思维导图内容提示", example = "Java 学习路线")
-    @NotBlank(message = "思维导图内容提示不能为空")
-    private String prompt;
-
-}

+ 0 - 30
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/mindmap/vo/AiMindMapPageReqVO.java

@@ -1,30 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDateTime;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - AI 思维导图分页 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class AiMindMapPageReqVO extends PageParam {
-
-    @Schema(description = "用户编号", example = "4325")
-    private Long userId;
-
-    @Schema(description = "生成内容提示", example = "Java 学习路线")
-    private String prompt;
-
-    @Schema(description = "创建时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
-
-}

+ 0 - 36
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/mindmap/vo/AiMindMapRespVO.java

@@ -1,36 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Schema(description = "管理后台 - AI 思维导图 Response VO")
-@Data
-public class AiMindMapRespVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3373")
-    private Long id;
-
-    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4325")
-    private Long userId;
-
-    @Schema(description = "生成内容提示", requiredMode = Schema.RequiredMode.REQUIRED, example = "Java 学习路线")
-    private String prompt;
-
-    @Schema(description = "生成的思维导图内容")
-    private String generatedContent;
-
-    @Schema(description = "平台", requiredMode = Schema.RequiredMode.REQUIRED, example = "OpenAI")
-    private String platform;
-
-    @Schema(description = "模型", requiredMode = Schema.RequiredMode.REQUIRED, example = "gpt-3.5-turbo-0125")
-    private String model;
-
-    @Schema(description = "错误信息")
-    private String errorMessage;
-
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    private LocalDateTime createTime;
-
-}

+ 0 - 84
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/AiApiKeyController.java

@@ -1,84 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.apikey.AiApiKeyPageReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.apikey.AiApiKeyRespVO;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.apikey.AiApiKeySaveReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatModel.AiChatModelRespVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiApiKeyDO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
-import cn.iocoder.yudao.module.ai.service.model.AiApiKeyService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
-
-@Tag(name = "管理后台 - AI API 密钥")
-@RestController
-@RequestMapping("/ai/api-key")
-@Validated
-public class AiApiKeyController {
-
-    @Resource
-    private AiApiKeyService apiKeyService;
-
-    @PostMapping("/create")
-    @Operation(summary = "创建 API 密钥")
-    @PreAuthorize("@ss.hasPermission('ai:api-key:create')")
-    public CommonResult<Long> createApiKey(@Valid @RequestBody AiApiKeySaveReqVO createReqVO) {
-        return success(apiKeyService.createApiKey(createReqVO));
-    }
-
-    @PutMapping("/update")
-    @Operation(summary = "更新 API 密钥")
-    @PreAuthorize("@ss.hasPermission('ai:api-key:update')")
-    public CommonResult<Boolean> updateApiKey(@Valid @RequestBody AiApiKeySaveReqVO updateReqVO) {
-        apiKeyService.updateApiKey(updateReqVO);
-        return success(true);
-    }
-
-    @DeleteMapping("/delete")
-    @Operation(summary = "删除 API 密钥")
-    @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('ai:api-key:delete')")
-    public CommonResult<Boolean> deleteApiKey(@RequestParam("id") Long id) {
-        apiKeyService.deleteApiKey(id);
-        return success(true);
-    }
-
-    @GetMapping("/get")
-    @Operation(summary = "获得 API 密钥")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('ai:api-key:query')")
-    public CommonResult<AiApiKeyRespVO> getApiKey(@RequestParam("id") Long id) {
-        AiApiKeyDO apiKey = apiKeyService.getApiKey(id);
-        return success(BeanUtils.toBean(apiKey, AiApiKeyRespVO.class));
-    }
-
-    @GetMapping("/page")
-    @Operation(summary = "获得 API 密钥分页")
-    @PreAuthorize("@ss.hasPermission('ai:api-key:query')")
-    public CommonResult<PageResult<AiApiKeyRespVO>> getApiKeyPage(@Valid AiApiKeyPageReqVO pageReqVO) {
-        PageResult<AiApiKeyDO> pageResult = apiKeyService.getApiKeyPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AiApiKeyRespVO.class));
-    }
-
-    @GetMapping("/simple-list")
-    @Operation(summary = "获得 API 密钥分页列表")
-    public CommonResult<List<AiChatModelRespVO>> getApiKeySimpleList() {
-        List<AiApiKeyDO> list = apiKeyService.getApiKeyList();
-        return success(convertList(list, key -> new AiChatModelRespVO().setId(key.getId()).setName(key.getName())));
-    }
-
-}

+ 0 - 84
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/AiChatModelController.java

@@ -1,84 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatModel.AiChatModelPageReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatModel.AiChatModelRespVO;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatModel.AiChatModelSaveReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
-import cn.iocoder.yudao.module.ai.service.model.AiChatModelService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
-
-@Tag(name = "管理后台 - AI 聊天模型")
-@RestController
-@RequestMapping("/ai/chat-model")
-@Validated
-public class AiChatModelController {
-
-    @Resource
-    private AiChatModelService chatModelService;
-
-    @PostMapping("/create")
-    @Operation(summary = "创建聊天模型")
-    @PreAuthorize("@ss.hasPermission('ai:chat-model:create')")
-    public CommonResult<Long> createChatModel(@Valid @RequestBody AiChatModelSaveReqVO createReqVO) {
-        return success(chatModelService.createChatModel(createReqVO));
-    }
-
-    @PutMapping("/update")
-    @Operation(summary = "更新聊天模型")
-    @PreAuthorize("@ss.hasPermission('ai:chat-model:update')")
-    public CommonResult<Boolean> updateChatModel(@Valid @RequestBody AiChatModelSaveReqVO updateReqVO) {
-        chatModelService.updateChatModel(updateReqVO);
-        return success(true);
-    }
-
-    @DeleteMapping("/delete")
-    @Operation(summary = "删除聊天模型")
-    @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('ai:chat-model:delete')")
-    public CommonResult<Boolean> deleteChatModel(@RequestParam("id") Long id) {
-        chatModelService.deleteChatModel(id);
-        return success(true);
-    }
-
-    @GetMapping("/get")
-    @Operation(summary = "获得聊天模型")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('ai:chat-model:query')")
-    public CommonResult<AiChatModelRespVO> getChatModel(@RequestParam("id") Long id) {
-        AiChatModelDO chatModel = chatModelService.getChatModel(id);
-        return success(BeanUtils.toBean(chatModel, AiChatModelRespVO.class));
-    }
-
-    @GetMapping("/page")
-    @Operation(summary = "获得聊天模型分页")
-    @PreAuthorize("@ss.hasPermission('ai:chat-model:query')")
-    public CommonResult<PageResult<AiChatModelRespVO>> getChatModelPage(@Valid AiChatModelPageReqVO pageReqVO) {
-        PageResult<AiChatModelDO> pageResult = chatModelService.getChatModelPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AiChatModelRespVO.class));
-    }
-
-    @GetMapping("/simple-list")
-    @Operation(summary = "获得聊天模型列表")
-    @Parameter(name = "status", description = "状态", required = true, example = "1")
-    public CommonResult<List<AiChatModelRespVO>> getChatModelSimpleList(@RequestParam("status") Integer status) {
-        List<AiChatModelDO> list = chatModelService.getChatModelListByStatus(status);
-        return success(convertList(list, model -> new AiChatModelRespVO().setId(model.getId())
-                .setName(model.getName()).setModel(model.getModel())));
-    }
-
-}

+ 0 - 124
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/AiChatRoleController.java

@@ -1,124 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model;
-
-import cn.hutool.core.util.ObjUtil;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatRole.AiChatRolePageReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatRole.AiChatRoleRespVO;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatRole.AiChatRoleSaveMyReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatRole.AiChatRoleSaveReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO;
-import cn.iocoder.yudao.module.ai.service.model.AiChatRoleService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-
-@Tag(name = "管理后台 - AI 聊天角色")
-@RestController
-@RequestMapping("/ai/chat-role")
-@Validated
-public class AiChatRoleController {
-
-    @Resource
-    private AiChatRoleService chatRoleService;
-
-    @GetMapping("/my-page")
-    @Operation(summary = "获得【我的】聊天角色分页")
-    public CommonResult<PageResult<AiChatRoleRespVO>> getChatRoleMyPage(@Valid AiChatRolePageReqVO pageReqVO) {
-        PageResult<AiChatRoleDO> pageResult = chatRoleService.getChatRoleMyPage(pageReqVO, getLoginUserId());
-        return success(BeanUtils.toBean(pageResult, AiChatRoleRespVO.class));
-    }
-
-    @GetMapping("/get-my")
-    @Operation(summary = "获得【我的】聊天角色")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    public CommonResult<AiChatRoleRespVO> getChatRoleMy(@RequestParam("id") Long id) {
-        AiChatRoleDO chatRole = chatRoleService.getChatRole(id);
-        if (ObjUtil.notEqual(chatRole.getUserId(), getLoginUserId())) {
-            return success(null);
-        }
-        return success(BeanUtils.toBean(chatRole, AiChatRoleRespVO.class));
-    }
-
-    @PostMapping("/create-my")
-    @Operation(summary = "创建【我的】聊天角色")
-    public CommonResult<Long> createChatRoleMy(@Valid @RequestBody AiChatRoleSaveMyReqVO createReqVO) {
-        return success(chatRoleService.createChatRoleMy(createReqVO, getLoginUserId()));
-    }
-
-    @PutMapping("/update-my")
-    @Operation(summary = "更新【我的】聊天角色")
-    public CommonResult<Boolean> updateChatRoleMy(@Valid @RequestBody AiChatRoleSaveMyReqVO updateReqVO) {
-        chatRoleService.updateChatRoleMy(updateReqVO, getLoginUserId());
-        return success(true);
-    }
-
-    @DeleteMapping("/delete-my")
-    @Operation(summary = "删除【我的】聊天角色")
-    @Parameter(name = "id", description = "编号", required = true)
-    public CommonResult<Boolean> deleteChatRoleMy(@RequestParam("id") Long id) {
-        chatRoleService.deleteChatRoleMy(id, getLoginUserId());
-        return success(true);
-    }
-
-    @GetMapping("/category-list")
-    @Operation(summary = "获得聊天角色的分类列表")
-    public CommonResult<List<String>> getChatRoleCategoryList() {
-         return success(chatRoleService.getChatRoleCategoryList());
-    }
-
-    // ========== 角色管理 ==========
-
-    @PostMapping("/create")
-    @Operation(summary = "创建聊天角色")
-    @PreAuthorize("@ss.hasPermission('ai:chat-role:create')")
-    public CommonResult<Long> createChatRole(@Valid @RequestBody AiChatRoleSaveReqVO createReqVO) {
-        return success(chatRoleService.createChatRole(createReqVO));
-    }
-
-    @PutMapping("/update")
-    @Operation(summary = "更新聊天角色")
-    @PreAuthorize("@ss.hasPermission('ai:chat-role:update')")
-    public CommonResult<Boolean> updateChatRole(@Valid @RequestBody AiChatRoleSaveReqVO updateReqVO) {
-        chatRoleService.updateChatRole(updateReqVO);
-        return success(true);
-    }
-
-    @DeleteMapping("/delete")
-    @Operation(summary = "删除聊天角色")
-    @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('ai:chat-role:delete')")
-    public CommonResult<Boolean> deleteChatRole(@RequestParam("id") Long id) {
-        chatRoleService.deleteChatRole(id);
-        return success(true);
-    }
-
-    @GetMapping("/get")
-    @Operation(summary = "获得聊天角色")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('ai:chat-role:query')")
-    public CommonResult<AiChatRoleRespVO> getChatRole(@RequestParam("id") Long id) {
-        AiChatRoleDO chatRole = chatRoleService.getChatRole(id);
-        return success(BeanUtils.toBean(chatRole, AiChatRoleRespVO.class));
-    }
-
-    @GetMapping("/page")
-    @Operation(summary = "获得聊天角色分页")
-    @PreAuthorize("@ss.hasPermission('ai:chat-role:query')")
-    public CommonResult<PageResult<AiChatRoleRespVO>> getChatRolePage(@Valid AiChatRolePageReqVO pageReqVO) {
-        PageResult<AiChatRoleDO> pageResult = chatRoleService.getChatRolePage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AiChatRoleRespVO.class));
-    }
-
-}

+ 0 - 25
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/apikey/AiApiKeyPageReqVO.java

@@ -1,25 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model.vo.apikey;
-
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import org.springframework.format.annotation.DateTimeFormat;
-import java.time.LocalDateTime;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - AI API 密钥分页 Request VO")
-@Data
-public class AiApiKeyPageReqVO extends PageParam {
-
-    @Schema(description = "名称", example = "文心一言")
-    private String name;
-
-    @Schema(description = "平台", example = "OpenAI")
-    private String platform;
-
-    @Schema(description = "状态", example = "1")
-    private Integer status;
-
-}

+ 0 - 28
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/apikey/AiApiKeyRespVO.java

@@ -1,28 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model.vo.apikey;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
-@Schema(description = "管理后台 - AI API 密钥 Response VO")
-@Data
-public class AiApiKeyRespVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23538")
-    private Long id;
-
-    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "文心一言")
-    private String name;
-
-    @Schema(description = "密钥", requiredMode = Schema.RequiredMode.REQUIRED, example = "ABC")
-    private String apiKey;
-
-    @Schema(description = "平台", requiredMode = Schema.RequiredMode.REQUIRED, example = "OpenAI")
-    private String platform;
-
-    @Schema(description = "自定义 API 地址", example = "https://aip.baidubce.com")
-    private String url;
-
-    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    private Integer status;
-
-}

+ 0 - 34
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/apikey/AiApiKeySaveReqVO.java

@@ -1,34 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model.vo.apikey;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import jakarta.validation.constraints.*;
-
-@Schema(description = "管理后台 - AI API 密钥新增/修改 Request VO")
-@Data
-public class AiApiKeySaveReqVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23538")
-    private Long id;
-
-    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "文心一言")
-    @NotEmpty(message = "名称不能为空")
-    private String name;
-
-    @Schema(description = "密钥", requiredMode = Schema.RequiredMode.REQUIRED, example = "ABC")
-    @NotEmpty(message = "密钥不能为空")
-    private String apiKey;
-
-    @Schema(description = "平台", requiredMode = Schema.RequiredMode.REQUIRED, example = "OpenAI")
-    @NotEmpty(message = "平台不能为空")
-    private String platform;
-
-    @Schema(description = "自定义 API 地址", example = "https://aip.baidubce.com")
-    private String url;
-
-    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "状态不能为空")
-    private Integer status;
-
-}

+ 0 - 20
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatModel/AiChatModelPageReqVO.java

@@ -1,20 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatModel;
-
-import lombok.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-
-@Schema(description = "管理后台 - API 聊天模型分页 Request VO")
-@Data
-public class AiChatModelPageReqVO extends PageParam {
-
-    @Schema(description = "模型名字", example = "张三")
-    private String name;
-
-    @Schema(description = "模型标识", example = "gpt-3.5-turbo-0125")
-    private String model;
-
-    @Schema(description = "模型平台", example = "OpenAI")
-    private String platform;
-
-}

+ 0 - 45
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatModel/AiChatModelRespVO.java

@@ -1,45 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatModel;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Schema(description = "管理后台 - AI 聊天模型 Response VO")
-@Data
-public class AiChatModelRespVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2630")
-    private Long id;
-
-    @Schema(description = "API 秘钥编号", example = "22042")
-    private Long keyId;
-
-    @Schema(description = "模型名字", example = "张三")
-    private String name;
-
-    @Schema(description = "模型标识", example = "gpt-3.5-turbo-0125")
-    private String model;
-
-    @Schema(description = "模型平台", example = "OpenAI")
-    private String platform;
-
-    @Schema(description = "排序", example = "1")
-    private Integer sort;
-
-    @Schema(description = "状态", example = "2")
-    private Integer status;
-
-    @Schema(description = "温度参数", example = "1")
-    private Double temperature;
-
-    @Schema(description = "单条回复的最大 Token 数量", example = "4096")
-    private Integer maxTokens;
-
-    @Schema(description = "上下文的最大 Message 数量", example = "8192")
-    private Integer maxContexts;
-
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    private LocalDateTime createTime;
-
-}

+ 0 - 50
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatModel/AiChatModelSaveReqVO.java

@@ -1,50 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatModel;
-
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.common.validation.InEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import jakarta.validation.constraints.*;
-
-@Schema(description = "管理后台 - API 聊天模型新增/修改 Request VO")
-@Data
-public class AiChatModelSaveReqVO {
-
-    @Schema(description = "编号", example = "2630")
-    private Long id;
-
-    @Schema(description = "API 秘钥编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22042")
-    @NotNull(message = "API 秘钥编号不能为空")
-    private Long keyId;
-
-    @Schema(description = "模型名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
-    @NotEmpty(message = "模型名字不能为空")
-    private String name;
-
-    @Schema(description = "模型标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "gpt-3.5-turbo-0125")
-    @NotEmpty(message = "模型标识不能为空")
-    private String model;
-
-    @Schema(description = "模型平台", requiredMode = Schema.RequiredMode.REQUIRED, example = "OpenAI")
-    @NotEmpty(message = "模型平台不能为空")
-    private String platform;
-
-    @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "排序不能为空")
-    private Integer sort;
-
-    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @InEnum(CommonStatusEnum.class)
-    @NotNull(message = "状态不能为空")
-    private Integer status;
-
-    @Schema(description = "温度参数", example = "1")
-    private Double temperature;
-
-    @Schema(description = "单条回复的最大 Token 数量", example = "4096")
-    private Integer maxTokens;
-
-    @Schema(description = "上下文的最大 Message 数量", example = "8192")
-    private Integer maxContexts;
-
-}

+ 0 - 20
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatRole/AiChatRolePageReqVO.java

@@ -1,20 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatRole;
-
-import lombok.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-
-@Schema(description = "管理后台 - AI 聊天角色分页 Request VO")
-@Data
-public class AiChatRolePageReqVO extends PageParam {
-
-    @Schema(description = "角色名称", example = "李四")
-    private String name;
-
-    @Schema(description = "角色类别", example = "创作")
-    private String category;
-
-    @Schema(description = "是否公开", example = "1")
-    private Boolean publicStatus;
-
-}

+ 0 - 57
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatRole/AiChatRoleRespVO.java

@@ -1,57 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatRole;
-
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
-import com.fhs.core.trans.anno.Trans;
-import com.fhs.core.trans.constant.TransType;
-import com.fhs.core.trans.vo.VO;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Schema(description = "管理后台 - AI 聊天角色 Response VO")
-@Data
-public class AiChatRoleRespVO implements VO {
-
-    @Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32746")
-    private Long id;
-
-    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "9442")
-    private Long userId;
-
-    @Schema(description = "模型编号", example = "17640")
-    @Trans(type = TransType.SIMPLE, target = AiChatModelDO.class, fields = {"name", "model"}, refs = {"modelName", "model"})
-    private Long modelId;
-    @Schema(description = "模型名字", example = "张三")
-    private String modelName;
-    @Schema(description = "模型标识", example = "gpt-3.5-turbo-0125")
-    private String model;
-
-    @Schema(description = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
-    private String name;
-
-    @Schema(description = "角色头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png")
-    private String avatar;
-
-    @Schema(description = "角色类别", requiredMode = Schema.RequiredMode.REQUIRED, example = "创作")
-    private String category;
-
-    @Schema(description = "角色排序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    private Integer sort;
-
-    @Schema(description = "角色描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
-    private String description;
-
-    @Schema(description = "角色设定", requiredMode = Schema.RequiredMode.REQUIRED)
-    private String systemMessage;
-
-    @Schema(description = "是否公开", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    private Boolean publicStatus;
-
-    @Schema(description = "状态", example = "1")
-    private Integer status;
-
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    private LocalDateTime createTime;
-
-}

+ 0 - 32
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatRole/AiChatRoleSaveMyReqVO.java

@@ -1,32 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatRole;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotEmpty;
-import lombok.Data;
-import org.hibernate.validator.constraints.URL;
-
-@Schema(description = "管理后台 - AI 聊天角色新增/修改【我的】 Request VO")
-@Data
-public class AiChatRoleSaveMyReqVO {
-
-    @Schema(description = "角色编号", example = "32746")
-    private Long id;
-
-    @Schema(description = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
-    @NotEmpty(message = "角色名称不能为空")
-    private String name;
-
-    @Schema(description = "角色头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png")
-    @NotEmpty(message = "角色头像不能为空")
-    @URL(message = "角色头像必须是 URL 格式")
-    private String avatar;
-
-    @Schema(description = "角色描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
-    @NotEmpty(message = "角色描述不能为空")
-    private String description;
-
-    @Schema(description = "角色设定", requiredMode = Schema.RequiredMode.REQUIRED, example = "现在开始你扮演一位程序员,你是一名优秀的程序员,具有很强的逻辑思维能力,总能高效的解决问题")
-    @NotEmpty(message = "角色设定不能为空")
-    private String systemMessage;
-
-}

+ 0 - 54
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatRole/AiChatRoleSaveReqVO.java

@@ -1,54 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatRole;
-
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.common.validation.InEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import jakarta.validation.constraints.*;
-import org.hibernate.validator.constraints.URL;
-
-@Schema(description = "管理后台 - AI 聊天角色新增/修改 Request VO")
-@Data
-public class AiChatRoleSaveReqVO {
-
-    @Schema(description = "角色编号", example = "32746")
-    private Long id;
-
-    @Schema(description = "模型编号", example = "17640")
-    private Long modelId;
-
-    @Schema(description = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
-    @NotEmpty(message = "角色名称不能为空")
-    private String name;
-
-    @Schema(description = "角色头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png")
-    @NotEmpty(message = "角色头像不能为空")
-    @URL(message = "角色头像必须是 URL 格式")
-    private String avatar;
-
-    @Schema(description = "角色类别", requiredMode = Schema.RequiredMode.REQUIRED, example = "创作")
-    @NotEmpty(message = "角色类别不能为空")
-    private String category;
-
-    @Schema(description = "角色排序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "角色排序不能为空")
-    private Integer sort;
-
-    @Schema(description = "角色描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
-    @NotEmpty(message = "角色描述不能为空")
-    private String description;
-
-    @Schema(description = "角色设定", requiredMode = Schema.RequiredMode.REQUIRED, example = "现在开始你扮演一位程序员,你是一名优秀的程序员,具有很强的逻辑思维能力,总能高效的解决问题")
-    @NotEmpty(message = "角色设定不能为空")
-    private String systemMessage;
-
-    @Schema(description = "是否公开", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "是否公开不能为空")
-    private Boolean publicStatus;
-
-    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "状态不能为空")
-    @InEnum(CommonStatusEnum.class)
-    private Integer status;
-
-}

+ 0 - 26
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/AiMusicController.http

@@ -1,26 +0,0 @@
-### 生成音乐:Suno + 歌词模式
-POST {{baseUrl}}/ai/music/generate
-Content-Type: application/json
-Authorization: {{token}}
-
-{
-  "platform": "Suno",
-  "generateMode": 2,
-  "prompt": "创作一首带有轻松吉他旋律的流行歌曲,[verse] 描述夏日海滩的宁静,[chorus] 节奏加快,表达对自由的向往。",
-  "model": "chirp-v3.5",
-  "tags": ["Happy"],
-  "title": "Happy Song"
-}
-
-### 生成音乐:Suno + 描述模式
-POST {{baseUrl}}/ai/music/generate
-Content-Type: application/json
-Authorization: {{token}}
-
-{
-  "platform": "Suno",
-  "generateMode": 1,
-  "model": "chirp-v3.5",
-  "prompt": "happy music",
-  "makeInstrumental": false
-}

+ 0 - 98
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/AiMusicController.java

@@ -1,98 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.music;
-
-import cn.hutool.core.util.ObjUtil;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.ai.controller.admin.music.vo.*;
-import cn.iocoder.yudao.module.ai.dal.dataobject.music.AiMusicDO;
-import cn.iocoder.yudao.module.ai.service.music.AiMusicService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-
-@Tag(name = "管理后台 - AI 音乐")
-@RestController
-@RequestMapping("/ai/music")
-public class AiMusicController {
-
-    @Resource
-    private AiMusicService musicService;
-
-    @GetMapping("/my-page")
-    @Operation(summary = "获得【我的】音乐分页")
-    public CommonResult<PageResult<AiMusicRespVO>> getMusicMyPage(@Valid AiMusicPageReqVO pageReqVO) {
-        PageResult<AiMusicDO> pageResult = musicService.getMusicMyPage(pageReqVO, getLoginUserId());
-        return success(BeanUtils.toBean(pageResult, AiMusicRespVO.class));
-    }
-
-    @PostMapping("/generate")
-    @Operation(summary = "音乐生成")
-    public CommonResult<List<Long>> generateMusic(@RequestBody @Valid AiSunoGenerateReqVO reqVO) {
-        return success(musicService.generateMusic(getLoginUserId(), reqVO));
-    }
-
-    @Operation(summary = "删除【我的】音乐记录")
-    @DeleteMapping("/delete-my")
-    @Parameter(name = "id", required = true, description = "音乐编号", example = "1024")
-    public CommonResult<Boolean> deleteMusicMy(@RequestParam("id") Long id) {
-        musicService.deleteMusicMy(id, getLoginUserId());
-        return success(true);
-    }
-
-    @GetMapping("/get-my")
-    @Operation(summary = "获取【我的】音乐")
-    @Parameter(name = "id", required = true, description = "音乐编号", example = "1024")
-    public CommonResult<AiMusicRespVO> getMusicMy(@RequestParam("id") Long id) {
-        AiMusicDO music = musicService.getMusic(id);
-        if (music == null || ObjUtil.notEqual(getLoginUserId(), music.getUserId())) {
-            return success(null);
-        }
-        return success(BeanUtils.toBean(music, AiMusicRespVO.class));
-    }
-
-    @PostMapping("/update-my")
-    @Operation(summary = "修改【我的】音乐 目前只支持修改标题")
-    @Parameter(name = "title", required = true, description = "音乐名称", example = "夜空中最亮的星")
-    public CommonResult<Boolean> updateMy(AiMusicUpdateMyReqVO updateReqVO) {
-        musicService.updateMyMusic(updateReqVO, getLoginUserId());
-        return success(true);
-    }
-
-    // ================ 音乐管理 ================
-
-    @GetMapping("/page")
-    @Operation(summary = "获得音乐分页")
-    @PreAuthorize("@ss.hasPermission('ai:music:query')")
-    public CommonResult<PageResult<AiMusicRespVO>> getMusicPage(@Valid AiMusicPageReqVO pageReqVO) {
-        PageResult<AiMusicDO> pageResult = musicService.getMusicPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AiMusicRespVO.class));
-    }
-
-    @DeleteMapping("/delete")
-    @Operation(summary = "删除音乐")
-    @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('ai:music:delete')")
-    public CommonResult<Boolean> deleteMusic(@RequestParam("id") Long id) {
-        musicService.deleteMusic(id);
-        return success(true);
-    }
-
-    @PutMapping("/update")
-    @Operation(summary = "更新音乐")
-    @PreAuthorize("@ss.hasPermission('ai:music:update')")
-    public CommonResult<Boolean> updateMusic(@Valid @RequestBody AiMusicUpdateReqVO updateReqVO) {
-        musicService.updateMusic(updateReqVO);
-        return success(true);
-    }
-
-}

+ 0 - 42
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/vo/AiMusicPageReqVO.java

@@ -1,42 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.music.vo;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import cn.iocoder.yudao.framework.common.validation.InEnum;
-import cn.iocoder.yudao.module.ai.enums.music.AiMusicGenerateModeEnum;
-import cn.iocoder.yudao.module.ai.enums.music.AiMusicStatusEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDateTime;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - AI 音乐分页 Request VO")
-@Data
-public class AiMusicPageReqVO extends PageParam {
-
-    @Schema(description = "用户编号", example = "12212")
-    private Long userId;
-
-    @Schema(description = "音乐名称", example = "夜空中最亮的星")
-    private String title;
-
-    @Schema(description = "音乐状态", example = "20")
-    @InEnum(AiMusicStatusEnum.class)
-    private Integer status;
-
-    @Schema(description = "生成模式", example = "1")
-    @InEnum(AiMusicGenerateModeEnum.class)
-    private Integer generateMode;
-
-    @Schema(description = "是否发布", example = "true")
-    private Boolean publicStatus;
-
-    @Schema(description = "创建时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
-
-}

+ 0 - 70
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/vo/AiMusicRespVO.java

@@ -1,70 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.music.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-@Schema(description = "管理后台 - AI 音乐 Response VO")
-@Data
-public class AiMusicRespVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24790")
-    private Long id;
-
-    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "12212")
-    private Long userId;
-
-    @Schema(description = "音乐名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "夜空中最亮的星")
-    private String title;
-
-    @Schema(description = "歌词", example = "oh~卖糕的")
-    private String lyric;
-
-    @Schema(description = "图片地址", example = "https://www.iocoder.cn")
-    private String imageUrl;
-
-    @Schema(description = "音频地址", example = "https://www.iocoder.cn")
-    private String audioUrl;
-
-    @Schema(description = "视频地址", example = "https://www.iocoder.cn")
-    private String videoUrl;
-
-    @Schema(description = "音乐状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "20")
-    private Integer status;
-
-    @Schema(description = "描述词", example = "一首轻快的歌曲")
-    private String gptDescriptionPrompt;
-
-    @Schema(description = "提示词", example = "创作一首带有轻松吉他旋律的流行歌曲,[verse] 描述夏日海滩的宁静,[chorus] 节奏加快,表达对自由的向往。")
-    private String prompt;
-
-    @Schema(description = "模型平台", requiredMode = Schema.RequiredMode.REQUIRED, example = "Suno")
-    private String platform;
-
-    @Schema(description = "模型", requiredMode = Schema.RequiredMode.REQUIRED, example = "chirp-v3.5")
-    private String model;
-
-    @Schema(description = "生成模式", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    private Integer generateMode;
-
-    @Schema(description = "音乐风格标签")
-    private List<String> tags;
-
-    @Schema(description = "音乐时长", example = "[\"pop\",\"jazz\",\"punk\"]")
-    private Double duration;
-
-    @Schema(description = "是否发布", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
-    private Boolean publicStatus;
-
-    @Schema(description = "任务编号", example = "11369")
-    private String taskId;
-
-    @Schema(description = "错误信息")
-    private String errorMessage;
-
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    private LocalDateTime createTime;
-
-}

+ 0 - 18
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/vo/AiMusicUpdateMyReqVO.java

@@ -1,18 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.music.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 修改我的音乐 Request VO")
-@Data
-public class AiMusicUpdateMyReqVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15583")
-    @NotNull(message = "编号不能为空")
-    private Long id;
-
-    @Schema(description = "音乐名称", example = "夜空中最亮的星")
-    private String title;
-
-}

+ 0 - 18
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/vo/AiMusicUpdateReqVO.java

@@ -1,18 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.music.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 音乐修改 Request VO")
-@Data
-public class AiMusicUpdateReqVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15583")
-    @NotNull(message = "编号不能为空")
-    private Long id;
-
-    @Schema(description = "是否发布", example = "true")
-    private Boolean publicStatus;
-
-}

+ 0 - 57
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/music/vo/AiSunoGenerateReqVO.java

@@ -1,57 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.music.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-import java.util.List;
-
-@Schema(description = "管理后台 - AI 音乐生成 Request VO")
-@Data
-public class AiSunoGenerateReqVO {
-
-    @Schema(description = "平台", requiredMode = Schema.RequiredMode.REQUIRED, example = "Suno")
-    @NotBlank(message = "平台不能为空")
-    private String platform; // 参见 AiPlatformEnum 枚举
-
-    /**
-     * 1. 描述模式:描述词 + 是否纯音乐 + 模型
-     * 2. 歌词模式:歌词 + 音乐风格 + 标题 + 模型
-     */
-    @Schema(description = "生成模式", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
-    @NotNull(message = "生成模式不能为空")
-    private Integer generateMode; // 参见 AiMusicGenerateModeEnum 枚举
-
-    @Schema(description = "用于生成音乐音频的歌词提示",
-            example = """
-                    1.描述模式:创作一首带有轻松吉他旋律的流行歌曲,[verse] 描述夏日海滩的宁静,[chorus] 节奏加快,表达对自由的向往。
-                    2.歌词模式:
-                    [Verse]
-                    阳光下奔跑 多么欢快
-                    假期就要来 心都飞起来
-                    朋友在一旁 笑声又灿烂
-                    无忧无虑的 每一天甜蜜
-                    [Chorus]
-                    马上放假了 快来庆祝
-                    一起去旅行 快去冒险
-                    日子太短暂 别再等待
-                    马上放假了 梦想起飞
-                    """)
-    private String prompt;
-
-    @Schema(description = "是否纯音乐", example = "true")
-    private Boolean makeInstrumental;
-
-    @Schema(description = "模型", requiredMode = Schema.RequiredMode.REQUIRED, example = "chirp-v3.5")
-    @NotEmpty(message = "模型不能为空")
-    private String model;
-
-    @Schema(description = "音乐风格", example = "[\"pop\",\"jazz\",\"punk\"]")
-    private List<String> tags;
-
-    @Schema(description = "音乐/歌曲名称", example = "夜空中最亮的星")
-    private String title;
-
-}

+ 0 - 59
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/write/AiWriteController.java

@@ -1,59 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.write;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.ai.controller.admin.write.vo.AiWriteGenerateReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.write.vo.AiWritePageReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.write.vo.AiWriteRespVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.write.AiWriteDO;
-import cn.iocoder.yudao.module.ai.service.write.AiWriteService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.annotation.security.PermitAll;
-import jakarta.validation.Valid;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import reactor.core.publisher.Flux;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-
-@Tag(name = "管理后台 - AI 写作")
-@RestController
-@RequestMapping("/ai/write")
-public class AiWriteController {
-
-    @Resource
-    private AiWriteService writeService;
-
-    @PostMapping(value = "/generate-stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
-    @Operation(summary = "写作生成(流式)", description = "流式返回,响应较快")
-    @PermitAll  // 解决 SSE 最终响应的时候,会被 Access Denied 拦截的问题
-    public Flux<CommonResult<String>> generateWriteContent(@RequestBody @Valid AiWriteGenerateReqVO generateReqVO) {
-        return writeService.generateWriteContent(generateReqVO, getLoginUserId());
-    }
-
-    // ================ 写作管理 ================
-
-    @DeleteMapping("/delete")
-    @Operation(summary = "删除写作")
-    @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('ai:write:delete')")
-    public CommonResult<Boolean> deleteWrite(@RequestParam("id") Long id) {
-        writeService.deleteWrite(id);
-        return success(true);
-    }
-
-    @GetMapping("/page")
-    @Operation(summary = "获得写作分页")
-    @PreAuthorize("@ss.hasPermission('ai:write:query')")
-    public CommonResult<PageResult<AiWriteRespVO>> getWritePage(@Valid AiWritePageReqVO pageReqVO) {
-        PageResult<AiWriteDO> pageResult = writeService.getWritePage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, AiWriteRespVO.class));
-    }
-
-}

+ 0 - 39
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/write/vo/AiWriteGenerateReqVO.java

@@ -1,39 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.write.vo;
-
-import cn.iocoder.yudao.framework.common.validation.InEnum;
-import cn.iocoder.yudao.module.ai.enums.write.AiWriteTypeEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-@Schema(description = "管理后台 - AI 写作生成 Request VO")
-@Data
-public class AiWriteGenerateReqVO {
-
-    @Schema(description = "写作类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @InEnum(value = AiWriteTypeEnum.class, message = "写作类型必须是 {value}")
-    private Integer type;
-
-    @Schema(description = "写作内容提示", example = "1.撰写:田忌赛马;2.回复:不批")
-    private String prompt;
-
-    @Schema(description = "原文", example = "领导我要辞职")
-    private String originalContent;
-
-    @Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "长度不能为空")
-    private Integer length;
-
-    @Schema(description = "格式", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "格式不能为空")
-    private Integer format;
-
-    @Schema(description = "语气", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "语气不能为空")
-    private Integer tone;
-
-    @Schema(description = "语言", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "语言不能为空")
-    private Integer language;
-
-}

+ 0 - 33
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/write/vo/AiWritePageReqVO.java

@@ -1,33 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.write.vo;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDateTime;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - AI 写作分页 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class AiWritePageReqVO extends PageParam {
-
-    @Schema(description = "用户编号", example = "28404")
-    private Long userId;
-
-    @Schema(description = "写作类型", example = "1")
-    private Integer type;
-
-    @Schema(description = "平台", example = "TongYi")
-    private String platform;
-
-    @Schema(description = "创建时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
-
-}

+ 0 - 54
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/write/vo/AiWriteRespVO.java

@@ -1,54 +0,0 @@
-package cn.iocoder.yudao.module.ai.controller.admin.write.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Schema(description = "管理后台 - AI 写作 Response VO")
-@Data
-public class AiWriteRespVO {
-
-    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5311")
-    private Long id;
-
-    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "28404")
-    private Long userId;
-
-    @Schema(description = "写作类型", example = "1")
-    private Integer type;
-
-    @Schema(description = "平台", requiredMode = Schema.RequiredMode.REQUIRED, example = "TongYi")
-    private String platform;
-
-    @Schema(description = "模型", requiredMode = Schema.RequiredMode.REQUIRED, example = "qwen")
-    private String model;
-
-    @Schema(description = "生成内容提示", requiredMode = Schema.RequiredMode.REQUIRED, example = "撰写:田忌赛马")
-    private String prompt;
-
-    @Schema(description = "生成的内容", example = "你非常不错")
-    private String generatedContent;
-
-    @Schema(description = "原文", example = "真的么?")
-    private String originalContent;
-
-    @Schema(description = "长度提示词", example = "1")
-    private Integer length;
-
-    @Schema(description = "格式提示词", example = "2")
-    private Integer format;
-
-    @Schema(description = "语气提示词", example = "3")
-    private Integer tone;
-
-    @Schema(description = "语言提示词", example = "4")
-    private Integer language;
-
-    @Schema(description = "错误信息")
-    private String errorMessage;
-
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    private LocalDateTime createTime;
-
-}

+ 0 - 4
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/app/package-info.java

@@ -1,4 +0,0 @@
-/**
- * TODO 芋艿:站位,无特殊作用
- */
-package cn.iocoder.yudao.module.ai.controller.app;

+ 0 - 6
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/package-info.java

@@ -1,6 +0,0 @@
-/**
- * 提供 RESTful API 给前端:
- * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目
- * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分
- */
-package cn.iocoder.yudao.module.ai.controller;

+ 0 - 107
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/chat/AiChatConversationDO.java

@@ -1,107 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.dataobject.chat;
-
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeDO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.*;
-
-import java.time.LocalDateTime;
-
-/**
- * AI Chat 对话 DO
- *
- * 用户每次发起 Chat 聊天时,会创建一个 {@link AiChatConversationDO} 对象,将它的消息关联在一起
- *
- * @author fansili
- * @since 2024/4/14 17:35
- */
-@TableName("ai_chat_conversation")
-@KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class AiChatConversationDO extends BaseDO {
-
-    public static final String TITLE_DEFAULT = "新对话";
-
-    /**
-     * ID 编号,自增
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 用户编号
-     *
-     * 关联 AdminUserDO 的 userId 字段
-     */
-    private Long userId;
-
-    /**
-     * 对话标题
-     *
-     * 默认由系统自动生成,可用户手动修改
-     */
-    private String title;
-    /**
-     * 是否置顶
-     */
-    private Boolean pinned;
-    /**
-     * 置顶时间
-     */
-    private LocalDateTime pinnedTime;
-
-    /**
-     * 角色编号
-     *
-     * 关联 {@link AiChatRoleDO#getId()}
-     */
-    private Long roleId;
-
-    /**
-     * 知识库编号
-     * <p>
-     * 关联 {@link AiKnowledgeDO#getId()}
-     */
-    private Long knowledgeId;
-
-    /**
-     * 模型编号
-     *
-     * 关联 {@link AiChatModelDO#getId()} 字段
-     */
-    private Long modelId;
-    /**
-     * 模型标志
-     */
-    private String model;
-
-    // ========== 对话配置 ==========
-
-    /**
-     * 角色设定
-     */
-    private String systemMessage;
-    /**
-     * 温度参数
-     *
-     * 用于调整生成回复的随机性和多样性程度:较低的温度值会使输出更收敛于高频词汇,较高的则增加多样性
-     */
-    private Double temperature;
-    /**
-     * 单条回复的最大 Token 数量
-     */
-    private Integer maxTokens;
-    /**
-     * 上下文的最大 Message 数量
-     */
-    private Integer maxContexts;
-
-}

+ 0 - 104
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/chat/AiChatMessageDO.java

@@ -1,104 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.dataobject.chat;
-
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeSegmentDO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
-import lombok.*;
-import org.springframework.ai.chat.messages.MessageType;
-
-import java.util.List;
-
-/**
- * AI Chat 消息 DO
- *
- * @since 2024/4/14 17:35
- * @since 2024/4/14 17:35
- */
-@TableName("ai_chat_message")
-@KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class AiChatMessageDO extends BaseDO {
-
-    /**
-     * 编号,作为每条聊天记录的唯一标识符
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 对话编号
-     *
-     * 关联 {@link AiChatConversationDO#getId()} 字段
-     */
-    private Long conversationId;
-    /**
-     * 回复消息编号
-     *
-     * 关联 {@link #id} 字段
-     *
-     * 大模型回复的消息编号,用于“问答”的关联
-     */
-    private Long replyId;
-
-    /**
-     * 消息类型
-     *
-     * 也等价于 OpenAPI 的 role 字段
-     *
-     * 枚举 {@link MessageType}
-     */
-    private String type;
-    /**
-     * 用户编号
-     *
-     * 关联 AdminUserDO 的 userId 字段
-     */
-    private Long userId;
-    /**
-     * 角色编号
-     *
-     * 关联 {@link AiChatRoleDO#getId()} 字段
-     */
-    private Long roleId;
-
-
-    /**
-     * 段落编号数组
-     *
-     * 关联 {@link AiKnowledgeSegmentDO#getId()} 字段
-     */
-    @TableField(typeHandler = JacksonTypeHandler.class)
-    private List<Long> segmentIds;
-
-    /**
-     * 模型标志
-     */
-    private String model;
-    /**
-     * 模型编号
-     *
-     * 关联 {@link AiChatModelDO#getId()} 字段
-     */
-    private Long modelId;
-
-    /**
-     * 聊天内容
-     */
-    private String content;
-
-    /**
-     * 是否携带上下文
-     */
-    private Boolean useContext;
-
-}

+ 0 - 120
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/image/AiImageDO.java

@@ -1,120 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.dataobject.image;
-
-import cn.iocoder.yudao.framework.ai.core.model.midjourney.api.MidjourneyApi;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
-import cn.iocoder.yudao.module.ai.enums.image.AiImageStatusEnum;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
-import lombok.Data;
-import org.springframework.ai.openai.OpenAiImageOptions;
-import org.springframework.ai.stabilityai.api.StabilityAiImageOptions;
-
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Map;
-
-/**
- * AI 绘画 DO
- *
- * @author fansili
- */
-@TableName(value = "ai_image", autoResultMap = true)
-@KeySequence("ai_image_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-public class AiImageDO extends BaseDO {
-
-    /**
-     * 编号
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 用户编号
-     *
-     * 关联 {@link AdminUserRespDTO#getId()}
-     */
-    private Long userId;
-
-    /**
-     * 提示词
-     */
-    private String prompt;
-
-    /**
-     * 平台
-     *
-     * 枚举 {@link cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum}
-     */
-    private String platform;
-    /**
-     * 模型
-     *
-     * 冗余 {@link AiChatModelDO#getModel()}
-     */
-    private String model;
-
-    /**
-     * 图片宽度
-     */
-    private Integer width;
-    /**
-     * 图片高度
-     */
-    private Integer height;
-
-    /**
-     * 生成状态
-     *
-     * 枚举 {@link AiImageStatusEnum}
-     */
-    private Integer status;
-
-    /**
-     * 完成时间
-     */
-    private LocalDateTime finishTime;
-
-    /**
-     * 绘画错误信息
-     */
-    private String errorMessage;
-
-    /**
-     * 图片地址
-     */
-    private String picUrl;
-    /**
-     * 是否公开
-     */
-    private Boolean publicStatus;
-
-    /**
-     * 绘制参数,不同 platform 的不同参数
-     *
-     * 1. {@link OpenAiImageOptions}
-     * 2. {@link StabilityAiImageOptions}
-     */
-    @TableField(typeHandler = JacksonTypeHandler.class)
-    private Map<String, Object> options;
-
-    /**
-     * mj buttons 按钮
-     */
-    @TableField(typeHandler = JacksonTypeHandler.class)
-    private List<MidjourneyApi.Button> buttons;
-
-    /**
-     * 任务编号
-     *
-     * 1. midjourney proxy:关联的 task id
-     */
-    private String taskId;
-
-}
-

+ 0 - 76
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/knowledge/AiKnowledgeDO.java

@@ -1,76 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.dataobject.knowledge;
-
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * AI 知识库 DO
- *
- * @author xiaoxin
- */
-@TableName(value = "ai_knowledge", autoResultMap = true)
-@KeySequence("ai_knowledge_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-public class AiKnowledgeDO extends BaseDO {
-
-    /**
-     * 编号
-     */
-    @TableId
-    private Long id;
-    /**
-     * 用户编号
-     * <p>
-     * 关联 AdminUserDO 的 userId 字段
-     */
-    private Long userId;
-    /**
-     * 知识库名称
-     */
-    private String name;
-    /**
-     * 知识库描述
-     */
-    private String description;
-
-    /**
-     * 可见权限,选择哪些人可见
-     * <p>
-     * -1 所有人可见,其他为各自用户编号
-     */
-    @TableField(typeHandler = LongListTypeHandler.class)
-    private List<Long> visibilityPermissions;
-    /**
-     * 嵌入模型编号
-     */
-    private Long modelId;
-    /**
-     * 模型标识
-     */
-    private String model;
-
-    /**
-     * topK
-     */
-    private Integer topK;
-    /**
-     * 相似度阈值
-     */
-    private Double similarityThreshold;
-
-    /**
-     * 状态
-     * <p>
-     * 枚举 {@link CommonStatusEnum}
-     */
-    private Integer status;
-
-}

+ 0 - 92
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/knowledge/AiKnowledgeDocumentDO.java

@@ -1,92 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.dataobject.knowledge;
-
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.module.ai.enums.knowledge.AiKnowledgeDocumentStatusEnum;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-/**
- * AI 知识库-文档 DO
- *
- * @author xiaoxin
- */
-@TableName(value = "ai_knowledge_document")
-@KeySequence("ai_knowledge_document_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-public class AiKnowledgeDocumentDO extends BaseDO {
-
-    /**
-     * 编号
-     */
-    @TableId
-    private Long id;
-    /**
-     * 知识库编号
-     * <p>
-     * 关联 {@link AiKnowledgeDO#getId()}
-     */
-    private Long knowledgeId;
-    /**
-     * 文件名称
-     */
-    private String name;
-    /**
-     * 内容
-     */
-    private String content;
-    /**
-     * 文件 URL
-     */
-    private String url;
-    /**
-     * 文档 token 数量
-     */
-    private Integer tokens;
-    /**
-     * 文档字符数
-     */
-    private Integer wordCount;
-
-
-    // ========== 自定义分段所用参数 ==========
-    // TODO @新:3)defaultChunkSize、defaultChunkSize、minChunkSizeChars、maxNumChunks 这几个字段的命名,可能要微信一起讨论下。尽量命名保持风格统一哈。
-    /**
-     * 每个文本块的目标 token 数
-     */
-    private Integer defaultSegmentTokens;
-    /**
-     * 每个文本块的最小字符数
-     */
-    private Integer minSegmentWordCount;
-    /**
-     * 低于此值的块会被丢弃
-     */
-    private Integer minChunkLengthToEmbed;
-    /**
-     * 最大块数
-     */
-    private Integer maxNumSegments;
-    /**
-     * 分块是否保留分隔符
-     */
-    private Boolean keepSeparator;
-    // ===================================
-
-    /**
-     * 切片状态
-     * <p>
-     * 枚举 {@link AiKnowledgeDocumentStatusEnum}
-     */
-    private Integer sliceStatus;
-
-    /**
-     * 状态
-     * <p>
-     * 枚举 {@link CommonStatusEnum}
-     */
-    private Integer status;
-
-}

+ 0 - 62
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/knowledge/AiKnowledgeSegmentDO.java

@@ -1,62 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.dataobject.knowledge;
-
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-/**
- * AI 知识库-文档分段 DO
- *
- * @author xiaoxin
- */
-@TableName(value = "ai_knowledge_segment")
-@KeySequence("ai_knowledge_segment_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-public class AiKnowledgeSegmentDO extends BaseDO {
-
-    public static final String FIELD_KNOWLEDGE_ID = "knowledgeId";
-
-    /**
-     * 编号
-     */
-    @TableId
-    private Long id;
-    /**
-     * 向量库的编号
-     */
-    private String vectorId;
-    /**
-     * 知识库编号
-     * <p>
-     * 关联 {@link AiKnowledgeDO#getId()}
-     */
-    private Long knowledgeId;
-    /**
-     * 文档编号
-     * <p>
-     * 关联 {@link AiKnowledgeDocumentDO#getId()}
-     */
-    private Long documentId;
-    /**
-     * 切片内容
-     */
-    private String content;
-    /**
-     * 字符数
-     */
-    private Integer wordCount;
-    /**
-     * token 数量
-     */
-    private Integer tokens;
-    /**
-     * 状态
-     * <p>
-     * 枚举 {@link CommonStatusEnum}
-     */
-    private Integer status;
-
-}

+ 0 - 59
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/mindmap/AiMindMapDO.java

@@ -1,59 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.dataobject.mindmap;
-
-import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-/**
- * AI 思维导图 DO
- *
- * @author xiaoxin
- */
-@TableName(value = "ai_mind_map")
-@KeySequence("ai_mind_map_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-public class AiMindMapDO extends BaseDO {
-
-    /**
-     * 编号
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 用户编号
-     * <p>
-     * 关联 AdminUserDO 的 userId 字段
-     */
-    private Long userId;
-
-    /**
-     * 平台
-     * <p>
-     * 枚举 {@link AiPlatformEnum}
-     */
-    private String platform;
-    /**
-     * 模型
-     */
-    private String model;
-
-    /**
-     * 生成内容提示
-     */
-    private String prompt;
-
-    /**
-     * 生成的内容
-     */
-    private String generatedContent;
-
-    /**
-     * 错误信息
-     */
-    private String errorMessage;
-
-}

+ 0 - 55
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/model/AiApiKeyDO.java

@@ -1,55 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.dataobject.model;
-
-import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum;
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.*;
-
-/**
- * AI API 秘钥 DO
- *
- * @author 芋道源码
- */
-@TableName("ai_api_key")
-@KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class AiApiKeyDO extends BaseDO {
-
-    /**
-     * 编号
-     */
-    @TableId
-    private Long id;
-    /**
-     * 名称
-     */
-    private String name;
-    /**
-     * 密钥
-     */
-    private String apiKey;
-    /**
-     * 平台
-     *
-     * 枚举 {@link AiPlatformEnum}
-     */
-    private String platform;
-    /**
-     * API 地址
-     */
-    private String url;
-    /**
-     * 状态
-     *
-     * 枚举 {@link CommonStatusEnum}
-     */
-    private Integer status;
-
-}

+ 0 - 82
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/model/AiChatModelDO.java

@@ -1,82 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.dataobject.model;
-
-import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum;
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.*;
-
-/**
- * AI 聊天模型 DO
- *
- * 默认聊天模型:{@link #status} 为开启,并且 {@link #sort} 排序第一
- *
- * @author fansili
- * @since 2024/4/24 19:39
- */
-@TableName("ai_chat_model")
-@KeySequence("ai_chat_model_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class AiChatModelDO extends BaseDO {
-
-    /**
-     * 编号
-     */
-    @TableId
-    private Long id;
-    /**
-     * API 秘钥编号
-     *
-     * 关联 {@link AiApiKeyDO#getId()}
-     */
-    private Long keyId;
-    /**
-     * 模型名称
-     */
-    private String name;
-    /**
-     * 模型标志
-     */
-    private String model;
-    /**
-     * 平台
-     *
-     * 枚举 {@link AiPlatformEnum}
-     */
-    private String platform;
-
-    /**
-     * 排序值
-     */
-    private Integer sort;
-    /**
-     * 状态
-     *
-     * 枚举 {@link CommonStatusEnum}
-     */
-    private Integer status;
-
-    // ========== 对话配置 ==========
-
-    /**
-     * 温度参数
-     *
-     * 用于调整生成回复的随机性和多样性程度:较低的温度值会使输出更收敛于高频词汇,较高的则增加多样性
-     */
-    private Double temperature;
-    /**
-     * 单条回复的最大 Token 数量
-     */
-    private Integer maxTokens;
-    /**
-     * 上下文的最大 Message 数量
-     */
-    private Integer maxContexts;
-
-}

+ 0 - 84
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/model/AiChatRoleDO.java

@@ -1,84 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.dataobject.model;
-
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.*;
-
-/**
- * AI 聊天角色 DO
- *
- * @author fansili
- * @since 2024/4/24 19:39
- */
-@TableName(value = "ai_chat_role", autoResultMap = true)
-@KeySequence("ai_chat_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class AiChatRoleDO extends BaseDO {
-
-    /**
-     * 编号
-     */
-    @TableId
-    private Long id;
-    /**
-     * 角色名称
-     */
-    private String name;
-    /**
-     * 角色头像
-     */
-    private String avatar;
-    /**
-     * 角色分类
-     */
-    private String category;
-    /**
-     * 角色描述
-     */
-    private String description;
-    /**
-     * 角色设定
-     */
-    private String systemMessage;
-
-    /**
-     * 用户编号
-     *
-     * 关联 AdminUserDO 的 userId 字段
-     */
-    private Long userId;
-
-    /**
-     * 模型编号
-     *
-     * 关联 {@link AiChatModelDO#getId()} 字段
-     */
-    private Long modelId;
-
-    /**
-     * 是否公开
-     *
-     * 1. true - 公开;由管理员在【角色管理】所创建
-     * 2. false - 私有;由个人在【我的角色】所创建
-     */
-    private Boolean publicStatus;
-
-    /**
-     * 排序值
-     */
-    private Integer sort;
-    /**
-     * 状态
-     *
-     * 枚举 {@link CommonStatusEnum}
-     */
-    private Integer status;
-
-}

+ 0 - 118
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/music/AiMusicDO.java

@@ -1,118 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.dataobject.music;
-
-import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.module.ai.enums.music.AiMusicGenerateModeEnum;
-import cn.iocoder.yudao.module.ai.enums.music.AiMusicStatusEnum;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * AI 音乐 DO
- *
- * @author xiaoxin
- */
-@TableName(value = "ai_music", autoResultMap = true)
-@KeySequence("ai_music_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-public class AiMusicDO extends BaseDO {
-
-    /**
-     * 编号
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 用户编号
-     * <p>
-     * 关联 AdminUserDO 的 userId 字段
-     */
-    private Long userId;
-
-    /**
-     * 音乐名称
-     */
-    private String title;
-
-    /**
-     * 歌词
-     */
-    private String lyric;
-
-    /**
-     * 图片地址
-     */
-    private String imageUrl;
-    /**
-     * 音频地址
-     */
-    private String audioUrl;
-    /**
-     * 视频地址
-     */
-    private String videoUrl;
-
-    /**
-     * 音乐状态
-     * <p>
-     * 枚举 {@link AiMusicStatusEnum}
-     */
-    private Integer status;
-
-    /**
-     * 生成模式
-     * <p>
-     * 枚举 {@link AiMusicGenerateModeEnum}
-     */
-    private Integer generateMode;
-
-    /**
-     * 描述词
-     */
-    private String description;
-
-    /**
-     * 平台
-     * <p>
-     * 枚举 {@link AiPlatformEnum}
-     */
-    private String platform;
-    /**
-     * 模型
-     */
-    private String model;
-
-    /**
-     * 音乐风格标签
-     */
-    @TableField(typeHandler = JacksonTypeHandler.class)
-    private List<String> tags;
-
-    /**
-     * 音乐时长
-     */
-    private Double duration;
-
-    /**
-     * 是否公开
-     */
-    private Boolean publicStatus;
-
-    /**
-     * 任务编号
-     */
-    private String taskId;
-
-    /**
-     * 错误信息
-     */
-    private String errorMessage;
-
-}

+ 0 - 96
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/write/AiWriteDO.java

@@ -1,96 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.dataobject.write;
-
-import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.module.ai.enums.write.AiWriteTypeEnum;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-/**
- * AI 写作 DO
- *
- * @author xiaoxin
- */
-@TableName("ai_write")
-@KeySequence("ai_write_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-public class AiWriteDO extends BaseDO {
-
-    /**
-     * 编号
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 用户编号
-     *
-     * 关联 AdminUserDO 的 userId 字段
-     */
-    private Long userId;
-
-    /**
-     * 写作类型
-     * <p>
-     * 枚举 {@link AiWriteTypeEnum}
-     */
-    private Integer type;
-
-    /**
-     * 平台
-     *
-     * 枚举 {@link AiPlatformEnum}
-     */
-    private String platform;
-    /**
-     * 模型
-     */
-    private String model;
-
-    /**
-     * 生成内容提示
-     */
-    private String prompt;
-
-    /**
-     * 生成的内容
-     */
-    private String generatedContent;
-    /**
-     * 原文
-     */
-    private String originalContent;
-
-    /**
-     * 长度提示词
-     *
-     * 字典:{@link cn.iocoder.yudao.module.ai.enums.DictTypeConstants#AI_WRITE_LENGTH}
-     */
-    private Integer length;
-    /**
-     * 格式提示词
-     *
-     * 字典:{@link cn.iocoder.yudao.module.ai.enums.DictTypeConstants#AI_WRITE_FORMAT}
-     */
-    private Integer format;
-    /**
-     * 语气提示词
-     *
-     * 字典:{@link cn.iocoder.yudao.module.ai.enums.DictTypeConstants#AI_WRITE_TONE}
-     */
-    private Integer tone;
-    /**
-     * 语言提示词
-     *
-     * 字典:{@link cn.iocoder.yudao.module.ai.enums.DictTypeConstants#AI_WRITE_LANGUAGE}
-     */
-    private Integer language;
-
-    /**
-     * 错误信息
-     */
-    private String errorMessage;
-
-}

+ 0 - 38
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/chat/AiChatConversationMapper.java

@@ -1,38 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.mysql.chat;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.conversation.AiChatConversationPageReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-
-/**
- * AI 聊天对话 Mapper
- *
- * @author 芋道源码
- */
-@Mapper
-public interface AiChatConversationMapper extends BaseMapperX<AiChatConversationDO> {
-
-    default List<AiChatConversationDO> selectListByUserId(Long userId) {
-        return selectList(AiChatConversationDO::getUserId, userId);
-    }
-
-    default List<AiChatConversationDO> selectListByUserIdAndPinned(Long userId, boolean pinned) {
-        return selectList(new LambdaQueryWrapperX<AiChatConversationDO>()
-                .eq(AiChatConversationDO::getUserId, userId)
-                .eq(AiChatConversationDO::getPinned, pinned));
-    }
-
-    default PageResult<AiChatConversationDO> selectChatConversationPage(AiChatConversationPageReqVO pageReqVO) {
-        return selectPage(pageReqVO, new LambdaQueryWrapperX<AiChatConversationDO>()
-                .eqIfPresent(AiChatConversationDO::getUserId, pageReqVO.getUserId())
-                .likeIfPresent(AiChatConversationDO::getTitle, pageReqVO.getTitle())
-                .betweenIfPresent(AiChatConversationDO::getCreateTime, pageReqVO.getCreateTime())
-                .orderByDesc(AiChatConversationDO::getId));
-    }
-
-}

+ 0 - 59
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/chat/AiChatMessageMapper.java

@@ -1,59 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.mysql.chat;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.map.MapUtil;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.conversation.AiChatConversationPageReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message.AiChatMessagePageReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatConversationDO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.chat.AiChatMessageDO;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-/**
- * AI 聊天对话 Mapper
- *
- * @author fansili
- */
-@Mapper
-public interface AiChatMessageMapper extends BaseMapperX<AiChatMessageDO> {
-
-    default List<AiChatMessageDO> selectListByConversationId(Long conversationId) {
-        return selectList(new LambdaQueryWrapperX<AiChatMessageDO>()
-                .eq(AiChatMessageDO::getConversationId, conversationId)
-                .orderByAsc(AiChatMessageDO::getId));
-    }
-
-    default Map<Long, Integer> selectCountMapByConversationId(Collection<Long> conversationIds) {
-        // SQL count 查询
-        List<Map<String, Object>> result = selectMaps(new QueryWrapper<AiChatMessageDO>()
-                .select("COUNT(id) AS count, conversation_id AS conversationId")
-                .in("conversation_id", conversationIds)
-                .groupBy("conversation_id"));
-        if (CollUtil.isEmpty(result)) {
-            return Collections.emptyMap();
-        }
-        // 转换数据
-        return CollectionUtils.convertMap(result,
-                record -> MapUtil.getLong(record, "conversationId"),
-                record -> MapUtil.getInt(record, "count" ));
-    }
-
-    default PageResult<AiChatMessageDO> selectPage(AiChatMessagePageReqVO pageReqVO) {
-        return selectPage(pageReqVO, new LambdaQueryWrapperX<AiChatMessageDO>()
-                .eqIfPresent(AiChatMessageDO::getConversationId, pageReqVO.getConversationId())
-                .eqIfPresent(AiChatMessageDO::getUserId, pageReqVO.getUserId())
-                .likeIfPresent(AiChatMessageDO::getContent, pageReqVO.getContent())
-                .betweenIfPresent(AiChatMessageDO::getCreateTime, pageReqVO.getCreateTime())
-                .orderByDesc(AiChatMessageDO::getId));
-    }
-
-}

+ 0 - 57
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/image/AiImageMapper.java

@@ -1,57 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.mysql.image;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImagePageReqVO;
-import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImagePublicPageReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-
-/**
- * AI 绘图 Mapper
- *
- * @author fansili
- */
-@Mapper
-public interface AiImageMapper extends BaseMapperX<AiImageDO> {
-
-    default AiImageDO selectByTaskId(String taskId) {
-        return selectOne(AiImageDO::getTaskId, taskId);
-    }
-
-    default PageResult<AiImageDO> selectPage(AiImagePageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<AiImageDO>()
-                .eqIfPresent(AiImageDO::getUserId, reqVO.getUserId())
-                .eqIfPresent(AiImageDO::getPlatform, reqVO.getPlatform())
-                .eqIfPresent(AiImageDO::getStatus, reqVO.getStatus())
-                .eqIfPresent(AiImageDO::getPublicStatus, reqVO.getPublicStatus())
-                .betweenIfPresent(AiImageDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(AiImageDO::getId));
-    }
-
-    default PageResult<AiImageDO> selectPageMy(Long userId, AiImagePageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<AiImageDO>()
-                .likeIfPresent(AiImageDO::getPrompt, reqVO.getPrompt())
-                // 情况一:公开
-                .eq(Boolean.TRUE.equals(reqVO.getPublicStatus()), AiImageDO::getPublicStatus, reqVO.getPublicStatus())
-                // 情况二:私有
-                .eq(Boolean.FALSE.equals(reqVO.getPublicStatus()), AiImageDO::getUserId, userId)
-                .orderByDesc(AiImageDO::getId));
-    }
-
-    default PageResult<AiImageDO> selectPage(AiImagePublicPageReqVO pageReqVO) {
-        return selectPage(pageReqVO, new LambdaQueryWrapperX<AiImageDO>()
-                .eqIfPresent(AiImageDO::getPublicStatus, Boolean.TRUE)
-                .likeIfPresent(AiImageDO::getPrompt, pageReqVO.getPrompt())
-                .orderByDesc(AiImageDO::getId));
-    }
-
-    default List<AiImageDO> selectListByStatusAndPlatform(Integer status, String platform) {
-        return selectList(AiImageDO::getStatus, status,
-                AiImageDO::getPlatform, platform);
-    }
-
-}

+ 0 - 24
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/knowledge/AiKnowledgeDocumentMapper.java

@@ -1,24 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.mysql.knowledge;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.document.AiKnowledgeDocumentPageReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeDocumentDO;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * AI 知识库-文档 Mapper
- *
- * @author xiaoxin
- */
-@Mapper
-public interface AiKnowledgeDocumentMapper extends BaseMapperX<AiKnowledgeDocumentDO> {
-
-    default PageResult<AiKnowledgeDocumentDO> selectPage(AiKnowledgeDocumentPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<AiKnowledgeDocumentDO>()
-                .likeIfPresent(AiKnowledgeDocumentDO::getName, reqVO.getName())
-                .orderByDesc(AiKnowledgeDocumentDO::getId));
-    }
-
-}

+ 0 - 26
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/knowledge/AiKnowledgeMapper.java

@@ -1,26 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.mysql.knowledge;
-
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.knowledge.AiKnowledgePageReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeDO;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * AI 知识库基础信息 Mapper
- *
- * @author xiaoxin
- */
-@Mapper
-public interface AiKnowledgeMapper extends BaseMapperX<AiKnowledgeDO> {
-
-    default PageResult<AiKnowledgeDO> selectPage(Long userId, AiKnowledgePageReqVO pageReqVO) {
-        return selectPage(pageReqVO, new LambdaQueryWrapperX<AiKnowledgeDO>()
-                .eq(AiKnowledgeDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
-                .likeIfPresent(AiKnowledgeDO::getName, pageReqVO.getName())
-                .and(e -> e.apply("FIND_IN_SET(" + userId + ",visibility_permissions)").or(m -> m.apply("FIND_IN_SET(-1,visibility_permissions)")))
-                .orderByDesc(AiKnowledgeDO::getId));
-    }
-}

+ 0 - 34
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/knowledge/AiKnowledgeSegmentMapper.java

@@ -1,34 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.mysql.knowledge;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.segment.AiKnowledgeSegmentPageReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeSegmentDO;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-
-/**
- * AI 知识库-分片 Mapper
- *
- * @author xiaoxin
- */
-@Mapper
-public interface AiKnowledgeSegmentMapper extends BaseMapperX<AiKnowledgeSegmentDO> {
-
-    default PageResult<AiKnowledgeSegmentDO> selectPage(AiKnowledgeSegmentPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<AiKnowledgeSegmentDO>()
-                .eq(AiKnowledgeSegmentDO::getDocumentId, reqVO.getDocumentId())
-                .eqIfPresent(AiKnowledgeSegmentDO::getStatus, reqVO.getStatus())
-                .likeIfPresent(AiKnowledgeSegmentDO::getContent, reqVO.getKeyword())
-                .orderByDesc(AiKnowledgeSegmentDO::getId));
-    }
-
-    default List<AiKnowledgeSegmentDO> selectListByVectorIds(List<String> vectorIdList) {
-        return selectList(new LambdaQueryWrapperX<AiKnowledgeSegmentDO>()
-                .in(AiKnowledgeSegmentDO::getVectorId, vectorIdList)
-                .orderByDesc(AiKnowledgeSegmentDO::getId));
-    }
-
-}

+ 0 - 26
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/mindmap/AiMindMapMapper.java

@@ -1,26 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.mysql.mindmap;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapPageReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.mindmap.AiMindMapDO;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * AI 思维导图 Mapper
- *
- * @author xiaoxin
- */
-@Mapper
-public interface AiMindMapMapper extends BaseMapperX<AiMindMapDO> {
-
-    default PageResult<AiMindMapDO> selectPage(AiMindMapPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<AiMindMapDO>()
-                .eqIfPresent(AiMindMapDO::getUserId, reqVO.getUserId())
-                .eqIfPresent(AiMindMapDO::getPrompt, reqVO.getPrompt())
-                .betweenIfPresent(AiMindMapDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(AiMindMapDO::getId));
-    }
-
-}

+ 0 - 35
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/model/AiApiKeyMapper.java

@@ -1,35 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.mysql.model;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.apikey.AiApiKeyPageReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiApiKeyDO;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * AI API 密钥 Mapper
- *
- * @author 芋道源码
- */
-@Mapper
-public interface AiApiKeyMapper extends BaseMapperX<AiApiKeyDO> {
-
-    default PageResult<AiApiKeyDO> selectPage(AiApiKeyPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<AiApiKeyDO>()
-                .likeIfPresent(AiApiKeyDO::getName, reqVO.getName())
-                .eqIfPresent(AiApiKeyDO::getPlatform, reqVO.getPlatform())
-                .eqIfPresent(AiApiKeyDO::getStatus, reqVO.getStatus())
-                .orderByDesc(AiApiKeyDO::getId));
-    }
-
-    default AiApiKeyDO selectFirstByPlatformAndStatus(String platform, Integer status) {
-        return selectOne(new QueryWrapperX<AiApiKeyDO>()
-                .eq("platform", platform)
-                .eq("status", status)
-                .limitN(1)
-                .orderByAsc("id"));
-    }
-
-}

+ 0 - 43
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/model/AiChatModelMapper.java

@@ -1,43 +0,0 @@
-package cn.iocoder.yudao.module.ai.dal.mysql.model;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
-import cn.iocoder.yudao.module.ai.controller.admin.model.vo.chatModel.AiChatModelPageReqVO;
-import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * API 聊天模型 Mapper
- *
- * @author fansili
- */
-@Mapper
-public interface AiChatModelMapper extends BaseMapperX<AiChatModelDO> {
-
-    default AiChatModelDO selectFirstByStatus(Integer status) {
-        return selectOne(new QueryWrapperX<AiChatModelDO>()
-                .eq("status", status)
-                .limitN(1)
-                .orderByAsc("sort"));
-    }
-
-    default PageResult<AiChatModelDO> selectPage(AiChatModelPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<AiChatModelDO>()
-                .likeIfPresent(AiChatModelDO::getName, reqVO.getName())
-                .eqIfPresent(AiChatModelDO::getModel, reqVO.getModel())
-                .eqIfPresent(AiChatModelDO::getPlatform, reqVO.getPlatform())
-                .orderByAsc(AiChatModelDO::getSort));
-    }
-
-    default List<AiChatModelDO> selectList(Integer status) {
-        return selectList(new LambdaQueryWrapperX<AiChatModelDO>()
-                .eq(AiChatModelDO::getStatus, status)
-                .orderByAsc(AiChatModelDO::getSort));
-    }
-
-}

Some files were not shown because too many files changed in this diff