Browse Source

feat: 测试版本提交

ageerle 2 months ago
parent
commit
d2755f00bc
100 changed files with 1091 additions and 2255 deletions
  1. 7 1
      pom.xml
  2. 0 35
      ruoyi-admin/Dockerfile
  3. 0 129
      ruoyi-admin/pom.xml
  4. 0 184
      ruoyi-admin/src/main/java/org/ruoyi/controller/KnowledgeController.java
  5. 61 0
      ruoyi-modules-api/pom.xml
  6. 22 0
      ruoyi-modules-api/ruoyi-chat-api/pom.xml
  7. 2 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatAppStore.java
  8. 3 3
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatConfig.java
  9. 1 1
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatGpts.java
  10. 1 1
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatMessage.java
  11. 3 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatPlugin.java
  12. 3 3
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatToken.java
  13. 1 1
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatVisitorUsage.java
  14. 5 4
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatVoucher.java
  15. 4 3
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatAppStoreBo.java
  16. 3 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatConfigBo.java
  17. 2 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatGptsBo.java
  18. 3 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatMessageBo.java
  19. 8 6
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatPluginBo.java
  20. 3 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVisitorUsageBo.java
  21. 3 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVoucherBo.java
  22. 23 0
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/CacheListInfoVo.java
  23. 25 0
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/CaptchaVo.java
  24. 4 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatAppStoreVo.java
  25. 3 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatConfigVo.java
  26. 3 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatGptsVo.java
  27. 3 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatMessageVo.java
  28. 2 5
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatPluginVo.java
  29. 3 3
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatTokenVo.java
  30. 2 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVisitorUsageVo.java
  31. 2 3
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVoucherVo.java
  32. 16 0
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatAppStoreMapper.java
  33. 17 0
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatConfigMapper.java
  34. 16 0
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatGptsMapper.java
  35. 16 0
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatMessageMapper.java
  36. 16 0
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatPluginMapper.java
  37. 16 0
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatTokenMapper.java
  38. 16 0
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatVisitorUsageMapper.java
  39. 16 0
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatVoucherMapper.java
  40. 5 29
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatAppStoreService.java
  41. 3 3
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatConfigService.java
  42. 2 2
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatCostService.java
  43. 4 4
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatGptsService.java
  44. 3 3
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatMessageService.java
  45. 4 5
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatPluginService.java
  46. 3 3
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatTokenService.java
  47. 4 4
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVisitorUsageService.java
  48. 4 4
      ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVoucherService.java
  49. 1 1
      ruoyi-modules-api/ruoyi-chat-api/src/main/resources/mapper/ChatConfigMapper.xml
  50. 21 0
      ruoyi-modules-api/ruoyi-device-api/pom.xml
  51. 20 0
      ruoyi-modules-api/ruoyi-knowledge-api/pom.xml
  52. 20 0
      ruoyi-modules-api/ruoyi-system-api/pom.xml
  53. 21 0
      ruoyi-modules-api/ruoyi-weixin-api/pom.xml
  54. 0 3
      ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java
  55. 0 1
      ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/FaceController.java
  56. 0 1
      ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/LumaController.java
  57. 0 1
      ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java
  58. 0 1
      ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SunoController.java
  59. 0 1
      ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/VoiceController.java
  60. 21 0
      ruoyi-modules/ruoyi-device/pom.xml
  61. 4 0
      ruoyi-modules/ruoyi-system/pom.xml
  62. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/RuoYiAIApplication.java
  63. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/RuoYiAIServletInitializer.java
  64. 5 11
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/AuthController.java
  65. 7 6
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/CaptchaController.java
  66. 0 3
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatConfigController.java
  67. 0 3
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatGptsController.java
  68. 0 3
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatMessageController.java
  69. 0 3
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatPluginController.java
  70. 0 4
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatStoreController.java
  71. 0 3
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVisitorUsageController.java
  72. 0 3
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVoucherController.java
  73. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/IndexController.java
  74. 184 0
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/KnowledgeController.java
  75. 332 332
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java
  76. 81 81
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeChatController.java
  77. 4 2
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java
  78. 0 3
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/SSEEventSourceListener.java
  79. 0 2
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatAppStoreMapper.java
  80. 0 2
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java
  81. 0 2
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatGptsMapper.java
  82. 0 2
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatMessageMapper.java
  83. 0 2
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatPluginMapper.java
  84. 0 2
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatTokenMapper.java
  85. 0 2
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVisitorUsageMapper.java
  86. 0 2
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVoucherMapper.java
  87. 0 259
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatAppStoreImpl.java
  88. 0 159
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatConfigServiceImpl.java
  89. 0 161
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatCostServiceImpl.java
  90. 0 118
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatGptsServiceImpl.java
  91. 0 144
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatMessageServiceImpl.java
  92. 0 110
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatPluginServiceImpl.java
  93. 0 55
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatTokenServiceImpl.java
  94. 0 112
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatVisitorUsageServiceImpl.java
  95. 0 180
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatVoucherServiceImpl.java
  96. 0 1
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java
  97. 0 4
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java
  98. 1 4
      ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SseServiceImpl.java
  99. 0 0
      ruoyi-modules/ruoyi-system/src/main/resources/application-prod.yml
  100. 0 0
      ruoyi-modules/ruoyi-system/src/main/resources/application.yml

+ 7 - 1
pom.xml

@@ -344,10 +344,16 @@
     </dependencyManagement>
 
     <modules>
-        <module>ruoyi-admin</module>
         <module>ruoyi-common</module>
         <module>ruoyi-modules</module>
+        <module>ruoyi-modules-api</module>
+        <module>ruoyi-modules-api</module>
+        <module>ruoyi-modules-api/ruoyi-device-api</module>
+        <module>ruoyi-modules-api/ruoyi-weixin-api</module>
+        <module>ruoyi-modules/ruoyi-weixin</module>
+        <module>ruoyi-modules/ruoyi-device</module>
     </modules>
+
     <packaging>pom</packaging>
 
     <build>

+ 0 - 35
ruoyi-admin/Dockerfile

@@ -1,35 +0,0 @@
-#基础镜像
-FROM findepi/graalvm:java17-native
-
-# 设置环境变量
-ENV LANG C.UTF-8
-ENV LANGUAGE C.UTF-8
-ENV LC_ALL C.UTF-8
-ENV SERVER_PORT=6039
-
-MAINTAINER ageerle
-
-RUN mkdir -p /ruoyi/server/logs \
-    /ruoyi/server/temp \
-    /ruoyi/skywalking/agent
-
-
-#工作空间
-WORKDIR /ruoyi/server
-
-
-
-EXPOSE ${SERVER_PORT}
-
-ADD ./target/ruoyi-admin.jar ./app.jar
-
-
-ENTRYPOINT ["java", \
-            "-Djava.security.egd=file:/dev/./urandom", \
-            "-Dserver.port=${SERVER_PORT}", \
-            # 应用名称 如果想区分集群节点监控 改成不同的名称即可
-#            "-Dskywalking.agent.service_name=ruoyi-server", \
-#            "-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar", \
-            "-jar", "app.jar"]
-
-

+ 0 - 129
ruoyi-admin/pom.xml

@@ -1,129 +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>
-        <artifactId>ruoyi-ai</artifactId>
-        <groupId>org.ruoyi</groupId>
-        <version>${revision}</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-    <packaging>jar</packaging>
-    <artifactId>ruoyi-admin</artifactId>
-
-    <description>
-        web服务入口
-    </description>
-
-    <dependencies>
-
-        <!-- Mysql驱动包 -->
-        <dependency>
-            <groupId>com.mysql</groupId>
-            <artifactId>mysql-connector-j</artifactId>
-        </dependency>
-
-        <!-- Oracle -->
-        <dependency>
-            <groupId>com.oracle.database.jdbc</groupId>
-            <artifactId>ojdbc8</artifactId>
-        </dependency>
-
-        <!-- PostgreSql -->
-        <dependency>
-            <groupId>org.postgresql</groupId>
-            <artifactId>postgresql</artifactId>
-        </dependency>
-
-        <!-- SqlServer -->
-        <dependency>
-            <groupId>com.microsoft.sqlserver</groupId>
-            <artifactId>mssql-jdbc</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ruoyi</groupId>
-            <artifactId>ruoyi-common-doc</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ruoyi</groupId>
-            <artifactId>ruoyi-system</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ruoyi</groupId>
-            <artifactId>ruoyi-chat</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ruoyi</groupId>
-            <artifactId>ruoyi-knowledge</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ruoyi</groupId>
-            <artifactId>ruoyi-generator</artifactId>
-        </dependency>
-
-        <!--  demo模块  -->
-        <dependency>
-            <groupId>org.ruoyi</groupId>
-            <artifactId>ruoyi-demo</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <!-- 添加thumbnailator依赖 -->
-        <dependency>
-            <groupId>net.coobird</groupId>
-            <artifactId>thumbnailator</artifactId>
-            <version>0.4.11</version>
-        </dependency>
-        <dependency>
-            <groupId>io.github.ollama4j</groupId>
-            <artifactId>ollama4j</artifactId>
-            <version>1.0.79</version>
-            <scope>compile</scope>
-        </dependency>
-
-    </dependencies>
-
-    <build>
-        <finalName>${project.artifactId}</finalName>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <version>${spring-boot.version}</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>${maven-jar-plugin.version}</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>${maven-war-plugin.version}</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warName>${project.artifactId}</warName>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>

+ 0 - 184
ruoyi-admin/src/main/java/org/ruoyi/controller/KnowledgeController.java

@@ -1,184 +0,0 @@
-package org.ruoyi.controller;
-
-import cn.dev33.satoken.stp.StpUtil;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import lombok.RequiredArgsConstructor;
-import org.ruoyi.common.chat.domain.request.ChatRequest;
-import org.ruoyi.common.chat.entity.chat.Message;
-import org.ruoyi.common.core.domain.R;
-import org.ruoyi.common.core.validate.AddGroup;
-import org.ruoyi.common.excel.utils.ExcelUtil;
-import org.ruoyi.common.log.annotation.Log;
-import org.ruoyi.common.log.enums.BusinessType;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.common.satoken.utils.LoginHelper;
-import org.ruoyi.common.web.core.BaseController;
-import org.ruoyi.knowledge.chain.vectorstore.VectorStore;
-import org.ruoyi.knowledge.domain.bo.KnowledgeAttachBo;
-import org.ruoyi.knowledge.domain.bo.KnowledgeFragmentBo;
-import org.ruoyi.knowledge.domain.bo.KnowledgeInfoBo;
-import org.ruoyi.knowledge.domain.req.KnowledgeInfoUploadRequest;
-import org.ruoyi.knowledge.domain.vo.KnowledgeAttachVo;
-import org.ruoyi.knowledge.domain.vo.KnowledgeFragmentVo;
-import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo;
-import org.ruoyi.knowledge.service.EmbeddingService;
-import org.ruoyi.knowledge.service.IKnowledgeAttachService;
-import org.ruoyi.knowledge.service.IKnowledgeFragmentService;
-import org.ruoyi.knowledge.service.IKnowledgeInfoService;
-import org.ruoyi.system.service.ISseService;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
-
-import java.util.List;
-
-
-/**
- * 知识库
- *
- * @author Lion Li
- * @date 2024-10-21
- */
-@Validated
-@RequiredArgsConstructor
-@RestController
-@RequestMapping("/knowledge")
-public class KnowledgeController extends BaseController {
-
-    private final IKnowledgeInfoService knowledgeInfoService;
-
-    private final VectorStore vectorStore;
-
-    private final IKnowledgeAttachService attachService;
-
-    private final IKnowledgeFragmentService fragmentService;
-
-    private final EmbeddingService embeddingService;
-
-    private final ISseService sseService;
-
-    /**
-     * 知识库对话
-     */
-    @PostMapping("/send")
-    public SseEmitter send(@RequestBody @Valid ChatRequest chatRequest, HttpServletRequest request) {
-        List<Message> messages = chatRequest.getMessages();
-        // 获取知识库信息
-        Message message = messages.get(messages.size() - 1);
-        StringBuilder sb = new StringBuilder(message.getContent().toString());
-        List<String> nearestList;
-        List<Double> queryVector = embeddingService.getQueryVector(message.getContent().toString(), chatRequest.getKid());
-        nearestList = vectorStore.nearest(queryVector, chatRequest.getKid());
-        for (String prompt : nearestList) {
-            sb.append("\n####").append(prompt);
-        }
-        sb.append( (nearestList.size() > 0 ? "\n\n注意:回答问题时,须严格根据我给你的系统上下文内容原文进行回答,请不要自己发挥,回答时保持原来文本的段落层级" : ""));
-        message.setContent(sb.toString());
-        return sseService.sseChat(chatRequest, request);
-    }
-
-    /**
-     * 根据用户信息查询本地知识库
-     */
-    @GetMapping("/list")
-    public TableDataInfo<KnowledgeInfoVo> list(KnowledgeInfoBo bo, PageQuery pageQuery) {
-        if(!StpUtil.isLogin()){
-            return null;
-        }
-        bo.setUid(LoginHelper.getUserId());
-        return knowledgeInfoService.queryPageList(bo, pageQuery);
-    }
-
-    /**
-     * 新增知识库
-     */
-    @Log(title = "知识库", businessType = BusinessType.INSERT)
-    @PostMapping("/save")
-    public R<Void> save(@Validated(AddGroup.class) @RequestBody KnowledgeInfoBo bo) {
-        knowledgeInfoService.saveOne(bo);
-        return R.ok();
-    }
-
-    /**
-     * 删除知识库
-     */
-    @PostMapping("/remove/{id}")
-    public R<String> remove(@PathVariable String id){
-        knowledgeInfoService.removeKnowledge(id);
-        return R.ok("删除知识库成功!");
-    }
-
-    /**
-     * 修改知识库
-     */
-    @Log(title = "知识库", businessType = BusinessType.UPDATE)
-    @PostMapping("/edit")
-    public R<Void> edit( @RequestBody KnowledgeInfoBo bo) {
-        return toAjax(knowledgeInfoService.updateByBo(bo));
-    }
-
-    /**
-     * 导出知识库列表
-     */
-    @Log(title = "知识库", businessType = BusinessType.EXPORT)
-    @PostMapping("/export")
-    public void export(KnowledgeInfoBo bo, HttpServletResponse response) {
-        List<KnowledgeInfoVo> list = knowledgeInfoService.queryList(bo);
-        ExcelUtil.exportExcel(list, "知识库", KnowledgeInfoVo.class, response);
-    }
-
-    /**
-     * 查询知识附件信息
-     */
-    @GetMapping("/detail/{kid}")
-    public TableDataInfo<KnowledgeAttachVo> attach(KnowledgeAttachBo bo, PageQuery pageQuery,@PathVariable String kid){
-        bo.setKid(kid);
-        return attachService.queryPageList(bo, pageQuery);
-    }
-
-    /**
-     * 上传知识库附件
-     */
-    @PostMapping(value = "/attach/upload")
-    public R<String> upload(KnowledgeInfoUploadRequest request){
-        knowledgeInfoService.upload(request);
-        return R.ok("上传知识库附件成功!");
-    }
-
-    /**
-     * 获取知识库附件详细信息
-     *
-     * @param id 主键
-     */
-    @GetMapping("attach/info/{id}")
-    public R<KnowledgeAttachVo> getAttachInfo(@NotNull(message = "主键不能为空")
-                                              @PathVariable Long id) {
-        return R.ok(attachService.queryById(id));
-    }
-
-    /**
-     * 删除知识库附件
-     *
-     */
-    @PostMapping("attach/remove/{docId}")
-    public R<Void> removeAttach(@NotEmpty(message = "主键不能为空") @PathVariable String docId) {
-        attachService.removeKnowledgeAttach(docId);
-        return R.ok();
-    }
-
-
-    /**
-     * 查询知识片段
-     */
-    @GetMapping("/fragment/list/{docId}")
-    public TableDataInfo<KnowledgeFragmentVo> fragmentList(KnowledgeFragmentBo bo, PageQuery pageQuery, @PathVariable String docId) {
-        bo.setDocId(docId);
-        return fragmentService.queryPageList(bo, pageQuery);
-    }
-
-}

+ 61 - 0
ruoyi-modules-api/pom.xml

@@ -0,0 +1,61 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.ruoyi</groupId>
+        <artifactId>ruoyi-ai</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>ruoyi-modules-api</artifactId>
+    <packaging>pom</packaging>
+    <modules>
+        <module>ruoyi-system-api</module>
+        <module>ruoyi-chat-api</module>
+        <module>ruoyi-knowledge-api</module>
+    </modules>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+
+        <!-- 系统核心模块 -->
+        <dependency>
+            <groupId>org.ruoyi</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+
+
+        <!-- mybaits基础模块 -->
+        <dependency>
+            <groupId>org.ruoyi</groupId>
+            <artifactId>ruoyi-common-mybatis</artifactId>
+        </dependency>
+
+
+        <!-- 脱敏模块 -->
+        <dependency>
+            <groupId>org.ruoyi</groupId>
+            <artifactId>ruoyi-common-sensitive</artifactId>
+        </dependency>
+
+
+        <!-- excel模块-->
+        <dependency>
+            <groupId>org.ruoyi</groupId>
+            <artifactId>ruoyi-common-excel</artifactId>
+        </dependency>
+
+
+    </dependencies>
+
+
+
+
+</project>

+ 22 - 0
ruoyi-modules-api/ruoyi-chat-api/pom.xml

@@ -0,0 +1,22 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.ruoyi</groupId>
+        <artifactId>ruoyi-modules-api</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>ruoyi-chat-api</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+
+
+</project>

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatAppStore.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatAppStore.java

@@ -1,10 +1,10 @@
-package org.ruoyi.system.domain;
+package org.ruoyi.domain;
 
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import org.ruoyi.common.mybatis.core.domain.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.ruoyi.common.mybatis.core.domain.BaseEntity;
 
 import java.io.Serial;
 

+ 3 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatConfig.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatConfig.java

@@ -1,13 +1,13 @@
-package org.ruoyi.system.domain;
+package org.ruoyi.domain;
 
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.ruoyi.common.mybatis.core.domain.BaseEntity;
 import org.ruoyi.common.sensitive.annotation.Sensitive;
 import org.ruoyi.common.sensitive.core.SensitiveStrategy;
-import org.ruoyi.common.tenant.core.TenantEntity;
 
 import java.io.Serial;
 
@@ -20,7 +20,7 @@ import java.io.Serial;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @TableName("chat_config")
-public class ChatConfig extends TenantEntity {
+public class ChatConfig extends BaseEntity {
 
     @Serial
     private static final long serialVersionUID = 1L;

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatGpts.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatGpts.java

@@ -1,4 +1,4 @@
-package org.ruoyi.system.domain;
+package org.ruoyi.domain;
 
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatMessage.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatMessage.java

@@ -1,4 +1,4 @@
-package org.ruoyi.system.domain;
+package org.ruoyi.domain;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import jakarta.validation.constraints.NotBlank;

+ 3 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatPlugin.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatPlugin.java

@@ -1,6 +1,7 @@
-package org.ruoyi.system.domain;
+package org.ruoyi.domain;
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.ruoyi.common.mybatis.core.domain.BaseEntity;

+ 3 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatToken.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatToken.java

@@ -1,11 +1,11 @@
-package org.ruoyi.system.domain;
+package org.ruoyi.domain;
 
 import com.baomidou.mybatisplus.annotation.TableName;
-import org.ruoyi.common.core.validate.AddGroup;
-import org.ruoyi.common.core.validate.EditGroup;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
+import org.ruoyi.common.core.validate.AddGroup;
+import org.ruoyi.common.core.validate.EditGroup;
 
 import java.io.Serial;
 import java.io.Serializable;

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatVisitorUsage.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatVisitorUsage.java

@@ -1,4 +1,4 @@
-package org.ruoyi.system.domain;
+package org.ruoyi.domain;
 
 
 import com.baomidou.mybatisplus.annotation.TableId;

+ 5 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatVoucher.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatVoucher.java

@@ -1,12 +1,13 @@
-package org.ruoyi.system.domain;
+package org.ruoyi.domain;
 
-import com.baomidou.mybatisplus.annotation.*;
-import org.ruoyi.common.mybatis.core.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import java.math.BigDecimal;
+import org.ruoyi.common.mybatis.core.domain.BaseEntity;
 
 import java.io.Serial;
+import java.math.BigDecimal;
 
 /**
  * 用户兑换记录对象 chat_voucher

+ 4 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatAppStoreBo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatAppStoreBo.java

@@ -1,12 +1,13 @@
-package org.ruoyi.system.domain.bo;
+package org.ruoyi.domain.bo;
 
-import org.ruoyi.common.mybatis.core.domain.BaseEntity;
-import org.ruoyi.system.domain.ChatAppStore;
 import io.github.linpeilie.annotations.AutoMapper;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.ruoyi.common.mybatis.core.domain.BaseEntity;
+import org.ruoyi.domain.ChatAppStore;
+
 
 /**
  * 应用市场业务对象 voice_role

+ 3 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatConfigBo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatConfigBo.java

@@ -1,4 +1,4 @@
-package org.ruoyi.system.domain.bo;
+package org.ruoyi.domain.bo;
 
 import io.github.linpeilie.annotations.AutoMapper;
 import jakarta.validation.constraints.NotBlank;
@@ -10,7 +10,8 @@ import org.ruoyi.common.core.validate.EditGroup;
 import org.ruoyi.common.mybatis.core.domain.BaseEntity;
 import org.ruoyi.common.sensitive.annotation.Sensitive;
 import org.ruoyi.common.sensitive.core.SensitiveStrategy;
-import org.ruoyi.system.domain.ChatConfig;
+import org.ruoyi.domain.ChatConfig;
+
 
 /**
  * 对话配置信息

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatGptsBo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatGptsBo.java

@@ -1,4 +1,4 @@
-package org.ruoyi.system.domain.bo;
+package org.ruoyi.domain.bo;
 
 import io.github.linpeilie.annotations.AutoMapper;
 import jakarta.validation.constraints.NotBlank;
@@ -8,7 +8,7 @@ import lombok.EqualsAndHashCode;
 import org.ruoyi.common.core.validate.AddGroup;
 import org.ruoyi.common.core.validate.EditGroup;
 import org.ruoyi.common.mybatis.core.domain.BaseEntity;
-import org.ruoyi.system.domain.ChatGpts;
+import org.ruoyi.domain.ChatGpts;
 
 /**
  * gpts管理业务对象 chat_gpts

+ 3 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatMessageBo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatMessageBo.java

@@ -1,4 +1,4 @@
-package org.ruoyi.system.domain.bo;
+package org.ruoyi.domain.bo;
 
 import io.github.linpeilie.annotations.AutoMapper;
 import jakarta.validation.constraints.NotBlank;
@@ -8,7 +8,8 @@ import lombok.EqualsAndHashCode;
 import org.ruoyi.common.core.validate.AddGroup;
 import org.ruoyi.common.core.validate.EditGroup;
 import org.ruoyi.common.mybatis.core.domain.BaseEntity;
-import org.ruoyi.system.domain.ChatMessage;
+import org.ruoyi.domain.ChatMessage;
+
 
 /**
  * 聊天消息业务对象 chat_message

+ 8 - 6
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatPluginBo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatPluginBo.java

@@ -1,13 +1,15 @@
-package org.ruoyi.system.domain.bo;
+package org.ruoyi.domain.bo;
 
-import org.ruoyi.common.core.validate.AddGroup;
-import org.ruoyi.common.core.validate.EditGroup;
-import org.ruoyi.system.domain.ChatPlugin;
-import org.ruoyi.common.mybatis.core.domain.BaseEntity;
 import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import jakarta.validation.constraints.*;
+import org.ruoyi.common.core.validate.AddGroup;
+import org.ruoyi.common.core.validate.EditGroup;
+import org.ruoyi.common.mybatis.core.domain.BaseEntity;
+import org.ruoyi.domain.ChatPlugin;
+
 
 /**
  * 插件管理业务对象 chat_plugin

+ 3 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatVisitorUsageBo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVisitorUsageBo.java

@@ -1,4 +1,4 @@
-package org.ruoyi.system.domain.bo;
+package org.ruoyi.domain.bo;
 
 import io.github.linpeilie.annotations.AutoMapper;
 import jakarta.validation.constraints.NotBlank;
@@ -8,7 +8,8 @@ import lombok.EqualsAndHashCode;
 import org.ruoyi.common.core.validate.AddGroup;
 import org.ruoyi.common.core.validate.EditGroup;
 import org.ruoyi.common.mybatis.core.domain.BaseEntity;
-import org.ruoyi.system.domain.ChatVisitorUsage;
+import org.ruoyi.domain.ChatVisitorUsage;
+
 
 /**
  * 访客管理业务对象 chat_visitor_usage

+ 3 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatVoucherBo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVoucherBo.java

@@ -1,4 +1,4 @@
-package org.ruoyi.system.domain.bo;
+package org.ruoyi.domain.bo;
 
 import io.github.linpeilie.annotations.AutoMapper;
 import jakarta.validation.constraints.NotNull;
@@ -7,7 +7,8 @@ import lombok.EqualsAndHashCode;
 import org.ruoyi.common.core.validate.AddGroup;
 import org.ruoyi.common.core.validate.EditGroup;
 import org.ruoyi.common.mybatis.core.domain.BaseEntity;
-import org.ruoyi.system.domain.ChatVoucher;
+import org.ruoyi.domain.ChatVoucher;
+
 
 import java.math.BigDecimal;
 

+ 23 - 0
ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/CacheListInfoVo.java

@@ -0,0 +1,23 @@
+package org.ruoyi.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * 缓存监控列表信息
+ *
+ * @author Michelle.Chung
+ */
+@Data
+public class CacheListInfoVo {
+
+    private Properties info;
+
+    private Long dbSize;
+
+    private List<Map<String, String>> commandStats;
+
+}

+ 25 - 0
ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/CaptchaVo.java

@@ -0,0 +1,25 @@
+package org.ruoyi.domain.vo;
+
+import lombok.Data;
+
+/**
+ * 验证码信息
+ *
+ * @author Michelle.Chung
+ */
+@Data
+public class CaptchaVo {
+
+    /**
+     * 是否开启验证码
+     */
+    private Boolean captchaEnabled = true;
+
+    private String uuid;
+
+    /**
+     * 验证码图片
+     */
+    private String img;
+
+}

+ 4 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatAppStoreVo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatAppStoreVo.java

@@ -1,10 +1,12 @@
-package org.ruoyi.system.domain.vo;
+package org.ruoyi.domain.vo;
+
 
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
-import org.ruoyi.system.domain.ChatAppStore;
+import org.ruoyi.domain.ChatAppStore;
+
 
 import java.io.Serial;
 import java.io.Serializable;

+ 3 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatConfigVo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatConfigVo.java

@@ -1,4 +1,4 @@
-package org.ruoyi.system.domain.vo;
+package org.ruoyi.domain.vo;
 
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
@@ -6,7 +6,8 @@ import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import org.ruoyi.common.sensitive.annotation.Sensitive;
 import org.ruoyi.common.sensitive.core.SensitiveStrategy;
-import org.ruoyi.system.domain.ChatConfig;
+import org.ruoyi.domain.ChatConfig;
+
 
 import java.io.Serial;
 import java.io.Serializable;

+ 3 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatGptsVo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatGptsVo.java

@@ -1,10 +1,11 @@
-package org.ruoyi.system.domain.vo;
+package org.ruoyi.domain.vo;
 
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
-import org.ruoyi.system.domain.ChatGpts;
+import org.ruoyi.domain.ChatGpts;
+
 
 import java.io.Serial;
 import java.io.Serializable;

+ 3 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatMessageVo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatMessageVo.java

@@ -1,4 +1,4 @@
-package org.ruoyi.system.domain.vo;
+package org.ruoyi.domain.vo;
 
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import io.github.linpeilie.annotations.AutoMapper;
@@ -7,7 +7,8 @@ import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import org.ruoyi.common.core.validate.AddGroup;
 import org.ruoyi.common.core.validate.EditGroup;
-import org.ruoyi.system.domain.ChatMessage;
+import org.ruoyi.domain.ChatMessage;
+
 
 import java.io.Serial;
 import java.io.Serializable;

+ 2 - 5
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatPluginVo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatPluginVo.java

@@ -1,16 +1,13 @@
-package org.ruoyi.system.domain.vo;
+package org.ruoyi.domain.vo;
 
-import org.ruoyi.system.domain.ChatPlugin;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
-
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
+import org.ruoyi.domain.ChatPlugin;
 
 import java.io.Serial;
 import java.io.Serializable;
-import java.util.Date;
-
 
 
 /**

+ 3 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatTokenVo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatTokenVo.java

@@ -1,10 +1,10 @@
-package org.ruoyi.system.domain.vo;
+package org.ruoyi.domain.vo;
 
-import org.ruoyi.common.core.validate.AddGroup;
-import org.ruoyi.common.core.validate.EditGroup;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
+import org.ruoyi.common.core.validate.AddGroup;
+import org.ruoyi.common.core.validate.EditGroup;
 
 import java.io.Serializable;
 

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatVisitorUsageVo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVisitorUsageVo.java

@@ -1,10 +1,10 @@
-package org.ruoyi.system.domain.vo;
+package org.ruoyi.domain.vo;
 
-import org.ruoyi.system.domain.ChatVisitorUsage;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
+import org.ruoyi.domain.ChatVisitorUsage;
 
 import java.io.Serial;
 import java.io.Serializable;

+ 2 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatVoucherVo.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVoucherVo.java

@@ -1,11 +1,10 @@
-package org.ruoyi.system.domain.vo;
+package org.ruoyi.domain.vo;
 
-import org.ruoyi.system.domain.ChatVoucher;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
-
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
+import org.ruoyi.domain.ChatVoucher;
 
 import java.io.Serial;
 import java.io.Serializable;

+ 16 - 0
ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatAppStoreMapper.java

@@ -0,0 +1,16 @@
+package org.ruoyi.mapper;
+
+import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
+import org.ruoyi.domain.ChatAppStore;
+import org.ruoyi.domain.vo.ChatAppStoreVo;
+
+
+/**
+ * 应用市场Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-03-19
+ */
+public interface ChatAppStoreMapper extends BaseMapperPlus<ChatAppStore, ChatAppStoreVo> {
+
+}

+ 17 - 0
ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatConfigMapper.java

@@ -0,0 +1,17 @@
+package org.ruoyi.mapper;
+
+import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
+import org.ruoyi.domain.ChatConfig;
+import org.ruoyi.domain.vo.ChatConfigVo;
+
+
+/**
+ * 对话配置信息Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-04-13
+ */
+public interface ChatConfigMapper extends BaseMapperPlus<ChatConfig, ChatConfigVo> {
+
+
+}

+ 16 - 0
ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatGptsMapper.java

@@ -0,0 +1,16 @@
+package org.ruoyi.mapper;
+
+import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
+import org.ruoyi.domain.ChatGpts;
+import org.ruoyi.domain.vo.ChatGptsVo;
+
+
+/**
+ * gpts管理Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-07-09
+ */
+public interface ChatGptsMapper extends BaseMapperPlus<ChatGpts, ChatGptsVo> {
+
+}

+ 16 - 0
ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatMessageMapper.java

@@ -0,0 +1,16 @@
+package org.ruoyi.mapper;
+
+import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
+import org.ruoyi.domain.ChatMessage;
+import org.ruoyi.domain.vo.ChatMessageVo;
+
+
+/**
+ * 聊天消息Mapper接口
+ *
+ * @author Lion Li
+ * @date 2023-11-26
+ */
+public interface ChatMessageMapper extends BaseMapperPlus<ChatMessage, ChatMessageVo> {
+
+}

+ 16 - 0
ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatPluginMapper.java

@@ -0,0 +1,16 @@
+package org.ruoyi.mapper;
+
+import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
+import org.ruoyi.domain.ChatPlugin;
+import org.ruoyi.domain.vo.ChatPluginVo;
+
+
+/**
+ * 插件管理Mapper接口
+ *
+ * @author ageerle
+ * @date 2025-03-30
+ */
+public interface ChatPluginMapper extends BaseMapperPlus<ChatPlugin, ChatPluginVo> {
+
+}

+ 16 - 0
ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatTokenMapper.java

@@ -0,0 +1,16 @@
+package org.ruoyi.mapper;
+
+import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
+import org.ruoyi.domain.ChatToken;
+import org.ruoyi.domain.vo.ChatTokenVo;
+
+
+/**
+ * 聊天消息Mapper接口
+ *
+ * @author Lion Li
+ * @date 2023-11-26
+ */
+public interface ChatTokenMapper extends BaseMapperPlus<ChatToken, ChatTokenVo> {
+
+}

+ 16 - 0
ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatVisitorUsageMapper.java

@@ -0,0 +1,16 @@
+package org.ruoyi.mapper;
+
+import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
+import org.ruoyi.domain.ChatVisitorUsage;
+import org.ruoyi.domain.vo.ChatVisitorUsageVo;
+
+
+/**
+ * 访客管理Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-07-14
+ */
+public interface ChatVisitorUsageMapper extends BaseMapperPlus<ChatVisitorUsage, ChatVisitorUsageVo> {
+
+}

+ 16 - 0
ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatVoucherMapper.java

@@ -0,0 +1,16 @@
+package org.ruoyi.mapper;
+
+import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
+import org.ruoyi.domain.ChatVoucher;
+import org.ruoyi.domain.vo.ChatVoucherVo;
+
+
+/**
+ * 用户兑换记录Mapper接口
+ *
+ * @author Lion Li
+ * @date 2024-05-03
+ */
+public interface ChatVoucherMapper extends BaseMapperPlus<ChatVoucher, ChatVoucherVo> {
+
+}

+ 5 - 29
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatAppStoreService.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatAppStoreService.java

@@ -1,14 +1,10 @@
-package org.ruoyi.system.service;
+package org.ruoyi.service;
 
-import org.ruoyi.system.domain.vo.ChatAppStoreVo;
-import org.ruoyi.system.domain.bo.ChatAppStoreBo;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
 import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.system.request.RoleListDto;
-import org.ruoyi.system.request.RoleRequest;
-import org.ruoyi.system.request.SimpleGenerateRequest;
-import org.ruoyi.system.response.SimpleGenerateDataResponse;
-import org.ruoyi.system.response.rolelist.ChatAppStoreVO;
+import org.ruoyi.common.mybatis.core.page.TableDataInfo;
+import org.ruoyi.domain.bo.ChatAppStoreBo;
+import org.ruoyi.domain.vo.ChatAppStoreVo;
+
 
 import java.util.Collection;
 import java.util.List;
@@ -36,15 +32,6 @@ public interface IChatAppStoreService {
      */
     List<ChatAppStoreVo> queryList(ChatAppStoreBo bo);
 
-    /**
-     * 新增应用市场
-     */
-    Boolean insertByBo(RoleRequest roleRequest);
-
-    /**
-     * 生成音频
-     */
-    SimpleGenerateDataResponse simpleGenerate(SimpleGenerateRequest simpleGenerateRequest);
 
     /**
      * 修改应用市场
@@ -56,16 +43,5 @@ public interface IChatAppStoreService {
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
-    /**
-     * 查询市场角色
-     *
-     * @return 角色列表
-     */
-    List<ChatAppStoreVO> roleList();
 
-    /**
-     * 收藏市场角色
-     *
-     */
-    void copyRole(RoleListDto roleListDto);
 }

+ 3 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatConfigService.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatConfigService.java

@@ -1,9 +1,9 @@
-package org.ruoyi.system.service;
+package org.ruoyi.service;
 
 import org.ruoyi.common.mybatis.core.page.PageQuery;
 import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.bo.ChatConfigBo;
-import org.ruoyi.system.domain.vo.ChatConfigVo;
+import org.ruoyi.domain.bo.ChatConfigBo;
+import org.ruoyi.domain.vo.ChatConfigVo;
 
 import java.util.Collection;
 import java.util.List;

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatCostService.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatCostService.java

@@ -1,6 +1,6 @@
-package org.ruoyi.system.service;
+package org.ruoyi.service;
 
-import org.ruoyi.system.domain.bo.ChatMessageBo;
+import org.ruoyi.domain.bo.ChatMessageBo;
 
 public interface IChatCostService {
 

+ 4 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatGptsService.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatGptsService.java

@@ -1,9 +1,9 @@
-package org.ruoyi.system.service;
+package org.ruoyi.service;
 
-import org.ruoyi.system.domain.vo.ChatGptsVo;
-import org.ruoyi.system.domain.bo.ChatGptsBo;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
 import org.ruoyi.common.mybatis.core.page.PageQuery;
+import org.ruoyi.common.mybatis.core.page.TableDataInfo;
+import org.ruoyi.domain.bo.ChatGptsBo;
+import org.ruoyi.domain.vo.ChatGptsVo;
 
 import java.util.Collection;
 import java.util.List;

+ 3 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatMessageService.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatMessageService.java

@@ -1,9 +1,9 @@
-package org.ruoyi.system.service;
+package org.ruoyi.service;
 
 import org.ruoyi.common.mybatis.core.page.PageQuery;
 import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.bo.ChatMessageBo;
-import org.ruoyi.system.domain.vo.ChatMessageVo;
+import org.ruoyi.domain.bo.ChatMessageBo;
+import org.ruoyi.domain.vo.ChatMessageVo;
 
 import java.util.Collection;
 import java.util.List;

+ 4 - 5
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatPluginService.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatPluginService.java

@@ -1,10 +1,9 @@
-package org.ruoyi.system.service;
+package org.ruoyi.service;
 
-import org.ruoyi.system.domain.ChatPlugin;
-import org.ruoyi.system.domain.vo.ChatPluginVo;
-import org.ruoyi.system.domain.bo.ChatPluginBo;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
 import org.ruoyi.common.mybatis.core.page.PageQuery;
+import org.ruoyi.common.mybatis.core.page.TableDataInfo;
+import org.ruoyi.domain.bo.ChatPluginBo;
+import org.ruoyi.domain.vo.ChatPluginVo;
 
 import java.util.Collection;
 import java.util.List;

+ 3 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatTokenService.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatTokenService.java

@@ -1,6 +1,6 @@
-package org.ruoyi.system.service;
+package org.ruoyi.service;
 
-import org.ruoyi.system.domain.ChatToken;
+import org.ruoyi.domain.ChatToken;
 
 /**
  * 聊天消息Service接口
@@ -13,7 +13,7 @@ public interface IChatTokenService {
     /**
      * 查询用户token
      */
-    ChatToken queryByUserId(Long userId,String modelName);
+    ChatToken queryByUserId(Long userId, String modelName);
 
     /**
      * 清空用户token

+ 4 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatVisitorUsageService.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVisitorUsageService.java

@@ -1,9 +1,9 @@
-package org.ruoyi.system.service;
+package org.ruoyi.service;
 
-import org.ruoyi.system.domain.vo.ChatVisitorUsageVo;
-import org.ruoyi.system.domain.bo.ChatVisitorUsageBo;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
 import org.ruoyi.common.mybatis.core.page.PageQuery;
+import org.ruoyi.common.mybatis.core.page.TableDataInfo;
+import org.ruoyi.domain.bo.ChatVisitorUsageBo;
+import org.ruoyi.domain.vo.ChatVisitorUsageVo;
 
 import java.util.Collection;
 import java.util.List;

+ 4 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatVoucherService.java → ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVoucherService.java

@@ -1,9 +1,9 @@
-package org.ruoyi.system.service;
+package org.ruoyi.service;
 
-import org.ruoyi.system.domain.vo.ChatVoucherVo;
-import org.ruoyi.system.domain.bo.ChatVoucherBo;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
 import org.ruoyi.common.mybatis.core.page.PageQuery;
+import org.ruoyi.common.mybatis.core.page.TableDataInfo;
+import org.ruoyi.domain.bo.ChatVoucherBo;
+import org.ruoyi.domain.vo.ChatVoucherVo;
 
 import java.util.Collection;
 import java.util.List;

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatConfigMapper.xml → ruoyi-modules-api/ruoyi-chat-api/src/main/resources/mapper/ChatConfigMapper.xml

@@ -2,6 +2,6 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.ruoyi.system.mapper.ChatConfigMapper">
+<mapper namespace="org.ruoyi.mapper.ChatConfigMapper">
 
 </mapper>

+ 21 - 0
ruoyi-modules-api/ruoyi-device-api/pom.xml

@@ -0,0 +1,21 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.ruoyi</groupId>
+        <artifactId>ruoyi-ai</artifactId>
+        <version>1.0.0</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>ruoyi-device-api</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>

+ 20 - 0
ruoyi-modules-api/ruoyi-knowledge-api/pom.xml

@@ -0,0 +1,20 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.ruoyi</groupId>
+        <artifactId>ruoyi-modules-api</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>ruoyi-knowledge-api</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>

+ 20 - 0
ruoyi-modules-api/ruoyi-system-api/pom.xml

@@ -0,0 +1,20 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.ruoyi</groupId>
+        <artifactId>ruoyi-modules-api</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>ruoyi-system-api</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>

+ 21 - 0
ruoyi-modules-api/ruoyi-weixin-api/pom.xml

@@ -0,0 +1,21 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.ruoyi</groupId>
+        <artifactId>ruoyi-ai</artifactId>
+        <version>1.0.0</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>ruoyi-weixin-api</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>

+ 0 - 3
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java

@@ -17,10 +17,7 @@ import org.ruoyi.common.core.exception.base.BaseException;
 import org.ruoyi.common.mybatis.core.page.PageQuery;
 import org.ruoyi.common.mybatis.core.page.TableDataInfo;
 import org.ruoyi.common.satoken.utils.LoginHelper;
-import org.ruoyi.system.domain.bo.ChatMessageBo;
 import org.ruoyi.system.domain.request.translation.TranslationRequest;
-import org.ruoyi.system.domain.vo.ChatMessageVo;
-import org.ruoyi.system.service.IChatMessageService;
 import org.ruoyi.system.service.ISseService;
 import org.springframework.core.io.Resource;
 import org.springframework.http.ResponseEntity;

+ 0 - 1
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/FaceController.java

@@ -9,7 +9,6 @@ import okhttp3.Request;
 import org.apache.commons.lang3.math.NumberUtils;
 import org.ruoyi.chat.domain.InsightFace;
 import org.ruoyi.chat.util.MjOkHttpUtil;
-import org.ruoyi.system.service.IChatCostService;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;

+ 0 - 1
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/LumaController.java

@@ -9,7 +9,6 @@ import org.apache.commons.lang3.math.NumberUtils;
 import org.ruoyi.common.core.utils.OkHttpUtil;
 import org.ruoyi.system.cofing.OkHttpConfig;
 import org.ruoyi.system.domain.GenerateLuma;
-import org.ruoyi.system.service.IChatCostService;
 import org.springframework.web.bind.annotation.*;
 
 /**

+ 0 - 1
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java

@@ -10,7 +10,6 @@ import org.apache.commons.lang3.math.NumberUtils;
 import org.ruoyi.chat.dto.*;
 import org.ruoyi.chat.enums.ActionType;
 import org.ruoyi.chat.util.MjOkHttpUtil;
-import org.ruoyi.system.service.IChatCostService;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;

+ 0 - 1
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SunoController.java

@@ -10,7 +10,6 @@ import org.ruoyi.common.core.utils.OkHttpUtil;
 import org.ruoyi.system.cofing.OkHttpConfig;
 import org.ruoyi.system.domain.GenerateLyric;
 import org.ruoyi.system.domain.GenerateSuno;
-import org.ruoyi.system.service.IChatCostService;
 import org.springframework.web.bind.annotation.*;
 
 @RestController

+ 0 - 1
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/VoiceController.java

@@ -7,7 +7,6 @@ import org.ruoyi.system.request.RoleListDto;
 import org.ruoyi.system.request.SimpleGenerateRequest;
 import org.ruoyi.system.response.SimpleGenerateDataResponse;
 import org.ruoyi.system.response.rolelist.ChatAppStoreVO;
-import org.ruoyi.system.service.IChatAppStoreService;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;

+ 21 - 0
ruoyi-modules/ruoyi-device/pom.xml

@@ -0,0 +1,21 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.ruoyi</groupId>
+        <artifactId>ruoyi-ai</artifactId>
+        <version>1.0.0</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>ruoyi-device</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>

+ 4 - 0
ruoyi-modules/ruoyi-system/pom.xml

@@ -124,6 +124,10 @@
             <version>1.0.79</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.ruoyi</groupId>
+            <artifactId>ruoyi-common-mail</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 1 - 1
ruoyi-admin/src/main/java/org/ruoyi/RuoYiAIApplication.java → ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/RuoYiAIApplication.java

@@ -1,4 +1,4 @@
-package org.ruoyi;
+package org.ruoyi.system;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;

+ 1 - 1
ruoyi-admin/src/main/java/org/ruoyi/RuoYiAIServletInitializer.java → ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/RuoYiAIServletInitializer.java

@@ -1,4 +1,4 @@
-package org.ruoyi;
+package org.ruoyi.system;
 
 import org.springframework.boot.builder.SpringApplicationBuilder;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

+ 5 - 11
ruoyi-admin/src/main/java/org/ruoyi/controller/AuthController.java → ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/AuthController.java

@@ -1,16 +1,14 @@
-package org.ruoyi.controller;
+package org.ruoyi.system.controller.system;
 
 import cn.dev33.satoken.annotation.SaIgnore;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.json.JSONUtil;
+import jakarta.servlet.http.HttpServletRequest;
+import lombok.RequiredArgsConstructor;
 import me.chanjar.weixin.common.error.WxErrorException;
 import org.ruoyi.common.core.constant.Constants;
 import org.ruoyi.common.core.domain.R;
-import org.ruoyi.common.core.domain.model.EmailLoginBody;
-import org.ruoyi.common.core.domain.model.LoginBody;
-import org.ruoyi.common.core.domain.model.RegisterBody;
-import org.ruoyi.common.core.domain.model.SmsLoginBody;
-import org.ruoyi.common.core.domain.model.VisitorLoginBody;
+import org.ruoyi.common.core.domain.model.*;
 import org.ruoyi.common.core.utils.MapstructUtils;
 import org.ruoyi.common.core.utils.StreamUtils;
 import org.ruoyi.common.core.utils.StringUtils;
@@ -18,16 +16,12 @@ import org.ruoyi.common.satoken.utils.LoginHelper;
 import org.ruoyi.common.tenant.helper.TenantHelper;
 import org.ruoyi.system.domain.bo.SysTenantBo;
 import org.ruoyi.system.domain.vo.LoginTenantVo;
+import org.ruoyi.system.domain.vo.LoginVo;
 import org.ruoyi.system.domain.vo.SysTenantVo;
 import org.ruoyi.system.domain.vo.TenantListVo;
 import org.ruoyi.system.service.ISysTenantService;
-
 import org.ruoyi.system.service.SysLoginService;
 import org.ruoyi.system.service.SysRegisterService;
-import org.ruoyi.system.domain.vo.LoginVo;
-
-import jakarta.servlet.http.HttpServletRequest;
-import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 

+ 7 - 6
ruoyi-admin/src/main/java/org/ruoyi/controller/CaptchaController.java → ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/CaptchaController.java

@@ -1,10 +1,14 @@
-package org.ruoyi.controller;
+package org.ruoyi.system.controller.system;
 
 import cn.dev33.satoken.annotation.SaIgnore;
 import cn.hutool.captcha.AbstractCaptcha;
 import cn.hutool.captcha.generator.CodeGenerator;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.RandomUtil;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotBlank;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.ruoyi.common.core.constant.Constants;
 import org.ruoyi.common.core.constant.GlobalConstants;
 import org.ruoyi.common.core.domain.R;
@@ -22,10 +26,6 @@ import org.ruoyi.common.web.config.properties.CaptchaProperties;
 import org.ruoyi.common.web.enums.CaptchaType;
 import org.ruoyi.system.domain.request.EmailRequest;
 import org.ruoyi.system.domain.vo.CaptchaVo;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotBlank;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
 import org.springframework.expression.Expression;
 import org.springframework.expression.ExpressionParser;
 import org.springframework.expression.spel.standard.SpelExpressionParser;
@@ -36,7 +36,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.time.Duration;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 验证码操作处理

+ 0 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatConfigController.java

@@ -8,9 +8,6 @@ import org.ruoyi.common.core.domain.R;
 import org.ruoyi.common.core.service.ConfigService;
 import org.ruoyi.common.core.validate.EditGroup;
 import org.ruoyi.common.web.core.BaseController;
-import org.ruoyi.system.domain.bo.ChatConfigBo;
-import org.ruoyi.system.domain.vo.ChatConfigVo;
-import org.ruoyi.system.service.IChatConfigService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 

+ 0 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatGptsController.java

@@ -15,9 +15,6 @@ import org.ruoyi.common.log.enums.BusinessType;
 import org.ruoyi.common.mybatis.core.page.PageQuery;
 import org.ruoyi.common.mybatis.core.page.TableDataInfo;
 import org.ruoyi.common.web.core.BaseController;
-import org.ruoyi.system.domain.bo.ChatGptsBo;
-import org.ruoyi.system.domain.vo.ChatGptsVo;
-import org.ruoyi.system.service.IChatGptsService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 

+ 0 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatMessageController.java

@@ -16,9 +16,6 @@ import org.ruoyi.common.mybatis.core.page.PageQuery;
 import org.ruoyi.common.mybatis.core.page.TableDataInfo;
 import org.ruoyi.common.satoken.utils.LoginHelper;
 import org.ruoyi.common.web.core.BaseController;
-import org.ruoyi.system.domain.bo.ChatMessageBo;
-import org.ruoyi.system.domain.vo.ChatMessageVo;
-import org.ruoyi.system.service.IChatMessageService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 

+ 0 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatPluginController.java

@@ -17,9 +17,6 @@ import org.ruoyi.common.core.domain.R;
 import org.ruoyi.common.core.validate.AddGroup;
 import org.ruoyi.common.core.validate.EditGroup;
 import org.ruoyi.common.log.enums.BusinessType;
-import org.ruoyi.system.domain.vo.ChatPluginVo;
-import org.ruoyi.system.domain.bo.ChatPluginBo;
-import org.ruoyi.system.service.IChatPluginService;
 import org.ruoyi.common.mybatis.core.page.TableDataInfo;
 
 /**

+ 0 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatStoreController.java

@@ -3,10 +3,6 @@ package org.ruoyi.system.controller.system;
 import lombok.RequiredArgsConstructor;
 import org.ruoyi.common.core.domain.R;
 import org.ruoyi.common.web.core.BaseController;
-import org.ruoyi.system.domain.bo.ChatAppStoreBo;
-import org.ruoyi.system.domain.bo.ChatMessageBo;
-import org.ruoyi.system.domain.vo.ChatAppStoreVo;
-import org.ruoyi.system.service.IChatAppStoreService;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;

+ 0 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVisitorUsageController.java

@@ -15,9 +15,6 @@ import org.ruoyi.common.log.enums.BusinessType;
 import org.ruoyi.common.mybatis.core.page.PageQuery;
 import org.ruoyi.common.mybatis.core.page.TableDataInfo;
 import org.ruoyi.common.web.core.BaseController;
-import org.ruoyi.system.domain.bo.ChatVisitorUsageBo;
-import org.ruoyi.system.domain.vo.ChatVisitorUsageVo;
-import org.ruoyi.system.service.IChatVisitorUsageService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 

+ 0 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVoucherController.java

@@ -16,9 +16,6 @@ import org.ruoyi.common.mybatis.core.page.PageQuery;
 import org.ruoyi.common.mybatis.core.page.TableDataInfo;
 import org.ruoyi.common.web.core.BaseController;
 import org.ruoyi.common.wechat.web.utils.UUIDShortUtil;
-import org.ruoyi.system.domain.bo.ChatVoucherBo;
-import org.ruoyi.system.domain.vo.ChatVoucherVo;
-import org.ruoyi.system.service.IChatVoucherService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 

+ 1 - 1
ruoyi-admin/src/main/java/org/ruoyi/controller/IndexController.java → ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/IndexController.java

@@ -1,4 +1,4 @@
-package org.ruoyi.controller;
+package org.ruoyi.system.controller.system;
 
 import cn.dev33.satoken.annotation.SaIgnore;
 import lombok.RequiredArgsConstructor;

+ 184 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/KnowledgeController.java

@@ -0,0 +1,184 @@
+//package org.ruoyi.system.controller.system;
+//
+//import cn.dev33.satoken.stp.StpUtil;
+//import jakarta.servlet.http.HttpServletRequest;
+//import jakarta.servlet.http.HttpServletResponse;
+//import jakarta.validation.Valid;
+//import jakarta.validation.constraints.NotEmpty;
+//import jakarta.validation.constraints.NotNull;
+//import lombok.RequiredArgsConstructor;
+//import org.ruoyi.common.chat.domain.request.ChatRequest;
+//import org.ruoyi.common.chat.entity.chat.Message;
+//import org.ruoyi.common.core.domain.R;
+//import org.ruoyi.common.core.validate.AddGroup;
+//import org.ruoyi.common.excel.utils.ExcelUtil;
+//import org.ruoyi.common.log.annotation.Log;
+//import org.ruoyi.common.log.enums.BusinessType;
+//import org.ruoyi.common.mybatis.core.page.PageQuery;
+//import org.ruoyi.common.mybatis.core.page.TableDataInfo;
+//import org.ruoyi.common.satoken.utils.LoginHelper;
+//import org.ruoyi.common.web.core.BaseController;
+//import org.ruoyi.knowledge.chain.vectorstore.VectorStore;
+//import org.ruoyi.knowledge.domain.bo.KnowledgeAttachBo;
+//import org.ruoyi.knowledge.domain.bo.KnowledgeFragmentBo;
+//import org.ruoyi.knowledge.domain.bo.KnowledgeInfoBo;
+//import org.ruoyi.knowledge.domain.req.KnowledgeInfoUploadRequest;
+//import org.ruoyi.knowledge.domain.vo.KnowledgeAttachVo;
+//import org.ruoyi.knowledge.domain.vo.KnowledgeFragmentVo;
+//import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo;
+//import org.ruoyi.knowledge.service.EmbeddingService;
+//import org.ruoyi.knowledge.service.IKnowledgeAttachService;
+//import org.ruoyi.knowledge.service.IKnowledgeFragmentService;
+//import org.ruoyi.knowledge.service.IKnowledgeInfoService;
+//import org.ruoyi.system.service.ISseService;
+//import org.springframework.validation.annotation.Validated;
+//import org.springframework.web.bind.annotation.*;
+//import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
+//
+//import java.util.List;
+//
+//
+///**
+// * 知识库
+// *
+// * @author Lion Li
+// * @date 2024-10-21
+// */
+//@Validated
+//@RequiredArgsConstructor
+//@RestController
+//@RequestMapping("/knowledge")
+//public class KnowledgeController extends BaseController {
+//
+//    private final IKnowledgeInfoService knowledgeInfoService;
+//
+//    private final VectorStore vectorStore;
+//
+//    private final IKnowledgeAttachService attachService;
+//
+//    private final IKnowledgeFragmentService fragmentService;
+//
+//    private final EmbeddingService embeddingService;
+//
+//    private final ISseService sseService;
+//
+//    /**
+//     * 知识库对话
+//     */
+//    @PostMapping("/send")
+//    public SseEmitter send(@RequestBody @Valid ChatRequest chatRequest, HttpServletRequest request) {
+//        List<Message> messages = chatRequest.getMessages();
+//        // 获取知识库信息
+//        Message message = messages.get(messages.size() - 1);
+//        StringBuilder sb = new StringBuilder(message.getContent().toString());
+//        List<String> nearestList;
+//        List<Double> queryVector = embeddingService.getQueryVector(message.getContent().toString(), chatRequest.getKid());
+//        nearestList = vectorStore.nearest(queryVector, chatRequest.getKid());
+//        for (String prompt : nearestList) {
+//            sb.append("\n####").append(prompt);
+//        }
+//        sb.append( (nearestList.size() > 0 ? "\n\n注意:回答问题时,须严格根据我给你的系统上下文内容原文进行回答,请不要自己发挥,回答时保持原来文本的段落层级" : ""));
+//        message.setContent(sb.toString());
+//        return sseService.sseChat(chatRequest, request);
+//    }
+//
+//    /**
+//     * 根据用户信息查询本地知识库
+//     */
+//    @GetMapping("/list")
+//    public TableDataInfo<KnowledgeInfoVo> list(KnowledgeInfoBo bo, PageQuery pageQuery) {
+//        if(!StpUtil.isLogin()){
+//            return null;
+//        }
+//        bo.setUid(LoginHelper.getUserId());
+//        return knowledgeInfoService.queryPageList(bo, pageQuery);
+//    }
+//
+//    /**
+//     * 新增知识库
+//     */
+//    @Log(title = "知识库", businessType = BusinessType.INSERT)
+//    @PostMapping("/save")
+//    public R<Void> save(@Validated(AddGroup.class) @RequestBody KnowledgeInfoBo bo) {
+//        knowledgeInfoService.saveOne(bo);
+//        return R.ok();
+//    }
+//
+//    /**
+//     * 删除知识库
+//     */
+//    @PostMapping("/remove/{id}")
+//    public R<String> remove(@PathVariable String id){
+//        knowledgeInfoService.removeKnowledge(id);
+//        return R.ok("删除知识库成功!");
+//    }
+//
+//    /**
+//     * 修改知识库
+//     */
+//    @Log(title = "知识库", businessType = BusinessType.UPDATE)
+//    @PostMapping("/edit")
+//    public R<Void> edit( @RequestBody KnowledgeInfoBo bo) {
+//        return toAjax(knowledgeInfoService.updateByBo(bo));
+//    }
+//
+//    /**
+//     * 导出知识库列表
+//     */
+//    @Log(title = "知识库", businessType = BusinessType.EXPORT)
+//    @PostMapping("/export")
+//    public void export(KnowledgeInfoBo bo, HttpServletResponse response) {
+//        List<KnowledgeInfoVo> list = knowledgeInfoService.queryList(bo);
+//        ExcelUtil.exportExcel(list, "知识库", KnowledgeInfoVo.class, response);
+//    }
+//
+//    /**
+//     * 查询知识附件信息
+//     */
+//    @GetMapping("/detail/{kid}")
+//    public TableDataInfo<KnowledgeAttachVo> attach(KnowledgeAttachBo bo, PageQuery pageQuery,@PathVariable String kid){
+//        bo.setKid(kid);
+//        return attachService.queryPageList(bo, pageQuery);
+//    }
+//
+//    /**
+//     * 上传知识库附件
+//     */
+//    @PostMapping(value = "/attach/upload")
+//    public R<String> upload(KnowledgeInfoUploadRequest request){
+//        knowledgeInfoService.upload(request);
+//        return R.ok("上传知识库附件成功!");
+//    }
+//
+//    /**
+//     * 获取知识库附件详细信息
+//     *
+//     * @param id 主键
+//     */
+//    @GetMapping("attach/info/{id}")
+//    public R<KnowledgeAttachVo> getAttachInfo(@NotNull(message = "主键不能为空")
+//                                              @PathVariable Long id) {
+//        return R.ok(attachService.queryById(id));
+//    }
+//
+//    /**
+//     * 删除知识库附件
+//     *
+//     */
+//    @PostMapping("attach/remove/{docId}")
+//    public R<Void> removeAttach(@NotEmpty(message = "主键不能为空") @PathVariable String docId) {
+//        attachService.removeKnowledgeAttach(docId);
+//        return R.ok();
+//    }
+//
+//
+//    /**
+//     * 查询知识片段
+//     */
+//    @GetMapping("/fragment/list/{docId}")
+//    public TableDataInfo<KnowledgeFragmentVo> fragmentList(KnowledgeFragmentBo bo, PageQuery pageQuery, @PathVariable String docId) {
+//        bo.setDocId(docId);
+//        return fragmentService.queryPageList(bo, pageQuery);
+//    }
+//
+//}

+ 332 - 332
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java

@@ -1,333 +1,333 @@
-package org.ruoyi.system.controller.system;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.extra.qrcode.QrCodeUtil;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
-import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
-import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult;
-import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
-import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
-import com.github.binarywang.wxpay.exception.WxPayException;
-import com.github.binarywang.wxpay.service.WxPayService;
-import com.stripe.Stripe;
-import com.stripe.exception.StripeException;
-import com.stripe.model.Event;
-import com.stripe.model.Price;
-import com.stripe.model.Product;
-import com.stripe.model.checkout.Session;
-import com.stripe.net.Webhook;
-import com.stripe.param.checkout.SessionCreateParams;
-import jakarta.servlet.http.HttpServletRequest;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.ruoyi.common.config.PayConfig;
-import org.ruoyi.common.core.domain.R;
-import org.ruoyi.common.core.exception.base.BaseException;
-import org.ruoyi.common.core.service.ConfigService;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.oss.core.OssClient;
-import org.ruoyi.common.oss.entity.UploadResult;
-import org.ruoyi.common.oss.factory.OssFactory;
-import org.ruoyi.common.response.PayResponse;
-import org.ruoyi.common.service.PayService;
-import org.ruoyi.common.utils.MD5Util;
-import org.ruoyi.system.domain.bo.PaymentOrdersBo;
-import org.ruoyi.system.domain.bo.SysUserBo;
-import org.ruoyi.system.domain.request.OrderRequest;
-import org.ruoyi.system.domain.vo.PaymentOrdersVo;
-import org.ruoyi.system.domain.vo.SysUserVo;
-import org.ruoyi.system.service.IPaymentOrdersService;
-import org.ruoyi.system.service.ISysUserService;
-import org.springframework.web.bind.annotation.*;
-
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-@RequiredArgsConstructor
-@RestController
-@RequestMapping("/pay")
-@Slf4j
-public class PayController {
-
-    private final PayService payService;
-
-    private final ISysUserService userService;
-
-    private final IPaymentOrdersService paymentOrdersService;
-
-    private final PayConfig payConfig;
-
-    private final WxPayService wxService;
-
-    private final ConfigService configService;
-
-    /**
-     * 获取支付二维码
-     *
-     * @Date 2023/7/3
-     * @return void
-     **/
-    @PostMapping("/payUrl")
-    public R<PaymentOrdersVo> payUrl(@RequestBody OrderRequest orderRequest) {
-        PaymentOrdersBo payOrder = paymentOrdersService.createPayOrder(orderRequest);
-        PaymentOrdersVo paymentOrdersVo = new PaymentOrdersVo();
-        if(!Boolean.parseBoolean(getKey("enabled"))){
-            String payUrl = payService.getPayUrl(payOrder.getOrderNo(), orderRequest.getName(), Double.parseDouble(orderRequest.getMoney()), "192.168.1.6");
-            byte[] bytes = QrCodeUtil.generatePng(payUrl, 300, 300);
-            OssClient storage = OssFactory.instance();
-            UploadResult upload=storage.upload(bytes, storage.getPath("qrCode",".png"), "image/png");
-            BeanUtil.copyProperties(payOrder,paymentOrdersVo);
-            paymentOrdersVo.setUrl(upload.getUrl());
-        }else {
-            WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
-            request.setTradeType("NATIVE");
-            request.setBody(orderRequest.getName());
-            request.setOutTradeNo(payOrder.getOrderNo());
-            request.setTotalFee(BaseWxPayRequest.yuanToFen(orderRequest.getMoney()));
-            request.setSpbillCreateIp("127.0.0.1");
-            request.setNotifyUrl(getKey("notifyUrl"));
-            request.setProductId(payOrder.getId().toString());
-            try {
-                WxPayNativeOrderResult order = wxService.createOrder(request);
-                byte[] bytes = QrCodeUtil.generatePng(order.getCodeUrl(), 300, 300);
-                OssClient storage = OssFactory.instance();
-                UploadResult upload = storage.upload(bytes, storage.getPath("qrCode",".png"), "image/png");
-                BeanUtil.copyProperties(payOrder,paymentOrdersVo);
-                paymentOrdersVo.setUrl(upload.getUrl());
-            } catch (WxPayException e) {
-                throw new BaseException("获取微信支付二维码发生错误:{}"+e.getMessage());
-            }
-        }
-        return R.ok(paymentOrdersVo);
-    }
-
-    /**
-     * 回调通知地址
-     *
-     * @Date 2023/7/3
-     * @param
-     * @return void
-     **/
-    @GetMapping("/notifyUrl")
-    public String notifyUrl(PayResponse payResponse) {
-        // 校验签名
-        String mdString = "money=" + payResponse.getMoney() + "&name=" + payResponse.getName() +
-            "&out_trade_no=" + payResponse.getOut_trade_no() + "&pid=" + payConfig.getPid() +
-            "&trade_no=" + payResponse.getTrade_no() + "&trade_status=" + payResponse.getTrade_status() +
-            "&type=" + payResponse.getType() +  payConfig.getKey();
-        String sign = MD5Util.GetMD5Code(mdString);
-        if(!sign.equals(payResponse.getSign())){
-            throw new BaseException("校验签名失败!");
-        }
-        double money = Double.parseDouble(payResponse.getMoney());
-        log.info("支付订单号{}",payResponse);
-        PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
-        paymentOrdersBo.setOrderNo(payResponse.getOut_trade_no());
-        List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
-        if (CollectionUtil.isEmpty(paymentOrdersList)){
-            throw new BaseException("订单不存在!");
-        }
-        // 订单状态修改为已支付
-        PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
-        paymentOrdersVo.setPaymentStatus("2");
-        paymentOrdersVo.setPaymentMethod(payResponse.getType());
-        BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo);
-        paymentOrdersService.updateByBo(paymentOrdersBo);
-
-        SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId());
-        sysUserVo.setUserBalance(sysUserVo.getUserBalance() + money);
-        SysUserBo sysUserBo = new SysUserBo();
-        BeanUtil.copyProperties(sysUserVo,sysUserBo);
-        // 设置为付费用户
-        sysUserBo.setUserGrade("1");
-        userService.updateUser(sysUserBo);
-        return "success";
-    }
-
-    /**
-     * 跳转通知地址
-     *
-     * @Date 2023/7/3
-     * @param
-     * @return void
-     **/
-    @GetMapping("/return_url")
-    public void returnUrl() {
-        log.info("return_url===========");
-    }
-
-
-    @PostMapping("/notify/wxOrder")
-    public String parseOrderNotifyResult(@RequestBody String xmlData) throws WxPayException {
-        WxPayOrderNotifyResult notifyResult = this.wxService.parseOrderNotifyResult(xmlData);
-        // TODO 根据自己业务场景需要构造返回对象
-        PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
-        paymentOrdersBo.setOrderNo(notifyResult.getOutTradeNo());
-        List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
-        PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
-        paymentOrdersVo.setPaymentStatus("2");
-        paymentOrdersVo.setPaymentMethod("wx");
-        BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo);
-        paymentOrdersService.updateByBo(paymentOrdersBo);
-        SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId());
-        sysUserVo.setUserBalance(sysUserVo.getUserBalance() + convertCentsToYuan(notifyResult.getTotalFee()));
-        SysUserBo sysUserBo = new SysUserBo();
-        BeanUtil.copyProperties(sysUserVo,sysUserBo);
-        // 设置为付费用户
-        sysUserBo.setUserGrade("1");
-        userService.updateUser(sysUserBo);
-        return WxPayNotifyResponse.success("success");
-    }
-
-    /**
-     * 将分转换为元,并保留精度。
-     *
-     * @param cents 分的金额,类型为Integer
-     * @return 转换后的元金额,类型为double
-     */
-    public static double convertCentsToYuan(Integer cents) {
-        // 处理空输入
-        if (cents == null) {
-            throw new IllegalArgumentException("输入的分金额不能为空");
-        }
-
-        // 100分 = 1元
-        BigDecimal centsBigDecimal = new BigDecimal(cents);
-        BigDecimal yuan = centsBigDecimal.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
-        // 转换为double并返回
-        return yuan.doubleValue();
-    }
-
-    /**
-     * 获取订单信息
-     *
-     */
-    @PostMapping("/orderInfo")
-    public R<PaymentOrdersVo> orderInfo(@RequestBody  OrderRequest orderRequest) {
-        if(StringUtils.isEmpty(orderRequest.getOrderNo())){
-            throw new BaseException("订单号不能为空!");
-        }
-        PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
-        paymentOrdersBo.setOrderNo(orderRequest.getOrderNo());
-        List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
-        if (CollectionUtil.isEmpty(paymentOrdersList)){
-            throw new BaseException("订单不存在!");
-        }
-        PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
-        return R.ok(paymentOrdersVo);
-    }
-
-    // 获取支付链接
-//    static {
-//        Stripe.apiKey = "sk_test_51PMMj2KcfX4oNioqXkoKpScTsgmR55xQki2tg8MEZJYc0gjhYV85t2FzDasE06eqZb0sqyYhOp3UXhcGGQLWI4A9008aq8SOnb";
+//package org.ruoyi.system.controller.system;
+//
+//import cn.hutool.core.bean.BeanUtil;
+//import cn.hutool.core.collection.CollectionUtil;
+//import cn.hutool.extra.qrcode.QrCodeUtil;
+//import cn.hutool.json.JSONObject;
+//import cn.hutool.json.JSONUtil;
+//import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
+//import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
+//import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult;
+//import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
+//import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
+//import com.github.binarywang.wxpay.exception.WxPayException;
+//import com.github.binarywang.wxpay.service.WxPayService;
+//import com.stripe.Stripe;
+//import com.stripe.exception.StripeException;
+//import com.stripe.model.Event;
+//import com.stripe.model.Price;
+//import com.stripe.model.Product;
+//import com.stripe.model.checkout.Session;
+//import com.stripe.net.Webhook;
+//import com.stripe.param.checkout.SessionCreateParams;
+//import jakarta.servlet.http.HttpServletRequest;
+//import lombok.RequiredArgsConstructor;
+//import lombok.extern.slf4j.Slf4j;
+//import org.ruoyi.common.config.PayConfig;
+//import org.ruoyi.common.core.domain.R;
+//import org.ruoyi.common.core.exception.base.BaseException;
+//import org.ruoyi.common.core.service.ConfigService;
+//import org.ruoyi.common.core.utils.StringUtils;
+//import org.ruoyi.common.oss.core.OssClient;
+//import org.ruoyi.common.oss.entity.UploadResult;
+//import org.ruoyi.common.oss.factory.OssFactory;
+//import org.ruoyi.common.response.PayResponse;
+//import org.ruoyi.common.service.PayService;
+//import org.ruoyi.common.utils.MD5Util;
+//import org.ruoyi.system.domain.bo.PaymentOrdersBo;
+//import org.ruoyi.system.domain.bo.SysUserBo;
+//import org.ruoyi.system.domain.request.OrderRequest;
+//import org.ruoyi.system.domain.vo.PaymentOrdersVo;
+//import org.ruoyi.system.domain.vo.SysUserVo;
+//import org.ruoyi.system.service.IPaymentOrdersService;
+//import org.ruoyi.system.service.ISysUserService;
+//import org.springframework.web.bind.annotation.*;
+//
+//import java.io.ByteArrayOutputStream;
+//import java.io.InputStream;
+//import java.math.BigDecimal;
+//import java.math.RoundingMode;
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.Map;
+//
+//
+//@RequiredArgsConstructor
+//@RestController
+//@RequestMapping("/pay")
+//@Slf4j
+//public class PayController {
+//
+//    private final PayService payService;
+//
+//    private final ISysUserService userService;
+//
+//    private final IPaymentOrdersService paymentOrdersService;
+//
+//    private final PayConfig payConfig;
+//
+//    private final WxPayService wxService;
+//
+//    private final ConfigService configService;
+//
+//    /**
+//     * 获取支付二维码
+//     *
+//     * @Date 2023/7/3
+//     * @return void
+//     **/
+//    @PostMapping("/payUrl")
+//    public R<PaymentOrdersVo> payUrl(@RequestBody OrderRequest orderRequest) {
+//        PaymentOrdersBo payOrder = paymentOrdersService.createPayOrder(orderRequest);
+//        PaymentOrdersVo paymentOrdersVo = new PaymentOrdersVo();
+//        if(!Boolean.parseBoolean(getKey("enabled"))){
+//            String payUrl = payService.getPayUrl(payOrder.getOrderNo(), orderRequest.getName(), Double.parseDouble(orderRequest.getMoney()), "192.168.1.6");
+//            byte[] bytes = QrCodeUtil.generatePng(payUrl, 300, 300);
+//            OssClient storage = OssFactory.instance();
+//            UploadResult upload=storage.upload(bytes, storage.getPath("qrCode",".png"), "image/png");
+//            BeanUtil.copyProperties(payOrder,paymentOrdersVo);
+//            paymentOrdersVo.setUrl(upload.getUrl());
+//        }else {
+//            WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
+//            request.setTradeType("NATIVE");
+//            request.setBody(orderRequest.getName());
+//            request.setOutTradeNo(payOrder.getOrderNo());
+//            request.setTotalFee(BaseWxPayRequest.yuanToFen(orderRequest.getMoney()));
+//            request.setSpbillCreateIp("127.0.0.1");
+//            request.setNotifyUrl(getKey("notifyUrl"));
+//            request.setProductId(payOrder.getId().toString());
+//            try {
+//                WxPayNativeOrderResult order = wxService.createOrder(request);
+//                byte[] bytes = QrCodeUtil.generatePng(order.getCodeUrl(), 300, 300);
+//                OssClient storage = OssFactory.instance();
+//                UploadResult upload = storage.upload(bytes, storage.getPath("qrCode",".png"), "image/png");
+//                BeanUtil.copyProperties(payOrder,paymentOrdersVo);
+//                paymentOrdersVo.setUrl(upload.getUrl());
+//            } catch (WxPayException e) {
+//                throw new BaseException("获取微信支付二维码发生错误:{}"+e.getMessage());
+//            }
+//        }
+//        return R.ok(paymentOrdersVo);
 //    }
-
-    /**
-     *   去支付
-     * 1、创建产品
-     * 2、设置价格
-     * 3、创建支付信息 得到url
-     * @return
-     */
-    @PostMapping("/stripePay")
-    public String pay(@RequestBody OrderRequest orderRequest) throws StripeException {
-
-        String enabled = configService.getConfigValue("stripe", "enabled");
-        if(!Boolean.parseBoolean(enabled)){
-            String prompt = configService.getConfigValue("stripe", "prompt");
-            throw new BaseException(prompt);
-        }
-
-        // 获取支付链接
-        Stripe.apiKey = configService.getConfigValue("stripe", "key");
-
-        // 获取金额字符串并解析为 double
-        double moneyDouble = Double.parseDouble(orderRequest.getMoney());
-
-        // 将金额转换为以分为单位的整数
-        int randMoney = (int) (moneyDouble * 100);
-
-        Map<String, Object> params = new HashMap<>();
-        params.put("name", orderRequest.getName());
-        Product product = Product.create(params);
-
-        Map<String, Object> recurring = new HashMap<>();
-        recurring.put("interval", "month");
-        Map<String, Object> params2 = new HashMap<>();
-        params2.put("unit_amount", randMoney);
-        params2.put("currency", "usd");
-        params2.put("recurring", recurring);
-        params2.put("product", product.getId());
-        Price price = Price.create(params2);
-
-        // 创建支付订单
-        PaymentOrdersBo payOrder = paymentOrdersService.createPayOrder(orderRequest);
-
-        //创建支付信息 得到url
-        SessionCreateParams params3 = SessionCreateParams.builder()
-            .setMode(SessionCreateParams.Mode.SUBSCRIPTION)
-            .setSuccessUrl(configService.getConfigValue("stripe", "success"))
-            .setCancelUrl(configService.getConfigValue("stripe", "cancel"))
-            .addLineItem(
-                SessionCreateParams.LineItem.builder()
-                    .setQuantity(1L)
-                    .setPrice(price.getId())
-                    .build()).putMetadata("orderId", payOrder.getOrderNo())
-            .build();
-        Session session = Session.create(params3);
-        return session.getUrl();
-    }
-
-    /**
-     *  支付回调
-     *
-     */
-    @PostMapping("/stripe_events")
-    public R<String> stripeEvent(HttpServletRequest request) {
-        try {
-            String endpointSecret = configService.getConfigValue("stripe", "secret");//webhook秘钥签名
-            InputStream inputStream = request.getInputStream();
-            ByteArrayOutputStream output = new ByteArrayOutputStream();
-            byte[] buffer = new byte[1024*4];
-            int n = 0;
-            while (-1 != (n = inputStream.read(buffer))) {
-                output.write(buffer, 0, n);
-            }
-            byte[] bytes = output.toByteArray();
-            String payload = new String(bytes, "UTF-8");
-            String sigHeader = request.getHeader("Stripe-Signature");
-            Event event = Webhook.constructEvent(payload, sigHeader, endpointSecret);//验签,并获取事件
-            if("checkout.session.completed".equals(event.getType())){
-                // 解析 JSON 字符串为 JSONObject
-                JSONObject jsonObject = JSONUtil.parseObj(event);
-                // 获取 metadata 对象
-                JSONObject metadata = jsonObject.getJSONObject("data")
-                    .getJSONObject("object")
-                    .getJSONObject("metadata");
-
-                OrderRequest orderRequest = new OrderRequest();
-                orderRequest.setPayType("stripe");
-                orderRequest.setOrderNo(metadata.getStr("orderId"));
-                paymentOrdersService.updatePayOrder(orderRequest);
-            }
-        } catch (Exception e) {
-            System.out.println("stripe异步通知(webhook事件)"+e);
-        }
-        return R.ok();
-    }
-
-    public String getKey(String key) {
-        return configService.getConfigValue("weixin", key);
-    }
-
-}
-
+//
+//    /**
+//     * 回调通知地址
+//     *
+//     * @Date 2023/7/3
+//     * @param
+//     * @return void
+//     **/
+//    @GetMapping("/notifyUrl")
+//    public String notifyUrl(PayResponse payResponse) {
+//        // 校验签名
+//        String mdString = "money=" + payResponse.getMoney() + "&name=" + payResponse.getName() +
+//            "&out_trade_no=" + payResponse.getOut_trade_no() + "&pid=" + payConfig.getPid() +
+//            "&trade_no=" + payResponse.getTrade_no() + "&trade_status=" + payResponse.getTrade_status() +
+//            "&type=" + payResponse.getType() +  payConfig.getKey();
+//        String sign = MD5Util.GetMD5Code(mdString);
+//        if(!sign.equals(payResponse.getSign())){
+//            throw new BaseException("校验签名失败!");
+//        }
+//        double money = Double.parseDouble(payResponse.getMoney());
+//        log.info("支付订单号{}",payResponse);
+//        PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
+//        paymentOrdersBo.setOrderNo(payResponse.getOut_trade_no());
+//        List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
+//        if (CollectionUtil.isEmpty(paymentOrdersList)){
+//            throw new BaseException("订单不存在!");
+//        }
+//        // 订单状态修改为已支付
+//        PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
+//        paymentOrdersVo.setPaymentStatus("2");
+//        paymentOrdersVo.setPaymentMethod(payResponse.getType());
+//        BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo);
+//        paymentOrdersService.updateByBo(paymentOrdersBo);
+//
+//        SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId());
+//        sysUserVo.setUserBalance(sysUserVo.getUserBalance() + money);
+//        SysUserBo sysUserBo = new SysUserBo();
+//        BeanUtil.copyProperties(sysUserVo,sysUserBo);
+//        // 设置为付费用户
+//        sysUserBo.setUserGrade("1");
+//        userService.updateUser(sysUserBo);
+//        return "success";
+//    }
+//
+//    /**
+//     * 跳转通知地址
+//     *
+//     * @Date 2023/7/3
+//     * @param
+//     * @return void
+//     **/
+//    @GetMapping("/return_url")
+//    public void returnUrl() {
+//        log.info("return_url===========");
+//    }
+//
+//
+//    @PostMapping("/notify/wxOrder")
+//    public String parseOrderNotifyResult(@RequestBody String xmlData) throws WxPayException {
+//        WxPayOrderNotifyResult notifyResult = this.wxService.parseOrderNotifyResult(xmlData);
+//        // TODO 根据自己业务场景需要构造返回对象
+//        PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
+//        paymentOrdersBo.setOrderNo(notifyResult.getOutTradeNo());
+//        List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
+//        PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
+//        paymentOrdersVo.setPaymentStatus("2");
+//        paymentOrdersVo.setPaymentMethod("wx");
+//        BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo);
+//        paymentOrdersService.updateByBo(paymentOrdersBo);
+//        SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId());
+//        sysUserVo.setUserBalance(sysUserVo.getUserBalance() + convertCentsToYuan(notifyResult.getTotalFee()));
+//        SysUserBo sysUserBo = new SysUserBo();
+//        BeanUtil.copyProperties(sysUserVo,sysUserBo);
+//        // 设置为付费用户
+//        sysUserBo.setUserGrade("1");
+//        userService.updateUser(sysUserBo);
+//        return WxPayNotifyResponse.success("success");
+//    }
+//
+//    /**
+//     * 将分转换为元,并保留精度。
+//     *
+//     * @param cents 分的金额,类型为Integer
+//     * @return 转换后的元金额,类型为double
+//     */
+//    public static double convertCentsToYuan(Integer cents) {
+//        // 处理空输入
+//        if (cents == null) {
+//            throw new IllegalArgumentException("输入的分金额不能为空");
+//        }
+//
+//        // 100分 = 1元
+//        BigDecimal centsBigDecimal = new BigDecimal(cents);
+//        BigDecimal yuan = centsBigDecimal.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
+//        // 转换为double并返回
+//        return yuan.doubleValue();
+//    }
+//
+//    /**
+//     * 获取订单信息
+//     *
+//     */
+//    @PostMapping("/orderInfo")
+//    public R<PaymentOrdersVo> orderInfo(@RequestBody  OrderRequest orderRequest) {
+//        if(StringUtils.isEmpty(orderRequest.getOrderNo())){
+//            throw new BaseException("订单号不能为空!");
+//        }
+//        PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
+//        paymentOrdersBo.setOrderNo(orderRequest.getOrderNo());
+//        List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
+//        if (CollectionUtil.isEmpty(paymentOrdersList)){
+//            throw new BaseException("订单不存在!");
+//        }
+//        PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
+//        return R.ok(paymentOrdersVo);
+//    }
+//
+//    // 获取支付链接
+////    static {
+////        Stripe.apiKey = "sk_test_51PMMj2KcfX4oNioqXkoKpScTsgmR55xQki2tg8MEZJYc0gjhYV85t2FzDasE06eqZb0sqyYhOp3UXhcGGQLWI4A9008aq8SOnb";
+////    }
+//
+//    /**
+//     *   去支付
+//     * 1、创建产品
+//     * 2、设置价格
+//     * 3、创建支付信息 得到url
+//     * @return
+//     */
+//    @PostMapping("/stripePay")
+//    public String pay(@RequestBody OrderRequest orderRequest) throws StripeException {
+//
+//        String enabled = configService.getConfigValue("stripe", "enabled");
+//        if(!Boolean.parseBoolean(enabled)){
+//            String prompt = configService.getConfigValue("stripe", "prompt");
+//            throw new BaseException(prompt);
+//        }
+//
+//        // 获取支付链接
+//        Stripe.apiKey = configService.getConfigValue("stripe", "key");
+//
+//        // 获取金额字符串并解析为 double
+//        double moneyDouble = Double.parseDouble(orderRequest.getMoney());
+//
+//        // 将金额转换为以分为单位的整数
+//        int randMoney = (int) (moneyDouble * 100);
+//
+//        Map<String, Object> params = new HashMap<>();
+//        params.put("name", orderRequest.getName());
+//        Product product = Product.create(params);
+//
+//        Map<String, Object> recurring = new HashMap<>();
+//        recurring.put("interval", "month");
+//        Map<String, Object> params2 = new HashMap<>();
+//        params2.put("unit_amount", randMoney);
+//        params2.put("currency", "usd");
+//        params2.put("recurring", recurring);
+//        params2.put("product", product.getId());
+//        Price price = Price.create(params2);
+//
+//        // 创建支付订单
+//        PaymentOrdersBo payOrder = paymentOrdersService.createPayOrder(orderRequest);
+//
+//        //创建支付信息 得到url
+//        SessionCreateParams params3 = SessionCreateParams.builder()
+//            .setMode(SessionCreateParams.Mode.SUBSCRIPTION)
+//            .setSuccessUrl(configService.getConfigValue("stripe", "success"))
+//            .setCancelUrl(configService.getConfigValue("stripe", "cancel"))
+//            .addLineItem(
+//                SessionCreateParams.LineItem.builder()
+//                    .setQuantity(1L)
+//                    .setPrice(price.getId())
+//                    .build()).putMetadata("orderId", payOrder.getOrderNo())
+//            .build();
+//        Session session = Session.create(params3);
+//        return session.getUrl();
+//    }
+//
+//    /**
+//     *  支付回调
+//     *
+//     */
+//    @PostMapping("/stripe_events")
+//    public R<String> stripeEvent(HttpServletRequest request) {
+//        try {
+//            String endpointSecret = configService.getConfigValue("stripe", "secret");//webhook秘钥签名
+//            InputStream inputStream = request.getInputStream();
+//            ByteArrayOutputStream output = new ByteArrayOutputStream();
+//            byte[] buffer = new byte[1024*4];
+//            int n = 0;
+//            while (-1 != (n = inputStream.read(buffer))) {
+//                output.write(buffer, 0, n);
+//            }
+//            byte[] bytes = output.toByteArray();
+//            String payload = new String(bytes, "UTF-8");
+//            String sigHeader = request.getHeader("Stripe-Signature");
+//            Event event = Webhook.constructEvent(payload, sigHeader, endpointSecret);//验签,并获取事件
+//            if("checkout.session.completed".equals(event.getType())){
+//                // 解析 JSON 字符串为 JSONObject
+//                JSONObject jsonObject = JSONUtil.parseObj(event);
+//                // 获取 metadata 对象
+//                JSONObject metadata = jsonObject.getJSONObject("data")
+//                    .getJSONObject("object")
+//                    .getJSONObject("metadata");
+//
+//                OrderRequest orderRequest = new OrderRequest();
+//                orderRequest.setPayType("stripe");
+//                orderRequest.setOrderNo(metadata.getStr("orderId"));
+//                paymentOrdersService.updatePayOrder(orderRequest);
+//            }
+//        } catch (Exception e) {
+//            System.out.println("stripe异步通知(webhook事件)"+e);
+//        }
+//        return R.ok();
+//    }
+//
+//    public String getKey(String key) {
+//        return configService.getConfigValue("weixin", key);
+//    }
+//
+//}
+//

+ 81 - 81
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeChatController.java

@@ -1,81 +1,81 @@
-package org.ruoyi.system.controller.system;
-
-import cn.dev33.satoken.annotation.SaIgnore;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.ruoyi.common.core.exception.ServiceException;
-import org.ruoyi.common.wechat.itchat4j.api.WechatTools;
-import org.ruoyi.common.wechat.itchat4j.controller.LoginController;
-import org.ruoyi.common.wechat.itchat4j.core.MsgCenter;
-import org.ruoyi.common.wechat.itchat4j.face.IMsgHandlerFace;
-import org.ruoyi.common.wechat.web.base.BaseException;
-import org.ruoyi.system.domain.bo.WxRobConfigBo;
-import org.ruoyi.system.domain.vo.WxRobConfigVo;
-import org.ruoyi.system.handler.MyMsgHandler;
-import org.ruoyi.system.service.ISseService;
-import org.ruoyi.system.service.IWxRobConfigService;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-/**
- * 个人微信扩展控制器
- *
- * @author WangLe
- */
-@SaIgnore
-@Slf4j
-@Validated
-@RequiredArgsConstructor
-@RestController
-public class WeChatController {
-
-    private final ISseService sseService;
-
-    private final IWxRobConfigService wxRobConfigService;
-
-    /**
-     * 登录第一步,获取二维码链接
-     * @throws BaseException
-     */
-    @PostMapping("/getQr")
-    public String getQr(@RequestParam String uniqueKey) {
-        LoginController login = new LoginController(uniqueKey);
-        try {
-            return login.login_1();
-        } catch (BaseException e) {
-            throw new ServiceException("获取二维码失败:"+ e.getMessage());
-        }
-    }
-
-    @PostMapping("/wxLogin")
-    public Boolean wxLogin(@RequestParam String uniqueKey) {
-        LoginController login = new LoginController(uniqueKey);
-        return login.login_2();
-    }
-
-    @PostMapping("/wxInit")
-    public Boolean wxInit(@RequestParam String uniqueKey) {
-        LoginController login = new LoginController(uniqueKey);
-        // 开启消息处理线程
-        WxRobConfigBo wxRobConfigBo = new WxRobConfigBo();
-        wxRobConfigBo.setUniqueKey(uniqueKey);
-        List<WxRobConfigVo> wxRobConfigVos = wxRobConfigService.queryList(wxRobConfigBo);
-        //查询机器人对应的用户
-        start(uniqueKey,new MyMsgHandler(uniqueKey,sseService,wxRobConfigVos.get(0)));
-        return login.login_3();
-    }
-
-    @PostMapping("/wxLogout")
-    public void wxLogout(@RequestParam String uniqueKey) {
-        WechatTools.logout(uniqueKey);
-    }
-
-    public void start(String uniqueKey,IMsgHandlerFace msgHandler) {
-        log.info("7.+++开启消息处理线程["+uniqueKey+"]+++");
-        new Thread(() -> MsgCenter.handleMsg(uniqueKey,msgHandler)).start();
-    }
-}
+//package org.ruoyi.system.controller.system;
+//
+//import cn.dev33.satoken.annotation.SaIgnore;
+//import lombok.RequiredArgsConstructor;
+//import lombok.extern.slf4j.Slf4j;
+//import org.ruoyi.common.core.exception.ServiceException;
+//import org.ruoyi.common.wechat.itchat4j.api.WechatTools;
+//import org.ruoyi.common.wechat.itchat4j.controller.LoginController;
+//import org.ruoyi.common.wechat.itchat4j.core.MsgCenter;
+//import org.ruoyi.common.wechat.itchat4j.face.IMsgHandlerFace;
+//import org.ruoyi.common.wechat.web.base.BaseException;
+//import org.ruoyi.system.domain.bo.WxRobConfigBo;
+//import org.ruoyi.system.domain.vo.WxRobConfigVo;
+//import org.ruoyi.system.handler.MyMsgHandler;
+//import org.ruoyi.system.service.ISseService;
+//import org.ruoyi.system.service.IWxRobConfigService;
+//import org.springframework.validation.annotation.Validated;
+//import org.springframework.web.bind.annotation.PostMapping;
+//import org.springframework.web.bind.annotation.RequestParam;
+//import org.springframework.web.bind.annotation.RestController;
+//
+//import java.util.List;
+//
+///**
+// * 个人微信扩展控制器
+// *
+// * @author WangLe
+// */
+//@SaIgnore
+//@Slf4j
+//@Validated
+//@RequiredArgsConstructor
+//@RestController
+//public class WeChatController {
+//
+//    private final ISseService sseService;
+//
+//    private final IWxRobConfigService wxRobConfigService;
+//
+//    /**
+//     * 登录第一步,获取二维码链接
+//     * @throws BaseException
+//     */
+//    @PostMapping("/getQr")
+//    public String getQr(@RequestParam String uniqueKey) {
+//        LoginController login = new LoginController(uniqueKey);
+//        try {
+//            return login.login_1();
+//        } catch (BaseException e) {
+//            throw new ServiceException("获取二维码失败:"+ e.getMessage());
+//        }
+//    }
+//
+//    @PostMapping("/wxLogin")
+//    public Boolean wxLogin(@RequestParam String uniqueKey) {
+//        LoginController login = new LoginController(uniqueKey);
+//        return login.login_2();
+//    }
+//
+//    @PostMapping("/wxInit")
+//    public Boolean wxInit(@RequestParam String uniqueKey) {
+//        LoginController login = new LoginController(uniqueKey);
+//        // 开启消息处理线程
+//        WxRobConfigBo wxRobConfigBo = new WxRobConfigBo();
+//        wxRobConfigBo.setUniqueKey(uniqueKey);
+//        List<WxRobConfigVo> wxRobConfigVos = wxRobConfigService.queryList(wxRobConfigBo);
+//        //查询机器人对应的用户
+//        start(uniqueKey,new MyMsgHandler(uniqueKey,sseService,wxRobConfigVos.get(0)));
+//        return login.login_3();
+//    }
+//
+//    @PostMapping("/wxLogout")
+//    public void wxLogout(@RequestParam String uniqueKey) {
+//        WechatTools.logout(uniqueKey);
+//    }
+//
+//    public void start(String uniqueKey,IMsgHandlerFace msgHandler) {
+//        log.info("7.+++开启消息处理线程["+uniqueKey+"]+++");
+//        new Thread(() -> MsgCenter.handleMsg(uniqueKey,msgHandler)).start();
+//    }
+//}

+ 4 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java

@@ -19,7 +19,7 @@ import java.util.Map;
 @RequiredArgsConstructor
 public class MsgHandler extends AbstractHandler {
 
-    private final ISseService sseService;
+//    private final ISseService sseService;
 
 
 
@@ -34,8 +34,10 @@ public class MsgHandler extends AbstractHandler {
         if (!msgType.equals(WxConsts.XmlMsgType.EVENT)) {
             //TODO 可以选择将消息保存到本地
         }
+
         //TODO 组装回复消息
-        String content = sseService.wxCpChat(wxMessage.getContent());
+        String content = "";
+                //sseService.wxCpChat(wxMessage.getContent());
 
         return new TextBuilder().build(content, wxMessage, cpService);
 

+ 0 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/SSEEventSourceListener.java

@@ -15,11 +15,8 @@ import org.ruoyi.common.chat.entity.chat.ChatCompletionResponse;
 import org.ruoyi.common.chat.utils.TikTokensUtil;
 import org.ruoyi.common.core.utils.SpringUtils;
 import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.system.domain.bo.ChatMessageBo;
 import org.ruoyi.system.domain.bo.SysModelBo;
 import org.ruoyi.system.domain.vo.SysModelVo;
-import org.ruoyi.system.service.IChatCostService;
-import org.ruoyi.system.service.IChatMessageService;
 import org.ruoyi.system.service.ISysModelService;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;

+ 0 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatAppStoreMapper.java

@@ -1,8 +1,6 @@
 package org.ruoyi.system.mapper;
 
 import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
-import org.ruoyi.system.domain.ChatAppStore;
-import org.ruoyi.system.domain.vo.ChatAppStoreVo;
 
 /**
  * 应用市场Mapper接口

+ 0 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java

@@ -1,7 +1,5 @@
 package org.ruoyi.system.mapper;
 
-import org.ruoyi.system.domain.ChatConfig;
-import org.ruoyi.system.domain.vo.ChatConfigVo;
 import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
 
 /**

+ 0 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatGptsMapper.java

@@ -1,8 +1,6 @@
 package org.ruoyi.system.mapper;
 
 import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
-import org.ruoyi.system.domain.ChatGpts;
-import org.ruoyi.system.domain.vo.ChatGptsVo;
 
 /**
  * gpts管理Mapper接口

+ 0 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatMessageMapper.java

@@ -1,8 +1,6 @@
 package org.ruoyi.system.mapper;
 
 import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
-import org.ruoyi.system.domain.ChatMessage;
-import org.ruoyi.system.domain.vo.ChatMessageVo;
 
 
 /**

+ 0 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatPluginMapper.java

@@ -1,7 +1,5 @@
 package org.ruoyi.system.mapper;
 
-import org.ruoyi.system.domain.ChatPlugin;
-import org.ruoyi.system.domain.vo.ChatPluginVo;
 import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
 
 /**

+ 0 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatTokenMapper.java

@@ -1,8 +1,6 @@
 package org.ruoyi.system.mapper;
 
 import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
-import org.ruoyi.system.domain.ChatToken;
-import org.ruoyi.system.domain.vo.ChatTokenVo;
 
 
 /**

+ 0 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVisitorUsageMapper.java

@@ -1,7 +1,5 @@
 package org.ruoyi.system.mapper;
 
-import org.ruoyi.system.domain.ChatVisitorUsage;
-import org.ruoyi.system.domain.vo.ChatVisitorUsageVo;
 import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
 
 /**

+ 0 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVoucherMapper.java

@@ -1,8 +1,6 @@
 package org.ruoyi.system.mapper;
 
 import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
-import org.ruoyi.system.domain.ChatVoucher;
-import org.ruoyi.system.domain.vo.ChatVoucherVo;
 
 /**
  * 用户兑换记录Mapper接口

+ 0 - 259
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatAppStoreImpl.java

@@ -1,259 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.Response;
-import org.ruoyi.common.core.domain.model.LoginUser;
-import org.ruoyi.common.core.exception.base.BaseException;
-import org.ruoyi.common.core.utils.MapstructUtils;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.common.satoken.utils.LoginHelper;
-import org.ruoyi.system.domain.ChatAppStore;
-import org.ruoyi.system.domain.bo.ChatAppStoreBo;
-import org.ruoyi.system.domain.vo.ChatAppStoreVo;
-import org.ruoyi.system.mapper.ChatAppStoreMapper;
-import org.ruoyi.system.request.RoleListDto;
-import org.ruoyi.system.request.RoleRequest;
-import org.ruoyi.system.request.SimpleGenerateRequest;
-import org.ruoyi.system.response.RoleResponse;
-import org.ruoyi.system.response.SimpleGenerateDataResponse;
-import org.ruoyi.system.response.SimpleGenerateResponse;
-import org.ruoyi.system.response.rolelist.ContentResponse;
-import org.ruoyi.system.response.rolelist.RoleListResponse;
-import org.ruoyi.system.response.rolelist.ChatAppStoreVO;
-import org.ruoyi.system.service.IChatCostService;
-import org.ruoyi.system.service.IChatAppStoreService;
-import org.ruoyi.system.util.AudioOkHttpUtil;
-import org.springframework.stereotype.Service;
-
-import java.io.IOException;
-import java.util.*;
-
-/**
- * 应用市场Service业务层处理
- *
- * @author Lion Li
- * @date 2024-03-19
- */
-@RequiredArgsConstructor
-@Service
-@Slf4j
-public class ChatAppStoreImpl implements IChatAppStoreService {
-
-    private final ChatAppStoreMapper baseMapper;
-
-    private final IChatCostService chatService;
-
-    private final AudioOkHttpUtil audioOkHttpUtil;
-
-    /**
-     * 查询应用市场
-     */
-    @Override
-    public ChatAppStoreVo queryById(Long id) {
-        return baseMapper.selectVoById(id);
-    }
-
-    /**
-     * 查询应用市场列表
-     */
-    @Override
-    public TableDataInfo<ChatAppStoreVo> queryPageList(ChatAppStoreBo bo, PageQuery pageQuery) {
-        LambdaQueryWrapper<ChatAppStore> lqw = buildQueryWrapper(bo);
-        Page<ChatAppStoreVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        return TableDataInfo.build(result);
-    }
-
-    /**
-     * 查询应用市场列表
-     */
-    @Override
-    public List<ChatAppStoreVo> queryList(ChatAppStoreBo bo) {
-        LambdaQueryWrapper<ChatAppStore> lqw = buildQueryWrapper(bo);
-        return baseMapper.selectVoList(lqw);
-    }
-
-    private LambdaQueryWrapper<ChatAppStore> buildQueryWrapper(ChatAppStoreBo bo) {
-        Map<String, Object> params = bo.getParams();
-        LambdaQueryWrapper<ChatAppStore> lqw = Wrappers.lambdaQuery();
-        lqw.like(StringUtils.isNotBlank(bo.getName()), ChatAppStore::getName, bo.getName());
-        lqw.eq(StringUtils.isNotBlank(bo.getDescription()), ChatAppStore::getDescription, bo.getDescription());
-        lqw.eq(StringUtils.isNotBlank(bo.getAvatar()), ChatAppStore::getAvatar, bo.getAvatar());
-        lqw.eq(bo.getCreateBy()!=null, ChatAppStore::getCreateBy, bo.getCreateBy());
-        return lqw;
-    }
-
-    /**
-     * 新增应用市场
-     */
-    @Override
-    public Boolean insertByBo(RoleRequest roleRequest) {
-        try {
-            String prompt = convertFileToBase64(roleRequest.getPrompt());
-            roleRequest.setPrompt("data:audio/x-m4a;base64," + prompt);
-
-            String avatar = convertFileToBase64(roleRequest.getAvatar());
-            roleRequest.setAvatar("data:image/png;base64," + avatar);
-
-        } catch (IOException e) {
-            log.error("转换base64出现错误:{}", e.getMessage());
-        }
-        // 创建一个Request对象来配置你的请求
-        String json = JSONUtil.toJsonStr(roleRequest);
-        Request postRequest = audioOkHttpUtil.createPostRequest("api/tts/voice", json);
-        String body = audioOkHttpUtil.executeRequest(postRequest);
-        RoleResponse bean = JSONUtil.toBean(body, RoleResponse.class);
-        ChatAppStore addVoiceRole = new ChatAppStore();
-        addVoiceRole.setName(roleRequest.getName());
-        addVoiceRole.setDescription(roleRequest.getDescription());
-        addVoiceRole.setAvatar(bean.getData().getMetadata().getAvatar());
-
-        return baseMapper.insert(addVoiceRole) > 0;
-    }
-
-    private static String convertFileToBase64(String fileUrl) throws IOException {
-        OkHttpClient client = new OkHttpClient();
-        Request request = new Request.Builder().url(fileUrl).build();
-        Response response = client.newCall(request).execute();
-        if (!response.isSuccessful()) throw new IOException("Failed to download file: " + response);
-        byte[] fileData = response.body().bytes();
-        return Base64.getEncoder().encodeToString(fileData);
-    }
-
-    /**
-     * 修改应用市场
-     */
-    @Override
-    public Boolean updateByBo(ChatAppStoreBo bo) {
-        ChatAppStore update = MapstructUtils.convert(bo, ChatAppStore.class);
-        validEntityBeforeSave(update);
-        return baseMapper.updateById(update) > 0;
-    }
-
-    /**
-     * 保存前的数据校验
-     */
-    private void validEntityBeforeSave(ChatAppStore entity) {
-        //TODO 做一些数据校验,如唯一约束
-    }
-
-    /**
-     * 批量删除应用市场
-     */
-    @Override
-    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if (isValid) {
-            //TODO 做一些业务上的校验,判断是否需要校验
-        }
-        return baseMapper.deleteBatchIds(ids) > 0;
-    }
-
-    /**
-     * 实时生成语音
-     *
-     * @param simpleGenerateRequest 生成语音对象
-     * @return 生成的语音信息
-     */
-    @Override
-    public SimpleGenerateDataResponse simpleGenerate(SimpleGenerateRequest simpleGenerateRequest) {
-        double charge = calculateCharge(simpleGenerateRequest.getText());
-        // 扣除费用并且保存消息记录
-        chatService.taskDeduct(simpleGenerateRequest.getModel(), simpleGenerateRequest.getText(), charge);
-        // 创建一个Request对象来配置你的请求
-        String json = JSONUtil.toJsonStr(simpleGenerateRequest);
-        Request postRequest = audioOkHttpUtil.createPostRequest("api/tts/simple-generate", json);
-        String body = audioOkHttpUtil.executeRequest(postRequest);
-        SimpleGenerateResponse bean = JSONUtil.toBean(body, SimpleGenerateResponse.class);
-        return bean.getData();
-    }
-
-    /**
-     * 查询市场角色
-     *
-     * @return 角色列表
-     */
-    @Override
-    public List<ChatAppStoreVO> roleList() {
-        Request postRequest = audioOkHttpUtil.createGetRequest("api/tts/voice");
-        String body = audioOkHttpUtil.executeRequest(postRequest);
-        RoleListResponse bean = JSONUtil.toBean(body, RoleListResponse.class);
-        List<ChatAppStoreVO> roleList = new ArrayList<>();
-        for (ContentResponse element : bean.getData()) {
-            String name = element.getName();
-            String description = element.getMetadata().getDescription();
-            String voicesId = element.getId();
-            String avatar = element.getMetadata().getAvatar();
-            String previewAudio;
-            if (element.getMetadata().getPrompts() == null) {
-                // 从JSON中解析出的数据没有prompts
-                previewAudio = element.getMetadata().getPreviewAudio();
-            } else {
-                previewAudio = element.getMetadata().getPrompts().get(0).getPromptOriginAudioStorageUrl();
-            }
-            //roleList.add(new ChatAppStoreVO());
-        }
-        return roleList;
-
-    }
-
-    /**
-     * 收藏市场角色
-     */
-    @Override
-    public void copyRole(RoleListDto roleListDto) {
-        // 保存至数据库
-        ChatAppStore voiceRole = new ChatAppStore();
-        voiceRole.setName(roleListDto.getName());
-        voiceRole.setDescription(roleListDto.getDescription());
-        voiceRole.setAvatar(roleListDto.getAvatar());
-        baseMapper.insert(voiceRole);
-    }
-
-    /**
-     * 根据文本长度计算扣除的金额。
-     *
-     * @param text 输入的文本
-     * @return 扣除的金额
-     */
-    public static double calculateCharge(String text) {
-        if (text == null || text.isEmpty()) {
-            return 0.0;
-        }
-
-        int length = text.length();
-        double charge = 0.0;
-
-        while (length > 0) {
-            if (length >= 500) {
-                // 对于每500个字符,扣除0.5元
-                charge += (length / 500) * 0.5;
-                length %= 500; // 处理剩余字符
-            } else if (length >= 100) {
-                // 对于100到499个字符,扣除0.2元
-                charge += 0.2;
-                break; // 处理完毕,退出循环
-            } else {
-                // 对于少于100个字符,扣除0.1元
-                charge += 0.1;
-                break; // 处理完毕,退出循环
-            }
-        }
-        return charge;
-    }
-
-    public Long getUserId() {
-        LoginUser loginUser = LoginHelper.getLoginUser();
-        if (loginUser == null) {
-            throw new BaseException("用户未登录!");
-        }
-        return loginUser.getUserId();
-    }
-}

+ 0 - 159
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatConfigServiceImpl.java

@@ -1,159 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.ruoyi.common.core.event.ConfigChangeEvent;
-import org.ruoyi.common.core.service.ConfigService;
-import org.ruoyi.common.core.utils.MapstructUtils;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.ChatConfig;
-import org.ruoyi.system.domain.bo.ChatConfigBo;
-import org.ruoyi.system.domain.vo.ChatConfigVo;
-import org.ruoyi.system.mapper.ChatConfigMapper;
-import org.ruoyi.system.service.IChatConfigService;
-import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.stereotype.Service;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 对话配置信息
-Service业务层处理
- *
- * @author Lion Li
- * @date 2024-04-13
- */
-@RequiredArgsConstructor
-@Service
-@Slf4j
-public class ChatConfigServiceImpl implements IChatConfigService, ConfigService {
-
-    private final ChatConfigMapper baseMapper;
-
-    private final ApplicationEventPublisher eventPublisher;
-
-    /**
-     * 查询对话配置信息
-
-     */
-    @Override
-    public ChatConfigVo queryById(Long id){
-        return baseMapper.selectVoById(id);
-    }
-
-    /**
-     * 查询对话配置信息列表
-     */
-    @Override
-    public TableDataInfo<ChatConfigVo> queryPageList(ChatConfigBo bo, PageQuery pageQuery) {
-        LambdaQueryWrapper<ChatConfig> lqw = buildQueryWrapper(bo);
-        Page<ChatConfigVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        return TableDataInfo.build(result);
-    }
-
-    /**
-     * 查询对话配置信息列表
-     */
-    @Override
-    public List<ChatConfigVo> queryList(ChatConfigBo bo) {
-        LambdaQueryWrapper<ChatConfig> lqw = buildQueryWrapper(bo);
-        return baseMapper.selectVoList(lqw);
-    }
-
-    private LambdaQueryWrapper<ChatConfig> buildQueryWrapper(ChatConfigBo bo) {
-        LambdaQueryWrapper<ChatConfig> lqw = Wrappers.lambdaQuery();
-        lqw.eq(StringUtils.isNotBlank(bo.getCategory()), ChatConfig::getCategory, bo.getCategory());
-        lqw.like(StringUtils.isNotBlank(bo.getConfigName()), ChatConfig::getConfigName, bo.getConfigName());
-        lqw.eq(StringUtils.isNotBlank(bo.getConfigValue()), ChatConfig::getConfigValue, bo.getConfigValue());
-        return lqw;
-    }
-
-    /**
-     * 新增对话配置信息
-
-     */
-    @Override
-    public Boolean insertByBo(ChatConfigBo bo) {
-        ChatConfig add = MapstructUtils.convert(bo, ChatConfig.class);
-        validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
-        if (flag) {
-            bo.setId(add.getId());
-        }
-        return flag;
-    }
-
-    /**
-     * 修改对话配置信息
-
-     */
-    @Override
-    public Boolean updateByBo(ChatConfigBo bo) {
-        ChatConfig update = MapstructUtils.convert(bo, ChatConfig.class);
-        validEntityBeforeSave(update);
-        // 更新配置信息(类型区分)
-        eventPublisher.publishEvent(new ConfigChangeEvent(this));
-        return baseMapper.updateById(update) > 0;
-    }
-
-    /**
-     * 保存前的数据校验
-     */
-    private void validEntityBeforeSave(ChatConfig entity){
-        //TODO 做一些数据校验,如唯一约束
-    }
-
-    /**
-     * 批量删除对话配置信息
-
-     */
-    @Override
-    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
-            //TODO 做一些业务上的校验,判断是否需要校验
-        }
-        return baseMapper.deleteBatchIds(ids) > 0;
-    }
-
-    /**
-     * 根据配置类型和配置key获取值
-     *
-     * @param category
-     * @param configKey
-     * @return
-     */
-    @Override
-    public String getConfigValue(String category,String configKey) {
-        ChatConfigBo bo = new ChatConfigBo();
-        bo.setCategory(category);
-        bo.setConfigName(configKey);
-        LambdaQueryWrapper<ChatConfig> lqw = buildQueryWrapper(bo);
-        ChatConfigVo chatConfigVo = baseMapper.selectVoOne(lqw);
-        if(chatConfigVo != null){
-            return chatConfigVo.getConfigValue();
-        }else {
-            return "";
-        }
-    }
-
-    /**
-     * 根据配置类型和配置key获取值
-     *
-     * @param category
-     * @return
-     */
-    @Override
-    public List<ChatConfigVo> getSysConfigValue(String category) {
-        ChatConfigBo bo = new ChatConfigBo();
-        bo.setCategory(category);
-        LambdaQueryWrapper<ChatConfig> lqw = buildQueryWrapper(bo);
-        return baseMapper.selectVoList(lqw);
-    }
-
-}

+ 0 - 161
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatCostServiceImpl.java

@@ -1,161 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.ruoyi.common.core.domain.model.LoginUser;
-import org.ruoyi.common.core.exception.ServiceException;
-import org.ruoyi.common.core.exception.base.BaseException;
-import org.ruoyi.common.satoken.utils.LoginHelper;
-import org.ruoyi.system.domain.ChatToken;
-import org.ruoyi.system.domain.SysUser;
-import org.ruoyi.system.domain.bo.ChatMessageBo;
-import org.ruoyi.system.domain.bo.SysModelBo;
-import org.ruoyi.system.domain.vo.SysModelVo;
-import org.ruoyi.system.mapper.SysUserMapper;
-import org.ruoyi.system.service.IChatCostService;
-import org.ruoyi.system.service.IChatMessageService;
-import org.ruoyi.system.service.IChatTokenService;
-import org.ruoyi.system.service.ISysModelService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * @author hncboy
- * @date 2023/3/22 19:41
- * 聊天相关业务实现类
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class ChatCostServiceImpl implements IChatCostService {
-
-    private final SysUserMapper sysUserMapper;
-
-    private final IChatMessageService chatMessageService;
-
-    private final IChatTokenService chatTokenService;
-
-    private final ISysModelService sysModelService;
-
-    /**
-     * 根据消耗的tokens扣除余额
-     *
-     * @param chatMessageBo
-     */
-    public void deductToken(ChatMessageBo chatMessageBo) {
-        // 计算总token数
-        ChatToken chatToken = chatTokenService.queryByUserId(chatMessageBo.getUserId(), chatMessageBo.getModelName());
-        if (chatToken == null) {
-            chatToken = new ChatToken();
-            chatToken.setToken(0);
-        }
-        int totalTokens = chatToken.getToken() + chatMessageBo.getTotalTokens();
-        // 如果总token数大于等于1000,进行费用扣除
-        if (totalTokens >= 1000) {
-            // 计算费用
-            int token1 = totalTokens / 1000;
-            int token2 = totalTokens % 1000;
-            if (token2 > 0) {
-                // 保存剩余tokens
-                chatToken.setModelName(chatMessageBo.getModelName());
-                chatToken.setUserId(chatMessageBo.getUserId());
-                chatToken.setToken(token2);
-                chatTokenService.editToken(chatToken);
-            } else {
-                chatTokenService.resetToken(chatMessageBo.getUserId(), chatMessageBo.getModelName());
-            }
-            // 扣除用户余额
-            SysModelBo sysModelBo = new SysModelBo();
-            sysModelBo.setModelName(chatMessageBo.getModelName());
-            List<SysModelVo> sysModelList = sysModelService.queryList(sysModelBo);
-            double modelPrice = sysModelList.get(0).getModelPrice();
-            Double numberCost = token1 * modelPrice;
-            deductUserBalance(chatMessageBo.getUserId(), numberCost);
-            chatMessageBo.setDeductCost(numberCost);
-        } else {
-            // 扣除用户余额
-            deductUserBalance(chatMessageBo.getUserId(), 0.0);
-            chatMessageBo.setDeductCost(0d);
-            chatMessageBo.setRemark("不满1kToken,计入下一次!");
-            chatToken.setToken(totalTokens);
-            chatToken.setModelName(chatMessageBo.getModelName());
-            chatToken.setUserId(chatMessageBo.getUserId());
-            chatTokenService.editToken(chatToken);
-        }
-        // 保存消息记录
-        chatMessageService.insertByBo(chatMessageBo);
-    }
-
-
-
-    /**
-     * 从用户余额中扣除费用
-     *
-     * @param userId     用户ID
-     * @param numberCost 要扣除的费用
-     */
-    @Override
-    public void deductUserBalance(Long userId, Double numberCost) {
-        SysUser sysUser = sysUserMapper.selectById(userId);
-        if (sysUser == null) {
-            return;
-        }
-
-        Double userBalance = sysUser.getUserBalance();
-        if (userBalance < numberCost || userBalance == 0) {
-            throw new ServiceException("余额不足, 请充值");
-        }
-        sysUserMapper.update(null,
-            new LambdaUpdateWrapper<SysUser>()
-                .set(SysUser::getUserBalance, Math.max(userBalance - numberCost, 0))
-                .eq(SysUser::getUserId, userId));
-    }
-
-
-
-    /**
-     * 扣除任务费用
-     *
-     */
-    @Override
-    public void taskDeduct(String type,String prompt, double cost) {
-        // 判断用户是否付费
-        checkUserGrade();
-        // 扣除费用
-        deductUserBalance(getUserId(), cost);
-        // 保存消息记录
-        ChatMessageBo chatMessageBo = new ChatMessageBo();
-        chatMessageBo.setUserId(getUserId());
-        chatMessageBo.setModelName(type);
-        chatMessageBo.setContent(prompt);
-        chatMessageBo.setDeductCost(cost);
-        chatMessageBo.setTotalTokens(0);
-        chatMessageService.insertByBo(chatMessageBo);
-    }
-
-    /**
-     * 判断用户是否付费
-     */
-    @Override
-    public void checkUserGrade() {
-        SysUser sysUser = sysUserMapper.selectById(getUserId());
-        if("0".equals(sysUser.getUserGrade())){
-            throw new BaseException("This model is currently unavailable for free users. Please make any amount of deposit to access.");
-        }
-    }
-
-    /**
-     * 获取用户Id
-     *
-     * @return
-     */
-    public Long getUserId() {
-        LoginUser loginUser = LoginHelper.getLoginUser();
-        if (loginUser == null) {
-            throw new BaseException("用户未登录!");
-        }
-        return loginUser.getUserId();
-    }
-}

+ 0 - 118
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatGptsServiceImpl.java

@@ -1,118 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import org.ruoyi.common.core.utils.MapstructUtils;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.ChatGpts;
-import org.ruoyi.system.domain.bo.ChatGptsBo;
-import org.ruoyi.system.domain.vo.ChatGptsVo;
-import org.ruoyi.system.mapper.ChatGptsMapper;
-import org.ruoyi.system.service.IChatGptsService;
-import org.springframework.stereotype.Service;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * gpts管理Service业务层处理
- *
- * @author Lion Li
- * @date 2024-07-09
- */
-@RequiredArgsConstructor
-@Service
-public class ChatGptsServiceImpl implements IChatGptsService {
-
-    private final ChatGptsMapper baseMapper;
-
-    /**
-     * 查询gpts管理
-     */
-    @Override
-    public ChatGptsVo queryById(Long id){
-        return baseMapper.selectVoById(id);
-    }
-
-    /**
-     * 查询gpts管理列表
-     */
-    @Override
-    public TableDataInfo<ChatGptsVo> queryPageList(ChatGptsBo bo, PageQuery pageQuery) {
-        LambdaQueryWrapper<ChatGpts> lqw = buildQueryWrapper(bo);
-        Page<ChatGptsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        return TableDataInfo.build(result);
-    }
-
-    /**
-     * 查询gpts管理列表
-     */
-    @Override
-    public List<ChatGptsVo> queryList(ChatGptsBo bo) {
-        LambdaQueryWrapper<ChatGpts> lqw = buildQueryWrapper(bo);
-        return baseMapper.selectVoList(lqw);
-    }
-
-    private LambdaQueryWrapper<ChatGpts> buildQueryWrapper(ChatGptsBo bo) {
-        Map<String, Object> params = bo.getParams();
-        LambdaQueryWrapper<ChatGpts> lqw = Wrappers.lambdaQuery();
-        lqw.eq(StringUtils.isNotBlank(bo.getGid()), ChatGpts::getGid, bo.getGid());
-        lqw.like(StringUtils.isNotBlank(bo.getName()), ChatGpts::getName, bo.getName());
-        lqw.eq(StringUtils.isNotBlank(bo.getLogo()), ChatGpts::getLogo, bo.getLogo());
-        lqw.eq(StringUtils.isNotBlank(bo.getInfo()), ChatGpts::getInfo, bo.getInfo());
-        lqw.eq(StringUtils.isNotBlank(bo.getAuthorId()), ChatGpts::getAuthorId, bo.getAuthorId());
-        lqw.like(StringUtils.isNotBlank(bo.getAuthorName()), ChatGpts::getAuthorName, bo.getAuthorName());
-        lqw.eq(StringUtils.isNotBlank(bo.getUseCnt()), ChatGpts::getUseCnt, bo.getUseCnt());
-        lqw.eq(StringUtils.isNotBlank(bo.getBad()), ChatGpts::getBad, bo.getBad());
-        lqw.eq(StringUtils.isNotBlank(bo.getType()), ChatGpts::getType, bo.getType());
-        lqw.eq(StringUtils.isNotBlank(bo.getUpdateIp()), ChatGpts::getUpdateIp, bo.getUpdateIp());
-        return lqw;
-    }
-
-    /**
-     * 新增gpts管理
-     */
-    @Override
-    public Boolean insertByBo(ChatGptsBo bo) {
-        ChatGpts add = MapstructUtils.convert(bo, ChatGpts.class);
-        validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
-        if (flag) {
-            bo.setId(add.getId());
-        }
-        return flag;
-    }
-
-    /**
-     * 修改gpts管理
-     */
-    @Override
-    public Boolean updateByBo(ChatGptsBo bo) {
-        ChatGpts update = MapstructUtils.convert(bo, ChatGpts.class);
-        validEntityBeforeSave(update);
-        return baseMapper.updateById(update) > 0;
-    }
-
-    /**
-     * 保存前的数据校验
-     */
-    private void validEntityBeforeSave(ChatGpts entity){
-        //TODO 做一些数据校验,如唯一约束
-    }
-
-    /**
-     * 批量删除gpts管理
-     */
-    @Override
-    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
-            //TODO 做一些业务上的校验,判断是否需要校验
-        }
-        return baseMapper.deleteBatchIds(ids) > 0;
-    }
-}

+ 0 - 144
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatMessageServiceImpl.java

@@ -1,144 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import cn.hutool.core.collection.CollectionUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.RequiredArgsConstructor;
-import org.ruoyi.common.core.utils.MapstructUtils;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.system.domain.ChatMessage;
-import org.ruoyi.system.domain.SysUser;
-import org.ruoyi.system.domain.bo.ChatMessageBo;
-import org.ruoyi.system.domain.vo.ChatMessageVo;
-import org.ruoyi.system.domain.vo.SysUserVo;
-import org.ruoyi.system.mapper.ChatMessageMapper;
-import org.ruoyi.system.mapper.SysUserMapper;
-import org.ruoyi.system.service.IChatMessageService;
-import org.springframework.stereotype.Service;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- * 聊天消息Service业务层处理
- *
- * @author Lion Li
- * @date 2023-11-26
- */
-@RequiredArgsConstructor
-@Service
-public class ChatMessageServiceImpl implements IChatMessageService {
-
-    private final ChatMessageMapper baseMapper;
-
-    private final SysUserMapper sysUserMapper;
-    /**
-     * 查询聊天消息
-     */
-    @Override
-    public ChatMessageVo queryById(Long id){
-        return baseMapper.selectVoById(id);
-    }
-
-    /**
-     * 查询聊天消息列表
-     */
-    @Override
-    public TableDataInfo<ChatMessageVo> queryPageList(ChatMessageBo bo, PageQuery pageQuery) {
-        // 根据用户名称查询用户
-        if(StringUtils.isNotEmpty(bo.getUserName())){
-            SysUserVo sysUserVo = sysUserMapper.selectUserByUserName(bo.getUserName());
-            bo.setUserId(sysUserVo.getUserId());
-        }
-
-        LambdaQueryWrapper<ChatMessage> lqw = buildQueryWrapper(bo);
-        Page<ChatMessageVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        if(CollectionUtil.isEmpty(result.getRecords())){
-            return TableDataInfo.build(result);
-        }
-        List<Long> userIds = result.getRecords().stream()
-            .map(ChatMessageVo::getUserId)
-            .collect(Collectors.toList());
-        // 一次性查询所有userName
-        Map<Long, String> userIdToUserNameMap = getUserNamesByUserIds(userIds);
-        // 设置userName
-        result.getRecords().forEach(chatMessageVo -> {
-            chatMessageVo.setUserName(userIdToUserNameMap.get(chatMessageVo.getUserId()));
-        });
-        return TableDataInfo.build(result);
-    }
-
-    private Map<Long, String> getUserNamesByUserIds(List<Long> userIds) {
-        // 实现批量查询userName的逻辑,例如通过sysUserMapper查询sys_user表
-        List<SysUser> sysUsers = sysUserMapper.selectBatchIds(userIds);
-        return sysUsers.stream()
-            .collect(Collectors.toMap(SysUser::getUserId, SysUser::getUserName));
-    }
-
-    /**
-     * 查询聊天消息列表
-     */
-    @Override
-    public List<ChatMessageVo> queryList(ChatMessageBo bo) {
-        LambdaQueryWrapper<ChatMessage> lqw = buildQueryWrapper(bo);
-        return baseMapper.selectVoList(lqw);
-    }
-
-    private LambdaQueryWrapper<ChatMessage> buildQueryWrapper(ChatMessageBo bo) {
-        Map<String, Object> params = bo.getParams();
-        LambdaQueryWrapper<ChatMessage> lqw = Wrappers.lambdaQuery();
-        lqw.eq(bo.getUserId() != null, ChatMessage::getUserId, bo.getUserId());
-        lqw.eq(StringUtils.isNotBlank(bo.getContent()), ChatMessage::getContent, bo.getContent());
-        lqw.eq(bo.getDeductCost() != null, ChatMessage::getDeductCost, bo.getDeductCost());
-        lqw.eq(bo.getTotalTokens() != null, ChatMessage::getTotalTokens, bo.getTotalTokens());
-        lqw.like(StringUtils.isNotBlank(bo.getModelName()), ChatMessage::getModelName, bo.getModelName());
-        return lqw;
-    }
-
-    /**
-     * 新增聊天消息
-     */
-    @Override
-    public Boolean insertByBo(ChatMessageBo bo) {
-        ChatMessage add = MapstructUtils.convert(bo, ChatMessage.class);
-        validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
-        if (flag) {
-            bo.setId(add.getId());
-        }
-        return flag;
-    }
-
-    /**
-     * 修改聊天消息
-     */
-    @Override
-    public Boolean updateByBo(ChatMessageBo bo) {
-        ChatMessage update = MapstructUtils.convert(bo, ChatMessage.class);
-        validEntityBeforeSave(update);
-        return baseMapper.updateById(update) > 0;
-    }
-
-    /**
-     * 保存前的数据校验
-     */
-    private void validEntityBeforeSave(ChatMessage entity){
-        //TODO 做一些数据校验,如唯一约束
-    }
-
-    /**
-     * 批量删除聊天消息
-     */
-    @Override
-    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
-            //TODO 做一些业务上的校验,判断是否需要校验
-        }
-        return baseMapper.deleteBatchIds(ids) > 0;
-    }
-}

+ 0 - 110
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatPluginServiceImpl.java

@@ -1,110 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import org.ruoyi.common.core.utils.MapstructUtils;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.ruoyi.system.domain.bo.ChatPluginBo;
-import org.ruoyi.system.domain.vo.ChatPluginVo;
-import org.ruoyi.system.domain.ChatPlugin;
-import org.ruoyi.system.mapper.ChatPluginMapper;
-import org.ruoyi.system.service.IChatPluginService;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
-
-/**
- * 插件管理Service业务层处理
- *
- * @author ageerle
- * @date 2025-03-30
- */
-@RequiredArgsConstructor
-@Service
-public class ChatPluginServiceImpl implements IChatPluginService {
-
-    private final ChatPluginMapper baseMapper;
-
-    /**
-     * 查询插件管理
-     */
-    @Override
-    public ChatPluginVo queryById(Long id){
-        return baseMapper.selectVoById(id);
-    }
-
-    /**
-     * 查询插件管理列表
-     */
-    @Override
-    public TableDataInfo<ChatPluginVo> queryPageList(ChatPluginBo bo, PageQuery pageQuery) {
-        LambdaQueryWrapper<ChatPlugin> lqw = buildQueryWrapper(bo);
-        Page<ChatPluginVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        return TableDataInfo.build(result);
-    }
-
-    /**
-     * 查询插件管理列表
-     */
-    @Override
-    public List<ChatPluginVo> queryList(ChatPluginBo bo) {
-        LambdaQueryWrapper<ChatPlugin> lqw = buildQueryWrapper(bo);
-        return baseMapper.selectVoList(lqw);
-    }
-
-    private LambdaQueryWrapper<ChatPlugin> buildQueryWrapper(ChatPluginBo bo) {
-        Map<String, Object> params = bo.getParams();
-        LambdaQueryWrapper<ChatPlugin> lqw = Wrappers.lambdaQuery();
-        lqw.like(StringUtils.isNotBlank(bo.getName()), ChatPlugin::getName, bo.getName());
-        lqw.eq(StringUtils.isNotBlank(bo.getCode()), ChatPlugin::getCode, bo.getCode());
-        return lqw;
-    }
-
-    /**
-     * 新增插件管理
-     */
-    @Override
-    public Boolean insertByBo(ChatPluginBo bo) {
-        ChatPlugin add = MapstructUtils.convert(bo, ChatPlugin.class);
-        validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
-        if (flag) {
-            bo.setId(add.getId());
-        }
-        return flag;
-    }
-
-    /**
-     * 修改插件管理
-     */
-    @Override
-    public Boolean updateByBo(ChatPluginBo bo) {
-        ChatPlugin update = MapstructUtils.convert(bo, ChatPlugin.class);
-        validEntityBeforeSave(update);
-        return baseMapper.updateById(update) > 0;
-    }
-
-    /**
-     * 保存前的数据校验
-     */
-    private void validEntityBeforeSave(ChatPlugin entity){
-        //TODO 做一些数据校验,如唯一约束
-    }
-
-    /**
-     * 批量删除插件管理
-     */
-    @Override
-    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
-            //TODO 做一些业务上的校验,判断是否需要校验
-        }
-        return baseMapper.deleteBatchIds(ids) > 0;
-    }
-}

+ 0 - 55
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatTokenServiceImpl.java

@@ -1,55 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import org.ruoyi.system.domain.ChatToken;
-import org.ruoyi.system.mapper.ChatTokenMapper;
-import org.ruoyi.system.service.IChatTokenService;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Service;
-
-/**
- * 聊天消息Service业务层处理
- *
- * @author Lion Li
- * @date 2023-11-26
- */
-@RequiredArgsConstructor
-@Service
-public class ChatTokenServiceImpl implements IChatTokenService {
-
-    private final ChatTokenMapper baseMapper;
-
-    @Override
-    public ChatToken queryByUserId(Long userId,String modelName) {
-        return baseMapper.selectOne(
-            new LambdaQueryWrapper<ChatToken>()
-                .eq(ChatToken::getUserId, userId)
-                .eq(ChatToken::getModelName, modelName)
-                .last("limit 1")
-        );
-    }
-
-    /**
-     * 清空用户token
-     *
-     */
-    @Override
-    public void resetToken(Long userId,String modelName) {
-        ChatToken chatToken = queryByUserId(userId, modelName);
-        chatToken.setToken(0);
-        baseMapper.updateById(chatToken);
-    }
-
-    /**
-     * 增加用户token
-     *
-     */
-    @Override
-    public void editToken(ChatToken chatToken) {
-        if(chatToken.getId() == null){
-            baseMapper.insert(chatToken);
-        }else {
-            baseMapper.updateById(chatToken);
-        }
-    }
-}

+ 0 - 112
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatVisitorUsageServiceImpl.java

@@ -1,112 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import org.ruoyi.common.core.utils.MapstructUtils;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.ruoyi.system.domain.bo.ChatVisitorUsageBo;
-import org.ruoyi.system.domain.vo.ChatVisitorUsageVo;
-import org.ruoyi.system.domain.ChatVisitorUsage;
-import org.ruoyi.system.mapper.ChatVisitorUsageMapper;
-import org.ruoyi.system.service.IChatVisitorUsageService;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
-
-/**
- * 访客管理Service业务层处理
- *
- * @author Lion Li
- * @date 2024-07-14
- */
-@RequiredArgsConstructor
-@Service
-public class ChatVisitorUsageServiceImpl implements IChatVisitorUsageService {
-
-    private final ChatVisitorUsageMapper baseMapper;
-
-    /**
-     * 查询访客管理
-     */
-    @Override
-    public ChatVisitorUsageVo queryById(Long id){
-        return baseMapper.selectVoById(id);
-    }
-
-    /**
-     * 查询访客管理列表
-     */
-    @Override
-    public TableDataInfo<ChatVisitorUsageVo> queryPageList(ChatVisitorUsageBo bo, PageQuery pageQuery) {
-        LambdaQueryWrapper<ChatVisitorUsage> lqw = buildQueryWrapper(bo);
-        Page<ChatVisitorUsageVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        return TableDataInfo.build(result);
-    }
-
-    /**
-     * 查询访客管理列表
-     */
-    @Override
-    public List<ChatVisitorUsageVo> queryList(ChatVisitorUsageBo bo) {
-        LambdaQueryWrapper<ChatVisitorUsage> lqw = buildQueryWrapper(bo);
-        return baseMapper.selectVoList(lqw);
-    }
-
-    private LambdaQueryWrapper<ChatVisitorUsage> buildQueryWrapper(ChatVisitorUsageBo bo) {
-        Map<String, Object> params = bo.getParams();
-        LambdaQueryWrapper<ChatVisitorUsage> lqw = Wrappers.lambdaQuery();
-        lqw.eq(StringUtils.isNotBlank(bo.getFingerprint()), ChatVisitorUsage::getFingerprint, bo.getFingerprint());
-        lqw.eq(StringUtils.isNotBlank(bo.getUsageCount()), ChatVisitorUsage::getUsageCount, bo.getUsageCount());
-        lqw.eq(StringUtils.isNotBlank(bo.getIpAddress()), ChatVisitorUsage::getIpAddress, bo.getIpAddress());
-        lqw.eq(StringUtils.isNotBlank(bo.getUpdateIp()), ChatVisitorUsage::getUpdateIp, bo.getUpdateIp());
-        return lqw;
-    }
-
-    /**
-     * 新增访客管理
-     */
-    @Override
-    public Boolean insertByBo(ChatVisitorUsageBo bo) {
-        ChatVisitorUsage add = MapstructUtils.convert(bo, ChatVisitorUsage.class);
-        validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
-        if (flag) {
-            bo.setId(add.getId());
-        }
-        return flag;
-    }
-
-    /**
-     * 修改访客管理
-     */
-    @Override
-    public Boolean updateByBo(ChatVisitorUsageBo bo) {
-        ChatVisitorUsage update = MapstructUtils.convert(bo, ChatVisitorUsage.class);
-        validEntityBeforeSave(update);
-        return baseMapper.updateById(update) > 0;
-    }
-
-    /**
-     * 保存前的数据校验
-     */
-    private void validEntityBeforeSave(ChatVisitorUsage entity){
-        //TODO 做一些数据校验,如唯一约束
-    }
-
-    /**
-     * 批量删除访客管理
-     */
-    @Override
-    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
-            //TODO 做一些业务上的校验,判断是否需要校验
-        }
-        return baseMapper.deleteBatchIds(ids) > 0;
-    }
-}

+ 0 - 180
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatVoucherServiceImpl.java

@@ -1,180 +0,0 @@
-package org.ruoyi.system.service.impl;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollectionUtil;
-import org.ruoyi.common.core.utils.MapstructUtils;
-import org.ruoyi.common.core.utils.StringUtils;
-import org.ruoyi.common.mybatis.core.page.TableDataInfo;
-import org.ruoyi.common.mybatis.core.page.PageQuery;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import org.ruoyi.common.satoken.utils.LoginHelper;
-import org.ruoyi.system.domain.SysUser;
-import org.ruoyi.system.domain.bo.SysUserBo;
-import org.ruoyi.system.domain.vo.SysUserVo;
-import org.ruoyi.system.mapper.SysUserMapper;
-import org.ruoyi.system.service.ISysUserService;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.ruoyi.system.domain.bo.ChatVoucherBo;
-import org.ruoyi.system.domain.vo.ChatVoucherVo;
-import org.ruoyi.system.domain.ChatVoucher;
-import org.ruoyi.system.mapper.ChatVoucherMapper;
-import org.ruoyi.system.service.IChatVoucherService;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
-import java.util.stream.Collectors;
-
-/**
- * 用户兑换记录Service业务层处理
- *
- * @author Lion Li
- * @date 2024-05-03
- */
-@RequiredArgsConstructor
-@Service
-public class ChatVoucherServiceImpl implements IChatVoucherService {
-
-    private final ChatVoucherMapper baseMapper;
-
-    private final ISysUserService sysUserService;
-
-    private final SysUserMapper sysUserMapper;
-
-    /**
-     * 查询用户兑换记录
-     */
-    @Override
-    public ChatVoucherVo queryById(Long id){
-        return baseMapper.selectVoById(id);
-    }
-
-    /**
-     * 查询用户兑换记录列表
-     */
-    @Override
-    public TableDataInfo<ChatVoucherVo> queryPageList(ChatVoucherBo bo, PageQuery pageQuery) {
-        LambdaQueryWrapper<ChatVoucher> lqw = buildQueryWrapper(bo);
-        Page<ChatVoucherVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        if(CollectionUtil.isEmpty(result.getRecords())){
-            return TableDataInfo.build(result);
-        }
-        // 获取所有userId
-        List<Long> userIds = result.getRecords().stream()
-            .map(ChatVoucherVo::getUserId)
-            .collect(Collectors.toList());
-        // 一次性查询所有userName
-        Map<Long, String> userIdToUserNameMap = getUserNamesByUserIds(userIds);
-        // 设置userName
-        result.getRecords().forEach(chatVoucherVo -> {
-            chatVoucherVo.setUserName(userIdToUserNameMap.get(chatVoucherVo.getUserId()));
-        });
-        return TableDataInfo.build(result);
-    }
-
-    private Map<Long, String> getUserNamesByUserIds(List<Long> userIds) {
-        // 实现批量查询userName的逻辑,例如通过sysUserMapper查询sys_user表
-        List<SysUser> sysUsers = sysUserMapper.selectBatchIds(userIds);
-        return sysUsers.stream()
-            .collect(Collectors.toMap(SysUser::getUserId, SysUser::getUserName));
-    }
-
-    /**
-     * 查询用户兑换记录列表
-     */
-    @Override
-    public List<ChatVoucherVo> queryList(ChatVoucherBo bo) {
-        LambdaQueryWrapper<ChatVoucher> lqw = buildQueryWrapper(bo);
-        return baseMapper.selectVoList(lqw);
-    }
-
-    private LambdaQueryWrapper<ChatVoucher> buildQueryWrapper(ChatVoucherBo bo) {
-        Map<String, Object> params = bo.getParams();
-        LambdaQueryWrapper<ChatVoucher> lqw = Wrappers.lambdaQuery();
-        lqw.eq(bo.getUserId() != null, ChatVoucher::getUserId, bo.getUserId());
-        lqw.eq(StringUtils.isNotBlank(bo.getCode()), ChatVoucher::getCode, bo.getCode());
-        lqw.eq(bo.getAmount() != null, ChatVoucher::getAmount, bo.getAmount());
-        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), ChatVoucher::getStatus, bo.getStatus());
-        return lqw;
-    }
-
-    /**
-     * 新增用户兑换记录
-     */
-    @Override
-    public Boolean insertByBo(ChatVoucherBo bo) {
-        ChatVoucher add = MapstructUtils.convert(bo, ChatVoucher.class);
-        validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
-        if (flag) {
-            bo.setId(add.getId());
-        }
-        return flag;
-    }
-
-    /**
-     * 修改用户兑换记录
-     */
-    @Override
-    public Boolean updateByBo(ChatVoucherBo bo) {
-        ChatVoucher update = MapstructUtils.convert(bo, ChatVoucher.class);
-        validEntityBeforeSave(update);
-        return baseMapper.updateById(update) > 0;
-    }
-
-    /**
-     * 保存前的数据校验
-     */
-    private void validEntityBeforeSave(ChatVoucher entity){
-        //TODO 做一些数据校验,如唯一约束
-    }
-
-    /**
-     * 批量删除用户兑换记录
-     */
-    @Override
-    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
-            //TODO 做一些业务上的校验,判断是否需要校验
-        }
-        return baseMapper.deleteBatchIds(ids) > 0;
-    }
-
-    /**
-     * 兑换卡密
-     *
-     * @param bo 卡密信息
-     */
-    @Override
-    public Boolean redeem(ChatVoucherBo bo) {
-        LambdaQueryWrapper<ChatVoucher> lqw = Wrappers.lambdaQuery();
-        lqw.eq(StringUtils.isNotBlank(bo.getCode()), ChatVoucher::getCode, bo.getCode());
-        ChatVoucherVo chatVoucherVo = baseMapper.selectVoOne(lqw);
-        if(chatVoucherVo != null){
-            // 如果卡密已经兑换
-            if("2".equals(chatVoucherVo.getStatus())){
-                return false;
-            }
-            SysUserVo sysUserVo = sysUserService.selectUserById(LoginHelper.getLoginUser().getUserId());
-            // 更新卡密记录
-            chatVoucherVo.setUserId(LoginHelper.getLoginUser().getUserId());
-            chatVoucherVo.setStatus("2");
-            chatVoucherVo.setBalanceBefore(sysUserVo.getUserBalance());
-            chatVoucherVo.setBalanceAfter(sysUserVo.getUserBalance()+chatVoucherVo.getAmount());
-            // 添加用户余额
-            sysUserVo.setUserBalance(sysUserVo.getUserBalance() + chatVoucherVo.getAmount());
-            SysUserBo user = new SysUserBo();
-            BeanUtil.copyProperties(sysUserVo,user);
-            sysUserService.updateUser(user);
-
-            ChatVoucher update = MapstructUtils.convert(chatVoucherVo, ChatVoucher.class);
-            baseMapper.updateById(update);
-        }else {
-            return false;
-        }
-        return true;
-    }
-}

+ 0 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java

@@ -24,7 +24,6 @@ import org.ruoyi.system.domain.model.ApiResult;
 import org.ruoyi.system.domain.vo.cover.*;
 import org.ruoyi.system.mapper.CoverMapper;
 import org.ruoyi.system.mapper.CoverPromptAudioMapper;
-import org.ruoyi.system.service.IChatCostService;
 import org.ruoyi.system.service.ICoverService;
 import org.ruoyi.system.util.WeChatScanHttpUtil;
 import org.springframework.stereotype.Service;

+ 0 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java

@@ -9,13 +9,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.math.NumberUtils;
 import org.ruoyi.common.core.constant.Constants;
 import org.ruoyi.common.core.domain.model.LoginUser;
-import org.ruoyi.common.core.exception.base.BaseException;
 import org.ruoyi.common.core.service.ConfigService;
 import org.ruoyi.common.redis.utils.RedisUtils;
 import org.ruoyi.common.satoken.utils.LoginHelper;
 import org.ruoyi.system.cofing.OkHttpConfig;
 import org.ruoyi.system.domain.vo.ppt.*;
-import org.ruoyi.system.service.IChatCostService;
 import org.ruoyi.system.service.IPptService;
 import org.ruoyi.system.util.HttpUtils;
 import org.ruoyi.system.util.WddPptApi;
@@ -26,8 +24,6 @@ import javax.swing.filechooser.FileSystemView;
 import java.io.File;
 import java.time.Duration;
 
-import static org.ruoyi.common.satoken.utils.LoginHelper.getLoginUser;
-
 /**
  * AI-PPTService业务层处理
  *

+ 1 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SseServiceImpl.java

@@ -42,9 +42,7 @@ import org.ruoyi.common.core.utils.file.FileUtils;
 import org.ruoyi.common.core.utils.file.MimeTypeUtils;
 import org.ruoyi.common.satoken.utils.LoginHelper;
 import org.ruoyi.system.domain.SysModel;
-import org.ruoyi.system.domain.bo.ChatMessageBo;
 import org.ruoyi.system.domain.request.translation.TranslationRequest;
-import org.ruoyi.system.domain.vo.ChatGptsVo;
 import org.ruoyi.system.listener.SSEEventSourceListener;
 import org.ruoyi.system.service.*;
 import org.springframework.core.io.InputStreamResource;
@@ -78,8 +76,7 @@ public class SseServiceImpl implements ISseService {
 
     private OpenAiStreamClient openAiStreamClient;
 
-    private final ChatConfig chatConfig;
-
+    ChatConfig chatConfig;
 
     private final IChatCostService chatService;
 

+ 0 - 0
ruoyi-admin/src/main/resources/application-prod.yml → ruoyi-modules/ruoyi-system/src/main/resources/application-prod.yml


+ 0 - 0
ruoyi-admin/src/main/resources/application.yml → ruoyi-modules/ruoyi-system/src/main/resources/application.yml


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