From d2755f00bc2a6507f122f79d54ee009e2cdd26b3 Mon Sep 17 00:00:00 2001
From: ageerle <ageerle@163.com>
Date: 星期二, 08 四月 2025 16:48:06 +0800
Subject: [PATCH] feat: 测试版本提交

---
 ruoyi-modules-api/ruoyi-device-api/pom.xml                                                                  |   21 
 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SunoController.java                        |    1 
 ruoyi-modules-api/ruoyi-system-api/pom.xml                                                                  |   20 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatMessageMapper.java                     |    2 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java              |  664 +++++++++++-----------
 ruoyi-modules-api/ruoyi-knowledge-api/pom.xml                                                               |   20 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVoucherVo.java                       |    5 
 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/FaceController.java                        |    1 
 ruoyi-modules-api/pom.xml                                                                                   |   61 ++
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVisitorUsageService.java              |    8 
 ruoyi-modules/ruoyi-system/src/main/resources/logback-plus.xml                                              |    0 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/RuoYiAIApplication.java                           |    2 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatGptsService.java                      |    8 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatConfig.java                             |    6 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatConfigController.java       |    3 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatPluginMapper.java                      |    2 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatMessageController.java      |    3 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatConfigMapper.java                       |   17 
 ruoyi-modules/ruoyi-system/src/main/resources/application.yml                                               |    0 
 ruoyi-modules/ruoyi-system/src/main/resources/spy.properties                                                |    0 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java                      |    2 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatConfigBo.java                        |    5 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVoucherService.java                   |    8 
 ruoyi-modules/ruoyi-system/src/main/resources/i18n/messages_en_US.properties                                |    0 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/AuthController.java             |   16 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/CaptchaController.java          |   13 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/KnowledgeController.java        |  184 ++++++
 ruoyi-modules/ruoyi-system/src/main/resources/i18n/messages_zh_CN.properties                                |    0 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatAppStore.java                           |    4 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatPluginMapper.java                       |   16 
 ruoyi-modules/ruoyi-system/src/main/resources/ip2region.xdb                                                 |    0 
 ruoyi-modules-api/ruoyi-weixin-api/pom.xml                                                                  |   21 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatAppStoreVo.java                      |    6 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatVoucherMapper.java                      |   16 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatGptsMapper.java                        |    2 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/RuoYiAIServletInitializer.java                    |    2 
 ruoyi-modules/ruoyi-system/src/main/resources/banner.txt                                                    |    0 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatConfigVo.java                        |    5 
 pom.xml                                                                                                     |    8 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVoucherBo.java                       |    5 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatGptsVo.java                          |    5 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatTokenMapper.java                        |   16 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SseServiceImpl.java                  |    5 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatGpts.java                               |    2 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatVisitorUsageMapper.java                 |   16 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatPluginController.java       |    3 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatPluginVo.java                        |    7 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatTokenMapper.java                       |    2 
 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/LumaController.java                        |    1 
 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/VoiceController.java                       |    1 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/IndexController.java            |    2 
 ruoyi-modules-api/ruoyi-chat-api/pom.xml                                                                    |   22 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatGptsBo.java                          |    4 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatConfigService.java                    |    6 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatAppStoreMapper.java                     |   16 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVisitorUsageBo.java                  |    5 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatMessageMapper.java                      |   16 
 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java                        |    3 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java                  |    4 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatPluginBo.java                        |   14 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatMessageVo.java                       |    5 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVisitorUsageController.java |    3 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatStoreController.java        |    4 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/CaptchaVo.java                           |   25 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVisitorUsageMapper.java                |    2 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeChatController.java           |  162 ++--
 ruoyi-modules/ruoyi-system/pom.xml                                                                          |    4 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java                      |    6 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/SSEEventSourceListener.java              |    3 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatTokenVo.java                         |    6 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java                |    1 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVoucherMapper.java                     |    2 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatVisitorUsage.java                       |    2 
 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java                      |    1 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatPlugin.java                             |    5 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatMessageService.java                   |    6 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatTokenService.java                     |    6 
 ruoyi-modules/ruoyi-system/src/main/resources/application-prod.yml                                          |    0 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatMessageBo.java                       |    5 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/CacheListInfoVo.java                     |   23 
 ruoyi-modules-api/ruoyi-chat-api/src/main/resources/mapper/ChatConfigMapper.xml                             |    2 
 ruoyi-modules/ruoyi-device/pom.xml                                                                          |   21 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatAppStoreBo.java                      |    7 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVoucherController.java      |    3 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatPluginService.java                    |    9 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatCostService.java                      |    4 
 ruoyi-modules/ruoyi-weixin/pom.xml                                                                          |   21 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatVoucher.java                            |    9 
 ruoyi-modules/ruoyi-system/src/main/resources/i18n/messages.properties                                      |    0 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatMessage.java                            |    2 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatAppStoreMapper.java                    |    2 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatAppStoreService.java                  |   47 +
 /dev/null                                                                                                   |    7 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatToken.java                              |    6 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVisitorUsageVo.java                  |    4 
 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatGptsMapper.java                         |   16 
 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatGptsController.java         |    3 
 97 files changed, 1,154 insertions(+), 587 deletions(-)

diff --git a/pom.xml b/pom.xml
index d8f6728..d8d596c 100644
--- a/pom.xml
+++ b/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>
diff --git a/ruoyi-admin/Dockerfile b/ruoyi-admin/Dockerfile
deleted file mode 100644
index bf14c4e..0000000
--- a/ruoyi-admin/Dockerfile
+++ /dev/null
@@ -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"]
-
-
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
deleted file mode 100644
index 5ad40cd..0000000
--- a/ruoyi-admin/pom.xml
+++ /dev/null
@@ -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>
diff --git a/ruoyi-admin/src/main/java/org/ruoyi/controller/KnowledgeController.java b/ruoyi-admin/src/main/java/org/ruoyi/controller/KnowledgeController.java
deleted file mode 100644
index e399e88..0000000
--- a/ruoyi-admin/src/main/java/org/ruoyi/controller/KnowledgeController.java
+++ /dev/null
@@ -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);
-    }
-
-}
diff --git a/ruoyi-modules-api/pom.xml b/ruoyi-modules-api/pom.xml
new file mode 100644
index 0000000..5acc710
--- /dev/null
+++ b/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>
diff --git a/ruoyi-modules-api/ruoyi-chat-api/pom.xml b/ruoyi-modules-api/ruoyi-chat-api/pom.xml
new file mode 100644
index 0000000..fde7a46
--- /dev/null
+++ b/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>
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatAppStore.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatAppStore.java
similarity index 95%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatAppStore.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatAppStore.java
index b98cbea..298984c 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatAppStore.java
+++ b/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;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatConfig.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatConfig.java
similarity index 89%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatConfig.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatConfig.java
index a38b2f0..385bd2d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatConfig.java
+++ b/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 @@
 @Data
 @EqualsAndHashCode(callSuper = true)
 @TableName("chat_config")
-public class ChatConfig extends TenantEntity {
+public class ChatConfig extends BaseEntity {
 
     @Serial
     private static final long serialVersionUID = 1L;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatGpts.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatGpts.java
similarity index 97%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatGpts.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatGpts.java
index 8734eaa..675d769 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatGpts.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatMessage.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatMessage.java
similarity index 97%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatMessage.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatMessage.java
index b60a087..7ef7886 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatMessage.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatPlugin.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatPlugin.java
similarity index 83%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatPlugin.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatPlugin.java
index 768c667..d2c8843 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatPlugin.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatToken.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatToken.java
similarity index 96%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatToken.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatToken.java
index 865762f..e1d04ea 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatToken.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatVisitorUsage.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatVisitorUsage.java
similarity index 97%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatVisitorUsage.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatVisitorUsage.java
index 3b20381..3883ca9 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatVisitorUsage.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatVoucher.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatVoucher.java
similarity index 87%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatVoucher.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatVoucher.java
index ec4b631..047a108 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/ChatVoucher.java
+++ b/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
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatAppStoreBo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatAppStoreBo.java
similarity index 93%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatAppStoreBo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatAppStoreBo.java
index 5af1096..b4c0490 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatAppStoreBo.java
+++ b/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
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatConfigBo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatConfigBo.java
similarity index 95%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatConfigBo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatConfigBo.java
index fbada8b..bf2d7bb 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatConfigBo.java
+++ b/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.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;
+
 
 /**
  * 瀵硅瘽閰嶇疆淇℃伅
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatGptsBo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatGptsBo.java
similarity index 95%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatGptsBo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatGptsBo.java
index dd08528..2761467 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatGptsBo.java
+++ b/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 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
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatMessageBo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatMessageBo.java
similarity index 94%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatMessageBo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatMessageBo.java
index 4610ab8..e66dc71 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatMessageBo.java
+++ b/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 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
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatPluginBo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatPluginBo.java
similarity index 87%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatPluginBo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatPluginBo.java
index 141215e..1e20837 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatPluginBo.java
+++ b/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
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatVisitorUsageBo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVisitorUsageBo.java
similarity index 94%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatVisitorUsageBo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVisitorUsageBo.java
index 6518350..1755d2f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatVisitorUsageBo.java
+++ b/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 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
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatVoucherBo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVoucherBo.java
similarity index 93%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatVoucherBo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVoucherBo.java
index 98ff3c7..60983b7 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/ChatVoucherBo.java
+++ b/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 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;
 
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/CacheListInfoVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/CacheListInfoVo.java
new file mode 100644
index 0000000..b865940
--- /dev/null
+++ b/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;
+
+}
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/CaptchaVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/CaptchaVo.java
new file mode 100644
index 0000000..492d242
--- /dev/null
+++ b/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;
+
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatAppStoreVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatAppStoreVo.java
similarity index 92%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatAppStoreVo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatAppStoreVo.java
index ff46912..4ae8a95 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatAppStoreVo.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatConfigVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatConfigVo.java
similarity index 94%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatConfigVo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatConfigVo.java
index 3444ed3..ba02886 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatConfigVo.java
+++ b/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 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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatGptsVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatGptsVo.java
similarity index 95%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatGptsVo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatGptsVo.java
index b633179..ead5f6c 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatGptsVo.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatMessageVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatMessageVo.java
similarity index 95%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatMessageVo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatMessageVo.java
index 641e0f7..f21e41d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatMessageVo.java
+++ b/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 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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatPluginVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatPluginVo.java
similarity index 89%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatPluginVo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatPluginVo.java
index 4e4b096..c4d41fe 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatPluginVo.java
+++ b/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;
-
 
 
 /**
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatTokenVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatTokenVo.java
similarity index 95%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatTokenVo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatTokenVo.java
index ce7eff4..60a3c20 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatTokenVo.java
+++ b/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;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatVisitorUsageVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVisitorUsageVo.java
similarity index 92%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatVisitorUsageVo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVisitorUsageVo.java
index 217ae44..d85963d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatVisitorUsageVo.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatVoucherVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVoucherVo.java
similarity index 94%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatVoucherVo.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVoucherVo.java
index 0b13b59..b1462c5 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ChatVoucherVo.java
+++ b/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;
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatAppStoreMapper.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatAppStoreMapper.java
new file mode 100644
index 0000000..9f14244
--- /dev/null
+++ b/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> {
+
+}
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatConfigMapper.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatConfigMapper.java
new file mode 100644
index 0000000..8b8069a
--- /dev/null
+++ b/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> {
+
+
+}
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatGptsMapper.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatGptsMapper.java
new file mode 100644
index 0000000..1d9b0a5
--- /dev/null
+++ b/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> {
+
+}
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatMessageMapper.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatMessageMapper.java
new file mode 100644
index 0000000..239a5a4
--- /dev/null
+++ b/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> {
+
+}
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatPluginMapper.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatPluginMapper.java
new file mode 100644
index 0000000..e0c6456
--- /dev/null
+++ b/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> {
+
+}
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatTokenMapper.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatTokenMapper.java
new file mode 100644
index 0000000..894b240
--- /dev/null
+++ b/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> {
+
+}
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatVisitorUsageMapper.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatVisitorUsageMapper.java
new file mode 100644
index 0000000..95cac45
--- /dev/null
+++ b/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> {
+
+}
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatVoucherMapper.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatVoucherMapper.java
new file mode 100644
index 0000000..7c85930
--- /dev/null
+++ b/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> {
+
+}
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatAppStoreService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatAppStoreService.java
new file mode 100644
index 0000000..3c5f4ef
--- /dev/null
+++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatAppStoreService.java
@@ -0,0 +1,47 @@
+package org.ruoyi.service;
+
+import org.ruoyi.common.mybatis.core.page.PageQuery;
+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;
+
+/**
+ * 搴旂敤甯傚満Service鎺ュ彛
+ *
+ * @author Lion Li
+ * @date 2024-03-19
+ */
+public interface IChatAppStoreService {
+
+    /**
+     * 鏌ヨ搴旂敤甯傚満
+     */
+    ChatAppStoreVo queryById(Long id);
+
+    /**
+     * 鏌ヨ搴旂敤甯傚満鍒楄〃
+     */
+    TableDataInfo<ChatAppStoreVo> queryPageList(ChatAppStoreBo bo, PageQuery pageQuery);
+
+    /**
+     * 鏌ヨ搴旂敤甯傚満鍒楄〃
+     */
+    List<ChatAppStoreVo> queryList(ChatAppStoreBo bo);
+
+
+    /**
+     * 淇敼搴旂敤甯傚満
+     */
+    Boolean updateByBo(ChatAppStoreBo bo);
+
+    /**
+     * 鏍¢獙骞舵壒閲忓垹闄ゅ簲鐢ㄥ競鍦轰俊鎭�
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatConfigService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatConfigService.java
similarity index 88%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatConfigService.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatConfigService.java
index 45e0067..6c77647 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatConfigService.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatCostService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatCostService.java
similarity index 87%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatCostService.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatCostService.java
index c117465..e5825b0 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatCostService.java
+++ b/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 {
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatGptsService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatGptsService.java
similarity index 87%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatGptsService.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatGptsService.java
index 7f4bb36..808225d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatGptsService.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatMessageService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatMessageService.java
similarity index 87%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatMessageService.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatMessageService.java
index 671cdc0..f8bef4e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatMessageService.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatPluginService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatPluginService.java
similarity index 83%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatPluginService.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatPluginService.java
index d198144..08ed858 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatPluginService.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatTokenService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatTokenService.java
similarity index 68%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatTokenService.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatTokenService.java
index c758a0d..7eb1b1f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatTokenService.java
+++ b/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 @@
     /**
      * 鏌ヨ鐢ㄦ埛token
      */
-    ChatToken queryByUserId(Long userId,String modelName);
+    ChatToken queryByUserId(Long userId, String modelName);
 
     /**
      * 娓呯┖鐢ㄦ埛token
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatVisitorUsageService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVisitorUsageService.java
similarity index 86%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatVisitorUsageService.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVisitorUsageService.java
index 87ab91c..20c3926 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatVisitorUsageService.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatVoucherService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVoucherService.java
similarity index 88%
rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatVoucherService.java
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVoucherService.java
index 4dfb684..2f81822 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatVoucherService.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatVoucherMapper.xml b/ruoyi-modules-api/ruoyi-chat-api/src/main/resources/mapper/ChatConfigMapper.xml
similarity index 71%
rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatVoucherMapper.xml
rename to ruoyi-modules-api/ruoyi-chat-api/src/main/resources/mapper/ChatConfigMapper.xml
index e5a8022..509a739 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatVoucherMapper.xml
+++ b/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.ChatVoucherMapper">
+<mapper namespace="org.ruoyi.mapper.ChatConfigMapper">
 
 </mapper>
diff --git a/ruoyi-modules-api/ruoyi-device-api/pom.xml b/ruoyi-modules-api/ruoyi-device-api/pom.xml
new file mode 100644
index 0000000..7a9cb1a
--- /dev/null
+++ b/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>
diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml b/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml
new file mode 100644
index 0000000..1ba1e99
--- /dev/null
+++ b/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>
diff --git a/ruoyi-modules-api/ruoyi-system-api/pom.xml b/ruoyi-modules-api/ruoyi-system-api/pom.xml
new file mode 100644
index 0000000..1b45873
--- /dev/null
+++ b/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>
diff --git a/ruoyi-modules-api/ruoyi-weixin-api/pom.xml b/ruoyi-modules-api/ruoyi-weixin-api/pom.xml
new file mode 100644
index 0000000..1d16920
--- /dev/null
+++ b/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>
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java
index a2d1614..e6a4446 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java
@@ -17,10 +17,7 @@
 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;
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/FaceController.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/FaceController.java
index d84a3ad..cb2f259 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/FaceController.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/FaceController.java
@@ -9,7 +9,6 @@
 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;
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/LumaController.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/LumaController.java
index 4d60cb6..f3628f4 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/LumaController.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/LumaController.java
@@ -9,7 +9,6 @@
 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.*;
 
 /**
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java
index 3723fc1..a5e9208 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java
@@ -10,7 +10,6 @@
 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;
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SunoController.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SunoController.java
index 0c51f30..07754fe 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SunoController.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SunoController.java
@@ -10,7 +10,6 @@
 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
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/VoiceController.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/VoiceController.java
index 6ea57d6..a551cbf 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/VoiceController.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/VoiceController.java
@@ -7,7 +7,6 @@
 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;
diff --git a/ruoyi-modules/ruoyi-device/pom.xml b/ruoyi-modules/ruoyi-device/pom.xml
new file mode 100644
index 0000000..ec4cbc4
--- /dev/null
+++ b/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>
diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml
index cdce824..17d37c5 100644
--- a/ruoyi-modules/ruoyi-system/pom.xml
+++ b/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>
 
diff --git a/ruoyi-admin/src/main/java/org/ruoyi/RuoYiAIApplication.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/RuoYiAIApplication.java
similarity index 95%
rename from ruoyi-admin/src/main/java/org/ruoyi/RuoYiAIApplication.java
rename to ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/RuoYiAIApplication.java
index 2d0693c..68748bc 100644
--- a/ruoyi-admin/src/main/java/org/ruoyi/RuoYiAIApplication.java
+++ b/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;
diff --git a/ruoyi-admin/src/main/java/org/ruoyi/RuoYiAIServletInitializer.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/RuoYiAIServletInitializer.java
similarity index 94%
rename from ruoyi-admin/src/main/java/org/ruoyi/RuoYiAIServletInitializer.java
rename to ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/RuoYiAIServletInitializer.java
index 626d7a3..16d037c 100644
--- a/ruoyi-admin/src/main/java/org/ruoyi/RuoYiAIServletInitializer.java
+++ b/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;
diff --git a/ruoyi-admin/src/main/java/org/ruoyi/controller/AuthController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/AuthController.java
similarity index 93%
rename from ruoyi-admin/src/main/java/org/ruoyi/controller/AuthController.java
rename to ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/AuthController.java
index 1093186..9be06e6 100644
--- a/ruoyi-admin/src/main/java/org/ruoyi/controller/AuthController.java
+++ b/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.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.*;
 
diff --git a/ruoyi-admin/src/main/java/org/ruoyi/controller/CaptchaController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/CaptchaController.java
similarity index 98%
rename from ruoyi-admin/src/main/java/org/ruoyi/controller/CaptchaController.java
rename to ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/CaptchaController.java
index 89cf243..dda65dc 100644
--- a/ruoyi-admin/src/main/java/org/ruoyi/controller/CaptchaController.java
+++ b/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.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.RestController;
 
 import java.time.Duration;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 楠岃瘉鐮佹搷浣滃鐞�
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatConfigController.java
index 045f383..a3db5ad 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatConfigController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatConfigController.java
@@ -8,9 +8,6 @@
 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.*;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatGptsController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatGptsController.java
index 5610e86..96e5b19 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatGptsController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatGptsController.java
@@ -15,9 +15,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.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.*;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatMessageController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatMessageController.java
index 8487e93..5d0486d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatMessageController.java
+++ b/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.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.*;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatPluginController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatPluginController.java
index 01f65a4..a0d9a1b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatPluginController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatPluginController.java
@@ -17,9 +17,6 @@
 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;
 
 /**
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatStoreController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatStoreController.java
index a5a6bb0..532fb33 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatStoreController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatStoreController.java
@@ -3,10 +3,6 @@
 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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVisitorUsageController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVisitorUsageController.java
index 5871128..f402278 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVisitorUsageController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVisitorUsageController.java
@@ -15,9 +15,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.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.*;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVoucherController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVoucherController.java
index cd9fae7..88cc4f4 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVoucherController.java
+++ b/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.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.*;
 
diff --git a/ruoyi-admin/src/main/java/org/ruoyi/controller/IndexController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/IndexController.java
similarity index 91%
rename from ruoyi-admin/src/main/java/org/ruoyi/controller/IndexController.java
rename to ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/IndexController.java
index ecbfe71..72b6828 100644
--- a/ruoyi-admin/src/main/java/org/ruoyi/controller/IndexController.java
+++ b/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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/KnowledgeController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/KnowledgeController.java
new file mode 100644
index 0000000..3ea10af
--- /dev/null
+++ b/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);
+//    }
+//
+//}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java
index 5e9d193..eef8331 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java
+++ b/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 杞崲鍚庣殑鍏冮噾棰濓紝绫诲瀷涓篸ouble
-     */
-    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);
-        // 杞崲涓篸ouble骞惰繑鍥�
-        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");
-
-        // 鑾峰彇閲戦瀛楃涓插苟瑙f瀽涓� 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())){
-                // 瑙f瀽 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寮傛閫氱煡锛坵ebhook浜嬩欢锛�"+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 杞崲鍚庣殑鍏冮噾棰濓紝绫诲瀷涓篸ouble
+//     */
+//    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);
+//        // 杞崲涓篸ouble骞惰繑鍥�
+//        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");
+//
+//        // 鑾峰彇閲戦瀛楃涓插苟瑙f瀽涓� 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())){
+//                // 瑙f瀽 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寮傛閫氱煡锛坵ebhook浜嬩欢锛�"+e);
+//        }
+//        return R.ok();
+//    }
+//
+//    public String getKey(String key) {
+//        return configService.getConfigValue("weixin", key);
+//    }
+//
+//}
+//
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeChatController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeChatController.java
index a2702b2..eeaeb90 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeChatController.java
+++ b/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();
+//    }
+//}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java
index 155f042..b52a628 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java
@@ -19,7 +19,7 @@
 @RequiredArgsConstructor
 public class MsgHandler extends AbstractHandler {
 
-    private final ISseService sseService;
+//    private final ISseService sseService;
 
 
 
@@ -34,8 +34,10 @@
         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);
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/SSEEventSourceListener.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/SSEEventSourceListener.java
index 1bbe226..92d767b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/SSEEventSourceListener.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/SSEEventSourceListener.java
@@ -15,11 +15,8 @@
 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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatAppStoreMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatAppStoreMapper.java
index db27f68..a47df63 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatAppStoreMapper.java
+++ b/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鎺ュ彛
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java
index d230e9a..5f76781 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java
+++ b/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;
 
 /**
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatGptsMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatGptsMapper.java
index 75555a6..f1f2f73 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatGptsMapper.java
+++ b/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鎺ュ彛
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatMessageMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatMessageMapper.java
index a58d611..7c4e747 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatMessageMapper.java
+++ b/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;
 
 
 /**
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatPluginMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatPluginMapper.java
index 3070d15..29fb348 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatPluginMapper.java
+++ b/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;
 
 /**
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatTokenMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatTokenMapper.java
index 5bd6206..aeea71e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatTokenMapper.java
+++ b/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;
 
 
 /**
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVisitorUsageMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVisitorUsageMapper.java
index 7b4a8fc..56424e6 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVisitorUsageMapper.java
+++ b/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;
 
 /**
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVoucherMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVoucherMapper.java
index 490270d..d54e705 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVoucherMapper.java
+++ b/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鎺ュ彛
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatAppStoreService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatAppStoreService.java
deleted file mode 100644
index 44b4967..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IChatAppStoreService.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.ruoyi.system.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 java.util.Collection;
-import java.util.List;
-
-/**
- * 搴旂敤甯傚満Service鎺ュ彛
- *
- * @author Lion Li
- * @date 2024-03-19
- */
-public interface IChatAppStoreService {
-
-    /**
-     * 鏌ヨ搴旂敤甯傚満
-     */
-    ChatAppStoreVo queryById(Long id);
-
-    /**
-     * 鏌ヨ搴旂敤甯傚満鍒楄〃
-     */
-    TableDataInfo<ChatAppStoreVo> queryPageList(ChatAppStoreBo bo, PageQuery pageQuery);
-
-    /**
-     * 鏌ヨ搴旂敤甯傚満鍒楄〃
-     */
-    List<ChatAppStoreVo> queryList(ChatAppStoreBo bo);
-
-    /**
-     * 鏂板搴旂敤甯傚満
-     */
-    Boolean insertByBo(RoleRequest roleRequest);
-
-    /**
-     * 鐢熸垚闊抽
-     */
-    SimpleGenerateDataResponse simpleGenerate(SimpleGenerateRequest simpleGenerateRequest);
-
-    /**
-     * 淇敼搴旂敤甯傚満
-     */
-    Boolean updateByBo(ChatAppStoreBo bo);
-
-    /**
-     * 鏍¢獙骞舵壒閲忓垹闄ゅ簲鐢ㄥ競鍦轰俊鎭�
-     */
-    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
-
-    /**
-     * 鏌ヨ甯傚満瑙掕壊
-     *
-     * @return 瑙掕壊鍒楄〃
-     */
-    List<ChatAppStoreVO> roleList();
-
-    /**
-     * 鏀惰棌甯傚満瑙掕壊
-     *
-     */
-    void copyRole(RoleListDto roleListDto);
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatAppStoreImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatAppStoreImpl.java
deleted file mode 100644
index 25a7686..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatAppStoreImpl.java
+++ /dev/null
@@ -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());
-        }
-        // 鍒涘缓涓�涓猂equest瀵硅薄鏉ラ厤缃綘鐨勮姹�
-        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());
-        // 鎵i櫎璐圭敤骞朵笖淇濆瓨娑堟伅璁板綍
-        chatService.taskDeduct(simpleGenerateRequest.getModel(), simpleGenerateRequest.getText(), charge);
-        // 鍒涘缓涓�涓猂equest瀵硅薄鏉ラ厤缃綘鐨勮姹�
-        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) {
-                // 浠嶫SON涓В鏋愬嚭鐨勬暟鎹病鏈塸rompts
-                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);
-    }
-
-    /**
-     * 鏍规嵁鏂囨湰闀垮害璁$畻鎵i櫎鐨勯噾棰濄��
-     *
-     * @param text 杈撳叆鐨勬枃鏈�
-     * @return 鎵i櫎鐨勯噾棰�
-     */
-    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涓瓧绗︼紝鎵i櫎0.5鍏�
-                charge += (length / 500) * 0.5;
-                length %= 500; // 澶勭悊鍓╀綑瀛楃
-            } else if (length >= 100) {
-                // 瀵逛簬100鍒�499涓瓧绗︼紝鎵i櫎0.2鍏�
-                charge += 0.2;
-                break; // 澶勭悊瀹屾瘯锛岄��鍑哄惊鐜�
-            } else {
-                // 瀵逛簬灏戜簬100涓瓧绗︼紝鎵i櫎0.1鍏�
-                charge += 0.1;
-                break; // 澶勭悊瀹屾瘯锛岄��鍑哄惊鐜�
-            }
-        }
-        return charge;
-    }
-
-    public Long getUserId() {
-        LoginUser loginUser = LoginHelper.getLoginUser();
-        if (loginUser == null) {
-            throw new BaseException("鐢ㄦ埛鏈櫥褰曪紒");
-        }
-        return loginUser.getUserId();
-    }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatConfigServiceImpl.java
deleted file mode 100644
index 7d2c99f..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatConfigServiceImpl.java
+++ /dev/null
@@ -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;
-    }
-
-    /**
-     * 鏍规嵁閰嶇疆绫诲瀷鍜岄厤缃甼ey鑾峰彇鍊�
-     *
-     * @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 "";
-        }
-    }
-
-    /**
-     * 鏍规嵁閰嶇疆绫诲瀷鍜岄厤缃甼ey鑾峰彇鍊�
-     *
-     * @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);
-    }
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatCostServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatCostServiceImpl.java
deleted file mode 100644
index 137bea0..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatCostServiceImpl.java
+++ /dev/null
@@ -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鎵i櫎浣欓
-     *
-     * @param chatMessageBo
-     */
-    public void deductToken(ChatMessageBo chatMessageBo) {
-        // 璁$畻鎬籺oken鏁�
-        ChatToken chatToken = chatTokenService.queryByUserId(chatMessageBo.getUserId(), chatMessageBo.getModelName());
-        if (chatToken == null) {
-            chatToken = new ChatToken();
-            chatToken.setToken(0);
-        }
-        int totalTokens = chatToken.getToken() + chatMessageBo.getTotalTokens();
-        // 濡傛灉鎬籺oken鏁板ぇ浜庣瓑浜�1000,杩涜璐圭敤鎵i櫎
-        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());
-            }
-            // 鎵i櫎鐢ㄦ埛浣欓
-            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 {
-            // 鎵i櫎鐢ㄦ埛浣欓
-            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);
-    }
-
-
-
-    /**
-     * 浠庣敤鎴蜂綑棰濅腑鎵i櫎璐圭敤
-     *
-     * @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));
-    }
-
-
-
-    /**
-     * 鎵i櫎浠诲姟璐圭敤
-     *
-     */
-    @Override
-    public void taskDeduct(String type,String prompt, double cost) {
-        // 鍒ゆ柇鐢ㄦ埛鏄惁浠樿垂
-        checkUserGrade();
-        // 鎵i櫎璐圭敤
-        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();
-    }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatGptsServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatGptsServiceImpl.java
deleted file mode 100644
index 38ca74a..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatGptsServiceImpl.java
+++ /dev/null
@@ -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;
-    }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatMessageServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatMessageServiceImpl.java
deleted file mode 100644
index 421c6cf..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatMessageServiceImpl.java
+++ /dev/null
@@ -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());
-        // 涓�娆℃�ф煡璇㈡墍鏈塽serName
-        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;
-    }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatPluginServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatPluginServiceImpl.java
deleted file mode 100644
index 6b84e0c..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatPluginServiceImpl.java
+++ /dev/null
@@ -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;
-    }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatTokenServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatTokenServiceImpl.java
deleted file mode 100644
index f5e69bc..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatTokenServiceImpl.java
+++ /dev/null
@@ -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);
-        }
-    }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatVisitorUsageServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatVisitorUsageServiceImpl.java
deleted file mode 100644
index 85f1e76..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatVisitorUsageServiceImpl.java
+++ /dev/null
@@ -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;
-    }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatVoucherServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatVoucherServiceImpl.java
deleted file mode 100644
index 41078ab..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/ChatVoucherServiceImpl.java
+++ /dev/null
@@ -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);
-        }
-        // 鑾峰彇鎵�鏈塽serId
-        List<Long> userIds = result.getRecords().stream()
-            .map(ChatVoucherVo::getUserId)
-            .collect(Collectors.toList());
-        // 涓�娆℃�ф煡璇㈡墍鏈塽serName
-        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;
-    }
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java
index b2dbba6..4b6d96e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java
@@ -24,7 +24,6 @@
 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;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java
index dcb3c2c..a3f17e9 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java
@@ -9,13 +9,11 @@
 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;
@@ -25,8 +23,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涓氬姟灞傚鐞�
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SseServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SseServiceImpl.java
index 7310b23..807650d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SseServiceImpl.java
+++ b/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.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 @@
 
     private OpenAiStreamClient openAiStreamClient;
 
-    private final ChatConfig chatConfig;
-
+    ChatConfig chatConfig;
 
     private final IChatCostService chatService;
 
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-modules/ruoyi-system/src/main/resources/application-prod.yml
similarity index 100%
rename from ruoyi-admin/src/main/resources/application-prod.yml
rename to ruoyi-modules/ruoyi-system/src/main/resources/application-prod.yml
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-modules/ruoyi-system/src/main/resources/application.yml
similarity index 100%
rename from ruoyi-admin/src/main/resources/application.yml
rename to ruoyi-modules/ruoyi-system/src/main/resources/application.yml
diff --git a/ruoyi-admin/src/main/resources/banner.txt b/ruoyi-modules/ruoyi-system/src/main/resources/banner.txt
similarity index 100%
rename from ruoyi-admin/src/main/resources/banner.txt
rename to ruoyi-modules/ruoyi-system/src/main/resources/banner.txt
diff --git a/ruoyi-admin/src/main/resources/i18n/messages.properties b/ruoyi-modules/ruoyi-system/src/main/resources/i18n/messages.properties
similarity index 100%
rename from ruoyi-admin/src/main/resources/i18n/messages.properties
rename to ruoyi-modules/ruoyi-system/src/main/resources/i18n/messages.properties
diff --git a/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties b/ruoyi-modules/ruoyi-system/src/main/resources/i18n/messages_en_US.properties
similarity index 100%
rename from ruoyi-admin/src/main/resources/i18n/messages_en_US.properties
rename to ruoyi-modules/ruoyi-system/src/main/resources/i18n/messages_en_US.properties
diff --git a/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties b/ruoyi-modules/ruoyi-system/src/main/resources/i18n/messages_zh_CN.properties
similarity index 100%
rename from ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties
rename to ruoyi-modules/ruoyi-system/src/main/resources/i18n/messages_zh_CN.properties
diff --git a/ruoyi-admin/src/main/resources/ip2region.xdb b/ruoyi-modules/ruoyi-system/src/main/resources/ip2region.xdb
similarity index 100%
rename from ruoyi-admin/src/main/resources/ip2region.xdb
rename to ruoyi-modules/ruoyi-system/src/main/resources/ip2region.xdb
Binary files differ
diff --git a/ruoyi-admin/src/main/resources/logback-plus.xml b/ruoyi-modules/ruoyi-system/src/main/resources/logback-plus.xml
similarity index 100%
rename from ruoyi-admin/src/main/resources/logback-plus.xml
rename to ruoyi-modules/ruoyi-system/src/main/resources/logback-plus.xml
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatConfigMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatConfigMapper.xml
deleted file mode 100644
index b620c1e..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatConfigMapper.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!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>
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatPluginMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatPluginMapper.xml
deleted file mode 100644
index 3a678fb..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatPluginMapper.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.ruoyi.system.mapper.ChatPluginMapper">
-
-</mapper>
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatVisitorUsageMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatVisitorUsageMapper.xml
deleted file mode 100644
index 7a49c85..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ChatVisitorUsageMapper.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.ruoyi.system.mapper.ChatVisitorUsageMapper">
-
-</mapper>
diff --git a/ruoyi-admin/src/main/resources/spy.properties b/ruoyi-modules/ruoyi-system/src/main/resources/spy.properties
similarity index 100%
rename from ruoyi-admin/src/main/resources/spy.properties
rename to ruoyi-modules/ruoyi-system/src/main/resources/spy.properties
diff --git a/ruoyi-modules/ruoyi-weixin/pom.xml b/ruoyi-modules/ruoyi-weixin/pom.xml
new file mode 100644
index 0000000..3e067c0
--- /dev/null
+++ b/ruoyi-modules/ruoyi-weixin/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</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>

--
Gitblit v1.9.3