diff --git a/README.md b/README.md
index c12faa73..d37ea7ce 100644
--- a/README.md
+++ b/README.md
@@ -63,7 +63,11 @@
## 语音克隆
-https://github.com/ageerle/ruoyi-ai/assets/32251822/62c60f2a-add0-421b-8e32-16ed6a3e598b
+
+
+https://github.com/ageerle/ruoyi-ai/assets/32251822/c3dd75eb-c5bd-4ab0-93bf-9221f4888827
+
+
## 弹幕助手
@@ -72,10 +76,14 @@ https://github.com/ageerle/ruoyi-ai/assets/32251822/2d809d94-6cfb-41b1-9dc0-a72c
-## 私有知识库管理(开发中)
+## 私有知识库管理
## 进群学习
diff --git a/image/02.png b/image/02.png
new file mode 100644
index 00000000..ac033d22
Binary files /dev/null and b/image/02.png differ
diff --git a/pom.xml b/pom.xml
index 0ec370ce..ab2aa174 100644
--- a/pom.xml
+++ b/pom.xml
@@ -324,6 +324,8 @@
${revision}
+
+
com.xmzs
ruoyi-generator
diff --git a/ruoyi-admin/Dockerfile b/ruoyi-admin/Dockerfile
index 0996e40c..386e378d 100644
--- a/ruoyi-admin/Dockerfile
+++ b/ruoyi-admin/Dockerfile
@@ -1,14 +1,17 @@
+#基础镜像
FROM findepi/graalvm:java17-native
-MAINTAINER Lion Li
+MAINTAINER ageerle
RUN mkdir -p /ruoyi/server/logs \
/ruoyi/server/temp \
/ruoyi/skywalking/agent
+
+#工作空间
WORKDIR /ruoyi/server
-ENV SERVER_PORT=8080
+ENV SERVER_PORT=6039
EXPOSE ${SERVER_PORT}
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 58864d71..223ff6c4 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -64,6 +64,9 @@
ruoyi-midjourney
+
+
+
com.xmzs
diff --git a/ruoyi-admin/src/main/java/com/xmzs/controller/AuthController.java b/ruoyi-admin/src/main/java/com/xmzs/controller/AuthController.java
index 848f7b46..0405b11d 100644
--- a/ruoyi-admin/src/main/java/com/xmzs/controller/AuthController.java
+++ b/ruoyi-admin/src/main/java/com/xmzs/controller/AuthController.java
@@ -45,8 +45,6 @@ public class AuthController {
private final SysRegisterService registerService;
private final ISysTenantService tenantService;
-
-
/**
* 登录方法
*
diff --git a/ruoyi-admin/src/main/java/com/xmzs/controller/CaptchaController.java b/ruoyi-admin/src/main/java/com/xmzs/controller/CaptchaController.java
index 78941eec..de7d90bf 100644
--- a/ruoyi-admin/src/main/java/com/xmzs/controller/CaptchaController.java
+++ b/ruoyi-admin/src/main/java/com/xmzs/controller/CaptchaController.java
@@ -85,6 +85,7 @@ public class CaptchaController {
*
* @param emailRequest 用户邮箱
*/
+ //@PostMapping("/resource/email/code")
@PostMapping("/resource/email/code")
public R emailCode(@RequestBody @Valid EmailRequest emailRequest) {
if (!mailProperties.getEnabled()) {
diff --git a/ruoyi-admin/src/main/java/com/xmzs/controller/ChatController.java b/ruoyi-admin/src/main/java/com/xmzs/controller/ChatController.java
index 2ee3c470..80b5dde2 100644
--- a/ruoyi-admin/src/main/java/com/xmzs/controller/ChatController.java
+++ b/ruoyi-admin/src/main/java/com/xmzs/controller/ChatController.java
@@ -3,8 +3,8 @@ package com.xmzs.controller;
import com.xmzs.common.chat.domain.request.ChatRequest;
import com.xmzs.common.chat.domain.request.Dall3Request;
-import com.xmzs.common.chat.domain.request.MjTaskRequest;
import com.xmzs.common.chat.entity.Tts.TextToSpeech;
+import com.xmzs.common.chat.entity.files.UploadFileResponse;
import com.xmzs.common.chat.entity.images.Item;
import com.xmzs.common.chat.entity.whisper.WhisperResponse;
import com.xmzs.common.core.domain.R;
@@ -21,25 +21,15 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.core.io.InputStreamResource;
-import org.springframework.http.MediaType;
+import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
-import org.springframework.core.io.Resource;
-
-import java.io.IOException;
-import java.io.InputStream;
import java.util.List;
-import retrofit2.Response;
-
/**
* 描述:
*
@@ -64,6 +54,16 @@ public class ChatController {
return ISseService.sseChat(chatRequest);
}
+ /**
+ * 上传文件
+ */
+ @PostMapping("/v1/upload")
+ @ResponseBody
+ public UploadFileResponse upload(@RequestPart("file") MultipartFile file) {
+ return ISseService.upload(file);
+ }
+
+
/**
* 语音转文本
*
@@ -94,18 +94,6 @@ public class ChatController {
return R.ok(ISseService.dall3(request));
}
- /**
- * 扣除mj绘图费用
- *
- * @return
- */
- @PostMapping("/mjTask")
- @ResponseBody
- public R mjTask(@RequestBody MjTaskRequest mjTaskRequest) {
- ISseService.mjTask(mjTaskRequest);
- return R.ok();
- }
-
/**
* 聊天记录
*/
diff --git a/ruoyi-admin/src/main/java/com/xmzs/controller/PayController.java b/ruoyi-admin/src/main/java/com/xmzs/controller/PayController.java
index ac6f96f1..e2c43cb7 100644
--- a/ruoyi-admin/src/main/java/com/xmzs/controller/PayController.java
+++ b/ruoyi-admin/src/main/java/com/xmzs/controller/PayController.java
@@ -23,7 +23,6 @@ import com.xmzs.system.domain.vo.SysUserVo;
import com.xmzs.system.service.IPaymentOrdersService;
import com.xmzs.system.service.ISysUserService;
import com.xmzs.system.util.OrderNumberGenerator;
-import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@@ -43,15 +42,16 @@ public class PayController {
private final IPaymentOrdersService paymentOrdersService;
+ private final PayConfig payConfig;
+
/**
* 获取支付二维码
*
* @Date 2023/7/3
- * @param response
* @return void
**/
@PostMapping("/payUrl")
- public R payUrl(HttpServletResponse response, @RequestBody OrderRequest orderRequest) {
+ public R payUrl(@RequestBody OrderRequest orderRequest) {
LoginUser loginUser = LoginHelper.getLoginUser();
// 创建订单
PaymentOrdersBo paymentOrders = new PaymentOrdersBo();
@@ -115,9 +115,9 @@ public class PayController {
public String returnUrl(PayResponse payResponse) {
// 校验签名
String mdString = "money=" + payResponse.getMoney() + "&name=" + payResponse.getName() +
- "&out_trade_no=" + payResponse.getOut_trade_no() + "&pid=" + PayConfig.pid +
+ "&out_trade_no=" + payResponse.getOut_trade_no() + "&pid=" + payConfig.getPid() +
"&trade_no=" + payResponse.getTrade_no() + "&trade_status=" + payResponse.getTrade_status() +
- "&type=" + payResponse.getType() + PayConfig.key;
+ "&type=" + payResponse.getType() + payConfig.getKey();
String sign = MD5Util.GetMD5Code(mdString);
if(!sign.equals(payResponse.getSign())){
throw new BaseException("校验签名失败!");
@@ -136,10 +136,8 @@ public class PayController {
paymentOrdersVo.setPaymentMethod(payResponse.getType());
BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo);
paymentOrdersService.updateByBo(paymentOrdersBo);
+
SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId());
- if(money>9.9){
- money = money*2;
- }
sysUserVo.setUserBalance(sysUserVo.getUserBalance()+money);
SysUserBo sysUserBo = new SysUserBo();
BeanUtil.copyProperties(sysUserVo,sysUserBo);
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index dff7562e..0b7d2735 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -1,7 +1,7 @@
--- # 监控中心配置
spring.boot.admin.client:
# 增加客户端开关
- enabled: true
+ enabled: false
url: http://localhost:9090/admin
instance:
service-host-type: IP
@@ -51,36 +51,36 @@ spring:
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
url: jdbc:mysql://127.0.0.1:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
username: ry-vue
- password: xxx
+ password: ry-vue
# 从库数据源
-# slave:
-# lazy: true
-# type: ${spring.datasource.type}
-# driverClassName: com.mysql.cj.jdbc.Driver
-# url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
-# username:
-# password:
-# oracle:
-# type: ${spring.datasource.type}
-# driverClassName: oracle.jdbc.OracleDriver
-# url: jdbc:oracle:thin:@//localhost:1521/XE
-# username: ROOT
-# password: root
-# hikari:
-# connectionTestQuery: SELECT 1 FROM DUAL
-# postgres:
-# type: ${spring.datasource.type}
-# driverClassName: org.postgresql.Driver
-# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
-# username: root
-# password: root
-# sqlserver:
-# type: ${spring.datasource.type}
-# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
-# url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
-# username: SA
-# password: root
+ # slave:
+ # lazy: true
+ # type: ${spring.datasource.type}
+ # driverClassName: com.mysql.cj.jdbc.Driver
+ # url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
+ # username:
+ # password:
+ # oracle:
+ # type: ${spring.datasource.type}
+ # driverClassName: oracle.jdbc.OracleDriver
+ # url: jdbc:oracle:thin:@//localhost:1521/XE
+ # username: ROOT
+ # password: root
+ # hikari:
+ # connectionTestQuery: SELECT 1 FROM DUAL
+ # postgres:
+ # type: ${spring.datasource.type}
+ # driverClassName: org.postgresql.Driver
+ # url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
+ # username: root
+ # password: root
+ # sqlserver:
+ # type: ${spring.datasource.type}
+ # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
+ # url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
+ # username: SA
+ # password: root
hikari:
# 最大连接池数量
maxPoolSize: 20
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
index fdf6c238..cd52c0f7 100644
--- a/ruoyi-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -4,7 +4,7 @@ spring.servlet.multipart.location: /ruoyi/server/temp
--- # 监控中心配置
spring.boot.admin.client:
# 增加客户端开关
- enabled: true
+ enabled: false
url: http://localhost:9090/admin
instance:
service-host-type: IP
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 949ee58f..12d9becd 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -212,27 +212,6 @@ mybatis-encryptor:
# 公私钥 非对称算法的公私钥 如:SM2,RSA
publicKey:
privateKey:
---- # mail 邮件发送
-mail:
- enabled: true
- host: smtp.163.com
- port: 465
- # 是否需要用户名密码验证
- auth: true
- # 发送方,遵循RFC-822标准
- from: ageerle@163.com
- # 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
- user: ageerle@163.com
- # 密码(填写授权码)
- pass: xxxx
- # 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。
- starttlsEnable: true
- # 使用SSL安全连接
- sslEnable: true
- # SMTP超时时长,单位毫秒,缺省值不超时
- timeout: 0
- # Socket连接超时值,单位毫秒,缺省值不超时
- connectionTimeout: 0
# Swagger配置
swagger:
@@ -313,15 +292,12 @@ management:
--- # websocket
websocket:
- enabled: true
+ enabled: false
# 路径
path: ''
# 设置访问源地址
allowedOrigins: '*'
-# chatgpt配置信息
-chat:
- apiKey: 'sk-xxx'
- apiHost: 'https://api.pandarobot.chat/'
+
# 微信小程序配置信息
wx:
miniapp:
@@ -338,6 +314,8 @@ baidu:
textReview:
apiKey: '' # apiKey
secretKey: '' # secretKey
+ appKey: xxxxxxxxxxxxxxxxx
+ secretKey: xxxxxxxxxxxxxxxxxxxxxxx
wechat:
# 是否使用微信 true/false
@@ -353,23 +331,62 @@ keyword:
image: "ai画图"
# ai语音指令(TTS模型 https://platform.openai.com/docs/api-reference/audio)
audio: "ai语音"
+
mj:
- api-secret:
+ api-secret: 'sk-xx'
task-store:
type: in_memory
timeout: 30d
translate-way: gpt
-# proxy:
-# host: 127.0.0.1
-# port: 10809
+ # proxy:
+ # host: 127.0.0.1
+ # port: 10809
ng-discord:
- server: https://discord.pandarobot.chat/
- cdn: https://app.pandarobot.chat/
- wss: https://gateway.pandarobot.chat/
+ server: 'https://xxx.pandarobot.chat/'
+ cdn: 'https://xxx.pandarobot.chat/'
+ wss: 'https://xxx.pandarobot.chat/'
openai:
- gpt-api-url: 'https://api.gptgod.online/'
- gpt-api-key: 'xxxxxxx'
+ gpt-api-url: 'https://api.pandarobot.chat/'
+ gpt-api-key: 'sk-xx'
accounts:
- - guild-id: 'xxxxxx'
- channel-id: 'xxxxx'
- user-token: 'xxxxxxx'
+ - guild-id: 'xx'
+ channel-id: 'xx'
+ user-token: 'xx'
+
+--- # mail 邮件发送
+mail:
+ enabled: true
+ host: smtp.163.com
+ port: 465
+ # 是否需要用户名密码验证
+ auth: true
+ # 发送方,遵循RFC-822标准
+ from: ageerle@163.com
+ # 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
+ user: ageerle@163.com
+ # 密码(填写授权码)
+ pass: TOGXBVPYFVPFRQMQ
+ # 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。
+ starttlsEnable: true
+ # 使用SSL安全连接
+ sslEnable: true
+ # SMTP超时时长,单位毫秒,缺省值不超时
+ timeout: 0
+ # Socket连接超时值,单位毫秒,缺省值不超时
+ connectionTimeout: 0
+
+# chatgpt配置信息
+chat:
+ apiKey: 'sk-xxx'
+ apiHost: 'https://api.pandarobot.chat/'
+
+# 支付配置信息
+pay:
+ pid: 'xxx'
+ key: 'xxx'
+ payUrl: 'https://pay.pandarobot.chat/mapi.php'
+ notify_url: 'https://www.pandarobot.chat/pay/returnUrl'
+ return_url: 'https://www.pandarobot.chat/pay/notifyUrl'
+ type: 'wxpay'
+ device: 'pc'
+ sign_type: 'MD5'
diff --git a/ruoyi-admin/src/test/java/com/xmzs/test/AssertUnitTest.java b/ruoyi-admin/src/test/java/com/xmzs/test/AssertUnitTest.java
new file mode 100644
index 00000000..6d1f14ab
--- /dev/null
+++ b/ruoyi-admin/src/test/java/com/xmzs/test/AssertUnitTest.java
@@ -0,0 +1,45 @@
+package com.xmzs.test;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+/**
+ * 断言单元测试案例
+ *
+ * @author Lion Li
+ */
+@DisplayName("断言单元测试案例")
+public class AssertUnitTest {
+
+ @DisplayName("测试 assertEquals 方法")
+ @Test
+ public void testAssertEquals() {
+ Assertions.assertEquals("666", new String("666"));
+ Assertions.assertNotEquals("666", new String("666"));
+ }
+
+ @DisplayName("测试 assertSame 方法")
+ @Test
+ public void testAssertSame() {
+ Object obj = new Object();
+ Object obj1 = obj;
+ Assertions.assertSame(obj, obj1);
+ Assertions.assertNotSame(obj, obj1);
+ }
+
+ @DisplayName("测试 assertTrue 方法")
+ @Test
+ public void testAssertTrue() {
+ Assertions.assertTrue(true);
+ Assertions.assertFalse(true);
+ }
+
+ @DisplayName("测试 assertNull 方法")
+ @Test
+ public void testAssertNull() {
+ Assertions.assertNull(null);
+ Assertions.assertNotNull(null);
+ }
+
+}
diff --git a/ruoyi-admin/src/test/java/com/xmzs/test/DemoUnitTest.java b/ruoyi-admin/src/test/java/com/xmzs/test/DemoUnitTest.java
new file mode 100644
index 00000000..6981eb8a
--- /dev/null
+++ b/ruoyi-admin/src/test/java/com/xmzs/test/DemoUnitTest.java
@@ -0,0 +1,70 @@
+package com.xmzs.test;
+
+import com.xmzs.common.core.config.RuoYiConfig;
+import org.junit.jupiter.api.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 单元测试案例
+ *
+ * @author Lion Li
+ */
+@SpringBootTest // 此注解只能在 springboot 主包下使用 需包含 main 方法与 yml 配置文件
+@DisplayName("单元测试案例")
+public class DemoUnitTest {
+
+ @Autowired
+ private RuoYiConfig ruoYiConfig;
+
+ @DisplayName("测试 @SpringBootTest @Test @DisplayName 注解")
+ @Test
+ public void testTest() {
+ System.out.println(ruoYiConfig);
+ }
+
+ @Disabled
+ @DisplayName("测试 @Disabled 注解")
+ @Test
+ public void testDisabled() {
+ System.out.println(ruoYiConfig);
+ }
+
+ @Timeout(value = 2L, unit = TimeUnit.SECONDS)
+ @DisplayName("测试 @Timeout 注解")
+ @Test
+ public void testTimeout() throws InterruptedException {
+ Thread.sleep(3000);
+ System.out.println(ruoYiConfig);
+ }
+
+
+ @DisplayName("测试 @RepeatedTest 注解")
+ @RepeatedTest(3)
+ public void testRepeatedTest() {
+ System.out.println(666);
+ }
+
+ @BeforeAll
+ public static void testBeforeAll() {
+ System.out.println("@BeforeAll ==================");
+ }
+
+ @BeforeEach
+ public void testBeforeEach() {
+ System.out.println("@BeforeEach ==================");
+ }
+
+ @AfterEach
+ public void testAfterEach() {
+ System.out.println("@AfterEach ==================");
+ }
+
+ @AfterAll
+ public static void testAfterAll() {
+ System.out.println("@AfterAll ==================");
+ }
+
+}
diff --git a/ruoyi-admin/src/test/java/com/xmzs/test/ParamUnitTest.java b/ruoyi-admin/src/test/java/com/xmzs/test/ParamUnitTest.java
new file mode 100644
index 00000000..82b9f55c
--- /dev/null
+++ b/ruoyi-admin/src/test/java/com/xmzs/test/ParamUnitTest.java
@@ -0,0 +1,72 @@
+package com.xmzs.test;
+
+import com.xmzs.common.core.enums.UserType;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.EnumSource;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.NullSource;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Stream;
+
+/**
+ * 带参数单元测试案例
+ *
+ * @author Lion Li
+ */
+@DisplayName("带参数单元测试案例")
+public class ParamUnitTest {
+
+ @DisplayName("测试 @ValueSource 注解")
+ @ParameterizedTest
+ @ValueSource(strings = {"t1", "t2", "t3"})
+ public void testValueSource(String str) {
+ System.out.println(str);
+ }
+
+ @DisplayName("测试 @NullSource 注解")
+ @ParameterizedTest
+ @NullSource
+ public void testNullSource(String str) {
+ System.out.println(str);
+ }
+
+ @DisplayName("测试 @EnumSource 注解")
+ @ParameterizedTest
+ @EnumSource(UserType.class)
+ public void testEnumSource(UserType type) {
+ System.out.println(type.getUserType());
+ }
+
+ @DisplayName("测试 @MethodSource 注解")
+ @ParameterizedTest
+ @MethodSource("getParam")
+ public void testMethodSource(String str) {
+ System.out.println(str);
+ }
+
+ public static Stream getParam() {
+ List list = new ArrayList<>();
+ list.add("t1");
+ list.add("t2");
+ list.add("t3");
+ return list.stream();
+ }
+
+ @BeforeEach
+ public void testBeforeEach() {
+ System.out.println("@BeforeEach ==================");
+ }
+
+ @AfterEach
+ public void testAfterEach() {
+ System.out.println("@AfterEach ==================");
+ }
+
+
+}
diff --git a/ruoyi-admin/src/test/java/com/xmzs/test/TagUnitTest.java b/ruoyi-admin/src/test/java/com/xmzs/test/TagUnitTest.java
new file mode 100644
index 00000000..e4513873
--- /dev/null
+++ b/ruoyi-admin/src/test/java/com/xmzs/test/TagUnitTest.java
@@ -0,0 +1,54 @@
+package com.xmzs.test;
+
+import org.junit.jupiter.api.*;
+import org.springframework.boot.test.context.SpringBootTest;
+
+/**
+ * 标签单元测试案例
+ *
+ * @author Lion Li
+ */
+@SpringBootTest
+@DisplayName("标签单元测试案例")
+public class TagUnitTest {
+
+ @Tag("dev")
+ @DisplayName("测试 @Tag dev")
+ @Test
+ public void testTagDev() {
+ System.out.println("dev");
+ }
+
+ @Tag("prod")
+ @DisplayName("测试 @Tag prod")
+ @Test
+ public void testTagProd() {
+ System.out.println("prod");
+ }
+
+ @Tag("local")
+ @DisplayName("测试 @Tag local")
+ @Test
+ public void testTagLocal() {
+ System.out.println("local");
+ }
+
+ @Tag("exclude")
+ @DisplayName("测试 @Tag exclude")
+ @Test
+ public void testTagExclude() {
+ System.out.println("exclude");
+ }
+
+ @BeforeEach
+ public void testBeforeEach() {
+ System.out.println("@BeforeEach ==================");
+ }
+
+ @AfterEach
+ public void testAfterEach() {
+ System.out.println("@AfterEach ==================");
+ }
+
+
+}
diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml
index ac928505..3f069fb4 100644
--- a/ruoyi-common/ruoyi-common-bom/pom.xml
+++ b/ruoyi-common/ruoyi-common-bom/pom.xml
@@ -173,13 +173,15 @@
${revision}
-
+
com.xmzs
ruoyi-midjourney
${revision}
+
+
com.xmzs
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/constant/OpenAIConst.java b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/constant/OpenAIConst.java
index 8393623e..34d9fc83 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/constant/OpenAIConst.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/constant/OpenAIConst.java
@@ -12,22 +12,27 @@ public class OpenAIConst {
public final static int SUCCEED_CODE = 200;
+ /** GPT3扣除费用 */
public final static double GPT3_COST = 0.05;
- public final static double GPT4_COST = 0.3;
+ /** GPT4扣除费用 */
+ public final static double GPT4_COST = 0.2;
- public final static double GPT4_ALL_COST = 0.3;
+ /** DALL普通绘图扣除费用 */
+ public final static double DALL3_COST = 0.3;
- /** 绘图费用 */
- public final static double DALL3_COST = 0.4;
+ /** DALL高清绘图扣除费用 */
+ public final static double DALL3_HD_COST = 0.5;
- /** 绘图费用-高清 */
- public final static double DALL3_HD_COST = 0.8;
+ /** MJ操作类型1(变化、变焦、文生图、图生图、局部重绘、混图)扣除费用 */
+ public final static double MJ_COST_TYPE1 = 0.3;
- /** mdjourney绘图费用 */
- public final static double MJ_COST = 0.3;
+ /** MJ操作类型2(换脸、放大、图生文、prompt分析)扣除费用 */
+ public final static double MJ_COST_TYPE2 = 0.1;
+
+ /** MJ操作类型3(查询任务进度、获取seed)扣除费用 */
+ public final static double MJ_COST_TYPE3 = 0.0;
/** 默认账户余额 */
public final static double USER_BALANCE = 5;
-
}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/request/ChatRequest.java b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/request/ChatRequest.java
index 802118c2..a7584a5e 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/request/ChatRequest.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/request/ChatRequest.java
@@ -22,16 +22,16 @@ public class ChatRequest {
@NotEmpty(message = "对话消息不能为空")
List messages;
- List content;
+ List imageContent;
private String prompt;
private String userId;
/**
- * 需要识别的图片地址
+ * 知识库id
*/
- private String imgurl;
+ private String kid;
/**
* gpt的默认设置
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/request/RoleRequest.java b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/request/RoleRequest.java
new file mode 100644
index 00000000..61844713
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/request/RoleRequest.java
@@ -0,0 +1,34 @@
+package com.xmzs.common.chat.domain.request;
+
+import lombok.Data;
+
+/**
+ * @author WangLe
+ */
+@Data
+public class RoleRequest {
+
+ /**
+ * 角色名称
+ */
+ private String name;
+
+ /**
+ * 角色描述
+ */
+ private String description;
+
+ /**
+ * 音频地址
+ */
+ private String prompt;
+
+ /**
+ * 头像
+ */
+ private String avatar;
+
+
+ private String preProcess;
+
+}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/request/SimpleGenerateRequest.java b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/request/SimpleGenerateRequest.java
new file mode 100644
index 00000000..d4beb1e0
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/request/SimpleGenerateRequest.java
@@ -0,0 +1,35 @@
+package com.xmzs.common.chat.domain.request;
+
+import lombok.Data;
+
+/**
+ * @author WangLe
+ */
+@Data
+public class SimpleGenerateRequest {
+
+ /**
+ * 要使用的模型ID (目前统一为reecho-neural-voice-001)
+ */
+ private String model = "reecho-neural-voice-001";
+
+ /**
+ * 多样性 (0-100,默认为97)
+ */
+ private Integer randomness;
+
+ /**
+ * 稳定性过滤 (0-100,默认为0)
+ */
+ private Integer stability_boost;
+
+ /**
+ * 角色ID
+ */
+ private String voiceId;
+
+ /**
+ * 要生成的文本内容
+ */
+ private String text;
+}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/MetadataResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/MetadataResponse.java
new file mode 100644
index 00000000..2773a334
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/MetadataResponse.java
@@ -0,0 +1,14 @@
+package com.xmzs.common.chat.domain.response;
+
+import lombok.Data;
+
+/**
+ * @author WangLe
+ */
+@Data
+public class MetadataResponse {
+ private String promptMP3StorageUrl;
+ private String promptOriginAudioStorageUrl;
+ private String description;
+ private boolean preProcess;
+}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/RoleDataResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/RoleDataResponse.java
new file mode 100644
index 00000000..9470f1a6
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/RoleDataResponse.java
@@ -0,0 +1,20 @@
+package com.xmzs.common.chat.domain.response;
+
+import lombok.Data;
+
+/**
+ * @author WangLe
+ */
+@Data
+public class RoleDataResponse {
+ private String id;
+ private String name;
+ private String status;
+ private String from;
+ private String originId;
+ private MetadataResponse metadata;
+ private String createdAt;
+ private String updatedAt;
+ private String deletedAt;
+ private String userId;
+}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/RoleResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/RoleResponse.java
new file mode 100644
index 00000000..58cc4c14
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/RoleResponse.java
@@ -0,0 +1,13 @@
+package com.xmzs.common.chat.domain.response;
+
+import lombok.Data;
+
+/**
+ * @author WangLe
+ */
+@Data
+public class RoleResponse {
+ private String status;
+ private String message;
+ private RoleDataResponse data;
+}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/SimpleGenerateDataResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/SimpleGenerateDataResponse.java
new file mode 100644
index 00000000..b8a37a96
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/SimpleGenerateDataResponse.java
@@ -0,0 +1,25 @@
+package com.xmzs.common.chat.domain.response;
+
+import lombok.Data;
+
+/**
+ * @author WangLe
+ */
+@Data
+public class SimpleGenerateDataResponse {
+
+ /**
+ * 本次生成的ID
+ */
+ private String id;
+
+ /**
+ * 本次生成结果的音频文件地址
+ */
+ private String audio;
+
+ /**
+ * 本次生成所消耗的点数
+ */
+ private Integer credit_used;
+}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/SimpleGenerateResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/SimpleGenerateResponse.java
new file mode 100644
index 00000000..0b0266c5
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/response/SimpleGenerateResponse.java
@@ -0,0 +1,25 @@
+package com.xmzs.common.chat.domain.response;
+
+import lombok.Data;
+
+/**
+ * @author WangLe
+ */
+@Data
+public class SimpleGenerateResponse {
+
+ /**
+ * 状态码,失败时则为500
+ */
+ private String status;
+
+ /**
+ * 状态消息
+ */
+ private String message;
+
+ /**
+ * 生成详情
+ */
+ private SimpleGenerateDataResponse data;
+}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/entity/chat/BaseChatCompletion.java b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/entity/chat/BaseChatCompletion.java
index c14571e6..9e6f5b8f 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/entity/chat/BaseChatCompletion.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/entity/chat/BaseChatCompletion.java
@@ -2,7 +2,6 @@ package com.xmzs.common.chat.entity.chat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
-
import com.xmzs.common.chat.constant.OpenAIConst;
import com.xmzs.common.chat.entity.chat.tool.Tools;
import lombok.*;
@@ -217,6 +216,23 @@ public class BaseChatCompletion implements Serializable {
* gpt-4-0613,支持函数
*/
GPT_4_0125_PREVIEW("gpt-4-0125-preview"),
+
+ /**
+ * GPT_4_ALL
+ */
+ GPT_4_ALL("gpt-4-all"),
+
+ GPT_4_GIZMO("gpt-4-gizmo"),
+
+ NET("net"),
+
+ CLAUDE_3_SONNET("claude-3-sonnet-20240229"),
+
+ GEMINI_PRO("gemini-pro"),
+
+ STABLE_DIFFUSION("stable-diffusion"),
+
+ SUNO_V3("suno-v3"),
;
private final String name;
}
@@ -238,9 +254,10 @@ public class BaseChatCompletion implements Serializable {
}
public static double getModelCost(String modelName) {
- return switch (modelName) {
- case "gpt-3.5-turbo-0613" -> OpenAIConst.GPT3_COST;
- default -> OpenAIConst.GPT4_COST;
- };
+ if(modelName.startsWith("gpt-3.5")){
+ return OpenAIConst.GPT3_COST;
+ }else {
+ return OpenAIConst.GPT4_COST;
+ }
}
}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/entity/files/File.java b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/entity/files/File.java
index 581cd297..1dc00522 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/entity/files/File.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/entity/files/File.java
@@ -16,13 +16,20 @@ import java.io.Serializable;
@JsonIgnoreProperties(ignoreUnknown = true)
public class File implements Serializable {
- private String id;
- private String object;
+// private String id;
+// private String object;
+// private long bytes;
+// private long created_at;
+// private String filename;
+// private String purpose;
+// private String status;
+// @JsonProperty("status_details")
+// private String statusDetails;
+
private long bytes;
private long created_at;
private String filename;
- private String purpose;
- private String status;
- @JsonProperty("status_details")
- private String statusDetails;
+ private String id;
+ private String object;
+ private String url;
}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/openai/OpenAiStreamClient.java b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/openai/OpenAiStreamClient.java
index a979a0f5..5c56ecff 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/openai/OpenAiStreamClient.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/openai/OpenAiStreamClient.java
@@ -12,6 +12,7 @@ import com.xmzs.common.chat.entity.billing.Subscription;
import com.xmzs.common.chat.entity.chat.BaseChatCompletion;
import com.xmzs.common.chat.entity.chat.ChatCompletionResponse;
import com.xmzs.common.chat.entity.chat.ChatCompletionWithPicture;
+import com.xmzs.common.chat.entity.files.UploadFileResponse;
import com.xmzs.common.chat.entity.images.Image;
import com.xmzs.common.chat.entity.images.ImageResponse;
import com.xmzs.common.chat.entity.models.Model;
@@ -231,6 +232,23 @@ public class OpenAiStreamClient {
return chatCompletionResponse.blockingGet();
}
+ /**
+ * 上传文件
+ *
+ * @param purpose purpose
+ * @param file 文件对象
+ * @return UploadFileResponse
+ */
+ public UploadFileResponse uploadFile(String purpose, java.io.File file) {
+ // 创建 RequestBody,用于封装构建RequestBody
+ RequestBody fileBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
+ MultipartBody.Part multipartBody = MultipartBody.Part.createFormData("file", file.getName(), fileBody);
+
+ RequestBody purposeBody = RequestBody.create(MediaType.parse("multipart/form-data"), purpose);
+ Single uploadFileResponse = this.openAiApi.uploadFile(multipartBody, purposeBody);
+ return uploadFileResponse.blockingGet();
+ }
+
/**
* 获取openKey账户信息(近90天)
*
diff --git a/ruoyi-common/ruoyi-common-pay/src/main/java/com/xmzs/common/config/PayConfig.java b/ruoyi-common/ruoyi-common-pay/src/main/java/com/xmzs/common/config/PayConfig.java
index 6c2ff906..97436ac6 100644
--- a/ruoyi-common/ruoyi-common-pay/src/main/java/com/xmzs/common/config/PayConfig.java
+++ b/ruoyi-common/ruoyi-common-pay/src/main/java/com/xmzs/common/config/PayConfig.java
@@ -1,50 +1,57 @@
package com.xmzs.common.config;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
/**
* 支付配置信息
*
* @author Admin
*/
+@Data
+@Component
+@ConfigurationProperties(prefix = "pay")
public class PayConfig {
/**
* 商户ID
*/
- public static String pid = "xxx";
+ private String pid;
/**
* 接口地址
*/
- public static String payUrl = "https://pay-cloud.vip/mapi.php";
+ private String payUrl;
/**
* 私钥
*/
- public static String key = "xxx";
+ private String key ;
/**
* 服务器异步通知地址
*/
- public static String notify_url = "https://www.pandarobot.chat/pay/returnUrl";
+ private String notify_url;
/**
* 页面跳转通知地址
*/
- public static String return_url = "https://www.pandarobot.chat/pay/notifyUrl";
+ private String return_url;
/**
* 支付方式
*/
- public static String type = "wxpay";
+ private String type;
/**
* 设备类型
*/
- public static String device = "pc";
+ private String device;
/**
* 加密方式默认MD5
*/
- public static String sign_type = "MD5";
+ private String sign_type;
}
diff --git a/ruoyi-common/ruoyi-common-pay/src/main/java/com/xmzs/common/service/impl/PayServiceImpl.java b/ruoyi-common/ruoyi-common-pay/src/main/java/com/xmzs/common/service/impl/PayServiceImpl.java
index 25edd3a6..eb2a90d6 100644
--- a/ruoyi-common/ruoyi-common-pay/src/main/java/com/xmzs/common/service/impl/PayServiceImpl.java
+++ b/ruoyi-common/ruoyi-common-pay/src/main/java/com/xmzs/common/service/impl/PayServiceImpl.java
@@ -2,9 +2,11 @@ package com.xmzs.common.service.impl;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
+
import com.xmzs.common.config.PayConfig;
import com.xmzs.common.service.PayService;
import com.xmzs.common.utils.MD5Util;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.HashMap;
@@ -15,28 +17,31 @@ import java.util.Map;
* @author Admin
*/
@Service
+@RequiredArgsConstructor
public class PayServiceImpl implements PayService {
+
+ private final PayConfig payConfig;
@Override
public String getPayUrl(String orderNo, String name, double money, String clientIp) {
String out_trade_no = orderNo, sign = "";
//封装请求参数
- String mdString = "clientip=" + clientIp + "&device=" + PayConfig.device + "&money=" + money + "&name=" + name + "&" +
- "notify_url=" + PayConfig.notify_url + "&out_trade_no=" + out_trade_no + "&pid=" + PayConfig.pid + "&return_url=" + PayConfig.return_url +
- "&type=" + PayConfig.type + PayConfig.key;
+ String mdString = "clientip=" + clientIp + "&device=" + payConfig.getDevice() + "&money=" + money + "&name=" + name + "&" +
+ "notify_url=" + payConfig.getNotify_url() + "&out_trade_no=" + out_trade_no + "&pid=" + payConfig.getPid() + "&return_url=" + payConfig.getReturn_url() +
+ "&type=" + payConfig.getType() + payConfig.getKey();
sign = MD5Util.GetMD5Code(mdString);
Map map = new HashMap<>(10);
map.put("clientip", clientIp);
- map.put("device", PayConfig.device);
+ map.put("device", payConfig.getDevice());
map.put("money", money);
map.put("name", name);
- map.put("notify_url", PayConfig.notify_url);
+ map.put("notify_url", payConfig.getNotify_url());
map.put("out_trade_no", out_trade_no);
- map.put("pid", PayConfig.pid);
- map.put("return_url", PayConfig.return_url);
- map.put("sign_type", PayConfig.sign_type);
- map.put("type", PayConfig.type);
+ map.put("pid", payConfig.getPid());
+ map.put("return_url", payConfig.getReturn_url());
+ map.put("sign_type", payConfig.getSign_type());
+ map.put("type", payConfig.getType());
map.put("sign", sign);
- String body = HttpUtil.post(PayConfig.payUrl, map);
+ String body = HttpUtil.post(payConfig.getPayUrl(), map);
JSONObject jsonObject = new JSONObject(body);
return (String) jsonObject.get("qrcode");
}
diff --git a/ruoyi-modules/pom.xml b/ruoyi-modules/pom.xml
index 5f37684f..a6d07b22 100644
--- a/ruoyi-modules/pom.xml
+++ b/ruoyi-modules/pom.xml
@@ -22,7 +22,6 @@
ruoyi-job
ruoyi-midjourney
ruoyi-system
- ruoyi-live
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestDemoController.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestDemoController.java
index 50532dbd..788afe05 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestDemoController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestDemoController.java
@@ -7,30 +7,30 @@ import com.xmzs.common.core.utils.ValidatorUtils;
import com.xmzs.common.core.validate.AddGroup;
import com.xmzs.common.core.validate.EditGroup;
import com.xmzs.common.core.validate.QueryGroup;
-import com.xmzs.common.web.core.BaseController;
-import com.xmzs.common.idempotent.annotation.RepeatSubmit;
-import com.xmzs.common.mybatis.core.page.PageQuery;
-import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.common.excel.core.ExcelResult;
import com.xmzs.common.excel.utils.ExcelUtil;
+import com.xmzs.common.idempotent.annotation.RepeatSubmit;
import com.xmzs.common.log.annotation.Log;
import com.xmzs.common.log.enums.BusinessType;
+import com.xmzs.common.mybatis.core.page.PageQuery;
+import com.xmzs.common.mybatis.core.page.TableDataInfo;
+import com.xmzs.common.web.core.BaseController;
import com.xmzs.demo.domain.TestDemo;
import com.xmzs.demo.domain.bo.TestDemoBo;
import com.xmzs.demo.domain.bo.TestDemoImportVo;
import com.xmzs.demo.domain.vo.TestDemoVo;
import com.xmzs.demo.service.ITestDemoService;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
-import jakarta.servlet.http.HttpServletResponse;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-
-import java.util.*;
+import java.util.Arrays;
+import java.util.List;
import java.util.concurrent.TimeUnit;
/**
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestExcelController.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestExcelController.java
index fa18cf0b..8209f300 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestExcelController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestExcelController.java
@@ -2,13 +2,13 @@ package com.xmzs.demo.controller;
import cn.hutool.core.collection.CollUtil;
import com.xmzs.common.excel.utils.ExcelUtil;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import jakarta.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestI18nController.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestI18nController.java
index 3df8c1f5..6cd52aa4 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestI18nController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestI18nController.java
@@ -2,6 +2,8 @@ package com.xmzs.demo.controller;
import com.xmzs.common.core.domain.R;
import com.xmzs.common.core.utils.MessageUtils;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import org.springframework.validation.annotation.Validated;
@@ -9,9 +11,6 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-
/**
* 测试国际化
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestSensitiveController.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestSensitiveController.java
index 5385030c..2c5f1a71 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestSensitiveController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestSensitiveController.java
@@ -1,11 +1,11 @@
package com.xmzs.demo.controller;
import com.xmzs.common.core.domain.R;
-import com.xmzs.common.web.core.BaseController;
import com.xmzs.common.sensitive.annotation.Sensitive;
-import com.xmzs.common.sensitive.core.SensitiveStrategy;
-import lombok.Data;
import com.xmzs.common.sensitive.core.SensitiveService;
+import com.xmzs.common.sensitive.core.SensitiveStrategy;
+import com.xmzs.common.web.core.BaseController;
+import lombok.Data;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestTreeController.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestTreeController.java
index 8eaa420e..2d1873b5 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestTreeController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestTreeController.java
@@ -5,21 +5,21 @@ import com.xmzs.common.core.domain.R;
import com.xmzs.common.core.validate.AddGroup;
import com.xmzs.common.core.validate.EditGroup;
import com.xmzs.common.core.validate.QueryGroup;
-import com.xmzs.common.web.core.BaseController;
import com.xmzs.common.excel.utils.ExcelUtil;
import com.xmzs.common.idempotent.annotation.RepeatSubmit;
import com.xmzs.common.log.annotation.Log;
import com.xmzs.common.log.enums.BusinessType;
+import com.xmzs.common.web.core.BaseController;
import com.xmzs.demo.domain.bo.TestTreeBo;
import com.xmzs.demo.domain.vo.TestTreeVo;
import com.xmzs.demo.service.ITestTreeService;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import jakarta.servlet.http.HttpServletResponse;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/domain/bo/TestDemoBo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/domain/bo/TestDemoBo.java
index 89df0b18..716b0336 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/domain/bo/TestDemoBo.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/domain/bo/TestDemoBo.java
@@ -5,11 +5,10 @@ import com.xmzs.common.core.validate.EditGroup;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
import com.xmzs.demo.domain.TestDemo;
import io.github.linpeilie.annotations.AutoMapper;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
/**
* 测试单表业务对象 test_demo
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/domain/bo/TestDemoImportVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/domain/bo/TestDemoImportVo.java
index 077af6fc..695971a7 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/domain/bo/TestDemoImportVo.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/domain/bo/TestDemoImportVo.java
@@ -1,10 +1,9 @@
package com.xmzs.demo.domain.bo;
import com.alibaba.excel.annotation.ExcelProperty;
-import lombok.Data;
-
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
/**
* 测试单表业务对象 test_demo
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/controller/GenController.java b/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/controller/GenController.java
index 0a017f73..74d37f0b 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/controller/GenController.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/controller/GenController.java
@@ -4,19 +4,19 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.IoUtil;
import com.xmzs.common.core.domain.R;
-import com.xmzs.common.web.core.BaseController;
-import com.xmzs.common.mybatis.core.page.PageQuery;
-import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.common.log.annotation.Log;
import com.xmzs.common.log.enums.BusinessType;
+import com.xmzs.common.mybatis.core.page.PageQuery;
+import com.xmzs.common.mybatis.core.page.TableDataInfo;
+import com.xmzs.common.web.core.BaseController;
import com.xmzs.generator.domain.GenTable;
import com.xmzs.generator.domain.GenTableColumn;
import com.xmzs.generator.service.IGenTableService;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/domain/GenTableColumn.java b/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/domain/GenTableColumn.java
index d675af7e..f107b0e9 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/domain/GenTableColumn.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/domain/GenTableColumn.java
@@ -6,12 +6,11 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xmzs.common.core.utils.StringUtils;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
+import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.ibatis.type.JdbcType;
-import jakarta.validation.constraints.NotBlank;
-
/**
* 代码生成业务字段表 gen_table_column
*
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/service/GenTableServiceImpl.java
index 3436b7f1..f2c6c64c 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/service/GenTableServiceImpl.java
@@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xmzs.common.core.constant.Constants;
-import com.xmzs.generator.constant.GenConstants;
import com.xmzs.common.core.exception.ServiceException;
import com.xmzs.common.core.utils.StreamUtils;
import com.xmzs.common.core.utils.StringUtils;
@@ -20,6 +19,7 @@ import com.xmzs.common.json.utils.JsonUtils;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.common.satoken.utils.LoginHelper;
+import com.xmzs.generator.constant.GenConstants;
import com.xmzs.generator.domain.GenTable;
import com.xmzs.generator.domain.GenTableColumn;
import com.xmzs.generator.mapper.GenTableColumnMapper;
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/util/GenUtils.java b/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/util/GenUtils.java
index 78d8265c..46da7844 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/util/GenUtils.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/util/GenUtils.java
@@ -1,9 +1,9 @@
package com.xmzs.generator.util;
-import com.xmzs.generator.constant.GenConstants;
import com.xmzs.common.core.utils.StringUtils;
import com.xmzs.common.satoken.utils.LoginHelper;
import com.xmzs.generator.config.GenConfig;
+import com.xmzs.generator.constant.GenConstants;
import com.xmzs.generator.domain.GenTable;
import com.xmzs.generator.domain.GenTableColumn;
import lombok.AccessLevel;
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/util/VelocityUtils.java b/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/util/VelocityUtils.java
index 3e34edea..47ca1841 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/util/VelocityUtils.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/util/VelocityUtils.java
@@ -3,11 +3,11 @@ package com.xmzs.generator.util;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Dict;
-import com.xmzs.generator.constant.GenConstants;
import com.xmzs.common.core.utils.DateUtils;
import com.xmzs.common.core.utils.StringUtils;
import com.xmzs.common.json.utils.JsonUtils;
import com.xmzs.common.mybatis.helper.DataBaseHelper;
+import com.xmzs.generator.constant.GenConstants;
import com.xmzs.generator.domain.GenTable;
import com.xmzs.generator.domain.GenTableColumn;
import lombok.AccessLevel;
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/ts/api.ts.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/ts/api.ts.vm
index 3aa4a5f6..9ef9ff4a 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/ts/api.ts.vm
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/ts/api.ts.vm
@@ -1,6 +1,6 @@
import request from '@/utils/request';
-import { AxiosPromise } from 'axios';
-import { ${BusinessName}VO, ${BusinessName}Form, ${BusinessName}Query } from '@/api/${moduleName}/${businessName}/types';
+import {AxiosPromise} from 'axios';
+import {${BusinessName}Form, ${BusinessName}Query, ${BusinessName}VO} from '@/api/';
/**
* 查询${functionName}列表
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
index 84432ac8..6847f3b0 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
@@ -258,12 +258,19 @@