办学质量监测教学评价系统
ageer
2024-04-01 dea23f13ef2d4918080ce8aeee1ee908188cdb19
README.md
@@ -63,7 +63,11 @@
</div>
## è¯­éŸ³å…‹éš†
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 @@
## ç§æœ‰çŸ¥è¯†åº“管理(开发中)
## ç§æœ‰çŸ¥è¯†åº“管理
<div>
  <img style="margin-top:10px" src="./image/12.png" alt="drawing" width="550px" height="300px"/>
  <img style="margin-top:10px" src="./image/私有知识库业务架构图.drawio.png" alt="drawing" width="550px" height="300px"/>
  <img style="margin-top:10px;width:50%" src="./image/12.png" alt="drawing" width="550px" height="300px"/>
  <img style="margin-top:10px;width:50%" src="./image/私有知识库业务架构图.drawio.png" alt="drawing" width="550px" height="300px"/>
  <img style="margin-top:10px;width:50%" src="https://github.com/ageerle/ruoyi-ai/assets/32251822/6d44ebcc-1ec4-43e0-b164-cac150e8a044" alt="drawing" width="550px" height="300px"/>
  <img style="margin-top:10px;width:50%" src="https://github.com/ageerle/ruoyi-ai/assets/32251822/fbd50daf-19d9-4e0f-8e5e-8603af5fb520" alt="drawing" width="550px" height="300px"/>
  <img style="margin-top:10px;width:50%" src="https://github.com/ageerle/ruoyi-ai/assets/32251822/b14dffe7-2ae1-4fa3-8bb0-bf0b44d7ebd9" alt="drawing" width="550px" height="300px"/>
  <img style="margin-top:10px;width:50%" src="https://github.com/ageerle/ruoyi-ai/assets/32251822/4ae97a41-f1d2-4bb2-966f-83211193a115" alt="drawing" width="550px" height="300px"/>
</div>
## è¿›ç¾¤å­¦ä¹ 
image/02.png
pom.xml
@@ -324,6 +324,8 @@
                <version>${revision}</version>
            </dependency>
            <dependency>
                <groupId>com.xmzs</groupId>
                <artifactId>ruoyi-generator</artifactId>
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}
ruoyi-admin/pom.xml
@@ -64,6 +64,9 @@
            <artifactId>ruoyi-midjourney</artifactId>
        </dependency>
        <!-- ä»£ç ç”Ÿæˆ-->
        <dependency>
            <groupId>com.xmzs</groupId>
ruoyi-admin/src/main/java/com/xmzs/controller/AuthController.java
@@ -45,8 +45,6 @@
    private final SysRegisterService registerService;
    private final ISysTenantService tenantService;
    /**
     * ç™»å½•方法
     *
ruoyi-admin/src/main/java/com/xmzs/controller/CaptchaController.java
@@ -85,6 +85,7 @@
     *
     * @param emailRequest ç”¨æˆ·é‚®ç®±
     */
    //@PostMapping("/resource/email/code")
    @PostMapping("/resource/email/code")
    public R<Void> emailCode(@RequestBody @Valid EmailRequest emailRequest) {
        if (!mailProperties.getEnabled()) {
ruoyi-admin/src/main/java/com/xmzs/controller/ChatController.java
@@ -3,8 +3,8 @@
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,24 +21,14 @@
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;
/**
 * æè¿°ï¼š
@@ -63,6 +53,16 @@
    public SseEmitter sseChat(@RequestBody @Valid ChatRequest chatRequest, HttpServletResponse response) {
        return ISseService.sseChat(chatRequest);
    }
    /**
     * ä¸Šä¼ æ–‡ä»¶
     */
    @PostMapping("/v1/upload")
    @ResponseBody
    public UploadFileResponse upload(@RequestPart("file") MultipartFile file) {
        return ISseService.upload(file);
    }
    /**
     * è¯­éŸ³è½¬æ–‡æœ¬
@@ -92,18 +92,6 @@
    @ResponseBody
    public R<List<Item>> dall3(@RequestBody @Valid Dall3Request request) {
        return R.ok(ISseService.dall3(request));
    }
    /**
     * æ‰£é™¤mj绘图费用
     *
     * @return
     */
    @PostMapping("/mjTask")
    @ResponseBody
    public R<String> mjTask(@RequestBody MjTaskRequest mjTaskRequest) {
        ISseService.mjTask(mjTaskRequest);
        return R.ok();
    }
    /**
ruoyi-admin/src/main/java/com/xmzs/controller/PayController.java
@@ -23,7 +23,6 @@
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 @@
    private final IPaymentOrdersService paymentOrdersService;
    private final PayConfig payConfig;
    /**
     * èŽ·å–æ”¯ä»˜äºŒç»´ç 
     *
     * @Date 2023/7/3
     * @param response
     * @return void
     **/
    @PostMapping("/payUrl")
    public R<PaymentOrdersVo> payUrl(HttpServletResponse response, @RequestBody OrderRequest orderRequest) {
    public R<PaymentOrdersVo> payUrl(@RequestBody OrderRequest orderRequest) {
        LoginUser loginUser = LoginHelper.getLoginUser();
        // åˆ›å»ºè®¢å•
        PaymentOrdersBo paymentOrders = new PaymentOrdersBo();
@@ -115,9 +115,9 @@
    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 @@
        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);
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 @@
          # 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
ruoyi-admin/src/main/resources/application-prod.yml
@@ -4,7 +4,7 @@
--- # ç›‘控中心配置
spring.boot.admin.client:
  # å¢žåŠ å®¢æˆ·ç«¯å¼€å…³
  enabled: true
  enabled: false
  url: http://localhost:9090/admin
  instance:
    service-host-type: IP
ruoyi-admin/src/main/resources/application.yml
@@ -212,27 +212,6 @@
  # å…¬ç§é’¥ éžå¯¹ç§°ç®—法的公私钥 å¦‚: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 @@
--- # websocket
websocket:
  enabled: true
  enabled: false
  # è·¯å¾„
  path: ''
  # è®¾ç½®è®¿é—®æºåœ°å€
  allowedOrigins: '*'
# chatgpt配置信息
chat:
  apiKey: 'sk-xxx'
  apiHost: 'https://api.pandarobot.chat/'
# å¾®ä¿¡å°ç¨‹åºé…ç½®ä¿¡æ¯
wx:
  miniapp:
@@ -338,6 +314,8 @@
  textReview:
    apiKey: '' # apiKey
    secretKey: '' # secretKey
  appKey: xxxxxxxxxxxxxxxxx
  secretKey: xxxxxxxxxxxxxxxxxxxxxxx
wechat:
  #  æ˜¯å¦ä½¿ç”¨å¾®ä¿¡ true/false
@@ -353,23 +331,62 @@
  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'
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);
    }
}
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 ==================");
    }
}
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<String> getParam() {
        List<String> 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 ==================");
    }
}
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 ==================");
    }
}
ruoyi-common/ruoyi-common-bom/pom.xml
@@ -173,13 +173,15 @@
                <version>${revision}</version>
            </dependency>
            <!-- å¾®ä¿¡æ¨¡å— -->
            <!-- AI绘画 -->
            <dependency>
                <groupId>com.xmzs</groupId>
                <artifactId>ruoyi-midjourney</artifactId>
                <version>${revision}</version>
            </dependency>
            <!-- æ”¯ä»˜æ¨¡å— -->
            <dependency>
                <groupId>com.xmzs</groupId>
ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/constant/OpenAIConst.java
@@ -12,22 +12,27 @@
    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;
}
ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/domain/request/ChatRequest.java
@@ -22,16 +22,16 @@
    @NotEmpty(message = "对话消息不能为空")
    List<Message> messages;
    List<Content> content;
    List<Content> imageContent;
    private String prompt;
    private String userId;
    /**
     * éœ€è¦è¯†åˆ«çš„图片地址
     * çŸ¥è¯†åº“id
     */
    private String imgurl;
    private String kid;
    /**
     * gpt的默认设置
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/entity/chat/BaseChatCompletion.java
@@ -2,7 +2,6 @@
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 @@
         * 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 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;
        }
    }
}
ruoyi-common/ruoyi-common-chat/src/main/java/com/xmzs/common/chat/entity/files/File.java
@@ -16,13 +16,20 @@
@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;
}
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.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;
@@ -232,6 +233,23 @@
    }
    /**
     * ä¸Šä¼ æ–‡ä»¶
     *
     * @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> uploadFileResponse = this.openAiApi.uploadFile(multipartBody, purposeBody);
        return uploadFileResponse.blockingGet();
    }
    /**
     * èŽ·å–openKey账户信息(近90天)
     *
     * @param key
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;
}
ruoyi-common/ruoyi-common-pay/src/main/java/com/xmzs/common/service/impl/PayServiceImpl.java
@@ -2,9 +2,11 @@
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 @@
 * @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<String, Object> 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");
    }
ruoyi-modules/pom.xml
@@ -22,7 +22,6 @@
        <module>ruoyi-job</module>
        <module>ruoyi-midjourney</module>
        <module>ruoyi-system</module>
        <module>ruoyi-live</module>
    </modules>
</project>
ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestDemoController.java
@@ -7,30 +7,30 @@
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;
/**
ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestExcelController.java
@@ -2,13 +2,13 @@
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;
ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestI18nController.java
@@ -2,15 +2,14 @@
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;
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;
/**
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;
ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/controller/TestTreeController.java
@@ -5,21 +5,21 @@
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;
ruoyi-modules/ruoyi-demo/src/main/java/com/xmzs/demo/domain/bo/TestDemoBo.java
@@ -5,11 +5,10 @@
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
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
ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/controller/GenController.java
@@ -4,19 +4,19 @@
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;
ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/domain/GenTableColumn.java
@@ -6,11 +6,10 @@
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
ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/service/GenTableServiceImpl.java
@@ -11,7 +11,6 @@
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.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;
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;
ruoyi-modules/ruoyi-generator/src/main/java/com/xmzs/generator/util/VelocityUtils.java
@@ -3,11 +3,11 @@
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;
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}列表
ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
@@ -258,12 +258,19 @@
</template>
<script setup name="${BusinessName}" lang="ts">
import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from '@/api/${moduleName}/${businessName}';
import { ${BusinessName}VO, ${BusinessName}Query, ${BusinessName}Form } from '@/api/${moduleName}/${businessName}/types';
import { ComponentInternalInstance } from 'vue';
import { ElForm } from 'element-plus';
    import {
        add${BusinessName},
            ${BusinessName}Form,
        get${BusinessName},
        list${BusinessName},
            ${BusinessName}Query,
        update${BusinessName},
            ${BusinessName}VO
    } from '@/api/';
    import {ComponentInternalInstance} from 'vue';
    import {ElForm} from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
    const { proxy } = getCurrentInstance() as ComponentInternalInstance;
#if(${dicts} != '')
#set($dictsNoSymbol=$dicts.replace("'", ""))
const { ${dictsNoSymbol} } = toRefs<any>(proxy?.useDict(${dicts}));
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/constant/Constants.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/exception/BaseException.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/IBaseConnectionListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/IBaseMsgListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/IDanmuMsgListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/IEnterRoomMsgListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/IGiftMsgListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/ILikeMsgListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/ISuperChatMsgListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/BaseCmdMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/BaseMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/ICmdMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/IDanmuMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/IEnterRoomMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/IGiftMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/ILikeMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/IMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/ISuperChatMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-client/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-client/src/main/java/tech/ordinaryroad/live/chat/client/commons/client/BaseLiveChatClient.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-client/src/main/java/tech/ordinaryroad/live/chat/client/commons/client/IBaseLiveChatClient.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-client/src/main/java/tech/ordinaryroad/live/chat/client/commons/client/config/BaseLiveChatClientConfig.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-client/src/main/java/tech/ordinaryroad/live/chat/client/commons/client/enums/ClientStatusEnums.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-util/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-util/src/main/java/tech/ordinaryroad/live/chat/client/commons/util/OrLiveChatCookieUtil.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-util/src/main/java/tech/ordinaryroad/live/chat/client/commons/util/OrLiveChatNumberUtil.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-util/src/main/java/tech/ordinaryroad/live/chat/client/commons/util/OrLiveChatReflectUtil.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/live-chat-client-commons-util/src/main/java/tech/ordinaryroad/live/chat/client/commons/util/OrLocalDateTimeUtil.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-commons/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-servers/live-chat-client-servers-netty-client/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-servers/live-chat-client-servers-netty-client/src/main/java/tech/ordinaryroad/live/chat/client/servers/netty/client/base/BaseNettyClient.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-servers/live-chat-client-servers-netty-client/src/main/java/tech/ordinaryroad/live/chat/client/servers/netty/client/config/BaseNettyClientConfig.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-servers/live-chat-client-servers-netty-client/src/main/java/tech/ordinaryroad/live/chat/client/servers/netty/client/handler/BaseNettyClientBinaryFrameHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-servers/live-chat-client-servers-netty-client/src/main/java/tech/ordinaryroad/live/chat/client/servers/netty/client/handler/BaseNettyClientConnectionHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-servers/live-chat-client-servers-netty/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-servers/live-chat-client-servers-netty/src/main/java/tech/ordinaryroad/live/chat/client/servers/netty/frame/base/BaseBinaryWebSocketFrame.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-servers/live-chat-client-servers-netty/src/main/java/tech/ordinaryroad/live/chat/client/servers/netty/handler/base/BaseBinaryFrameHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-servers/live-chat-client-servers-netty/src/main/java/tech/ordinaryroad/live/chat/client/servers/netty/handler/base/BaseConnectionHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-client-servers/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/api/BilibiliApis.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/api/request/BilibiliLikeReportV3Request.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/api/request/BilibiliSendMsgRequest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/client/BilibiliLiveChatClient.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/config/BilibiliLiveChatClientConfig.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/constant/BilibiliCmdEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/constant/OperationEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/constant/ProtoverEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/listener/IBilibiliConnectionListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/listener/IBilibiliMsgListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/AuthMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/AuthReplyMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/DanmuMsgMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/HeartbeatMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/HeartbeatReplyMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/InteractWordMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/LikeInfoV3ClickMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/SendGiftMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/SendSmsReplyMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/SuperChatMessageMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/base/BaseBilibiliCmdMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/base/BaseBilibiliMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/base/IBilibiliMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/dto/MedalInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/netty/frame/AuthWebSocketFrame.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/netty/frame/HeartbeatWebSocketFrame.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/netty/frame/base/BaseBilibiliWebSocketFrame.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/netty/frame/factory/BilibiliWebSocketFrameFactory.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/netty/handler/BilibiliBinaryFrameHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/netty/handler/BilibiliConnectionHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/protobuf/Dm_v2Proto.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/protobuf/Dm_v2_20Proto.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/protobuf/dm_v2.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/protobuf/dm_v2OrBuilder.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/protobuf/dm_v2_20.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/protobuf/dm_v2_20OrBuilder.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/util/BilibiliCodecUtil.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/resources/proto/dm_v2.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/main/resources/proto/dm_v2_20.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/test/java/tech/ordinaryroad/live/chat/client/bilibili/api/BilibiliApisTest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-bilibili/src/test/java/tech/ordinaryroad/live/chat/client/bilibili/client/BilibiliLiveChatClientTest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/ClientModeExample.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/api/DouyinApis.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/client/DouyinLiveChatClient.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/config/DouyinLiveChatClientConfig.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/constant/DouyinCmdEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/listener/IDouyinConnectionListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/listener/IDouyinMsgListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/msg/DouyinDanmuMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/msg/DouyinEnterRoomMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/msg/DouyinGiftMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/msg/DouyinLikeMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/msg/base/IDouyinCmdMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/msg/base/IDouyinMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/netty/handler/DouyinBinaryFrameHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/netty/handler/DouyinConnectionHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/Douyin_cmd_msgProto.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/Douyin_webcast_chat_message_msgProto.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/Douyin_webcast_gift_message_msgProto.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/Douyin_webcast_member_message_msgProto.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/Douyin_websocket_frameProto.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_cmd_msg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_cmd_msgOrBuilder.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_webcast_chat_message_msg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_webcast_chat_message_msgOrBuilder.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_webcast_gift_message_msg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_webcast_gift_message_msgOrBuilder.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_webcast_like_message_msg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_webcast_like_message_msgOrBuilder.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_webcast_like_message_msgProto.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_webcast_member_message_msg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_webcast_member_message_msgOrBuilder.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_websocket_frame.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_websocket_frameOrBuilder.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_websocket_frame_msg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_websocket_frame_msgOrBuilder.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_websocket_frame_msgProto.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/CommonOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/DoubleLikeDetailOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/GiftIMPriorityOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/GiftStructOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/ImageOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/PatternRefOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/PublicAreaCommonOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextEffectDetailOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextEffectOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextFormatOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextPieceGiftOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextPieceHeartOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextPieceImageOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextPieceOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextPiecePatternRefOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextPieceUserOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/UserOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/Common.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/DoubleLikeDetail.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/GiftIMPriority.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/GiftStruct.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/Image.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/PatternRef.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/PublicAreaCommon.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/Text.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextEffect.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextEffectDetail.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextFormat.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextPiece.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextPieceGift.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextPieceHeart.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextPieceImage.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextPiecePatternRef.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextPieceUser.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/User.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_cmd_msg.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_webcast_chat_message_msg.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_webcast_gift_message_msg.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_webcast_like_message_msg.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_webcast_member_message_msg.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_websocket_frame.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_websocket_frame_msg.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/test/java/tech/ordinaryroad/live/chat/client/douyin/api/DouyinApisTest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyin/src/test/java/tech/ordinaryroad/live/chat/client/douyin/client/DouyinLiveChatClientTest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/README.md
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/api/DouyuApis.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/client/DouyuDanmuLiveChatClient.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/client/DouyuLiveChatClient.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/client/DouyuWsLiveChatClient.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/client/base/BaseDouyuLiveChatClient.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/config/DouyuLiveChatClientConfig.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/constant/DouyuClientModeEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/constant/DouyuCmdEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/listener/IDouyuConnectionListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/listener/IDouyuMsgListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/ChatmessageMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/ChatmsgMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/DgbMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/DouyuCmdMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/H5ckreqMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/H5csMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/H5gkcreqMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/HeartbeatMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/HeartbeatReplyMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/JoingroupMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/KeepliveMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/LoginreqMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/LoginresMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/MapkbMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/MsgrepeaterproxylistMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/SubMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/UenterMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/base/BaseDouyuCmdMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/base/IDouyuMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/dto/GiftListInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/dto/GiftPropInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/dto/GiftPropSingle.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/frame/AuthWebSocketFrame.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/frame/HeartbeatWebSocketFrame.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/frame/KeepliveWebSocketFrame.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/frame/base/BaseDouyuWebSocketFrame.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/frame/factory/DouyuWebSocketFrameFactory.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/handler/DouyuBinaryFrameHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/handler/DouyuConnectionHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/util/DouyuCodecUtil.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/api/DouyuApisTest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/ChatChoice.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/ChatCompletionResponse.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/DouyuLiveChatClientTest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/Message.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/Usage.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/util/DouyuCodecUtilTest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/api/HuyaApis.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/client/HuyaLiveChatClient.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/config/HuyaLiveChatClientConfig.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaClientTemplateTypeEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaCmdEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaDecorationAppTypeEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaDecorationViewTypeEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaGenderEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaLiveSource.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaOperationEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaStreamLineTypeEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaWupFunctionEnum.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/listener/IHuyaConnectionListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/listener/IHuyaMsgListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/BaseWup.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/ConnectParaInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/LiveLaunchRsp.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/MessageNoticeMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/PushMessage.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/PushMessage_V2.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/RegisterGroupRsp.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/RegisterRsp.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/SendItemSubBroadcastPacketMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/UserInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/VerifyCookieRsp.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/VipEnterBannerMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/WebSocketCommand.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/WupRsp.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/base/BaseHuyaCmdMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/base/BaseHuyaMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/base/IHuyaCmdMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/base/IHuyaMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/ACEnterBanner.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/BadgeInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/BulletBorderGroundFormat.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/BulletFormat.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/ChannelPair.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/CommEnterBanner.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/ContentFormat.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/CustomBadgeDynamicExternal.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/DIYBigGiftEffect.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/DecorationInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/DecorationInfoRsp.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/DeviceInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/DisplayInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/FaithInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/FaithPresenter.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/GuardInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/ItemEffectInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/LiveAppUAEx.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/LiveProxyValue.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/LiveUserbase.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/MessageContentExpand.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/MessageTagInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/MsgItem.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/MsgStatInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/NobleInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/NobleLevelAttr.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/NobleLevelInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/NoblePetAttr.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/PresenterChannelInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/PropView.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/PropsIdentity.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/PropsItem.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/SendMessageFormat.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/SenderInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/SpecialInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/SuperFansInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/UidNickName.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/UserId.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/UserIdentityInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/UserRidePetInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/WeekRankInfo.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/GetLivingInfoReq.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/GetPropsListReq.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/GetPropsListRsp.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/LaunchReq.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/LiveLaunchReq.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/RegisterGroupReq.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/SendMessageReq.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/UpdateUserInfoReq.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/UserHeartBeatReq.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/VerifyCookieReq.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/WupReq.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/netty/frame/factory/HuyaWebSocketFrameFactory.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/netty/handler/HuyaBinaryFrameHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/netty/handler/HuyaConnectionHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/util/HuyaCodecUtil.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/test/java/tech/ordinaryroad/live/chat/client/huya/api/HuyaApisTest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/test/java/tech/ordinaryroad/live/chat/client/huya/client/HuyaLiveChatClientTest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-huya/src/test/java/tech/ordinaryroad/live/chat/client/huya/util/HuyaCodecUtilTest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/ClientModeExample.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/api/KuaishouApis.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/client/KuaishouLiveChatClient.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/config/KuaishouLiveChatClientConfig.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/listener/IKuaishouConnectionListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/listener/IKuaishouMsgListener.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/msg/KuaishouDanmuMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/msg/KuaishouGiftMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/msg/KuaishouLikeMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/msg/base/IKuaishouCmdMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/msg/base/IKuaishouMsg.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/netty/handler/KuaishouBinaryFrameHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/netty/handler/KuaishouConnectionHandler.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/AuditAudienceMaskOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSErrorOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSHeartbeatOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSPingOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSWebEnterRoomOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSWebErrorOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSWebHeartbeatOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSWebUserExitOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSWebUserPauseOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/ClientIdOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/ConfigSwitchItemOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/ConfigSwitchTypeOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/GzoneNameplateOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/LiveAudienceStateOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/LiveCdnNodeViewOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/LiveFansGroupStateOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/PSHostInfoOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/PayloadTypeOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/PicUrlOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCEchoOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCErrorOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCHeartbeatAckOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCInfoOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCLiveWarningMaskStatusChangedAudienceOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCPingAckOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebAuthorPauseOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebAuthorResumeOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebBetChangedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebBetClosedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebCurrentRedPackFeedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebEnterRoomAckOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebErrorOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebFeedPushOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebGuessClosedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebGuessOpenedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebHeartbeatAckOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebLiveSpecialAccountConfigStateOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebLiveWatchingUsersOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebPipEndedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebPipStartedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebRefreshWalletOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebRideChangedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebSuspectedViolationOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SimpleUserInfoOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SocketMessageOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/UserInfoOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebComboCommentFeedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebCommentFeedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebCommentFeedShowTypeOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebGiftFeedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebLikeFeedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebLiveAssistantTypeOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebPauseTypeOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebRedPackCoverTypeOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebRedPackInfoOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebShareFeedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebSystemNoticeFeedOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebUserPauseTypeOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebWatchingUserInfoOuterClass.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/AuditAudienceMask.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSError.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSHeartbeat.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSPing.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSWebEnterRoom.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSWebError.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSWebHeartbeat.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSWebUserExit.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSWebUserPause.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/ClientId.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/ConfigSwitchItem.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/ConfigSwitchType.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/GzoneNameplate.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/LiveAudienceState.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/LiveCdnNodeView.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/LiveFansGroupState.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/PSHostInfo.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/PayloadType.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/PicUrl.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCEcho.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCError.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCHeartbeatAck.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCInfo.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCLiveWarningMaskStatusChangedAudience.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCPingAck.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebAuthorPause.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebAuthorResume.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebBetChanged.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebBetClosed.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebCurrentRedPackFeed.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebEnterRoomAck.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebError.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebFeedPush.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebGuessClosed.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebGuessOpened.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebHeartbeatAck.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebLiveSpecialAccountConfigState.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebLiveWatchingUsers.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebPipEnded.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebPipStarted.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebRefreshWallet.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebRideChanged.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebSuspectedViolation.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SimpleUserInfo.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SocketMessage.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/UserInfo.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebComboCommentFeed.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebCommentFeed.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebCommentFeedShowType.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebGiftFeed.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebLikeFeed.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebLiveAssistantType.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebPauseType.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebRedPackCoverType.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebRedPackInfo.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebShareFeed.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebSystemNoticeFeed.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebUserPauseType.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebWatchingUserInfo.proto
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/test/java/tech/ordinaryroad/live/chat/client/kuaishou/api/KuaishouApisTest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/live-chat-client-kuaishou/src/test/java/tech/ordinaryroad/live/chat/client/kuaishou/client/KuaishouLiveChatClientTest.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/live-chat-clients/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-live/pom.xml
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-midjourney/pom.xml
@@ -110,6 +110,10 @@
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
        </dependency>
        <dependency>
            <groupId>com.xmzs</groupId>
            <artifactId>ruoyi-system</artifactId>
        </dependency>
    </dependencies>
</project>
ruoyi-modules/ruoyi-midjourney/src/main/java/com/xmzs/midjourney/controller/AccountController.java
@@ -19,6 +19,7 @@
@RequestMapping("/mj/account")
@RequiredArgsConstructor
public class AccountController {
   private final DiscordLoadBalancer loadBalancer;
   @ApiOperation(value = "指定ID获取账号")
ruoyi-modules/ruoyi-midjourney/src/main/java/com/xmzs/midjourney/controller/FaceController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,100 @@
package com.xmzs.midjourney.controller;
import cn.hutool.json.JSONUtil;
import com.xmzs.common.chat.constant.OpenAIConst;
import com.xmzs.common.core.domain.model.LoginUser;
import com.xmzs.common.core.exception.base.BaseException;
import com.xmzs.common.satoken.utils.LoginHelper;
import com.xmzs.midjourney.domain.InsightFace;
import com.xmzs.system.domain.bo.ChatMessageBo;
import com.xmzs.system.service.IChatMessageService;
import com.xmzs.system.service.IChatService;
import com.xmzs.system.service.ISseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okio.Buffer;
import okio.BufferedSink;
import okio.GzipSink;
import okio.Okio;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
@Api(tags = "任务查询")
@RestController
@RequestMapping("/mj")
@RequiredArgsConstructor
@Slf4j
public class FaceController {
    @Value("${chat.apiKey}")
    private String apiKey;
    @Value("${chat.apiHost}")
    private String apiHost;
    @Autowired
    private IChatService chatService;
    @Autowired
    private ISseService sseService;
    @ApiOperation(value = "换脸")
    @PostMapping("/insight-face/swap")
    public String insightFace(@RequestBody InsightFace insightFace) {
        // æŸ¥è¯¢æ˜¯å¦æ˜¯ä»˜è´¹ç”¨æˆ·
        sseService.checkUserGrade();
        // æ‰£é™¤æŽ¥å£è´¹ç”¨
        chatService.mjTaskDeduct("换脸", OpenAIConst.MJ_COST_TYPE2);
        OkHttpClient client = new OkHttpClient.Builder()
            .connectTimeout(30, TimeUnit.SECONDS) // è¿žæŽ¥è¶…æ—¶æ—¶é—´
            .writeTimeout(30, TimeUnit.SECONDS)   // å†™å…¥è¶…æ—¶æ—¶é—´
            .readTimeout(30, TimeUnit.SECONDS)    // è¯»å–è¶…æ—¶æ—¶é—´
            .build();
        // åˆ›å»ºä¸€ä¸ªRequest对象来配置你的请求
        // åˆ›å»ºè¯·æ±‚体(这里使用JSON作为媒体类型)
        String jsonStr = JSONUtil.toJsonStr(insightFace);
        MediaType JSON = MediaType.get("application/json; charset=utf-8");
        okhttp3.RequestBody body = okhttp3.RequestBody.create(jsonStr, JSON);
        Buffer buffer = new Buffer();
        GzipSink gzipSink = new GzipSink(buffer);
        BufferedSink gzipBufferedSink = Okio.buffer(gzipSink);
        try {
            body.writeTo(gzipBufferedSink);
            gzipBufferedSink.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // åˆ›å»ºPOST请求
        Request request = new Request.Builder()
            .header("mj-api-secret", apiKey)
            .header("Content-Encoding", "gzip")
            .url(apiHost + "mj/insight-face/swap") // æ›¿æ¢ä¸ºä½ çš„URL
            .post(body)
            .build();
        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
            if (response.body() != null) {
                return response.body().string();
            }
        } catch (IOException e) {
            log.error("换脸失败! {}", e.getMessage());
        }
        return null;
    }
}
ruoyi-modules/ruoyi-midjourney/src/main/java/com/xmzs/midjourney/controller/SubmitController.java
@@ -2,15 +2,15 @@
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.json.JSONUtil;
import com.xmzs.common.chat.constant.OpenAIConst;
import com.xmzs.common.core.domain.model.LoginUser;
import com.xmzs.common.core.exception.base.BaseException;
import com.xmzs.common.satoken.utils.LoginHelper;
import com.xmzs.midjourney.Constants;
import com.xmzs.midjourney.ProxyProperties;
import com.xmzs.midjourney.ReturnCode;
import com.xmzs.midjourney.dto.BaseSubmitDTO;
import com.xmzs.midjourney.dto.SubmitBlendDTO;
import com.xmzs.midjourney.dto.SubmitChangeDTO;
import com.xmzs.midjourney.dto.SubmitDescribeDTO;
import com.xmzs.midjourney.dto.SubmitImagineDTO;
import com.xmzs.midjourney.dto.SubmitSimpleChangeDTO;
import com.xmzs.midjourney.dto.*;
import com.xmzs.midjourney.enums.TaskAction;
import com.xmzs.midjourney.enums.TaskStatus;
import com.xmzs.midjourney.enums.TranslateWay;
@@ -26,215 +26,322 @@
import com.xmzs.midjourney.util.MimeTypeUtils;
import com.xmzs.midjourney.util.SnowFlake;
import com.xmzs.midjourney.util.TaskChangeParams;
import com.xmzs.system.domain.bo.ChatMessageBo;
import com.xmzs.system.service.IChatMessageService;
import com.xmzs.system.service.IChatService;
import com.xmzs.system.service.ISseService;
import eu.maxschuster.dataurl.DataUrl;
import eu.maxschuster.dataurl.DataUrlSerializer;
import eu.maxschuster.dataurl.IDataUrlSerializer;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import okhttp3.*;
@Api(tags = "任务提交")
@RestController
@RequestMapping("/mj/submit")
@RequiredArgsConstructor
@Slf4j
public class SubmitController {
   private final TranslateService translateService;
   private final TaskStoreService taskStoreService;
   private final ProxyProperties properties;
   private final TaskService taskService;
    private final TranslateService translateService;
    private final ProxyProperties properties;
    private final TaskService taskService;
    private final TaskStoreService taskStoreService;
    @Value("${chat.apiKey}")
    private String apiKey;
    @Value("${chat.apiHost}")
    private String apiHost;
    @Autowired
    private IChatService chatService;
    @Autowired
    private IChatMessageService chatMessageService;
    @Autowired
    private ISseService sseService;
   @ApiOperation(value = "提交Imagine任务")
   @PostMapping("/imagine")
   public SubmitResultVO imagine(@RequestBody SubmitImagineDTO imagineDTO) {
      String prompt = imagineDTO.getPrompt();
      if (CharSequenceUtil.isBlank(prompt)) {
         return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "prompt不能为空");
      }
      prompt = prompt.trim();
      Task task = newTask(imagineDTO);
      task.setAction(TaskAction.IMAGINE);
      task.setPrompt(prompt);
      String promptEn = translatePrompt(prompt);
      try {
         BannedPromptUtils.checkBanned(promptEn);
      } catch (BannedPromptException e) {
         return SubmitResultVO.fail(ReturnCode.BANNED_PROMPT, "可能包含敏感词")
               .setProperty("promptEn", promptEn).setProperty("bannedWord", e.getMessage());
      }
      List<String> base64Array = Optional.ofNullable(imagineDTO.getBase64Array()).orElse(new ArrayList<>());
      if (CharSequenceUtil.isNotBlank(imagineDTO.getBase64())) {
         base64Array.add(imagineDTO.getBase64());
      }
      List<DataUrl> dataUrls;
      try {
         dataUrls = ConvertUtils.convertBase64Array(base64Array);
      } catch (MalformedURLException e) {
         return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "base64格式错误");
      }
      task.setPromptEn(promptEn);
      task.setDescription("/imagine " + prompt);
      return this.taskService.submitImagine(task, dataUrls);
   }
    @ApiOperation(value = "提交Imagine任务")
    @PostMapping("/imagine")
    public SubmitResultVO imagine(@RequestBody SubmitImagineDTO imagineDTO) {
        String prompt = imagineDTO.getPrompt();
        if (CharSequenceUtil.isBlank(prompt)) {
            return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "prompt不能为空");
        }
        prompt = prompt.trim();
        Task task = newTask(imagineDTO);
        task.setAction(TaskAction.IMAGINE);
        task.setPrompt(prompt);
        String promptEn = translatePrompt(prompt);
        try {
            BannedPromptUtils.checkBanned(promptEn);
        } catch (BannedPromptException e) {
            return SubmitResultVO.fail(ReturnCode.BANNED_PROMPT, "可能包含敏感词")
                .setProperty("promptEn", promptEn).setProperty("bannedWord", e.getMessage());
        }
        List<String> base64Array = Optional.ofNullable(imagineDTO.getBase64Array()).orElse(new ArrayList<>());
        if (CharSequenceUtil.isNotBlank(imagineDTO.getBase64())) {
            base64Array.add(imagineDTO.getBase64());
        }
        List<DataUrl> dataUrls;
        try {
            dataUrls = ConvertUtils.convertBase64Array(base64Array);
        } catch (MalformedURLException e) {
            return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "base64格式错误");
        }
        task.setPromptEn(promptEn);
        task.setDescription("/imagine " + prompt);
        return this.taskService.submitImagine(task, dataUrls);
    }
   @ApiOperation(value = "绘图变化-simple")
   @PostMapping("/simple-change")
   public SubmitResultVO simpleChange(@RequestBody SubmitSimpleChangeDTO simpleChangeDTO) {
      TaskChangeParams changeParams = ConvertUtils.convertChangeParams(simpleChangeDTO.getContent());
      if (changeParams == null) {
         return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "content参数错误");
      }
      SubmitChangeDTO changeDTO = new SubmitChangeDTO();
      changeDTO.setAction(changeParams.getAction());
      changeDTO.setTaskId(changeParams.getId());
      changeDTO.setIndex(changeParams.getIndex());
      changeDTO.setState(simpleChangeDTO.getState());
      changeDTO.setNotifyHook(simpleChangeDTO.getNotifyHook());
      return change(changeDTO);
   }
    @ApiOperation(value = "绘图变化-simple")
    @PostMapping("/simple-change")
    public SubmitResultVO simpleChange(@RequestBody SubmitSimpleChangeDTO simpleChangeDTO) {
        TaskChangeParams changeParams = ConvertUtils.convertChangeParams(simpleChangeDTO.getContent());
        if (changeParams == null) {
            return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "content参数错误");
        }
        SubmitChangeDTO changeDTO = new SubmitChangeDTO();
        changeDTO.setAction(changeParams.getAction());
        changeDTO.setTaskId(changeParams.getId());
        changeDTO.setIndex(changeParams.getIndex());
        changeDTO.setState(simpleChangeDTO.getState());
        changeDTO.setNotifyHook(simpleChangeDTO.getNotifyHook());
        return change(changeDTO);
    }
   @ApiOperation(value = "绘图变化")
   @PostMapping("/change")
   public SubmitResultVO change(@RequestBody SubmitChangeDTO changeDTO) {
      if (CharSequenceUtil.isBlank(changeDTO.getTaskId())) {
         return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "taskId不能为空");
      }
      if (!Set.of(TaskAction.UPSCALE, TaskAction.VARIATION, TaskAction.REROLL).contains(changeDTO.getAction())) {
         return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "action参数错误");
      }
      String description = "/up " + changeDTO.getTaskId();
      if (TaskAction.REROLL.equals(changeDTO.getAction())) {
         description += " R";
      } else {
         description += " " + changeDTO.getAction().name().charAt(0) + changeDTO.getIndex();
      }
      if (TaskAction.UPSCALE.equals(changeDTO.getAction())) {
         TaskCondition condition = new TaskCondition().setDescription(description);
         Task existTask = this.taskStoreService.findOne(condition);
         if (existTask != null) {
            return SubmitResultVO.of(ReturnCode.EXISTED, "任务已存在", existTask.getId())
                  .setProperty("status", existTask.getStatus())
                  .setProperty("imageUrl", existTask.getImageUrl());
         }
      }
      Task targetTask = this.taskStoreService.get(changeDTO.getTaskId());
      if (targetTask == null) {
         return SubmitResultVO.fail(ReturnCode.NOT_FOUND, "关联任务不存在或已失效");
      }
      if (!TaskStatus.SUCCESS.equals(targetTask.getStatus())) {
         return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "关联任务状态错误");
      }
      if (!Set.of(TaskAction.IMAGINE, TaskAction.VARIATION, TaskAction.REROLL, TaskAction.BLEND).contains(targetTask.getAction())) {
         return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "关联任务不允许执行变化");
      }
      Task task = newTask(changeDTO);
      task.setAction(changeDTO.getAction());
      task.setPrompt(targetTask.getPrompt());
      task.setPromptEn(targetTask.getPromptEn());
      task.setProperty(Constants.TASK_PROPERTY_FINAL_PROMPT, targetTask.getProperty(Constants.TASK_PROPERTY_FINAL_PROMPT));
      task.setProperty(Constants.TASK_PROPERTY_PROGRESS_MESSAGE_ID, targetTask.getProperty(Constants.TASK_PROPERTY_MESSAGE_ID));
      task.setProperty(Constants.TASK_PROPERTY_DISCORD_INSTANCE_ID, targetTask.getProperty(Constants.TASK_PROPERTY_DISCORD_INSTANCE_ID));
      task.setDescription(description);
      int messageFlags = targetTask.getPropertyGeneric(Constants.TASK_PROPERTY_FLAGS);
      String messageId = targetTask.getPropertyGeneric(Constants.TASK_PROPERTY_MESSAGE_ID);
      String messageHash = targetTask.getPropertyGeneric(Constants.TASK_PROPERTY_MESSAGE_HASH);
      if (TaskAction.UPSCALE.equals(changeDTO.getAction())) {
         return this.taskService.submitUpscale(task, messageId, messageHash, changeDTO.getIndex(), messageFlags);
      } else if (TaskAction.VARIATION.equals(changeDTO.getAction())) {
         return this.taskService.submitVariation(task, messageId, messageHash, changeDTO.getIndex(), messageFlags);
      } else {
         return this.taskService.submitReroll(task, messageId, messageHash, messageFlags);
      }
   }
    @ApiOperation(value = "绘图变化")
    @PostMapping("/change")
    public SubmitResultVO change(@RequestBody SubmitChangeDTO changeDTO) {
        if (CharSequenceUtil.isBlank(changeDTO.getTaskId())) {
            return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "taskId不能为空");
        }
        if (!Set.of(TaskAction.UPSCALE, TaskAction.VARIATION, TaskAction.REROLL).contains(changeDTO.getAction())) {
            return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "action参数错误");
        }
        String description = "/up " + changeDTO.getTaskId();
        if (TaskAction.REROLL.equals(changeDTO.getAction())) {
            description += " R";
        } else {
            description += " " + changeDTO.getAction().name().charAt(0) + changeDTO.getIndex();
        }
        if (TaskAction.UPSCALE.equals(changeDTO.getAction())) {
            TaskCondition condition = new TaskCondition().setDescription(description);
            Task existTask = this.taskStoreService.findOne(condition);
            if (existTask != null) {
                return SubmitResultVO.of(ReturnCode.EXISTED, "任务已存在", existTask.getId())
                    .setProperty("status", existTask.getStatus())
                    .setProperty("imageUrl", existTask.getImageUrl());
            }
        }
        Task targetTask = this.taskStoreService.get(changeDTO.getTaskId());
        if (targetTask == null) {
            return SubmitResultVO.fail(ReturnCode.NOT_FOUND, "关联任务不存在或已失效");
        }
        if (!TaskStatus.SUCCESS.equals(targetTask.getStatus())) {
            return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "关联任务状态错误");
        }
        if (!Set.of(TaskAction.IMAGINE, TaskAction.VARIATION, TaskAction.REROLL, TaskAction.BLEND).contains(targetTask.getAction())) {
            return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "关联任务不允许执行变化");
        }
        Task task = newTask(changeDTO);
        task.setAction(changeDTO.getAction());
        task.setPrompt(targetTask.getPrompt());
        task.setPromptEn(targetTask.getPromptEn());
        task.setProperty(Constants.TASK_PROPERTY_FINAL_PROMPT, targetTask.getProperty(Constants.TASK_PROPERTY_FINAL_PROMPT));
        task.setProperty(Constants.TASK_PROPERTY_PROGRESS_MESSAGE_ID, targetTask.getProperty(Constants.TASK_PROPERTY_MESSAGE_ID));
        task.setProperty(Constants.TASK_PROPERTY_DISCORD_INSTANCE_ID, targetTask.getProperty(Constants.TASK_PROPERTY_DISCORD_INSTANCE_ID));
        task.setDescription(description);
        int messageFlags = targetTask.getPropertyGeneric(Constants.TASK_PROPERTY_FLAGS);
        String messageId = targetTask.getPropertyGeneric(Constants.TASK_PROPERTY_MESSAGE_ID);
        String messageHash = targetTask.getPropertyGeneric(Constants.TASK_PROPERTY_MESSAGE_HASH);
        if (TaskAction.UPSCALE.equals(changeDTO.getAction())) {
            return this.taskService.submitUpscale(task, messageId, messageHash, changeDTO.getIndex(), messageFlags);
            } else if (TaskAction.VARIATION.equals(changeDTO.getAction())) {
            return this.taskService.submitVariation(task, messageId, messageHash, changeDTO.getIndex(), messageFlags);
        } else {
            return this.taskService.submitReroll(task, messageId, messageHash, messageFlags);
        }
    }
   @ApiOperation(value = "提交Describe任务")
   @PostMapping("/describe")
   public SubmitResultVO describe(@RequestBody SubmitDescribeDTO describeDTO) {
      if (CharSequenceUtil.isBlank(describeDTO.getBase64())) {
         return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "base64不能为空");
      }
      IDataUrlSerializer serializer = new DataUrlSerializer();
      DataUrl dataUrl;
      try {
         dataUrl = serializer.unserialize(describeDTO.getBase64());
      } catch (MalformedURLException e) {
         return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "base64格式错误");
      }
      Task task = newTask(describeDTO);
      task.setAction(TaskAction.DESCRIBE);
      String taskFileName = task.getId() + "." + MimeTypeUtils.guessFileSuffix(dataUrl.getMimeType());
      task.setDescription("/describe " + taskFileName);
      return this.taskService.submitDescribe(task, dataUrl);
   }
    @ApiOperation(value = "绘图变化")
    @PostMapping("/action")
    public String action(@RequestBody SubmitActionDTO changeDTO) {
        // æŸ¥è¯¢æ˜¯å¦æ˜¯ä»˜è´¹ç”¨æˆ·
        sseService.checkUserGrade();
        // æ‰£é™¤æŽ¥å£è´¹ç”¨
        if ("upsample".equals(getAction(changeDTO.getCustomId()))) {
            mjTaskDeduct("放大", OpenAIConst.MJ_COST_TYPE2);
        } else {
            // Inpaint: å±€éƒ¨é‡ç»˜
            // reroll é‡ç»˜
            // upsample æ”¾å¤§
            // zoom å˜ç„¦
            // upscale é«˜æ¸…放大
            // variation å˜åŒ–
            if (!"Inpaint".equals(getAction(changeDTO.getCustomId()))) {
                mjTaskDeduct("变化", OpenAIConst.MJ_COST_TYPE1);
            }
        }
        OkHttpClient client = new OkHttpClient.Builder()
            .connectTimeout(30, TimeUnit.SECONDS) // è¿žæŽ¥è¶…æ—¶æ—¶é—´
            .writeTimeout(30, TimeUnit.SECONDS)   // å†™å…¥è¶…æ—¶æ—¶é—´
            .readTimeout(30, TimeUnit.SECONDS)    // è¯»å–è¶…æ—¶æ—¶é—´
            .build();
   @ApiOperation(value = "提交Blend任务")
   @PostMapping("/blend")
   public SubmitResultVO blend(@RequestBody SubmitBlendDTO blendDTO) {
      List<String> base64Array = blendDTO.getBase64Array();
      if (base64Array == null || base64Array.size() < 2 || base64Array.size() > 5) {
         return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "base64List参数错误");
      }
      if (blendDTO.getDimensions() == null) {
         return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "dimensions参数错误");
      }
      IDataUrlSerializer serializer = new DataUrlSerializer();
      List<DataUrl> dataUrlList = new ArrayList<>();
      try {
         for (String base64 : base64Array) {
            DataUrl dataUrl = serializer.unserialize(base64);
            dataUrlList.add(dataUrl);
         }
      } catch (MalformedURLException e) {
         return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "base64格式错误");
      }
      Task task = newTask(blendDTO);
      task.setAction(TaskAction.BLEND);
      task.setDescription("/blend " + task.getId() + " " + dataUrlList.size());
      return this.taskService.submitBlend(task, dataUrlList, blendDTO.getDimensions());
   }
        String jsonStr = JSONUtil.toJsonStr(changeDTO);
   private Task newTask(BaseSubmitDTO base) {
      Task task = new Task();
      task.setId(System.currentTimeMillis() + RandomUtil.randomNumbers(3));
      task.setSubmitTime(System.currentTimeMillis());
      task.setState(base.getState());
      String notifyHook = CharSequenceUtil.isBlank(base.getNotifyHook()) ? this.properties.getNotifyHook() : base.getNotifyHook();
      task.setProperty(Constants.TASK_PROPERTY_NOTIFY_HOOK, notifyHook);
      task.setProperty(Constants.TASK_PROPERTY_NONCE, SnowFlake.INSTANCE.nextId());
      return task;
   }
        MediaType mediaType = MediaType.parse("application/json");
        okhttp3.RequestBody body = okhttp3.RequestBody.create(jsonStr, mediaType);
        Request request = new Request.Builder()
            .url(apiHost + "mj/submit/action")
            .method("POST", body)
            .header("mj-api-secret", apiKey) // è®¾ç½®Authorization header
            .build();
        try {
            Response response = client.newCall(request).execute();
            return response.body().string();
        } catch (IOException e) {
            log.error("绘图变化失败:{}", e.getMessage());
        }
        return null;
    }
   private String translatePrompt(String prompt) {
      if (TranslateWay.NULL.equals(this.properties.getTranslateWay()) || CharSequenceUtil.isBlank(prompt)) {
         return prompt;
      }
      List<String> imageUrls = new ArrayList<>();
      Matcher imageMatcher = Pattern.compile("https?://[a-z0-9-_:@&?=+,.!/~*'%$]+\\x20+", Pattern.CASE_INSENSITIVE).matcher(prompt);
      while (imageMatcher.find()) {
         imageUrls.add(imageMatcher.group(0));
      }
      String paramStr = "";
      Matcher paramMatcher = Pattern.compile("\\x20+-{1,2}[a-z]+.*$", Pattern.CASE_INSENSITIVE).matcher(prompt);
      if (paramMatcher.find()) {
         paramStr = paramMatcher.group(0);
      }
      String imageStr = CharSequenceUtil.join("", imageUrls);
      String text = prompt.substring(imageStr.length(), prompt.length() - paramStr.length());
      if (CharSequenceUtil.isNotBlank(text)) {
         text = this.translateService.translateToEnglish(text).trim();
      }
      return imageStr + text + paramStr;
   }
    public String getAction(String customId) {
        // æ£€æŸ¥ customId æ˜¯å¦ä¸ºç©º
        if(customId == null || customId.isEmpty()) {
            return null;
        }
        // ä½¿ç”¨ "::" åˆ†å‰²å­—符串
        String[] parts = customId.split("::");
        // "MJ", "Inpaint", "1", "4fca7c14-181c-4...", "SOLO"
        if(customId.endsWith("SOLO")) {
            return parts[1];
        }
        // è¿”回 "upsample" å€¼ï¼Œå‡è®¾å®ƒæ€»æ˜¯åœ¨ç¬¬ä¸‰ä¸ªä½ç½®
        return parts[2];
    }
    public void mjTaskDeduct(String prompt, double cost) {
        //扣除费用
        chatService.deductUserBalance(getUserId(), cost);
        // ä¿å­˜æ¶ˆæ¯è®°å½•
        ChatMessageBo chatMessageBo = new ChatMessageBo();
        chatMessageBo.setUserId(getUserId());
        chatMessageBo.setModelName("mj");
        chatMessageBo.setContent(prompt);
        chatMessageBo.setDeductCost(cost);
        chatMessageBo.setTotalTokens(0);
        chatMessageService.insertByBo(chatMessageBo);
    }
    /**
     * èŽ·å–ç”¨æˆ·Id
     *
     * @return
     */
    public Long getUserId() {
        LoginUser loginUser = LoginHelper.getLoginUser();
        if (loginUser == null) {
            throw new BaseException("用户未登录!");
        }
        return loginUser.getUserId();
    }
    @ApiOperation(value = "提交Describe任务")
    @PostMapping("/describe")
    public SubmitResultVO describe(@RequestBody SubmitDescribeDTO describeDTO) {
        if (CharSequenceUtil.isBlank(describeDTO.getBase64())) {
            return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "base64不能为空");
        }
        IDataUrlSerializer serializer = new DataUrlSerializer();
        DataUrl dataUrl;
        try {
            dataUrl = serializer.unserialize(describeDTO.getBase64());
        } catch (MalformedURLException e) {
            return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "base64格式错误");
        }
        Task task = newTask(describeDTO);
        task.setAction(TaskAction.DESCRIBE);
        String taskFileName = task.getId() + "." + MimeTypeUtils.guessFileSuffix(dataUrl.getMimeType());
        task.setDescription("/describe " + taskFileName);
        return this.taskService.submitDescribe(task, dataUrl);
    }
    @ApiOperation(value = "提交Blend任务")
    @PostMapping("/blend")
    public SubmitResultVO blend(@RequestBody SubmitBlendDTO blendDTO) {
        List<String> base64Array = blendDTO.getBase64Array();
        if (base64Array == null || base64Array.size() < 2 || base64Array.size() > 5) {
            return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "base64List参数错误");
        }
        if (blendDTO.getDimensions() == null) {
            return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "dimensions参数错误");
        }
        IDataUrlSerializer serializer = new DataUrlSerializer();
        List<DataUrl> dataUrlList = new ArrayList<>();
        try {
            for (String base64 : base64Array) {
                DataUrl dataUrl = serializer.unserialize(base64);
                dataUrlList.add(dataUrl);
            }
        } catch (MalformedURLException e) {
            return SubmitResultVO.fail(ReturnCode.VALIDATION_ERROR, "base64格式错误");
        }
        Task task = newTask(blendDTO);
        task.setAction(TaskAction.BLEND);
        task.setDescription("/blend " + task.getId() + " " + dataUrlList.size());
        return this.taskService.submitBlend(task, dataUrlList, blendDTO.getDimensions());
    }
    private Task newTask(BaseSubmitDTO base) {
        Task task = new Task();
        task.setId(System.currentTimeMillis() + RandomUtil.randomNumbers(3));
        task.setSubmitTime(System.currentTimeMillis());
        task.setState(base.getState());
        String notifyHook = CharSequenceUtil.isBlank(base.getNotifyHook()) ? this.properties.getNotifyHook() : base.getNotifyHook();
        task.setProperty(Constants.TASK_PROPERTY_NOTIFY_HOOK, notifyHook);
        task.setProperty(Constants.TASK_PROPERTY_NONCE, SnowFlake.INSTANCE.nextId());
        return task;
    }
    private String translatePrompt(String prompt) {
        if (TranslateWay.NULL.equals(this.properties.getTranslateWay()) || CharSequenceUtil.isBlank(prompt)) {
            return prompt;
        }
        List<String> imageUrls = new ArrayList<>();
        Matcher imageMatcher = Pattern.compile("https?://[a-z0-9-_:@&?=+,.!/~*'%$]+\\x20+", Pattern.CASE_INSENSITIVE).matcher(prompt);
        while (imageMatcher.find()) {
            imageUrls.add(imageMatcher.group(0));
        }
        String paramStr = "";
        Matcher paramMatcher = Pattern.compile("\\x20+-{1,2}[a-z]+.*$", Pattern.CASE_INSENSITIVE).matcher(prompt);
        if (paramMatcher.find()) {
            paramStr = paramMatcher.group(0);
        }
        String imageStr = CharSequenceUtil.join("", imageUrls);
        String text = prompt.substring(imageStr.length(), prompt.length() - paramStr.length());
        if (CharSequenceUtil.isNotBlank(text)) {
            text = this.translateService.translateToEnglish(text).trim();
        }
        return imageStr + text + paramStr;
    }
}
ruoyi-modules/ruoyi-midjourney/src/main/java/com/xmzs/midjourney/controller/TaskController.java
@@ -1,14 +1,20 @@
package com.xmzs.midjourney.controller;
import cn.hutool.core.comparator.CompareUtil;
import cn.hutool.json.JSONUtil;
import com.xmzs.midjourney.dto.SubmitImagineDTO;
import com.xmzs.midjourney.dto.TaskConditionDTO;
import com.xmzs.midjourney.loadbalancer.DiscordLoadBalancer;
import com.xmzs.midjourney.result.SubmitResultVO;
import com.xmzs.midjourney.service.TaskStoreService;
import com.xmzs.midjourney.support.Task;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
@@ -16,6 +22,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@@ -25,15 +32,35 @@
@RestController
@RequestMapping("/mj/task")
@RequiredArgsConstructor
@Slf4j
public class TaskController {
   private final TaskStoreService taskStoreService;
   private final DiscordLoadBalancer discordLoadBalancer;
    @Value("${chat.apiKey}")
    private String apiKey;
    @Value("${chat.apiHost}")
    private String apiHost;
   @ApiOperation(value = "指定ID获取任务")
   @GetMapping("/{id}/fetch")
   public Task fetch(@ApiParam(value = "任务ID") @PathVariable String id) {
      return this.taskStoreService.get(id);
   }
    public String fetch(@ApiParam(value = "任务ID") @PathVariable String id) {
        OkHttpClient client = new OkHttpClient();
        // åˆ›å»ºä¸€ä¸ªRequest对象来配置你的请求
        Request request = new Request.Builder()
            .header("mj-api-secret", apiKey) // è®¾ç½®Authorization header
            .url(apiHost+"mj/task/" + id + "/fetch")
            .build();
        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
            if (response.body() != null) {
                return response.body().string();
            }
        } catch (IOException e) {
            log.error("任务:{}查询失败:{}",id,e.getMessage());
        }
        return null;
    }
   @ApiOperation(value = "查询任务队列")
   @GetMapping("/queue")
ruoyi-modules/ruoyi-midjourney/src/main/java/com/xmzs/midjourney/domain/InsightFace.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.xmzs.midjourney.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * @author WangLe
 */
@Data
@ApiModel("Discord账号")
public class InsightFace implements Serializable {
    /**本人头像json*/
    @ApiModelProperty("本人头像json")
    private String sourceBase64;
    /**明星头像json*/
    @ApiModelProperty("明星头像json")
    private String targetBase64;
}
ruoyi-modules/ruoyi-midjourney/src/main/java/com/xmzs/midjourney/dto/SubmitActionDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.xmzs.midjourney.dto;
import com.xmzs.midjourney.enums.TaskAction;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@ApiModel("变化任务提交参数")
public class SubmitActionDTO {
   private String customId;
   private String taskId;
    private String state;
    private String notifyHook;
}
ruoyi-modules/ruoyi-midjourney/src/main/java/com/xmzs/midjourney/support/ApiAuthorizeInterceptor.java
@@ -1,32 +1,152 @@
package com.xmzs.midjourney.support;
import cn.hutool.core.text.CharSequenceUtil;
import com.xmzs.midjourney.Constants;
import com.xmzs.midjourney.ProxyProperties;
import com.xmzs.common.chat.constant.OpenAIConst;
import com.xmzs.common.core.exception.ServiceException;
import com.xmzs.system.service.IChatService;
import com.xmzs.system.service.ISseService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.util.StreamUtils;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.HandlerInterceptor;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Enumeration;
import java.util.Objects;
@Component
@RequiredArgsConstructor
public class ApiAuthorizeInterceptor implements HandlerInterceptor {
   private final ProxyProperties properties;
    private static final Logger log = LoggerFactory.getLogger(ApiAuthorizeInterceptor.class);
    private static final String API_SECRET_HEADER = "mj-api-secret";
   @Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      if (CharSequenceUtil.isBlank(this.properties.getApiSecret())) {
         return true;
      }
      String apiSecret = request.getHeader(Constants.API_SECRET_HEADER_NAME);
      boolean authorized = CharSequenceUtil.equals(apiSecret, this.properties.getApiSecret());
      if (!authorized) {
         response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
      }
      return authorized;
   }
    @Value("${chat.apiKey}")
    private String API_SECRET_VALUE;
    @Value("${chat.apiHost}")
    private String apiHost;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private IChatService chatService;
    @Autowired
    private ISseService sseService;
    @Override
    public boolean preHandle(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object handler) {
        // åˆ¤æ–­æ˜¯å¦æ˜¯MidJourney的请求
        if (isMidJourneyRequest(request)) {
            try {
                // å¤„理请求,例如费用扣除和任务查询
                processRequest(request);
                // è½¬å‘请求到目标服务器
                forwardRequest(request, response);
            } catch (Exception e) {
                // è®°å½•错误日志,包括异常堆栈信息
                log.error("转发请求时发生错误", e);
                // è®¾ç½®HTTP状态码和响应信息
                response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
                response.setCharacterEncoding(StandardCharsets.UTF_8.name());
                response.setContentType(MediaType.APPLICATION_JSON_VALUE);
                try {
                    // å‘客户端返回错误信息
                    response.getWriter().write("绘图失败!" + e.getMessage());
                } catch (Exception ex) {
                    log.error("设置错误响应时发生错误", ex);
                }
                // ä¸­æ–­è¯·æ±‚处理流程
                return false;
            }
            // ä¸­æ–­æ­£å¸¸çš„请求处理流程,因为请求已被转发
            return false;
        }
        // å¦‚果不是MidJourney的请求,则继续正常处理
        return true;
    }
    private boolean isMidJourneyRequest(HttpServletRequest request) {
        String uri = request.getRequestURI();
        return uri.startsWith("/mj") &&
            !uri.matches(".*/\\d+/fetch") &&
            !uri.matches("/mj/insight-face/swap") &&
            !uri.matches("/mj/submit/action");
    }
    private void processRequest(HttpServletRequest request) {
        // å¤„理付费用户的请求,包括费用扣除和任务查询
        sseService.checkUserGrade();
        String uri = request.getRequestURI();
        if (uri.matches("/mj/submit/describe") || uri.matches("/mj/submit/shorten")) {
            chatService.mjTaskDeduct(uri.endsWith("describe") ? "图生文" : "prompt分析", OpenAIConst.MJ_COST_TYPE2);
        } else if (uri.endsWith("image-seed") || uri.endsWith("list-by-condition")) {
            chatService.mjTaskDeduct(uri.endsWith("image-seed") ? "获取种子" : "任务查询", OpenAIConst.MJ_COST_TYPE3);
        } else if (uri.matches("/mj/submit/.*")) {
            chatService.mjTaskDeduct("文生图", OpenAIConst.MJ_COST_TYPE1);
        }
    }
    private void forwardRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String targetUrl = buildTargetUrl(request);
        HttpEntity<String> entity = new HttpEntity<>(readRequestBody(request), copyHeaders(request));
        HttpMethod method = HttpMethod.valueOf(request.getMethod());
        ResponseEntity<byte[]> responseEntity = restTemplate.exchange(targetUrl, method, entity, byte[].class);
        copyResponseBack(response, responseEntity);
    }
    private String buildTargetUrl(HttpServletRequest request) {
        String uri = request.getRequestURI();
        String queryString = request.getQueryString();
        log.info("Forwarding URL: {}", uri);
        return apiHost + uri + (queryString != null ? "?" + queryString : "");
    }
    private HttpHeaders copyHeaders(HttpServletRequest request) {
        HttpHeaders headers = new HttpHeaders();
        headers.set(API_SECRET_HEADER, API_SECRET_VALUE);
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();
            if (!headerName.equalsIgnoreCase(API_SECRET_HEADER) &&
                !headerName.equalsIgnoreCase(HttpHeaders.CONTENT_LENGTH) &&
                !headerName.equalsIgnoreCase(HttpHeaders.AUTHORIZATION)) {
                headers.set(headerName, request.getHeader(headerName));
            }
        }
        return headers;
    }
    private String readRequestBody(HttpServletRequest request) throws Exception {
        if (request.getContentLengthLong() > 0) {
            try (InputStream inputStream = request.getInputStream()) {
                return StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
            }
        }
        return "";
    }
    private void copyResponseBack(HttpServletResponse response, ResponseEntity<byte[]> responseEntity) throws Exception {
        HttpHeaders responseHeaders = responseEntity.getHeaders();
        responseHeaders.forEach((key, values) -> {
            if (!key.equalsIgnoreCase(API_SECRET_HEADER)) {
                response.addHeader(key, String.join(",", values));
            }
        });
        // è®¾ç½®å“åº”内容类型为UTF-8,防止乱码
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
        HttpStatus status = HttpStatus.resolve(responseEntity.getStatusCode().value());
        response.setStatus(Objects.requireNonNullElse(status, HttpStatus.INTERNAL_SERVER_ERROR).value());
        if (responseEntity.getBody() != null) {
            StreamUtils.copy(responseEntity.getBody(), response.getOutputStream());
        }
    }
}
ruoyi-modules/ruoyi-midjourney/src/main/java/spring/config/WebMvcConfig.java
@@ -9,8 +9,6 @@
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
   @Resource
@@ -27,7 +25,7 @@
   public void addInterceptors(InterceptorRegistry registry) {
      if (CharSequenceUtil.isNotBlank(this.properties.getApiSecret())) {
         registry.addInterceptor(this.apiAuthorizeInterceptor)
               .addPathPatterns("/submit/**", "/task/**", "/account/**");
               .addPathPatterns("/mj/submit/**", "/mj/task/**", "/mj/account/**");
      }
   }
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/cofing/WxMaProperties.java
@@ -6,11 +6,11 @@
 * @author: wangle
 * @date: 2023/5/18
 */
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
/**
 * @author <a href="https://github.com/binarywang">Binary Wang</a>
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/controller/monitor/SysOperlogController.java
@@ -1,21 +1,21 @@
package com.xmzs.system.controller.monitor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.xmzs.common.log.annotation.Log;
import com.xmzs.common.web.core.BaseController;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.core.domain.R;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.common.log.enums.BusinessType;
import com.xmzs.common.excel.utils.ExcelUtil;
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.system.domain.bo.SysOperLogBo;
import com.xmzs.system.domain.vo.SysOperLogVo;
import com.xmzs.system.service.ISysOperLogService;
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.util.List;
/**
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/controller/system/SysDictDataController.java
@@ -2,22 +2,22 @@
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.ObjectUtil;
import com.xmzs.common.log.annotation.Log;
import com.xmzs.common.web.core.BaseController;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.core.domain.R;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.common.log.enums.BusinessType;
import com.xmzs.common.excel.utils.ExcelUtil;
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.system.domain.bo.SysDictDataBo;
import com.xmzs.system.domain.vo.SysDictDataVo;
import com.xmzs.system.service.ISysDictDataService;
import com.xmzs.system.service.ISysDictTypeService;
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.util.ArrayList;
import java.util.List;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/controller/system/SysNoticeController.java
@@ -1,12 +1,12 @@
package com.xmzs.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.xmzs.common.log.annotation.Log;
import com.xmzs.common.web.core.BaseController;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.core.domain.R;
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.system.domain.bo.SysNoticeBo;
import com.xmzs.system.domain.vo.SysNoticeVo;
import com.xmzs.system.service.ISysNoticeService;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/controller/system/SysOssConfigController.java
@@ -5,12 +5,12 @@
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.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.system.domain.bo.SysOssConfigBo;
import com.xmzs.system.domain.vo.SysOssConfigVo;
import com.xmzs.system.service.ISysOssConfigService;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/controller/system/SysOssController.java
@@ -5,11 +5,11 @@
import cn.hutool.core.util.ObjectUtil;
import com.xmzs.common.core.domain.R;
import com.xmzs.common.core.validate.QueryGroup;
import com.xmzs.common.web.core.BaseController;
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.system.domain.bo.SysOssBo;
import com.xmzs.system.domain.vo.SysOssUploadVo;
import com.xmzs.system.domain.vo.SysOssVo;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/controller/system/SysTenantController.java
@@ -3,11 +3,6 @@
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaCheckRole;
import com.baomidou.lock.annotation.Lock4j;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import com.xmzs.common.core.constant.TenantConstants;
import com.xmzs.common.core.domain.R;
import com.xmzs.common.core.validate.AddGroup;
@@ -23,15 +18,13 @@
import com.xmzs.system.domain.bo.SysTenantBo;
import com.xmzs.system.domain.vo.SysTenantVo;
import com.xmzs.system.service.ISysTenantService;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotBlank;
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.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/controller/system/SysUserController.java
@@ -2,14 +2,9 @@
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.secure.BCrypt;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import com.xmzs.system.domain.request.UserRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import com.xmzs.common.core.domain.R;
import com.xmzs.common.core.domain.model.LoginUser;
import com.xmzs.common.core.utils.MapstructUtils;
@@ -26,9 +21,12 @@
import com.xmzs.common.web.core.BaseController;
import com.xmzs.system.domain.bo.SysDeptBo;
import com.xmzs.system.domain.bo.SysUserBo;
import com.xmzs.system.domain.request.UserRequest;
import com.xmzs.system.domain.vo.*;
import com.xmzs.system.listener.SysUserImportListener;
import com.xmzs.system.service.*;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/ChatMessage.java
@@ -1,6 +1,6 @@
package com.xmzs.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xmzs.common.core.validate.AddGroup;
import com.xmzs.common.core.validate.EditGroup;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/PaymentOrders.java
@@ -1,12 +1,13 @@
package com.xmzs.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.math.BigDecimal;
/**
 * æ”¯ä»˜è®¢å•对象 payment_orders
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/SysTenantPackage.java
@@ -1,11 +1,13 @@
package com.xmzs.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
/**
 * ç§Ÿæˆ·å¥—餐对象 sys_tenant_package
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/SysUser.java
@@ -7,7 +7,6 @@
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
/**
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/VoiceRole.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
package com.xmzs.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
 * é…éŸ³è§’色对象 voice_role
 *
 * @author Lion Li
 * @date 2024-03-19
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("voice_role")
public class VoiceRole extends BaseEntity {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @TableId(value = "id")
    private Long id;
    /**
     * è§’色名称
     */
    private String name;
    /**
     * è§’色描述
     */
    private String description;
    /**
     * å¤´åƒ
     */
    private String avatar;
    /**
     * è§’色id
     */
    private String voiceId;
    /**
     * éŸ³é¢‘地址
     */
    private String fileUrl;
    /**
     * éŸ³é¢‘预处理(实验性)
     */
    private String preProcess;
    /**
     * å¤‡æ³¨
     */
    private String remark;
}
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/bo/ChatMessageBo.java
@@ -5,9 +5,10 @@
import com.xmzs.common.mybatis.core.domain.BaseEntity;
import com.xmzs.system.domain.ChatMessage;
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.*;
/**
 * èŠå¤©æ¶ˆæ¯ä¸šåŠ¡å¯¹è±¡ chat_message
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/bo/PaymentOrdersBo.java
@@ -2,12 +2,14 @@
import com.xmzs.common.core.validate.AddGroup;
import com.xmzs.common.core.validate.EditGroup;
import com.xmzs.system.domain.PaymentOrders;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
import com.xmzs.system.domain.PaymentOrders;
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 java.math.BigDecimal;
/**
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/bo/SysConfigBo.java
@@ -2,13 +2,14 @@
import com.xmzs.common.core.validate.AddGroup;
import com.xmzs.common.core.validate.EditGroup;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
import com.xmzs.system.domain.SysConfig;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
/**
 * å‚数配置业务对象 sys_config
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/bo/SysTenantBo.java
@@ -2,15 +2,15 @@
import com.xmzs.common.core.validate.AddGroup;
import com.xmzs.common.core.validate.EditGroup;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
import com.xmzs.system.domain.SysTenant;
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 java.util.Date;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
/**
 * ç§Ÿæˆ·ä¸šåŠ¡å¯¹è±¡ sys_tenant
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/bo/SysTenantPackageBo.java
@@ -2,14 +2,14 @@
import com.xmzs.common.core.validate.AddGroup;
import com.xmzs.common.core.validate.EditGroup;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
import com.xmzs.system.domain.SysTenantPackage;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMapping;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
/**
 * ç§Ÿæˆ·å¥—餐业务对象 sys_tenant_package
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/bo/VoiceRoleBo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
package com.xmzs.system.domain.bo;
import com.xmzs.common.mybatis.core.domain.BaseEntity;
import com.xmzs.system.domain.VoiceRole;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * é…éŸ³è§’色业务对象 voice_role
 *
 * @author Lion Li
 * @date 2024-03-19
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = VoiceRole.class, reverseConvertGenerate = false)
public class VoiceRoleBo extends BaseEntity {
    /**
     * id
     */
    @NotNull(message = "id不能为空")
    private Long id;
    /**
     * è§’色名称
     */
    @NotBlank(message = "角色名称不能为空")
    private String name;
    /**
     * è§’色描述
     */
    @NotBlank(message = "角色描述不能为空")
    private String description;
    /**
     * å¤´åƒ
     */
    @NotBlank(message = "头像不能为空")
    private String avatar;
    /**
     * è§’色id
     */
    @NotBlank(message = "角色id不能为空")
    private String voiceId;
    /**
     * éŸ³é¢‘地址
     */
    @NotBlank(message = "音频地址不能为空")
    private String fileUrl;
    /**
     * éŸ³é¢‘预处理(实验性)
     */
    @NotBlank(message = "音频预处理(实验性)不能为空")
    private String preProcess;
    /**
     * å¤‡æ³¨
     */
    @NotBlank(message = "备注不能为空")
    private String remark;
}
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/vo/ChatMessageVo.java
@@ -1,12 +1,8 @@
package com.xmzs.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.esotericsoftware.kryo.serializers.DefaultSerializers;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.xmzs.common.core.validate.AddGroup;
import com.xmzs.common.core.validate.EditGroup;
import com.xmzs.system.handler.CustomerBigDecimalSerialize;
import com.xmzs.system.domain.ChatMessage;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
@@ -15,7 +11,6 @@
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/vo/ChatTokenVo.java
@@ -1,13 +1,11 @@
package com.xmzs.system.domain.vo;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xmzs.common.core.validate.AddGroup;
import com.xmzs.common.core.validate.EditGroup;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/vo/LoginVo.java
@@ -1,7 +1,7 @@
package com.xmzs.web.domain.vo;
import lombok.Data;
import com.xmzs.common.core.domain.model.LoginUser;
import lombok.Data;
/**
 * ç™»å½•返回信息
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/vo/PaymentOrdersVo.java
@@ -1,17 +1,14 @@
package com.xmzs.system.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xmzs.system.domain.PaymentOrders;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.xmzs.system.domain.PaymentOrders;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.math.BigDecimal;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/vo/SysLogininforVo.java
@@ -1,6 +1,5 @@
package com.xmzs.system.domain.vo;
import java.util.Date;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.xmzs.common.excel.annotation.ExcelDictFormat;
@@ -11,6 +10,7 @@
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/vo/SysTenantVo.java
@@ -1,6 +1,5 @@
package com.xmzs.system.domain.vo;
import java.util.Date;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.xmzs.common.excel.annotation.ExcelDictFormat;
@@ -11,6 +10,7 @@
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/vo/SysUserVo.java
@@ -2,15 +2,12 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.xmzs.common.translation.annotation.Translation;
import com.xmzs.common.translation.constant.TransConstant;
import com.xmzs.system.domain.SysUser;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/domain/vo/VoiceRoleVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
package com.xmzs.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.xmzs.system.domain.VoiceRole;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
 * é…éŸ³è§’色视图对象 voice_role
 *
 * @author Lion Li
 * @date 2024-03-19
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = VoiceRole.class)
public class VoiceRoleVo implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @ExcelProperty(value = "id")
    private Long id;
    /**
     * è§’色名称
     */
    @ExcelProperty(value = "角色名称")
    private String name;
    /**
     * è§’色描述
     */
    @ExcelProperty(value = "角色描述")
    private String description;
    /**
     * å¤´åƒ
     */
    @ExcelProperty(value = "头像")
    private String avatar;
    /**
     * è§’色id
     */
    @ExcelProperty(value = "角色id")
    private String voiceId;
    /**
     * éŸ³é¢‘地址
     */
    @ExcelProperty(value = "音频地址")
    private String fileUrl;
    /**
     * éŸ³é¢‘预处理(实验性)
     */
    @ExcelProperty(value = "音频预处理")
    private String preProcess;
    /**
     * å¤‡æ³¨
     */
    @ExcelProperty(value = "备注")
    private String remark;
}
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/listener/SSEEventSourceListener.java
@@ -1,16 +1,17 @@
package com.xmzs.system.listener;
import cn.hutool.core.collection.CollectionUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xmzs.common.chat.config.LocalCache;
import com.xmzs.common.chat.constant.OpenAIConst;
import com.xmzs.common.chat.entity.chat.ChatCompletion;
import com.xmzs.common.chat.entity.chat.ChatCompletionResponse;
import com.xmzs.common.chat.utils.TikTokensUtil;
import com.xmzs.common.core.utils.SpringUtils;
import com.xmzs.common.core.utils.StringUtils;
import com.xmzs.system.domain.bo.ChatMessageBo;
import com.xmzs.system.service.IChatService;
import com.xmzs.system.service.IChatMessageService;
import com.xmzs.system.service.IChatService;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -72,12 +73,15 @@
                    chatMessageBo.setContent(stringBuffer.toString());
                    Long userId = (Long)LocalCache.CACHE.get("userId");
                    chatMessageBo.setUserId(userId);
                    if("gpt-4-all".equals(modelName)
                        || modelName.startsWith("gpt-4-gizmo")
                        || modelName.startsWith("net")){
                        // æ‰£é™¤ä½™é¢
                        IChatService.deductUserBalance(userId, OpenAIConst.GPT4_ALL_COST);
                        chatMessageBo.setDeductCost(OpenAIConst.GPT4_ALL_COST);
                    if(ChatCompletion.Model.GPT_4_ALL.getName().equals(modelName)
                        || modelName.startsWith(ChatCompletion.Model.GPT_4_GIZMO.getName())
                        || modelName.startsWith(ChatCompletion.Model.NET.getName())
                        || ChatCompletion.Model.GPT_4_VISION_PREVIEW.getName().equals(modelName)
                        || ChatCompletion.Model.CLAUDE_3_SONNET.getName().equals(modelName)
                        || ChatCompletion.Model.STABLE_DIFFUSION.getName().equals(modelName)
                        || ChatCompletion.Model.SUNO_V3.getName().equals(modelName)
                    ){
                        chatMessageBo.setDeductCost(0.0);
                        chatMessageBo.setTotalTokens(0);
                        // ä¿å­˜æ¶ˆæ¯è®°å½•
                        chatMessageService.insertByBo(chatMessageBo);
@@ -92,7 +96,7 @@
            }
            ObjectMapper mapper = new ObjectMapper();
            ChatCompletionResponse completionResponse = mapper.readValue(data, ChatCompletionResponse.class);
            if(completionResponse == null){
            if(completionResponse == null || CollectionUtil.isEmpty(completionResponse.getChoices())){
                return;
            }
            String content = completionResponse.getChoices().get(0).getDelta().getContent();
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/mapper/ChatMessageMapper.java
@@ -1,8 +1,8 @@
package com.xmzs.system.mapper;
import com.xmzs.common.mybatis.core.mapper.BaseMapperPlus;
import com.xmzs.system.domain.vo.ChatMessageVo;
import com.xmzs.system.domain.ChatMessage;
import com.xmzs.system.domain.vo.ChatMessageVo;
/**
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/mapper/PaymentOrdersMapper.java
@@ -1,8 +1,8 @@
package com.xmzs.system.mapper;
import com.xmzs.common.mybatis.core.mapper.BaseMapperPlus;
import com.xmzs.system.domain.PaymentOrders;
import com.xmzs.system.domain.vo.PaymentOrdersVo;
import com.xmzs.common.mybatis.core.mapper.BaseMapperPlus;
/**
 * æ”¯ä»˜è®¢å•Mapper接口
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/mapper/SysDictDataMapper.java
@@ -2,8 +2,8 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xmzs.common.core.constant.UserConstants;
import com.xmzs.system.domain.SysDictData;
import com.xmzs.common.mybatis.core.mapper.BaseMapperPlus;
import com.xmzs.system.domain.SysDictData;
import com.xmzs.system.domain.vo.SysDictDataVo;
import java.util.List;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/mapper/SysDictTypeMapper.java
@@ -1,7 +1,7 @@
package com.xmzs.system.mapper;
import com.xmzs.system.domain.SysDictType;
import com.xmzs.common.mybatis.core.mapper.BaseMapperPlus;
import com.xmzs.system.domain.SysDictType;
import com.xmzs.system.domain.vo.SysDictTypeVo;
/**
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/mapper/SysMenuMapper.java
@@ -4,8 +4,8 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.xmzs.common.core.constant.UserConstants;
import com.xmzs.system.domain.SysMenu;
import com.xmzs.common.mybatis.core.mapper.BaseMapperPlus;
import com.xmzs.system.domain.SysMenu;
import com.xmzs.system.domain.vo.SysMenuVo;
import org.apache.ibatis.annotations.Param;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/mapper/SysTenantMapper.java
@@ -1,8 +1,8 @@
package com.xmzs.system.mapper;
import com.xmzs.common.mybatis.core.mapper.BaseMapperPlus;
import com.xmzs.system.domain.SysTenant;
import com.xmzs.system.domain.vo.SysTenantVo;
import com.xmzs.common.mybatis.core.mapper.BaseMapperPlus;
/**
 * ç§Ÿæˆ·Mapper接口
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/mapper/VoiceRoleMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.xmzs.system.mapper;
import com.xmzs.common.mybatis.core.mapper.BaseMapperPlus;
import com.xmzs.system.domain.VoiceRole;
import com.xmzs.system.domain.vo.VoiceRoleVo;
/**
 * é…éŸ³è§’色Mapper接口
 *
 * @author Lion Li
 * @date 2024-03-19
 */
public interface VoiceRoleMapper extends BaseMapperPlus<VoiceRole, VoiceRoleVo> {
}
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/ChatService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.xmzs.system.service;
import com.xmzs.system.domain.bo.ChatMessageBo;
/**
 * @author hncboy
 * @date 2023/3/22 19:41
 * èŠå¤©ç›¸å…³ä¸šåŠ¡æŽ¥å£
 */
public interface ChatService {
    /**
     * æ ¹æ®æ¶ˆè€—çš„tokens扣除余额
     *
     * @param chatMessageBo
     * @return ç»“æžœ
     */
    void deductToken(ChatMessageBo chatMessageBo);
    /**
     * æ‰£é™¤ç”¨æˆ·çš„余额
     *
     */
    void deductUserBalance(Long userId, Double numberCost);
}
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/IChatMessageService.java
@@ -1,11 +1,9 @@
package com.xmzs.system.service;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.system.domain.bo.ChatMessageBo;
import com.xmzs.system.domain.vo.ChatMessageVo;
import java.util.Collection;
import java.util.List;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/IChatService.java
@@ -24,4 +24,10 @@
     *
     */
    void deductUserBalance(Long userId, Double numberCost);
    /**
     * æ‰£é™¤mj任务费用
     *
     */
    void mjTaskDeduct(String prompt, double cost);
}
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/ISseService.java
@@ -3,17 +3,15 @@
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 okhttp3.ResponseBody;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.io.File;
import java.util.List;
/**
@@ -54,6 +52,10 @@
    List<Item> dall3(Dall3Request request);
    void mjTask(MjTaskRequest mjTaskRequest);
    /**
     * åˆ¤æ–­ç”¨æˆ·æ˜¯å¦ä»˜è´¹
     */
    void checkUserGrade();
    UploadFileResponse upload(MultipartFile file);
}
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/ISysTenantPackageService.java
@@ -1,9 +1,9 @@
package com.xmzs.system.service;
import com.xmzs.system.domain.vo.SysTenantPackageVo;
import com.xmzs.system.domain.bo.SysTenantPackageBo;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.system.domain.bo.SysTenantPackageBo;
import com.xmzs.system.domain.vo.SysTenantPackageVo;
import java.util.Collection;
import java.util.List;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/ISysTenantService.java
@@ -1,9 +1,9 @@
package com.xmzs.system.service;
import com.xmzs.system.domain.vo.SysTenantVo;
import com.xmzs.system.domain.bo.SysTenantBo;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.system.domain.bo.SysTenantBo;
import com.xmzs.system.domain.vo.SysTenantVo;
import java.util.Collection;
import java.util.List;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/SseService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.xmzs.system.service;
import com.xmzs.common.chat.domain.request.ChatRequest;
import com.xmzs.common.chat.domain.request.Dall3Request;
import com.xmzs.common.chat.entity.images.Item;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.util.List;
/**
 * æè¿°ï¼š
 *
 * @author https:www.unfbx.com
 * @date 2023-04-08
 */
public interface SseService {
    /**
     * å®¢æˆ·ç«¯å‘送消息到服务端
     * @param chatRequest
     */
    SseEmitter sseChat(ChatRequest chatRequest);
    /**
     * ç»˜ç”»æŽ¥å£
     * @param request
     */
    List<Item> dall3(Dall3Request request);
    /**
     * mj绘画接口
     */
    void mjTask();
}
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/ChatMessageServiceImpl.java
@@ -1,23 +1,23 @@
package com.xmzs.system.service.impl;
import com.xmzs.common.core.utils.MapstructUtils;
import com.xmzs.common.core.utils.StringUtils;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.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 com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xmzs.common.core.utils.MapstructUtils;
import com.xmzs.common.core.utils.StringUtils;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.system.domain.ChatMessage;
import com.xmzs.system.domain.bo.ChatMessageBo;
import com.xmzs.system.domain.vo.ChatMessageVo;
import com.xmzs.system.mapper.ChatMessageMapper;
import com.xmzs.system.service.IChatMessageService;
import com.xmzs.system.domain.ChatMessage;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
 * èŠå¤©æ¶ˆæ¯Service业务层处理
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/ChatServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,136 @@
package com.xmzs.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.xmzs.common.chat.constant.OpenAIConst;
import com.xmzs.common.chat.entity.chat.ChatCompletion;
import com.xmzs.common.core.domain.model.LoginUser;
import com.xmzs.common.core.exception.ServiceException;
import com.xmzs.common.core.exception.base.BaseException;
import com.xmzs.common.satoken.utils.LoginHelper;
import com.xmzs.system.domain.ChatToken;
import com.xmzs.system.domain.SysUser;
import com.xmzs.system.domain.bo.ChatMessageBo;
import com.xmzs.system.mapper.SysUserMapper;
import com.xmzs.system.service.IChatMessageService;
import com.xmzs.system.service.IChatService;
import com.xmzs.system.service.IChatTokenService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
 * @author hncboy
 * @date 2023/3/22 19:41
 * èŠå¤©ç›¸å…³ä¸šåŠ¡å®žçŽ°ç±»
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class ChatServiceImpl implements IChatService {
    private final SysUserMapper sysUserMapper;
    private final IChatMessageService chatMessageService;
    private final IChatTokenService chatTokenService;
    /**
     * æ ¹æ®æ¶ˆè€—çš„tokens扣除余额
     *
     * @param chatMessageBo
     */
    public void deductToken(ChatMessageBo chatMessageBo) {
        // è®¡ç®—总token数
        ChatToken chatToken = chatTokenService.queryByUserId(chatMessageBo.getUserId(), chatMessageBo.getModelName());
        if (chatToken == null) {
            chatToken = new ChatToken();
            chatToken.setToken(0);
        }
        int totalTokens = chatToken.getToken() + chatMessageBo.getTotalTokens();
        // å¦‚果总token数大于等于1000,进行费用扣除
        if (totalTokens >= 1000) {
            // è®¡ç®—费用
            int token1 = totalTokens / 1000;
            int token2 = totalTokens % 1000;
            if (token2 > 0) {
                // ä¿å­˜å‰©ä½™tokens
                chatToken.setToken(token2);
                chatTokenService.editToken(chatToken);
            } else {
                chatTokenService.resetToken(chatMessageBo.getUserId(), chatMessageBo.getModelName());
            }
            // æ‰£é™¤ç”¨æˆ·ä½™é¢
            Double numberCost = token1 * ChatCompletion.getModelCost(chatMessageBo.getModelName());
            deductUserBalance(chatMessageBo.getUserId(), numberCost);
            chatMessageBo.setDeductCost(numberCost);
        } else {
            // æ‰£é™¤ç”¨æˆ·ä½™é¢
            deductUserBalance(chatMessageBo.getUserId(), 0.0);
            chatMessageBo.setDeductCost(0d);
            chatMessageBo.setRemark("不满1kToken,计入下一次!");
            chatToken.setToken(totalTokens);
            chatToken.setModelName(chatMessageBo.getModelName());
            chatToken.setUserId(chatMessageBo.getUserId());
            chatTokenService.editToken(chatToken);
        }
        // ä¿å­˜æ¶ˆæ¯è®°å½•
        chatMessageService.insertByBo(chatMessageBo);
    }
    /**
     * ä»Žç”¨æˆ·ä½™é¢ä¸­æ‰£é™¤è´¹ç”¨
     *
     * @param userId     ç”¨æˆ·ID
     * @param numberCost è¦æ‰£é™¤çš„费用
     */
    @Override
    public void deductUserBalance(Long userId, Double numberCost) {
        SysUser sysUser = sysUserMapper.selectById(userId);
        if (sysUser == null) {
            return;
        }
        Double userBalance = sysUser.getUserBalance();
        if (userBalance < numberCost || userBalance < OpenAIConst.GPT4_COST) {
            throw new ServiceException("余额不足,请联系管理员充值!");
        }
        sysUserMapper.update(null,
            new LambdaUpdateWrapper<SysUser>()
                .set(SysUser::getUserBalance, Math.max(userBalance - numberCost, 0))
                .eq(SysUser::getUserId, userId));
    }
    /**
     * æ‰£é™¤mj任务费用
     *
     * @param prompt
     * @param cost
     */
    @Override
    public void mjTaskDeduct(String prompt, double cost) {
        deductUserBalance(getUserId(), cost);
        // ä¿å­˜æ¶ˆæ¯è®°å½•
        ChatMessageBo chatMessageBo = new ChatMessageBo();
        chatMessageBo.setUserId(getUserId());
        chatMessageBo.setModelName("mj");
        chatMessageBo.setContent(prompt);
        chatMessageBo.setDeductCost(cost);
        chatMessageBo.setTotalTokens(0);
        chatMessageService.insertByBo(chatMessageBo);
    }
    /**
     * èŽ·å–ç”¨æˆ·Id
     *
     * @return
     */
    public Long getUserId() {
        LoginUser loginUser = LoginHelper.getLoginUser();
        if (loginUser == null) {
            throw new BaseException("用户未登录!");
        }
        return loginUser.getUserId();
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/IChatServiceImpl.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/ISseServiceImpl.java
ÎļþÒÑɾ³ý
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/PaymentOrdersServiceImpl.java
@@ -1,23 +1,23 @@
package com.xmzs.system.service.impl;
import com.xmzs.common.core.utils.MapstructUtils;
import com.xmzs.common.core.utils.StringUtils;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.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 com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xmzs.common.core.utils.MapstructUtils;
import com.xmzs.common.core.utils.StringUtils;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.system.domain.PaymentOrders;
import com.xmzs.system.domain.bo.PaymentOrdersBo;
import com.xmzs.system.domain.vo.PaymentOrdersVo;
import com.xmzs.system.domain.PaymentOrders;
import com.xmzs.system.mapper.PaymentOrdersMapper;
import com.xmzs.system.service.IPaymentOrdersService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
 * æ”¯ä»˜è®¢å•Service业务层处理
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/SseServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,319 @@
package com.xmzs.system.service.impl;
import com.xmzs.common.chat.config.LocalCache;
import com.xmzs.common.chat.constant.OpenAIConst;
import com.xmzs.common.chat.domain.request.ChatRequest;
import com.xmzs.common.chat.domain.request.Dall3Request;
import com.xmzs.common.chat.entity.Tts.TextToSpeech;
import com.xmzs.common.chat.entity.chat.*;
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.images.Item;
import com.xmzs.common.chat.entity.whisper.WhisperResponse;
import com.xmzs.common.chat.openai.OpenAiStreamClient;
import com.xmzs.common.chat.utils.TikTokensUtil;
import com.xmzs.common.core.domain.model.LoginUser;
import com.xmzs.common.core.exception.base.BaseException;
import com.xmzs.common.satoken.utils.LoginHelper;
import com.xmzs.system.domain.SysUser;
import com.xmzs.system.domain.bo.ChatMessageBo;
import com.xmzs.system.listener.SSEEventSourceListener;
import com.xmzs.system.mapper.SysUserMapper;
import com.xmzs.system.service.IChatMessageService;
import com.xmzs.system.service.IChatService;
import com.xmzs.system.service.ISseService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import okhttp3.ResponseBody;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
/**
 * æè¿°ï¼š
 *
 * @author https:www.unfbx.com
 * @date 2023-04-08
 */
@Service
@Slf4j
@RequiredArgsConstructor
public class SseServiceImpl implements ISseService {
    private final OpenAiStreamClient openAiStreamClient;
    private final IChatService IChatService;
    private final SysUserMapper sysUserMapper;
    private final IChatMessageService chatMessageService;
    @Value("${chat.apiKey}")
    private String apiKey;
    @Value("${chat.apiHost}")
    private String apiHost;
    @Override
    public SseEmitter sseChat(ChatRequest chatRequest) {
        LocalCache.CACHE.put("userId",getUserId());
        SseEmitter sseEmitter = new SseEmitter(0L);
        SSEEventSourceListener openAIEventSourceListener = new SSEEventSourceListener(sseEmitter);
        // èŽ·å–å¯¹è¯æ¶ˆæ¯åˆ—è¡¨
        List<Message> msgList = chatRequest.getMessages();
        // å›¾æ–‡è¯†åˆ«ä¸Šä¸‹æ–‡ä¿¡æ¯
        List<Content> contentList = chatRequest.getImageContent();
        // æ¶ˆæ¯è®°å½•
        Message message = msgList.get(msgList.size() - 1);
        ChatMessageBo chatMessageBo = new ChatMessageBo();
        chatMessageBo.setUserId(getUserId());
        chatMessageBo.setModelName(chatRequest.getModel());
        chatMessageBo.setContent(message.getContent());
        try{
            if(!chatRequest.getModel().startsWith("gpt-3.5")){
                // åˆ¤æ–­ç”¨æˆ·æ˜¯å¦ä»˜è´¹
                checkUserGrade();
            }
            // æŒ‰æ¬¡æ•°æ‰£è´¹
            if(ChatCompletion.Model.GPT_4_ALL.getName().equals(chatRequest.getModel())
                || chatRequest.getModel().startsWith(ChatCompletion.Model.GPT_4_GIZMO.getName())
                || chatRequest.getModel().startsWith(ChatCompletion.Model.NET.getName())
                || ChatCompletion.Model.GPT_4_VISION_PREVIEW.getName().equals(chatRequest.getModel())
                || ChatCompletion.Model.CLAUDE_3_SONNET.getName().equals(chatRequest.getModel())
                || ChatCompletion.Model.STABLE_DIFFUSION.getName().equals(chatRequest.getModel())
                || ChatCompletion.Model.SUNO_V3.getName().equals(chatRequest.getModel())
            ){
                double cost = OpenAIConst.GPT4_COST;
                if(ChatCompletion.Model.STABLE_DIFFUSION.getName().equals(chatRequest.getModel())){
                    cost = 0.1;
                }
                if(ChatCompletion.Model.SUNO_V3.getName().equals(chatRequest.getModel())){
                    cost = 0.5;
                }
                IChatService.deductUserBalance(getUserId(), cost);
                chatMessageBo.setDeductCost(cost);
                // ä¿å­˜æ¶ˆæ¯è®°å½•
                chatMessageService.insertByBo(chatMessageBo);
            }else {
                int tokens = TikTokensUtil.tokens(chatRequest.getModel(), msgList);
                chatMessageBo.setTotalTokens(tokens);
                // æŒ‰token扣费并且保存消息记录
                IChatService.deductToken(chatMessageBo);
            }
        }catch (Exception e){
            sendErrorEvent(sseEmitter, e.getMessage());
            return sseEmitter;
        }
        // å›¾æ–‡è¯†åˆ«æ¨¡åž‹
        if (ChatCompletion.Model.GPT_4_VISION_PREVIEW.getName().equals(chatRequest.getModel())) {
            MessagePicture messagePicture = MessagePicture.builder().role(Message.Role.USER.getName()).content(contentList).build();
            ChatCompletionWithPicture chatCompletion = ChatCompletionWithPicture
                .builder()
                .messages(Collections.singletonList(messagePicture))
                .model(chatRequest.getModel())
                .temperature(chatRequest.getTemperature())
                .topP(chatRequest.getTop_p())
                .stream(true)
                .build();
            openAiStreamClient.streamChatCompletion(chatCompletion, openAIEventSourceListener);
        } else {
            ChatCompletion completion = ChatCompletion
                .builder()
                .messages(msgList)
                .model(chatRequest.getModel())
                .temperature(chatRequest.getTemperature())
                .topP(chatRequest.getTop_p())
                .stream(true)
                .build();
            openAiStreamClient.streamChatCompletion(completion, openAIEventSourceListener);
        }
        return sseEmitter;
    }
    /**
     * æ–‡å­—转语音
     *
     */
    @Override
    public ResponseEntity<Resource> textToSpeed(TextToSpeech textToSpeech) {
        try (ResponseBody body = openAiStreamClient.textToSpeech(textToSpeech)) {
            if (body != null) {
                // å°†ResponseBody转换为InputStreamResource
                InputStreamResource resource = new InputStreamResource(body.byteStream());
                // åˆ›å»ºå¹¶è¿”回ResponseEntity
                return ResponseEntity.ok()
                        .contentType(MediaType.parseMediaType("audio/mpeg")) // å‡è®¾æ˜¯MP3文件
                        .body(resource);
            } else {
                // å¦‚æžœResponseBody为空,返回404状态码
                return ResponseEntity.notFound().build();
            }
        }
    }
    /**
     * è¯­éŸ³è½¬æ–‡å­—
     *
     */
    @Override
    public WhisperResponse speechToTextTranscriptionsV2(MultipartFile file) {
        // ç¡®ä¿æ–‡ä»¶ä¸ä¸ºç©º
        if (file.isEmpty()) {
            throw new IllegalStateException("Cannot convert an empty MultipartFile");
        }
        // åˆ›å»ºä¸€ä¸ªæ–‡ä»¶å¯¹è±¡
        File fileA = new File(System.getProperty("java.io.tmpdir") + File.separator + file.getOriginalFilename());
        try {
            // å°† MultipartFile çš„内容写入文件
            file.transferTo(fileA);
        } catch (IOException e) {
            throw new RuntimeException("Failed to convert MultipartFile to File", e);
        }
        return openAiStreamClient.speechToTextTranscriptions(fileA);
    }
    @Override
    public String chat(ChatRequest chatRequest) {
        Message message = Message.builder().role(Message.Role.USER).content(chatRequest.getPrompt()).build();
        ChatCompletion chatCompletion = ChatCompletion
            .builder()
            .messages(Collections.singletonList(message))
            .model(chatRequest.getModel())
            .build();
        ChatCompletionResponse chatCompletionResponse = openAiStreamClient.chatCompletion(chatCompletion);
        return chatCompletionResponse.getChoices().get(0).getMessage().getContent();
    }
    /**
     * dall-e-3绘画接口
     *
     * @param request
     * @return
     */
    public List<Item> dall3(Dall3Request request) {
        checkUserGrade();
        // DALL3 ç»˜å›¾æ¨¡åž‹
        Image image = Image.builder()
            .responseFormat(com.xmzs.common.chat.entity.images.ResponseFormat.URL.getName())
            .model(Image.Model.DALL_E_3.getName())
            .prompt(request.getPrompt())
            .n(1)
            .quality(request.getQuality())
            .size(request.getSize())
            .style(request.getStyle())
            .build();
        ImageResponse imageResponse = openAiStreamClient.genImages(image);
        // æ‰£é™¤è´¹ç”¨
        if(Objects.equals(request.getSize(), "1792x1024") || Objects.equals(request.getSize(), "1024x1792")){
            IChatService.deductUserBalance(getUserId(),OpenAIConst.DALL3_HD_COST);
        }else {
            IChatService.deductUserBalance(getUserId(),OpenAIConst.DALL3_COST);
        }
        // ä¿å­˜æ¶ˆæ¯è®°å½•
        ChatMessageBo chatMessageBo = new ChatMessageBo();
        chatMessageBo.setUserId(getUserId());
        chatMessageBo.setModelName(Image.Model.DALL_E_3.getName());
        chatMessageBo.setContent(request.getPrompt());
        chatMessageBo.setDeductCost(OpenAIConst.GPT4_COST);
        chatMessageBo.setTotalTokens(0);
        chatMessageService.insertByBo(chatMessageBo);
        return imageResponse.getData();
    }
    /**
     * åˆ¤æ–­ç”¨æˆ·æ˜¯å¦ä»˜è´¹
     */
    @Override
    public void checkUserGrade() {
        SysUser sysUser = sysUserMapper.selectById(getUserId());
        if("0".equals(sysUser.getUserGrade())){
            throw new BaseException("免费用户暂时不支持此模型,请切换gpt-3.5-turbo模型或者点击《进入市场选购您的商品》充值后使用!");
        }
    }
    /**
     * èŽ·å–ç”¨æˆ·Id
     *
     * @return
     */
    public Long getUserId(){
        LoginUser loginUser = LoginHelper.getLoginUser();
        if (loginUser == null) {
            throw new BaseException("用户未登录!");
        }
        return loginUser.getUserId();
    }
    @Override
    public UploadFileResponse upload(MultipartFile file) {
       return openAiStreamClient.uploadFile("fine-tune", convertMultiPartToFile(file));
    }
    private File convertMultiPartToFile(MultipartFile multipartFile) {
        File file = null;
        try {
            // èŽ·å–åŽŸå§‹æ–‡ä»¶å
            String originalFileName = multipartFile.getOriginalFilename();
            // é»˜è®¤æ‰©å±•名
            String extension = ".tmp";
            // å°è¯•从原始文件名中获取扩展名
            if (originalFileName != null && originalFileName.contains(".")) {
                extension = originalFileName.substring(originalFileName.lastIndexOf("."));
            }
            // ä½¿ç”¨åŽŸå§‹æ–‡ä»¶çš„æ‰©å±•ååˆ›å»ºä¸´æ—¶æ–‡ä»¶
            Path tempFile = Files.createTempFile(null, extension);
            file = tempFile.toFile();
            // å°†MultipartFile的内容写入文件
            try (InputStream inputStream = multipartFile.getInputStream();
                 FileOutputStream outputStream = new FileOutputStream(file)) {
                int read;
                byte[] bytes = new byte[1024];
                while ((read = inputStream.read(bytes)) != -1) {
                    outputStream.write(bytes, 0, read);
                }
            } catch (IOException e) {
                // å¤„理文件写入异常
                e.printStackTrace();
            }
        } catch (IOException e) {
            // å¤„理临时文件创建异常
            e.printStackTrace();
        }
        return file;
    }
    // å‘送SSE错误事件的封装方法
    private void sendErrorEvent(SseEmitter sseEmitter, String errorMessage) {
        SseEmitter.SseEventBuilder event = SseEmitter.event()
            .name("error")
            .data(errorMessage);
        try {
            sseEmitter.send(event);
        } catch (IOException e) {
            log.error("发送事件失败: {}", e.getMessage());
        }
        sseEmitter.complete();
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/SysDataScopeServiceImpl.java
@@ -3,9 +3,9 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xmzs.system.domain.SysDept;
import com.xmzs.common.mybatis.helper.DataBaseHelper;
import com.xmzs.common.core.utils.StreamUtils;
import com.xmzs.common.mybatis.helper.DataBaseHelper;
import com.xmzs.system.domain.SysDept;
import com.xmzs.system.domain.SysRoleDept;
import com.xmzs.system.mapper.SysDeptMapper;
import com.xmzs.system.mapper.SysRoleDeptMapper;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/SysDictDataServiceImpl.java
@@ -4,13 +4,13 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xmzs.common.core.constant.CacheNames;
import com.xmzs.common.core.utils.MapstructUtils;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.system.domain.SysDictData;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.common.core.exception.ServiceException;
import com.xmzs.common.core.utils.MapstructUtils;
import com.xmzs.common.core.utils.StringUtils;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.common.redis.utils.CacheUtils;
import com.xmzs.system.domain.SysDictData;
import com.xmzs.system.domain.bo.SysDictDataBo;
import com.xmzs.system.domain.vo.SysDictDataVo;
import com.xmzs.system.mapper.SysDictDataMapper;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/SysLogininforServiceImpl.java
@@ -6,24 +6,24 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xmzs.common.core.constant.Constants;
import com.xmzs.common.core.utils.MapstructUtils;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.log.event.LogininforEvent;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.common.core.utils.ServletUtils;
import com.xmzs.common.core.utils.StringUtils;
import com.xmzs.common.core.utils.ip.AddressUtils;
import com.xmzs.common.log.event.LogininforEvent;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.system.domain.SysLogininfor;
import com.xmzs.system.domain.bo.SysLogininforBo;
import com.xmzs.system.domain.vo.SysLogininforVo;
import com.xmzs.system.mapper.SysLogininforMapper;
import com.xmzs.system.service.ISysLogininforService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import jakarta.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/SysOperLogServiceImpl.java
@@ -4,11 +4,11 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xmzs.common.core.utils.MapstructUtils;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.common.core.utils.StringUtils;
import com.xmzs.common.core.utils.ip.AddressUtils;
import com.xmzs.common.log.event.OperLogEvent;
import com.xmzs.common.mybatis.core.page.PageQuery;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.system.domain.SysOperLog;
import com.xmzs.system.domain.bo.SysOperLogBo;
import com.xmzs.system.domain.vo.SysOperLogVo;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/SysOssConfigServiceImpl.java
@@ -6,8 +6,6 @@
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import com.xmzs.common.core.constant.CacheNames;
import com.xmzs.common.core.exception.ServiceException;
import com.xmzs.common.core.utils.MapstructUtils;
@@ -26,6 +24,8 @@
import com.xmzs.system.domain.vo.SysOssConfigVo;
import com.xmzs.system.mapper.SysOssConfigMapper;
import com.xmzs.system.service.ISysOssConfigService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/SysOssServiceImpl.java
@@ -34,7 +34,10 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
 * æ–‡ä»¶ä¸Šä¼  æœåŠ¡å±‚å®žçŽ°
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/SysTenantPackageServiceImpl.java
@@ -1,30 +1,30 @@
package com.xmzs.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xmzs.common.core.constant.TenantConstants;
import com.xmzs.common.core.exception.ServiceException;
import com.xmzs.common.core.utils.MapstructUtils;
import com.xmzs.common.core.utils.StringUtils;
import com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.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 com.xmzs.common.mybatis.core.page.TableDataInfo;
import com.xmzs.system.domain.SysTenant;
import com.xmzs.system.mapper.SysTenantMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.xmzs.system.domain.SysTenantPackage;
import com.xmzs.system.domain.bo.SysTenantPackageBo;
import com.xmzs.system.domain.vo.SysTenantPackageVo;
import com.xmzs.system.domain.SysTenantPackage;
import com.xmzs.system.mapper.SysTenantMapper;
import com.xmzs.system.mapper.SysTenantPackageMapper;
import com.xmzs.system.service.ISysTenantPackageService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
 * ç§Ÿæˆ·å¥—餐Service业务层处理
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/SysTenantServiceImpl.java
@@ -7,7 +7,6 @@
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 com.xmzs.common.core.constant.CacheNames;
import com.xmzs.common.core.constant.Constants;
import com.xmzs.common.core.constant.TenantConstants;
@@ -22,6 +21,7 @@
import com.xmzs.system.domain.vo.SysTenantVo;
import com.xmzs.system.mapper.*;
import com.xmzs.system.service.ISysTenantService;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
ruoyi-modules/ruoyi-system/src/main/java/com/xmzs/system/service/impl/SysUserServiceImpl.java
@@ -9,10 +9,6 @@
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xmzs.common.core.domain.model.LoginUser;
import com.xmzs.common.core.exception.base.BaseException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import com.xmzs.common.core.constant.CacheNames;
import com.xmzs.common.core.constant.UserConstants;
import com.xmzs.common.core.exception.ServiceException;
@@ -34,11 +30,12 @@
import com.xmzs.system.domain.vo.SysUserVo;
import com.xmzs.system.mapper.*;
import com.xmzs.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
script/sql/ry-vue.sql
@@ -11,11 +11,48 @@
 Target Server Version : 80034
 File Encoding         : 65001
 Date: 10/01/2024 11:33:28
 Date: 26/03/2024 18:15:47
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for access_token
-- ----------------------------
DROP TABLE IF EXISTS `access_token`;
CREATE TABLE `access_token`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `app` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '应用',
  `token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'token值',
  `expired_time` datetime NOT NULL COMMENT '过期时间',
  `create_time` datetime NULL DEFAULT NULL,
  `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '第三方接口访问token' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of access_token
-- ----------------------------
-- ----------------------------
-- Table structure for agent_field
-- ----------------------------
DROP TABLE IF EXISTS `agent_field`;
CREATE TABLE `agent_field`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `fid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '领域ID',
  `field_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '领域名称',
  `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '领域描述',
  `status` bit(1) NULL DEFAULT b'0' COMMENT '是否生效:0无效1有效',
  `create_time` datetime NULL DEFAULT NULL,
  `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代理领域' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of agent_field
-- ----------------------------
-- ----------------------------
-- Table structure for chat_message
@@ -42,6 +79,25 @@
-- ----------------------------
-- ----------------------------
-- Table structure for chat_request_log
-- ----------------------------
DROP TABLE IF EXISTS `chat_request_log`;
CREATE TABLE `chat_request_log`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_id` int NOT NULL COMMENT '用户ID',
  `kid` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '知识库ID',
  `request_time` datetime NOT NULL COMMENT '请求时间',
  `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '内容',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '对话请求日志' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of chat_request_log
-- ----------------------------
-- ----------------------------
-- Table structure for chat_token
-- ----------------------------
DROP TABLE IF EXISTS `chat_token`;
@@ -55,6 +111,47 @@
-- ----------------------------
-- Records of chat_token
-- ----------------------------
-- ----------------------------
-- Table structure for demand
-- ----------------------------
DROP TABLE IF EXISTS `demand`;
CREATE TABLE `demand`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `did` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '需求ID',
  `fid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '所属领域ID',
  `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '需求内容',
  `user_id` int NULL DEFAULT NULL COMMENT '用户ID',
  `unambiguous` bit(1) NULL DEFAULT b'0' COMMENT '明确的',
  `create_time` datetime NULL DEFAULT NULL,
  `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '需求' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of demand
-- ----------------------------
-- ----------------------------
-- Table structure for demand_step
-- ----------------------------
DROP TABLE IF EXISTS `demand_step`;
CREATE TABLE `demand_step`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `did` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '需求ID',
  `fid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '所属领域ID',
  `step_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '步骤名称',
  `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '步骤描述',
  `role` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '负责人角色',
  `user_id` int NULL DEFAULT NULL COMMENT '用户ID',
  `create_time` datetime NULL DEFAULT NULL,
  `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '需求步骤' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of demand_step
-- ----------------------------
-- ----------------------------
@@ -392,6 +489,107 @@
INSERT INTO `gen_table_column` VALUES (1740573615225053194, 1740573614897897473, 'update_by', '更新者', 'bigint(20)', 'Long', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 10, 103, 1, '2023-12-29 11:21:03', 1, '2023-12-29 11:21:03');
INSERT INTO `gen_table_column` VALUES (1740573615225053195, 1740573614897897473, 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 11, 103, 1, '2023-12-29 11:21:03', 1, '2023-12-29 11:21:03');
INSERT INTO `gen_table_column` VALUES (1740573615225053196, 1740573614897897473, 'remark', '备注', 'varchar(500)', 'String', 'remark', '0', '0', '1', '1', '1', '1', NULL, 'EQ', 'textarea', '', 12, 103, 1, '2023-12-29 11:21:03', 1, '2023-12-29 11:21:03');
-- ----------------------------
-- Table structure for knowledge
-- ----------------------------
DROP TABLE IF EXISTS `knowledge`;
CREATE TABLE `knowledge`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `kid` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '知识库ID',
  `uid` bigint NOT NULL DEFAULT 0 COMMENT '用户ID',
  `kname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '知识库名称',
  `description` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述',
  `create_time` datetime NULL DEFAULT NULL,
  `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `idx_kid`(`kid` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '知识库' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of knowledge
-- ----------------------------
-- ----------------------------
-- Table structure for knowledge_attach
-- ----------------------------
DROP TABLE IF EXISTS `knowledge_attach`;
CREATE TABLE `knowledge_attach`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `kid` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '知识库ID',
  `doc_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文档ID',
  `doc_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文档名称',
  `doc_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文档类型',
  `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '文档内容',
  `create_time` datetime NULL DEFAULT NULL,
  `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `idx_kname`(`kid` ASC, `doc_name` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '知识库附件' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of knowledge_attach
-- ----------------------------
-- ----------------------------
-- Table structure for knowledge_fragment
-- ----------------------------
DROP TABLE IF EXISTS `knowledge_fragment`;
CREATE TABLE `knowledge_fragment`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `kid` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '知识库ID',
  `doc_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文档ID',
  `fid` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '知识片段ID',
  `idx` int NOT NULL COMMENT '片段索引下标',
  `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文档内容',
  `create_time` datetime NULL DEFAULT NULL,
  `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '知识片段' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of knowledge_fragment
-- ----------------------------
-- ----------------------------
-- Table structure for knowledge_share
-- ----------------------------
DROP TABLE IF EXISTS `knowledge_share`;
CREATE TABLE `knowledge_share`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `kid` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '知识库ID',
  `uid` int NOT NULL DEFAULT 0 COMMENT '用户ID',
  `kname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '知识库名称',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '知识库分享表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of knowledge_share
-- ----------------------------
-- ----------------------------
-- Table structure for media_file
-- ----------------------------
DROP TABLE IF EXISTS `media_file`;
CREATE TABLE `media_file`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `cid` int NOT NULL DEFAULT 0 COMMENT '对话ID',
  `mfid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '媒体文件ID',
  `media_type` int NOT NULL COMMENT '媒体类型:1视频,2音频,3图片',
  `file_suffix` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件后缀',
  `file_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件名',
  `file_size` bigint NOT NULL COMMENT '文件大小(单位字节)',
  `file_time` bigint NULL DEFAULT NULL COMMENT '时长(单位秒)',
  `file_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件路径',
  `http_url` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'http全路径',
  `create_time` datetime NULL DEFAULT NULL,
  `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '媒体文件' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of media_file
-- ----------------------------
-- ----------------------------
-- Table structure for mj_room
@@ -772,57 +970,6 @@
-- ----------------------------
-- Records of sys_file_info
-- ----------------------------
INSERT INTO `sys_file_info` VALUES (1680497615330447362, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680497611488464896.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 16:40:28', NULL, NULL, '2023-07-16 16:40:28', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680498392497229826, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680498388747522048.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 16:43:34', NULL, NULL, '2023-07-16 16:43:34', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680498798468108290, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680498794991030272.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 16:45:10', NULL, NULL, '2023-07-16 16:45:10', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680499270151147522, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680499266577600512.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 16:47:03', NULL, NULL, '2023-07-16 16:47:03', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680501243424362498, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680501239389442048.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 16:54:53', NULL, NULL, '2023-07-16 16:54:53', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680504215915024386, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680504212333088768.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:06:42', NULL, NULL, '2023-07-16 17:06:42', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680504359825788929, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680504356621340672.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:07:16', NULL, NULL, '2023-07-16 17:07:16', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680504461810290689, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680504458815557632.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:07:41', NULL, NULL, '2023-07-16 17:07:41', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680504563446665217, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680504560128970752.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:08:05', NULL, NULL, '2023-07-16 17:08:05', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680504666311970817, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680504662826504192.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:08:29', NULL, NULL, '2023-07-16 17:08:29', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680504771475755009, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680504767772184576.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:08:54', NULL, NULL, '2023-07-16 17:08:54', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680504875007954945, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680504871493128192.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:09:19', NULL, NULL, '2023-07-16 17:09:19', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680504979622285314, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680504976069709824.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:09:44', NULL, NULL, '2023-07-16 17:09:44', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680505086774169602, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680505083313868800.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:10:10', NULL, NULL, '2023-07-16 17:10:10', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680505190952292354, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680505187441659904.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:10:34', NULL, NULL, '2023-07-16 17:10:34', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680505293607882754, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680505290164359168.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:10:59', NULL, NULL, '2023-07-16 17:10:59', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680505399979626497, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680505396498354176.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:11:24', NULL, NULL, '2023-07-16 17:11:24', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680505503469883394, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680505500106051584.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:11:49', NULL, NULL, '2023-07-16 17:11:49', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680505903468072962, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680505900011966464.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:13:24', NULL, NULL, '2023-07-16 17:13:24', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680506303004889090, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680506299167100928.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:15:00', NULL, NULL, '2023-07-16 17:15:00', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680506406075715586, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680506402477002752.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:15:24', NULL, NULL, '2023-07-16 17:15:24', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680506507569483778, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680506504318898176.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:15:48', NULL, NULL, '2023-07-16 17:15:48', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680506608983560193, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680506605502287872.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:16:13', NULL, NULL, '2023-07-16 17:16:13', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680506908322648066, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680506904853958656.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:17:24', NULL, NULL, '2023-07-16 17:17:24', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680507008256135169, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680507004808417280.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:17:48', NULL, NULL, '2023-07-16 17:17:48', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680507147406364674, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680507143727960064.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:18:21', NULL, NULL, '2023-07-16 17:18:21', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680507359759781889, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680507356144291840.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:19:12', NULL, NULL, '2023-07-16 17:19:12', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680507970840514561, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680507967422156800.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 17:21:37', NULL, NULL, '2023-07-16 17:21:37', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680526836295618562, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680526832839512064.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 18:36:35', NULL, NULL, '2023-07-16 18:36:35', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680526937252515842, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680526933968375808.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 18:36:59', NULL, NULL, '2023-07-16 18:36:59', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680527038914056193, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680527035281788928.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 18:37:23', NULL, NULL, '2023-07-16 18:37:23', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1680527140101640194, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-07-16/1680527136674893824.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'sd', NULL, NULL, '2023-07-16 18:37:48', NULL, NULL, '2023-07-16 18:37:48', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688105795313041409, '/StableDiffusion/2023-08-06/1688105795258515456.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:32:40', '1', '1', '2023-08-06 16:32:40', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688105901743505409, '/StableDiffusion/2023-08-06/1688105901739311104.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:33:05', '1', '1', '2023-08-06 16:33:05', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688106313796100097, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688106310495182848.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:34:43', '1', '1', '2023-08-06 16:34:43', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688106572739846146, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688106568948195328.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:35:45', '1', '1', '2023-08-06 16:35:45', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688108066235031554, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688108062321745920.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:41:41', '1', '1', '2023-08-06 16:41:41', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688108539901984770, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688108525284835328.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:43:34', '1', '1', '2023-08-06 16:43:34', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688109337788628994, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688109333917286400.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:46:44', '1', '1', '2023-08-06 16:46:44', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688109526054158337, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688109522946179072.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:47:29', '1', '1', '2023-08-06 16:47:29', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688109680681369602, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688109676877135872.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:48:06', '1', '1', '2023-08-06 16:48:06', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688109962416963586, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688109958998605824.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:49:13', '1', '1', '2023-08-06 16:49:13', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688110249684844545, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688110246283264000.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:50:22', '1', '1', '2023-08-06 16:50:22', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688110430224465922, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688110426466369536.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:51:05', '1', '1', '2023-08-06 16:51:05', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688110522054557698, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688110519072407552.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:51:27', '1', '1', '2023-08-06 16:51:27', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688110601553395714, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688110598130843648.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 16:51:46', '1', '1', '2023-08-06 16:51:46', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688133085753352193, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688133081856843776.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 18:21:06', '1', '1', '2023-08-06 18:21:06', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688133343300395010, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688133339932368896.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 18:22:08', '1', '1', '2023-08-06 18:22:08', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688133448241881090, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688133445284896768.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 18:22:33', '1', '1', '2023-08-06 18:22:33', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688133518894931970, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688133515803729920.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 18:22:50', '1', '1', '2023-08-06 18:22:50', NULL, NULL, '0', NULL, 0);
INSERT INTO `sys_file_info` VALUES (1688133688718106626, 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/StableDiffusion/2023-08-06/1688133685488492544.png', NULL, NULL, NULL, NULL, NULL, NULL, '1', 'sd', NULL, 103, '2023-08-06 18:23:30', '1', '1', '2023-08-06 18:23:30', NULL, NULL, '0', NULL, 0);
-- ----------------------------
-- Table structure for sys_logininfor
@@ -972,134 +1119,28 @@
INSERT INTO `sys_menu` VALUES (1615, '租户套餐导出', 122, 5, '#', '', '', 1, 0, 'F', '0', '0', 'system:tenantPackage:export', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
-- ----------------------------
-- Table structure for sys_menu_copy1
-- Table structure for sys_model
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu_copy1`;
CREATE TABLE `sys_menu_copy1`  (
  `menu_id` bigint NOT NULL COMMENT '菜单ID',
  `menu_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称',
  `parent_id` bigint NULL DEFAULT 0 COMMENT '父菜单ID',
  `order_num` int NULL DEFAULT 0 COMMENT '显示顺序',
  `path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '路由地址',
  `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件路径',
  `query_param` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路由参数',
  `is_frame` int NULL DEFAULT 1 COMMENT '是否为外链(0是 1否)',
  `is_cache` int NULL DEFAULT 0 COMMENT '是否缓存(0缓存 1不缓存)',
  `menu_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)',
  `visible` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '显示状态(0显示 1隐藏)',
  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态(0正常 1停用)',
  `perms` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限标识',
  `icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '#' COMMENT '菜单图标',
  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
  PRIMARY KEY (`menu_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS `sys_model`;
CREATE TABLE `sys_model`  (
  `id` int NOT NULL,
  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模型名称',
  `describe` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述',
  `local` bit(1) NULL DEFAULT b'0' COMMENT '是否本地模型',
  `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像',
  `free` bit(1) NULL DEFAULT b'0' COMMENT '是否免费',
  `std_rate` decimal(10, 8) NULL DEFAULT NULL COMMENT '标准token比',
  `role_text` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '角色设定',
  `temperature` decimal(10, 2) NULL DEFAULT NULL COMMENT '模型默认温度',
  `top_p` int NULL DEFAULT NULL COMMENT '默认结果',
  `create_time` datetime NULL DEFAULT NULL,
  `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统模型' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of sys_menu_copy1
-- Records of sys_model
-- ----------------------------
INSERT INTO `sys_menu_copy1` VALUES (1, '系统管理', 0, 1, 'system', NULL, '', 1, 0, 'M', '0', '0', '', 'system', 103, 1, '2023-05-14 15:19:39', NULL, NULL, '系统管理目录');
INSERT INTO `sys_menu_copy1` VALUES (2, '系统监控', 0, 3, 'monitor', NULL, '', 1, 0, 'M', '0', '0', '', 'monitor', 103, 1, '2023-05-14 15:19:39', NULL, NULL, '系统监控目录');
INSERT INTO `sys_menu_copy1` VALUES (3, '系统工具', 0, 4, 'tool', NULL, '', 1, 0, 'M', '0', '0', '', 'tool', 103, 1, '2023-05-14 15:19:39', NULL, NULL, '系统工具目录');
INSERT INTO `sys_menu_copy1` VALUES (4, 'PLUS官网', 0, 5, 'https://gitee.com/dromara/RuoYi-Vue-Plus', NULL, '', 0, 0, 'M', '0', '0', '', 'guide', 103, 1, '2023-05-14 15:19:39', NULL, NULL, 'RuoYi-Vue-Plus官网地址');
INSERT INTO `sys_menu_copy1` VALUES (6, '租户管理', 0, 2, 'tenant', NULL, '', 1, 0, 'M', '0', '0', '', 'chart', 103, 1, '2023-05-14 15:19:39', NULL, NULL, '租户管理目录');
INSERT INTO `sys_menu_copy1` VALUES (100, '用户管理', 1, 1, 'user', 'system/user/index', '', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 103, 1, '2023-05-14 15:19:39', NULL, NULL, '用户管理菜单');
INSERT INTO `sys_menu_copy1` VALUES (101, '角色管理', 1, 2, 'role', 'system/role/index', '', 1, 0, 'C', '0', '0', 'system:role:list', 'peoples', 103, 1, '2023-05-14 15:19:39', NULL, NULL, '角色管理菜单');
INSERT INTO `sys_menu_copy1` VALUES (102, '菜单管理', 1, 3, 'menu', 'system/menu/index', '', 1, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', 103, 1, '2023-05-14 15:19:39', NULL, NULL, '菜单管理菜单');
INSERT INTO `sys_menu_copy1` VALUES (103, '部门管理', 1, 4, 'dept', 'system/dept/index', '', 1, 0, 'C', '0', '0', 'system:dept:list', 'tree', 103, 1, '2023-05-14 15:19:39', NULL, NULL, '部门管理菜单');
INSERT INTO `sys_menu_copy1` VALUES (104, '岗位管理', 1, 5, 'post', 'system/post/index', '', 1, 0, 'C', '0', '0', 'system:post:list', 'post', 103, 1, '2023-05-14 15:19:39', NULL, NULL, '岗位管理菜单');
INSERT INTO `sys_menu_copy1` VALUES (105, '字典管理', 1, 6, 'dict', 'system/dict/index', '', 1, 0, 'C', '0', '0', 'system:dict:list', 'dict', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '字典管理菜单');
INSERT INTO `sys_menu_copy1` VALUES (106, '参数设置', 1, 7, 'config', 'system/config/index', '', 1, 0, 'C', '0', '0', 'system:config:list', 'edit', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '参数设置菜单');
INSERT INTO `sys_menu_copy1` VALUES (107, '通知公告', 1, 8, 'notice', 'system/notice/index', '', 1, 0, 'C', '0', '0', 'system:notice:list', 'message', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '通知公告菜单');
INSERT INTO `sys_menu_copy1` VALUES (108, '日志管理', 1, 9, 'log', '', '', 1, 0, 'M', '0', '0', '', 'log', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '日志管理菜单');
INSERT INTO `sys_menu_copy1` VALUES (109, '在线用户', 2, 1, 'online', 'monitor/online/index', '', 1, 0, 'C', '0', '0', 'monitor:online:list', 'online', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '在线用户菜单');
INSERT INTO `sys_menu_copy1` VALUES (113, '缓存监控', 2, 5, 'cache', 'monitor/cache/index', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '缓存监控菜单');
INSERT INTO `sys_menu_copy1` VALUES (114, '表单构建', 3, 1, 'build', 'tool/build/index', '', 1, 0, 'C', '0', '0', 'tool:build:list', 'build', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '表单构建菜单');
INSERT INTO `sys_menu_copy1` VALUES (115, '代码生成', 3, 2, 'gen', 'tool/gen/index', '', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '代码生成菜单');
INSERT INTO `sys_menu_copy1` VALUES (118, '文件管理', 1, 10, 'oss', 'system/oss/index', '', 1, 0, 'C', '0', '0', 'system:oss:list', 'upload', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '文件管理菜单');
INSERT INTO `sys_menu_copy1` VALUES (121, '租户管理', 6, 1, 'tenant', 'system/tenant/index', '', 1, 0, 'C', '0', '0', 'system:tenant:list', 'list', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '租户管理菜单');
INSERT INTO `sys_menu_copy1` VALUES (122, '租户套餐管理', 6, 2, 'tenantPackage', 'system/tenantPackage/index', '', 1, 0, 'C', '0', '0', 'system:tenantPackage:list', 'form', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '租户套餐管理菜单');
INSERT INTO `sys_menu_copy1` VALUES (500, '操作日志', 108, 1, 'operlog', 'monitor/operlog/index', '', 1, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '操作日志菜单');
INSERT INTO `sys_menu_copy1` VALUES (501, '登录日志', 108, 2, 'logininfor', 'monitor/logininfor/index', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '登录日志菜单');
INSERT INTO `sys_menu_copy1` VALUES (1001, '用户查询', 100, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:user:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1002, '用户新增', 100, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:user:add', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1003, '用户修改', 100, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1004, '用户删除', 100, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1005, '用户导出', 100, 5, '', '', '', 1, 0, 'F', '0', '0', 'system:user:export', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1006, '用户导入', 100, 6, '', '', '', 1, 0, 'F', '0', '0', 'system:user:import', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1007, '重置密码', 100, 7, '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1008, '角色查询', 101, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:role:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1009, '角色新增', 101, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:role:add', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1010, '角色修改', 101, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1011, '角色删除', 101, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1012, '角色导出', 101, 5, '', '', '', 1, 0, 'F', '0', '0', 'system:role:export', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1013, '菜单查询', 102, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1014, '菜单新增', 102, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1015, '菜单修改', 102, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1016, '菜单删除', 102, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1017, '部门查询', 103, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1018, '部门新增', 103, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1019, '部门修改', 103, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1020, '部门删除', 103, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1021, '岗位查询', 104, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:post:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1022, '岗位新增', 104, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:post:add', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1023, '岗位修改', 104, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1024, '岗位删除', 104, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1025, '岗位导出', 104, 5, '', '', '', 1, 0, 'F', '0', '0', 'system:post:export', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1026, '字典查询', 105, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1027, '字典新增', 105, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:add', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1028, '字典修改', 105, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1029, '字典删除', 105, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1030, '字典导出', 105, 5, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:export', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1031, '参数查询', 106, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1032, '参数新增', 106, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:add', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1033, '参数修改', 106, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:edit', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1034, '参数删除', 106, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1035, '参数导出', 106, 5, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:export', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1036, '公告查询', 107, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1037, '公告新增', 107, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:add', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1038, '公告修改', 107, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1039, '公告删除', 107, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1040, '操作查询', 500, 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1041, '操作删除', 500, 2, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1042, '日志导出', 500, 4, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1043, '登录查询', 501, 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1044, '登录删除', 501, 2, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1045, '日志导出', 501, 3, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1046, '在线查询', 109, 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1047, '批量强退', 109, 2, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1048, '单条强退', 109, 3, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1050, '账户解锁', 501, 4, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:unlock', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1055, '生成查询', 115, 1, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1056, '生成修改', 115, 2, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1057, '生成删除', 115, 3, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1058, '导入代码', 115, 2, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1059, '预览代码', 115, 4, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1060, '生成代码', 115, 5, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1600, '文件查询', 118, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1601, '文件上传', 118, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:upload', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1602, '文件下载', 118, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:download', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1603, '文件删除', 118, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1604, '配置添加', 118, 5, '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:add', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1605, '配置编辑', 118, 6, '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:edit', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1606, '租户查询', 121, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:tenant:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1607, '租户新增', 121, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:tenant:add', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1608, '租户修改', 121, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:tenant:edit', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1609, '租户删除', 121, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:tenant:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1610, '租户导出', 121, 5, '#', '', '', 1, 0, 'F', '0', '0', 'system:tenant:export', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1611, '租户套餐查询', 122, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:tenantPackage:query', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1612, '租户套餐新增', 122, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:tenantPackage:add', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1613, '租户套餐修改', 122, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:tenantPackage:edit', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1614, '租户套餐删除', 122, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:tenantPackage:remove', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1615, '租户套餐导出', 122, 5, '#', '', '', 1, 0, 'F', '0', '0', 'system:tenantPackage:export', '#', 103, 1, '2023-05-14 15:19:40', NULL, NULL, '');
INSERT INTO `sys_menu_copy1` VALUES (1689201668374556674, 'MJ服务器', 1689205943360188417, 1, 'mjserver', 'midjourney/mjserver/index', NULL, 1, 0, 'C', '0', '0', 'midjourney:mjserver:list', 'cascader', 103, 1, '2023-08-09 17:30:43', 1, '2023-08-09 17:41:50', 'MJ服务器信息配置菜单');
INSERT INTO `sys_menu_copy1` VALUES (1689205943360188417, 'Midjourney', 0, 1, 'Midjourney', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'documentation', 103, 1, '2023-08-09 17:24:15', 1, '2023-08-09 17:24:15', '');
INSERT INTO `sys_menu_copy1` VALUES (1689243465037561858, '创作记录', 1689205943360188417, 1, 'mjRoomMsg', 'midjourney/mjRoomMsg/index', NULL, 1, 0, 'C', '0', '0', 'midjourney:mjRoomMsg:list', 'documentation', 103, 1, '2023-08-09 20:10:20', 1, '2023-08-09 20:11:51', 'Midjourney åˆ›ä½œè®°å½•菜单');
INSERT INTO `sys_menu_copy1` VALUES (1689243466220355585, 'MJ创作会话', 1689205943360188417, 1, 'mjroom', 'midjourney/mjroom/index', NULL, 1, 0, 'C', '0', '0', 'midjourney:mjroom:list', 'example', 103, 1, '2023-08-09 20:10:04', 1, '2023-08-09 20:12:41', 'MJ创作会话菜单');
-- ----------------------------
-- Table structure for sys_notice
@@ -1183,163 +1224,6 @@
-- ----------------------------
-- Records of sys_oss
-- ----------------------------
INSERT INTO `sys_oss` VALUES (1724093904361992194, '000000', '2023/11/13/e561a6c853c744a1963451063544b906.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/2023/11/13/e561a6c853c744a1963451063544b906.png', NULL, '2023-11-13 23:56:34', NULL, '2023-11-13 23:56:34', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724094429279137794, '000000', 'panda/2023/11/13/9045cff5d239475a8a33ab479801e9ca.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/13/9045cff5d239475a8a33ab479801e9ca.png', NULL, '2023-11-13 23:58:39', NULL, '2023-11-13 23:58:39', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724094894767144962, '000000', 'panda/2023/11/14/78bb8d6c5e0344bc8b422f8efe49b831.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/78bb8d6c5e0344bc8b422f8efe49b831.png', NULL, '2023-11-14 00:00:30', NULL, '2023-11-14 00:00:30', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724096506927583233, '000000', 'panda/2023/11/14/2ae75741f38746738a8387f2a6a52d38.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/2ae75741f38746738a8387f2a6a52d38.png', NULL, '2023-11-14 00:06:54', NULL, '2023-11-14 00:06:54', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724096774511595522, '000000', 'panda/2023/11/14/a684da9e0afc4d77a7d605594488c4e5.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/a684da9e0afc4d77a7d605594488c4e5.png', NULL, '2023-11-14 00:07:58', NULL, '2023-11-14 00:07:58', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724096873618804738, '000000', 'panda/2023/11/14/b77d26c97b424fd280c0a97cd573d52b.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/b77d26c97b424fd280c0a97cd573d52b.png', NULL, '2023-11-14 00:08:22', NULL, '2023-11-14 00:08:22', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724097020008402945, '000000', 'panda/2023/11/14/0299ff8929414f72ab8e2842506f46cb.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/0299ff8929414f72ab8e2842506f46cb.png', NULL, '2023-11-14 00:08:56', NULL, '2023-11-14 00:08:56', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724097652161318914, '000000', 'panda/2023/11/14/01856e57d24841ccb11a5394f0891697.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/01856e57d24841ccb11a5394f0891697.png', NULL, '2023-11-14 00:11:27', NULL, '2023-11-14 00:11:27', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724097778443423746, '000000', 'panda/2023/11/14/809300ca47e74931a6497b5c7c16cfa2.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/809300ca47e74931a6497b5c7c16cfa2.png', NULL, '2023-11-14 00:11:57', NULL, '2023-11-14 00:11:57', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724098776197042178, '000000', 'panda/2023/11/14/10718cd6cf1a428eb0a1f179d107b82c.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/10718cd6cf1a428eb0a1f179d107b82c.png', NULL, '2023-11-14 00:15:55', NULL, '2023-11-14 00:15:55', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724099123200200705, '000000', 'panda/2023/11/14/7768533b1e064c9d8a515a019df64485.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/7768533b1e064c9d8a515a019df64485.png', NULL, '2023-11-14 00:17:18', NULL, '2023-11-14 00:17:18', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724100420401958913, '000000', 'panda/2023/11/14/721015838ec847bfa7c723d93ab5eb3d.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/721015838ec847bfa7c723d93ab5eb3d.png', NULL, '2023-11-14 00:22:27', NULL, '2023-11-14 00:22:27', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724101239675359233, '000000', 'panda/2023/11/14/051b4994f0e24e0eb7b67b7c06ed1acb.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/051b4994f0e24e0eb7b67b7c06ed1acb.png', NULL, '2023-11-14 00:25:42', NULL, '2023-11-14 00:25:42', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724101751804071938, '000000', 'panda/2023/11/14/eac97a424b9e4afca5c7894387fa747e.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/eac97a424b9e4afca5c7894387fa747e.png', NULL, '2023-11-14 00:27:45', NULL, '2023-11-14 00:27:45', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724401488415498242, '000000', 'panda/2023/11/14/6d4cb7814bbf448eb0fc18449d009093.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/6d4cb7814bbf448eb0fc18449d009093.png', NULL, '2023-11-14 20:18:47', NULL, '2023-11-14 20:18:47', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724405287066607617, '000000', 'panda/2023/11/14/eee8205f028548cb895dc0cda171afee.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/eee8205f028548cb895dc0cda171afee.png', NULL, '2023-11-14 20:33:53', NULL, '2023-11-14 20:33:53', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724405540805222401, '000000', 'panda/2023/11/14/5a7b7c2871ac49bea266454f0d5b6ddc.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/5a7b7c2871ac49bea266454f0d5b6ddc.png', NULL, '2023-11-14 20:34:53', NULL, '2023-11-14 20:34:53', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724406694637281281, '000000', 'panda/2023/11/14/fcb8866034a24968bd2e3014c1ddba35.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/fcb8866034a24968bd2e3014c1ddba35.png', NULL, '2023-11-14 20:39:29', NULL, '2023-11-14 20:39:29', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724406885754937346, '000000', 'panda/2023/11/14/144295909be740139f00c78a72b3defe.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/144295909be740139f00c78a72b3defe.png', NULL, '2023-11-14 20:40:14', NULL, '2023-11-14 20:40:14', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724407020853469185, '000000', 'panda/2023/11/14/521e85dfbf774fa982324b82a0f88024.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/521e85dfbf774fa982324b82a0f88024.png', NULL, '2023-11-14 20:40:46', NULL, '2023-11-14 20:40:46', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724433064465604610, '000000', 'panda/2023/11/14/115f5d28e1224c82b27a8572fc76acbb.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/115f5d28e1224c82b27a8572fc76acbb.png', NULL, '2023-11-14 22:24:16', NULL, '2023-11-14 22:24:16', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724433914823032834, '000000', 'panda/2023/11/14/42815f5c2714433ab6826d7a33764e9b.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/42815f5c2714433ab6826d7a33764e9b.png', NULL, '2023-11-14 22:27:38', NULL, '2023-11-14 22:27:38', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724434495671193602, '000000', 'panda/2023/11/14/28f83274714f43fcaec23e04d386f94e.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/28f83274714f43fcaec23e04d386f94e.png', NULL, '2023-11-14 22:29:57', NULL, '2023-11-14 22:29:57', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724437756327305218, '000000', 'panda/2023/11/14/156fc5a9dd4f4ea3b9adfe29b364b4a3.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/156fc5a9dd4f4ea3b9adfe29b364b4a3.png', NULL, '2023-11-14 22:42:54', NULL, '2023-11-14 22:42:54', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724438370654429186, '000000', 'panda/2023/11/14/eaa08c2d5ad64b84bba08717eedaf929.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/eaa08c2d5ad64b84bba08717eedaf929.png', NULL, '2023-11-14 22:45:21', NULL, '2023-11-14 22:45:21', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724439770461446145, '000000', 'panda/2023/11/14/6f9a7f3a95824ed28214c3884a1bdb79.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/6f9a7f3a95824ed28214c3884a1bdb79.png', NULL, '2023-11-14 22:50:54', NULL, '2023-11-14 22:50:54', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724442703806668801, '000000', 'panda/2023/11/14/333b7056786f46c9b5eb53587e63f579.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/14/333b7056786f46c9b5eb53587e63f579.png', NULL, '2023-11-14 23:02:34', NULL, '2023-11-14 23:02:34', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724765725893611522, '000000', 'panda/2023/11/15/f9c2956e55e74bf0ac03683b688d5754.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/f9c2956e55e74bf0ac03683b688d5754.png', NULL, '2023-11-15 20:26:08', NULL, '2023-11-15 20:26:08', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724766090277965826, '000000', 'panda/2023/11/15/cb383b7672fd4e32b7f719b19ca7f5a4.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/cb383b7672fd4e32b7f719b19ca7f5a4.png', NULL, '2023-11-15 20:27:35', NULL, '2023-11-15 20:27:35', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724766602800922625, '000000', 'panda/2023/11/15/8d43969f4cdc4f8992f4058e427a8a44.png', '私有知识库业务架构图.drawio.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/8d43969f4cdc4f8992f4058e427a8a44.png', NULL, '2023-11-15 20:29:37', NULL, '2023-11-15 20:29:37', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724767373487505410, '000000', 'panda/2023/11/15/99ef8cb376d44ecf8271bb1cb2c57ab2.png', '私有知识库业务架构图.drawio.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/99ef8cb376d44ecf8271bb1cb2c57ab2.png', NULL, '2023-11-15 20:32:41', NULL, '2023-11-15 20:32:41', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724767516244836354, '000000', 'panda/2023/11/15/aef8264fc6404972a3a52076bc011d53.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/aef8264fc6404972a3a52076bc011d53.png', NULL, '2023-11-15 20:33:15', NULL, '2023-11-15 20:33:15', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724767702018949121, '000000', 'panda/2023/11/15/5f800b9dac3146169492e199f5310396.png', '私有知识库业务架构图.drawio.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/5f800b9dac3146169492e199f5310396.png', NULL, '2023-11-15 20:33:59', NULL, '2023-11-15 20:33:59', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724768592499048449, '000000', 'panda/2023/11/15/70d04883055a46ce81849304aa51a6f7.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/70d04883055a46ce81849304aa51a6f7.png', NULL, '2023-11-15 20:37:32', NULL, '2023-11-15 20:37:32', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724768986373554178, '000000', 'panda/2023/11/15/a6595c4dc5374352b825e933ffc7c229.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/a6595c4dc5374352b825e933ffc7c229.png', NULL, '2023-11-15 20:39:06', NULL, '2023-11-15 20:39:06', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724769126123569154, '000000', 'panda/2023/11/15/7b9b652cdbd8458aaab24929226ed0a8.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/7b9b652cdbd8458aaab24929226ed0a8.png', NULL, '2023-11-15 20:39:39', NULL, '2023-11-15 20:39:39', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724769445880528898, '000000', 'panda/2023/11/15/e0f7187f7ad2414190d8722e9b2070b8.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/e0f7187f7ad2414190d8722e9b2070b8.png', NULL, '2023-11-15 20:40:55', NULL, '2023-11-15 20:40:55', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724769768900657153, '000000', 'panda/2023/11/15/0c3cd50edd584d8bba214e26f0f034e2.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/0c3cd50edd584d8bba214e26f0f034e2.png', NULL, '2023-11-15 20:42:12', NULL, '2023-11-15 20:42:12', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724770054327238658, '000000', 'panda/2023/11/15/c012bfafc4b3433aadbe2ab51ed51826.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/c012bfafc4b3433aadbe2ab51ed51826.png', NULL, '2023-11-15 20:43:20', NULL, '2023-11-15 20:43:20', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724778597159854082, '000000', 'panda/2023/11/15/b34ab6fabd7f4cb895c53a562f54b667.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/b34ab6fabd7f4cb895c53a562f54b667.png', NULL, '2023-11-15 21:17:17', NULL, '2023-11-15 21:17:17', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724779240129880065, '000000', 'panda/2023/11/15/1d94798cb4604f2da5635e59a7d4c7a9.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/1d94798cb4604f2da5635e59a7d4c7a9.png', NULL, '2023-11-15 21:19:50', NULL, '2023-11-15 21:19:50', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724779383239532546, '000000', 'panda/2023/11/15/9530efe60c79407e9b285b3ae4c7f4b5.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/9530efe60c79407e9b285b3ae4c7f4b5.png', NULL, '2023-11-15 21:20:24', NULL, '2023-11-15 21:20:24', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724779749196750850, '000000', 'panda/2023/11/15/7f38b8cbef0d4b72b366f934db790cb2.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/7f38b8cbef0d4b72b366f934db790cb2.png', NULL, '2023-11-15 21:21:52', NULL, '2023-11-15 21:21:52', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724780087119241217, '000000', 'panda/2023/11/15/a391cf2a8fa649918785c0ebda8fffe8.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/a391cf2a8fa649918785c0ebda8fffe8.png', NULL, '2023-11-15 21:23:12', NULL, '2023-11-15 21:23:12', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724780197819506689, '000000', 'panda/2023/11/15/2bac630ba299447d9f5b5f389d29910f.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/2bac630ba299447d9f5b5f389d29910f.png', NULL, '2023-11-15 21:23:39', NULL, '2023-11-15 21:23:39', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724780567291551746, '000000', 'panda/2023/11/15/db5bb09cf6594ce997dd7948bb692c4a.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/db5bb09cf6594ce997dd7948bb692c4a.png', NULL, '2023-11-15 21:25:07', NULL, '2023-11-15 21:25:07', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724780734052884482, '000000', 'panda/2023/11/15/d000a64b62924e6e8c9fb1d38d251ba3.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/d000a64b62924e6e8c9fb1d38d251ba3.png', NULL, '2023-11-15 21:25:47', NULL, '2023-11-15 21:25:47', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724780853112397825, '000000', 'panda/2023/11/15/e0927eff92364d438f5d2f9f1e326f7a.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/e0927eff92364d438f5d2f9f1e326f7a.png', NULL, '2023-11-15 21:26:15', NULL, '2023-11-15 21:26:15', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724781086638661633, '000000', 'panda/2023/11/15/59a1adadaf45407e8c2b7ecdd6aed234.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/59a1adadaf45407e8c2b7ecdd6aed234.png', NULL, '2023-11-15 21:27:11', NULL, '2023-11-15 21:27:11', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724781170445049857, '000000', 'panda/2023/11/15/1753a19e6f3949ea8d898d250d814b2a.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/1753a19e6f3949ea8d898d250d814b2a.png', NULL, '2023-11-15 21:27:31', NULL, '2023-11-15 21:27:31', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724781331867033602, '000000', 'panda/2023/11/15/892b31f1fd644cc181503a82eaa91b56.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/892b31f1fd644cc181503a82eaa91b56.png', NULL, '2023-11-15 21:28:09', NULL, '2023-11-15 21:28:09', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724781489526726657, '000000', 'panda/2023/11/15/ba7c50a4bd8e4f218f8f4ec2f972e3bf.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/ba7c50a4bd8e4f218f8f4ec2f972e3bf.png', NULL, '2023-11-15 21:28:47', NULL, '2023-11-15 21:28:47', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724783215763841025, '000000', 'panda/2023/11/15/6299ff42e7ba4be08ddf8eb52b190aa9.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/6299ff42e7ba4be08ddf8eb52b190aa9.png', NULL, '2023-11-15 21:35:38', NULL, '2023-11-15 21:35:38', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724784653952933890, '000000', 'panda/2023/11/15/8aa89605883f486d82152cac156c67ba.png', '私有知识库业务架构图.drawio.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/8aa89605883f486d82152cac156c67ba.png', NULL, '2023-11-15 21:41:21', NULL, '2023-11-15 21:41:21', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724785428187897858, '000000', 'panda/2023/11/15/7cce512cce0b4694a2f2868f83885492.png', '私有知识库业务架构图.drawio.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/7cce512cce0b4694a2f2868f83885492.png', NULL, '2023-11-15 21:44:26', NULL, '2023-11-15 21:44:26', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724785906720235522, '000000', 'panda/2023/11/15/404adf4487ff47a7bf486bede0adb445.png', '私有知识库业务架构图.drawio.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/404adf4487ff47a7bf486bede0adb445.png', NULL, '2023-11-15 21:46:20', NULL, '2023-11-15 21:46:20', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724786545873444865, '000000', 'panda/2023/11/15/6f1bd7a432d6471489fa02b794154245.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/6f1bd7a432d6471489fa02b794154245.png', NULL, '2023-11-15 21:48:52', NULL, '2023-11-15 21:48:52', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724787008983326721, '000000', 'panda/2023/11/15/b8b0b5c46e0a42baa17b855b5125e709.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/b8b0b5c46e0a42baa17b855b5125e709.png', NULL, '2023-11-15 21:50:43', NULL, '2023-11-15 21:50:43', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724787081741918210, '000000', 'panda/2023/11/15/4e01e0df4e55433bbf11b73f7f170fdc.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/4e01e0df4e55433bbf11b73f7f170fdc.png', NULL, '2023-11-15 21:51:00', NULL, '2023-11-15 21:51:00', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724787195835375618, '000000', 'panda/2023/11/15/9717d8c966ab469780845c4ab22e9056.png', '私有知识库业务架构图.drawio.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/9717d8c966ab469780845c4ab22e9056.png', NULL, '2023-11-15 21:51:27', NULL, '2023-11-15 21:51:27', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724787290500816897, '000000', 'panda/2023/11/15/0bfa1344b01346a09910574162d743cf.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/0bfa1344b01346a09910574162d743cf.png', NULL, '2023-11-15 21:51:50', NULL, '2023-11-15 21:51:50', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724787396339884033, '000000', 'panda/2023/11/15/8624513df5834cbc87e690856ba02f18.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/8624513df5834cbc87e690856ba02f18.png', NULL, '2023-11-15 21:52:15', NULL, '2023-11-15 21:52:15', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724787589063958530, '000000', 'panda/2023/11/15/a85bc6d9df7145e7bfc2b5b295c7f92c.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/a85bc6d9df7145e7bfc2b5b295c7f92c.png', NULL, '2023-11-15 21:53:01', NULL, '2023-11-15 21:53:01', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724787711298560002, '000000', 'panda/2023/11/15/1c7145c5872b4bd494006acb9fb88573.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/1c7145c5872b4bd494006acb9fb88573.png', NULL, '2023-11-15 21:53:30', NULL, '2023-11-15 21:53:30', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724787763475701762, '000000', 'panda/2023/11/15/a55b72158eed48a6be736147c55bd0e4.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/a55b72158eed48a6be736147c55bd0e4.png', NULL, '2023-11-15 21:53:42', NULL, '2023-11-15 21:53:42', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724787893566234625, '000000', 'panda/2023/11/15/ebf7e48e1cf44fe08b6e4065fd67f478.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/ebf7e48e1cf44fe08b6e4065fd67f478.png', NULL, '2023-11-15 21:54:14', NULL, '2023-11-15 21:54:14', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724787927120666625, '000000', 'panda/2023/11/15/d728ca4da45f4ee3a1b850f3cdc959aa.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/d728ca4da45f4ee3a1b850f3cdc959aa.png', NULL, '2023-11-15 21:54:22', NULL, '2023-11-15 21:54:22', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724800813741961217, '000000', 'panda/2023/11/15/3d8104064d4b48d1b8fb0e2c0f9b6566.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/3d8104064d4b48d1b8fb0e2c0f9b6566.png', NULL, '2023-11-15 22:45:34', NULL, '2023-11-15 22:45:34', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724801133461172225, '000000', 'panda/2023/11/15/b82063694a48471db67f81ac2ad6ab90.png', 'car.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/b82063694a48471db67f81ac2ad6ab90.png', NULL, '2023-11-15 22:46:50', NULL, '2023-11-15 22:46:50', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724802328179306497, '000000', 'panda/2023/11/15/963a68501d714b1498573ca0e4d10ec3.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/15/963a68501d714b1498573ca0e4d10ec3.png', NULL, '2023-11-15 22:51:35', NULL, '2023-11-15 22:51:35', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724828266845761538, '000000', 'panda/2023/11/16/02bf7cf43551435db8dff93eb6d2c6a4.png', 'IMG_1699544354421.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/16/02bf7cf43551435db8dff93eb6d2c6a4.png', NULL, '2023-11-16 00:34:39', NULL, '2023-11-16 00:34:39', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724828390909079554, '000000', 'panda/2023/11/16/14f0015b41544ec482e0e53a5544d4f7.png', 'IMG_1699544354421.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/16/14f0015b41544ec482e0e53a5544d4f7.png', NULL, '2023-11-16 00:35:09', NULL, '2023-11-16 00:35:09', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724828548040290306, '000000', 'panda/2023/11/16/b4d13b6b3b3c49f28318d772036186df.png', 'IMG_1699544354421.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/16/b4d13b6b3b3c49f28318d772036186df.png', NULL, '2023-11-16 00:35:46', NULL, '2023-11-16 00:35:46', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724951618247782402, '000000', 'panda/2023/11/16/ae1e046de273436387864dbf16b395a1.png', '5fb9f9064adadc3a012626892ea10ed.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/16/ae1e046de273436387864dbf16b395a1.png', NULL, '2023-11-16 08:44:48', NULL, '2023-11-16 08:44:48', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724951857486688258, '000000', 'panda/2023/11/16/fc2576bd00774ca8851ea092f2e99dd0.png', '97d7354f2da41efb9816ec674e373da.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/16/fc2576bd00774ca8851ea092f2e99dd0.png', NULL, '2023-11-16 08:45:46', NULL, '2023-11-16 08:45:46', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1724996532088098818, '000000', 'panda/2023/11/16/2292c6e254bf40a2bd3ca202c5df1d75.png', '5-6-40-c.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/16/2292c6e254bf40a2bd3ca202c5df1d75.png', NULL, '2023-11-16 11:43:17', NULL, '2023-11-16 11:43:17', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1725132601643257857, '000000', 'panda/2023/11/16/a0b923c964814893a4458f91b6c830af.png', 'IMG_1332.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/16/a0b923c964814893a4458f91b6c830af.png', NULL, '2023-11-16 20:43:58', NULL, '2023-11-16 20:43:58', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1725433928357269506, '000000', 'panda/2023/11/17/c772ceaebf834c18874efc4bff0aa3f3.png', '丁修加钱.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/17/c772ceaebf834c18874efc4bff0aa3f3.png', NULL, '2023-11-17 16:41:20', NULL, '2023-11-17 16:41:20', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1725691686469931009, '000000', 'panda/2023/11/18/f4e4520cd2c749c09ae6b00938b81637.png', '5fb9f9064adadc3a012626892ea10ed.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/18/f4e4520cd2c749c09ae6b00938b81637.png', NULL, '2023-11-18 09:45:35', NULL, '2023-11-18 09:45:35', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1725691813939023874, '000000', 'panda/2023/11/18/8dd4b56f93a84f10ae13b8464203c05f.png', '5fb9f9064adadc3a012626892ea10ed.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/18/8dd4b56f93a84f10ae13b8464203c05f.png', NULL, '2023-11-18 09:46:05', NULL, '2023-11-18 09:46:05', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1725691969296044033, '000000', 'panda/2023/11/18/f63907009334477fb8f1d4fc98ceb1b8.png', '5fb9f9064adadc3a012626892ea10ed.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/18/f63907009334477fb8f1d4fc98ceb1b8.png', NULL, '2023-11-18 09:46:42', NULL, '2023-11-18 09:46:42', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1725781563089813505, '000000', 'panda/2023/11/18/22480c231c17466eb9b67ce85cee40e2.png', '5fb9f9064adadc3a012626892ea10ed.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/18/22480c231c17466eb9b67ce85cee40e2.png', NULL, '2023-11-18 15:42:43', NULL, '2023-11-18 15:42:43', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1725781986756427778, '000000', 'panda/2023/11/18/bd12eff2f1e444cf921184bf2a0ecf47.png', '5fb9f9064adadc3a012626892ea10ed.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/18/bd12eff2f1e444cf921184bf2a0ecf47.png', NULL, '2023-11-18 15:44:24', NULL, '2023-11-18 15:44:24', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1725782262561275906, '000000', 'panda/2023/11/18/6b269086b6c34aafbcecd53158171e73.png', 'cxlogo.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/18/6b269086b6c34aafbcecd53158171e73.png', NULL, '2023-11-18 15:45:30', NULL, '2023-11-18 15:45:30', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1725783179062837250, '000000', 'panda/2023/11/18/43b42971403a4369853ab70d2b5de87a.png', 'cxlogo.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/18/43b42971403a4369853ab70d2b5de87a.png', NULL, '2023-11-18 15:49:08', NULL, '2023-11-18 15:49:08', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1725787886057684993, '000000', 'panda/2023/11/18/f9cdc4ab356f40a78b58cafcceff0ad3.png', '2 - å‰¯æœ¬.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/18/f9cdc4ab356f40a78b58cafcceff0ad3.png', NULL, '2023-11-18 16:07:50', NULL, '2023-11-18 16:07:50', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1725810738244878338, '000000', 'panda/2023/11/18/fbc1689264fb40f3a6741d9a8630497c.png', '01.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/18/fbc1689264fb40f3a6741d9a8630497c.png', NULL, '2023-11-18 17:38:39', NULL, '2023-11-18 17:38:39', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1725811449238126593, '000000', 'panda/2023/11/18/226bd230bde545a1944a9d9fb60928bf.png', '01.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/18/226bd230bde545a1944a9d9fb60928bf.png', NULL, '2023-11-18 17:41:28', NULL, '2023-11-18 17:41:28', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1726446207907397634, '000000', 'panda/2023/11/20/b83e2a218e4144a3bbde52fe4e09ab83.png', 'knowledge.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/20/b83e2a218e4144a3bbde52fe4e09ab83.png', NULL, '2023-11-20 11:43:46', NULL, '2023-11-20 11:43:46', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1726446287590785026, '000000', 'panda/2023/11/20/27428b0c89ac431484effbe04e7e0bb3.png', '各项目用例覆盖率和执行率.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/20/27428b0c89ac431484effbe04e7e0bb3.png', NULL, '2023-11-20 11:44:05', NULL, '2023-11-20 11:44:05', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1726508568504696834, '000000', 'panda/2023/11/20/b6c10c8b285f481bb5c88efc4c02fb56.png', 'welt.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/20/b6c10c8b285f481bb5c88efc4c02fb56.png', NULL, '2023-11-20 15:51:34', NULL, '2023-11-20 15:51:34', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1726795990043983873, '000000', 'panda/2023/11/21/9a755fa9b88e4c6d923c8579df762637.png', 'ec29ac14d10ea300952911ebecd02ce2.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/21/9a755fa9b88e4c6d923c8579df762637.png', NULL, '2023-11-21 10:53:41', NULL, '2023-11-21 10:53:41', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1727235517598400513, '000000', 'panda/2023/11/22/330b5c8b8ffb44068dd25fecbd4900b7.png', '微信截图_20231122155953.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/22/330b5c8b8ffb44068dd25fecbd4900b7.png', NULL, '2023-11-22 16:00:13', NULL, '2023-11-22 16:00:13', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1727488896908132354, '000000', 'panda/2023/11/23/07954d978c9c4c558e0b2fd4a7d5a9d8.png', '01asdasd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/23/07954d978c9c4c558e0b2fd4a7d5a9d8.png', NULL, '2023-11-23 08:47:03', NULL, '2023-11-23 08:47:03', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1727586852713791490, '000000', 'panda/2023/11/23/7d6acd12dc2f4735bfaeb8e45f196e32.png', '微信图片_20231123151602.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/23/7d6acd12dc2f4735bfaeb8e45f196e32.png', NULL, '2023-11-23 15:16:17', NULL, '2023-11-23 15:16:17', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1727586918321094657, '000000', 'panda/2023/11/23/f4099c1cd3654851a2edc8c3210c161d.png', '微信图片_20231123151602.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/23/f4099c1cd3654851a2edc8c3210c161d.png', NULL, '2023-11-23 15:16:33', NULL, '2023-11-23 15:16:33', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1727587636234944514, '000000', 'panda/2023/11/23/8e9719ebe5794aeab84488aa0d360ae6.png', '2.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/23/8e9719ebe5794aeab84488aa0d360ae6.png', NULL, '2023-11-23 15:19:24', NULL, '2023-11-23 15:19:24', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1727961424273342466, '000000', 'panda/2023/11/24/c62a8f5413a34ea986a0ea0ba4fc266c.png', '微信图片_20231123143515.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/24/c62a8f5413a34ea986a0ea0ba4fc266c.png', NULL, '2023-11-24 16:04:42', NULL, '2023-11-24 16:04:42', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1727973179221344258, '000000', 'panda/2023/11/24/6b0a354d387543b8a033114a98dc7323.png', '2023-11-24_165112.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/24/6b0a354d387543b8a033114a98dc7323.png', NULL, '2023-11-24 16:51:25', NULL, '2023-11-24 16:51:25', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1727973372570370049, '000000', 'panda/2023/11/24/e371ae8d4f9f42b8a3e6a4d5afe188a3.png', '2023-11-24_165112.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/24/e371ae8d4f9f42b8a3e6a4d5afe188a3.png', NULL, '2023-11-24 16:52:11', NULL, '2023-11-24 16:52:11', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1727979725120602113, '000000', 'panda/2023/11/24/46108eb4766d4e7ab4680edc0d9c0fe5.png', '2023-11-24_171709.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/24/46108eb4766d4e7ab4680edc0d9c0fe5.png', NULL, '2023-11-24 17:17:25', NULL, '2023-11-24 17:17:25', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1727996095774326785, '000000', 'panda/2023/11/24/be344d68bafb44fbaaa81207d2ea2869.png', 'p.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/24/be344d68bafb44fbaaa81207d2ea2869.png', NULL, '2023-11-24 18:22:29', NULL, '2023-11-24 18:22:29', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1727996120692686849, '000000', 'panda/2023/11/24/e33c75f6366e44639ea41602b10432b5.png', 'p.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/24/e33c75f6366e44639ea41602b10432b5.png', NULL, '2023-11-24 18:22:34', NULL, '2023-11-24 18:22:34', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1727996721103110145, '000000', 'panda/2023/11/24/69625eef260846b2893619001ce987ba.png', '1.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/24/69625eef260846b2893619001ce987ba.png', NULL, '2023-11-24 18:24:58', NULL, '2023-11-24 18:24:58', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1728066768941088770, '000000', 'panda/2023/11/24/dc1b0de759c542fb87da0160468f60fe.png', 'Screenshot_2023-11-24-22-50-06-755_com.phone.tenc.t.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/24/dc1b0de759c542fb87da0160468f60fe.png', NULL, '2023-11-24 23:03:18', NULL, '2023-11-24 23:03:18', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1728067360941932546, '000000', 'panda/2023/11/24/b7a5caca31084ae5801c2c357dc27fb5.png', 'Screenshot_2023-11-24-22-50-06-755_com.phone.tenc.t.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/11/24/b7a5caca31084ae5801c2c357dc27fb5.png', NULL, '2023-11-24 23:05:39', NULL, '2023-11-24 23:05:39', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1731199309428940802, '000000', 'panda/2023/12/03/806d33f647b14b4cb900341c40fdf02c.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/03/806d33f647b14b4cb900341c40fdf02c.png', NULL, '2023-12-03 14:30:54', NULL, '2023-12-03 14:30:54', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1731292337262895105, '000000', 'panda/2023/12/03/6e0147ed31bf4158b4caefb9421b6e3b.png', '屏幕截图 2023-11-22 223300.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/03/6e0147ed31bf4158b4caefb9421b6e3b.png', NULL, '2023-12-03 20:40:34', NULL, '2023-12-03 20:40:34', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1731292573242826753, '000000', 'panda/2023/12/03/91791610e7ec4c4297791f9ff33230fb.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/03/91791610e7ec4c4297791f9ff33230fb.png', NULL, '2023-12-03 20:41:30', NULL, '2023-12-03 20:41:30', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1731294145418993665, '000000', 'panda/2023/12/03/34441c45c25e4e2385da49c9635287ad.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/03/34441c45c25e4e2385da49c9635287ad.png', NULL, '2023-12-03 20:47:45', NULL, '2023-12-03 20:47:45', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1731294320925450241, '000000', 'panda/2023/12/03/38a5a060e8c74b94a239394e8ba2a14c.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/03/38a5a060e8c74b94a239394e8ba2a14c.png', NULL, '2023-12-03 20:48:27', NULL, '2023-12-03 20:48:27', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1731294871528513538, '000000', 'panda/2023/12/03/0e6cf9193db542ef87689b8c2e340a00.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/03/0e6cf9193db542ef87689b8c2e340a00.png', NULL, '2023-12-03 20:50:38', NULL, '2023-12-03 20:50:38', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1731295198453538817, '000000', 'panda/2023/12/03/ff4c2db9d18d4c2da398522a9cd7e44c.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/03/ff4c2db9d18d4c2da398522a9cd7e44c.png', NULL, '2023-12-03 20:51:56', NULL, '2023-12-03 20:51:56', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1731295666185543681, '000000', 'panda/2023/12/03/bafef9c90033450eadea5f5f78bc3111.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/03/bafef9c90033450eadea5f5f78bc3111.png', NULL, '2023-12-03 20:53:47', NULL, '2023-12-03 20:53:47', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1731295938131632130, '000000', 'panda/2023/12/03/16db4a9fb0924f5084fe73d4c967984f.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/03/16db4a9fb0924f5084fe73d4c967984f.png', NULL, '2023-12-03 20:54:52', NULL, '2023-12-03 20:54:52', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1731304487146557441, '000000', 'panda/2023/12/03/0618d3bb9ed3435bb864fb2efc2a4b28.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/03/0618d3bb9ed3435bb864fb2efc2a4b28.png', NULL, '2023-12-03 21:28:50', NULL, '2023-12-03 21:28:50', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1731358847409881089, '000000', 'panda/2023/12/04/963b258630724287b6b802d456bae5c9.png', '26440005_0_final.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/04/963b258630724287b6b802d456bae5c9.png', NULL, '2023-12-04 01:04:51', NULL, '2023-12-04 01:04:51', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1731529436212789249, '000000', 'panda/2023/12/04/c878925646224871866018c746364cdf.png', 'Screenshot_20231130_234800.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/04/c878925646224871866018c746364cdf.png', NULL, '2023-12-04 12:22:43', NULL, '2023-12-04 12:22:43', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1733021108662730753, '000000', 'panda/2023/12/08/63c681674ec146c9ab1fd9ed79ae22a2.png', '1.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/08/63c681674ec146c9ab1fd9ed79ae22a2.png', NULL, '2023-12-08 15:10:05', NULL, '2023-12-08 15:10:05', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1733022568297299969, '000000', 'panda/2023/12/08/cdbbdd6d055140ee8df54a608818932d.png', '1.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/08/cdbbdd6d055140ee8df54a608818932d.png', NULL, '2023-12-08 15:15:53', NULL, '2023-12-08 15:15:53', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1734834493800914945, '000000', 'panda/2023/12/13/3243b4994d914349924116d4e06b502e.png', '1881702451694_.pic.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/13/3243b4994d914349924116d4e06b502e.png', NULL, '2023-12-13 15:15:50', NULL, '2023-12-13 15:15:50', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1738112593976434690, '000000', 'panda/2023/12/22/ec9da3d18d1847b3a66a620075cd0843.png', '1737686178787409921_32.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/22/ec9da3d18d1847b3a66a620075cd0843.png', NULL, '2023-12-22 16:21:50', NULL, '2023-12-22 16:21:50', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1738112916665212929, '000000', 'panda/2023/12/22/63a19b2432ad46239e4ae7ac43c76b13.png', '1737686178787409921_32.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/22/63a19b2432ad46239e4ae7ac43c76b13.png', NULL, '2023-12-22 16:23:07', NULL, '2023-12-22 16:23:07', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1738112995123863554, '000000', 'panda/2023/12/22/83f563f665c94e47bff9f639c10e8e08.png', '1737686178787409921_32.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/22/83f563f665c94e47bff9f639c10e8e08.png', NULL, '2023-12-22 16:23:25', NULL, '2023-12-22 16:23:25', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1738114003216441345, '000000', 'panda/2023/12/22/7b2530f5d10549c19adefc4f4b968e85.png', 'test.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/22/7b2530f5d10549c19adefc4f4b968e85.png', NULL, '2023-12-22 16:27:26', NULL, '2023-12-22 16:27:26', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1738115155366584322, '000000', 'panda/2023/12/22/7fb08f8de97046928d1188f6c4cb1a85.png', 'test.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/22/7fb08f8de97046928d1188f6c4cb1a85.png', NULL, '2023-12-22 16:32:00', NULL, '2023-12-22 16:32:00', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1738115393653383169, '000000', 'panda/2023/12/22/c69f65a8faa74e07bb2093de8874be4e.png', 'test.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/22/c69f65a8faa74e07bb2093de8874be4e.png', NULL, '2023-12-22 16:32:57', NULL, '2023-12-22 16:32:57', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1738118191891685378, '000000', 'panda/2023/12/22/13d8ea2c3b6d42129ec47245beabcd14.png', 'test.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/22/13d8ea2c3b6d42129ec47245beabcd14.png', NULL, '2023-12-22 16:44:04', NULL, '2023-12-22 16:44:04', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1738486223826657282, '000000', 'panda/2023/12/23/dea2efa96eb64ef2b7661de7a1085097.png', '微信图片_20231223170531.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/23/dea2efa96eb64ef2b7661de7a1085097.png', NULL, '2023-12-23 17:06:30', NULL, '2023-12-23 17:06:30', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1738488595479076865, '000000', 'panda/2023/12/23/5742e78d1a1143ec87857608b39d81d2.png', 'test.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/23/5742e78d1a1143ec87857608b39d81d2.png', NULL, '2023-12-23 17:15:55', NULL, '2023-12-23 17:15:55', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1739860803409485826, '000000', 'panda/2023/12/27/ebcd3065114347419701df78c8164938.png', 'Midjourney绘画2.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/27/ebcd3065114347419701df78c8164938.png', NULL, '2023-12-27 12:08:35', NULL, '2023-12-27 12:08:35', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1740753638301171714, '000000', 'panda/2023/12/29/6f2a2127c30346ac916577bf5534da25.png', '屏幕截图(1).png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/29/6f2a2127c30346ac916577bf5534da25.png', NULL, '2023-12-29 23:16:24', NULL, '2023-12-29 23:16:24', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1741349001566375937, '000000', 'panda/2023/12/31/5567e12262c0486daa28bb03ed2af4fb.png', '100x124.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/31/5567e12262c0486daa28bb03ed2af4fb.png', NULL, '2023-12-31 14:42:09', NULL, '2023-12-31 14:42:09', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1741349297885564929, '000000', 'panda/2023/12/31/26b1e8ddb3b24d0ab8e474afd8b3e896.png', '100x124.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2023/12/31/26b1e8ddb3b24d0ab8e474afd8b3e896.png', NULL, '2023-12-31 14:43:20', NULL, '2023-12-31 14:43:20', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1741824910417219586, '000000', 'panda/2024/01/01/0e9dfd1c168646bc93322217b6296a70.png', 'nginx2.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/01/0e9dfd1c168646bc93322217b6296a70.png', NULL, '2024-01-01 22:13:15', NULL, '2024-01-01 22:13:15', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742149439661359105, '000000', 'panda/2024/01/02/76439aa1dce54f3eb58a57fe55fd6dba.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/02/76439aa1dce54f3eb58a57fe55fd6dba.png', NULL, '2024-01-02 19:42:49', NULL, '2024-01-02 19:42:49', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742149598428348418, '000000', 'panda/2024/01/02/d83e67d8142246dcb97f0ed49bb697f8.jpg', 'car.jpg', '.jpg', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/02/d83e67d8142246dcb97f0ed49bb697f8.jpg', NULL, '2024-01-02 19:43:27', NULL, '2024-01-02 19:43:27', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742149624500142081, '000000', 'panda/2024/01/02/726de4384d4d425eaf1ada3f985e4f32.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/02/726de4384d4d425eaf1ada3f985e4f32.png', NULL, '2024-01-02 19:43:33', NULL, '2024-01-02 19:43:33', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742158338359664641, '000000', 'panda/2024/01/02/3425e42cda3f4c39a54b3596be3227e9.jpg', 'car.jpg', '.jpg', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/02/3425e42cda3f4c39a54b3596be3227e9.jpg', NULL, '2024-01-02 20:18:10', 1714176194496339970, '2024-01-02 20:18:10', 1714176194496339970, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742158569625198593, '000000', 'panda/2024/01/02/d4874f5dd5c24e5380dd1852cf4495e3.png', '私有知识库业务架构图.drawio.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/02/d4874f5dd5c24e5380dd1852cf4495e3.png', NULL, '2024-01-02 20:19:05', 1714176194496339970, '2024-01-02 20:19:05', 1714176194496339970, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742158983951118338, '000000', 'panda/2024/01/02/01921182df474945a7572efafcc9584b.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/02/01921182df474945a7572efafcc9584b.png', NULL, '2024-01-02 20:20:44', 1714176194496339970, '2024-01-02 20:20:44', 1714176194496339970, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742363801802051585, '000000', 'panda/2024/01/03/050a1eb181064a38ae75b1b7100fd81a.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/03/050a1eb181064a38ae75b1b7100fd81a.png', NULL, '2024-01-03 09:54:37', 1741845883943227393, '2024-01-03 09:54:37', 1741845883943227393, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742375260808364033, '000000', 'panda/2024/01/03/fa0b93aa67bb42ed9dbd04db4c4d7e3d.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/03/fa0b93aa67bb42ed9dbd04db4c4d7e3d.png', NULL, '2024-01-03 10:40:09', 1714176194496339970, '2024-01-03 10:40:09', 1714176194496339970, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742406106978271234, '000000', 'panda/2024/01/03/3d559970a7ba48c48b9c13f6996a6263.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/03/3d559970a7ba48c48b9c13f6996a6263.png', NULL, '2024-01-03 12:42:43', 1714176194496339970, '2024-01-03 12:42:43', 1714176194496339970, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742416247656103937, '000000', 'panda/2024/01/03/9eb180968b164131a92d30b1cfdd0779.png', '私有知识库业务架构图.drawio.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/03/9eb180968b164131a92d30b1cfdd0779.png', NULL, '2024-01-03 13:23:01', 1714176194496339970, '2024-01-03 13:23:01', 1714176194496339970, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742425665852489729, '000000', 'panda/2024/01/03/613d64ca45fd4d51bb6b246c1d7587c1.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/03/613d64ca45fd4d51bb6b246c1d7587c1.png', NULL, '2024-01-03 14:00:26', 1714176194496339970, '2024-01-03 14:00:26', 1714176194496339970, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742425883994046466, '000000', 'panda/2024/01/03/9709adf9edf74b51865f72b78bbd6b5e.jpg', 'car.jpg', '.jpg', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/03/9709adf9edf74b51865f72b78bbd6b5e.jpg', NULL, '2024-01-03 14:01:18', 1714176194496339970, '2024-01-03 14:01:18', 1714176194496339970, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742425928411725826, '000000', 'panda/2024/01/03/0e3600b455914b0dade9943f281be19b.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/03/0e3600b455914b0dade9943f281be19b.png', NULL, '2024-01-03 14:01:29', 1714176194496339970, '2024-01-03 14:01:29', 1714176194496339970, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742540735914782721, '000000', 'panda/2024/01/03/cc6722915e274b519c30026258efae97.png', 'pd.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/03/cc6722915e274b519c30026258efae97.png', NULL, '2024-01-03 21:37:41', NULL, '2024-01-03 21:37:41', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742798084927737857, '000000', 'panda/2024/01/04/9e7d1b86af2646cc86b305b4dd474653.png', '4.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/04/9e7d1b86af2646cc86b305b4dd474653.png', NULL, '2024-01-04 14:40:18', NULL, '2024-01-04 14:40:18', NULL, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742798206709354497, '000000', 'panda/2024/01/04/7fa695b38eb74e38aa5fc67837a54f60.png', 'image.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/04/7fa695b38eb74e38aa5fc67837a54f60.png', NULL, '2024-01-04 14:40:47', 1722083875718737921, '2024-01-04 14:40:47', 1722083875718737921, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742798249252179970, '000000', 'panda/2024/01/04/12aa0f1308f8429bacfdec966803e75b.png', 'image.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/04/12aa0f1308f8429bacfdec966803e75b.png', NULL, '2024-01-04 14:40:57', 1722083875718737921, '2024-01-04 14:40:57', 1722083875718737921, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742800939394879489, '000000', 'panda/2024/01/04/022e9626b8314ddd8b5ddb25b53605c7.png', '29bc4a8389ea73fb8170408b39784e09a13011.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/04/022e9626b8314ddd8b5ddb25b53605c7.png', NULL, '2024-01-04 14:51:38', 1714536425072115714, '2024-01-04 14:51:38', 1714536425072115714, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742808488634568705, '000000', 'panda/2024/01/04/876792ea9c5f4f89b683fae739a08f56.png', 'image.png', '.png', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/04/876792ea9c5f4f89b683fae739a08f56.png', NULL, '2024-01-04 15:21:38', 1714820415783976961, '2024-01-04 15:21:38', 1714820415783976961, 'qcloud');
INSERT INTO `sys_oss` VALUES (1742844890541805570, '000000', 'panda/2024/01/04/dd5bdec65131411b8616d0592152f127.jpg', 'psc.jpg', '.jpg', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/04/dd5bdec65131411b8616d0592152f127.jpg', NULL, '2024-01-04 17:46:17', 1716076523383177217, '2024-01-04 17:46:17', 1716076523383177217, 'qcloud');
INSERT INTO `sys_oss` VALUES (1743081813143277569, '000000', 'panda/2024/01/05/877152fc53ac42b59356fec648435d62.jpg', '124_20231222111128A001.jpg', '.jpg', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/05/877152fc53ac42b59356fec648435d62.jpg', NULL, '2024-01-05 09:27:44', 1743079200725225474, '2024-01-05 09:27:44', 1743079200725225474, 'qcloud');
INSERT INTO `sys_oss` VALUES (1743458219735973890, '000000', 'panda/2024/01/06/21ea270d16f9497e9cc4d52b876b0398.jpg', '1702362792732.jpg', '.jpg', 'http://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2024/01/06/21ea270d16f9497e9cc4d52b876b0398.jpg', 103, '2024-01-06 10:23:26', 1713724795803299841, '2024-01-06 10:23:26', 1713724795803299841, 'qcloud');
-- ----------------------------
-- Table structure for sys_oss_config
@@ -1375,7 +1259,7 @@
INSERT INTO `sys_oss_config` VALUES (1, '000000', 'minio', 'ruoyi', 'ruoyi123', 'ruoyi', '', '127.0.0.1:9000', '', 'N', '', '1', '1', '', 103, 1, '2023-05-14 15:19:42', 1, '2023-07-13 23:28:18', NULL);
INSERT INTO `sys_oss_config` VALUES (2, '000000', 'qiniu', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'ruoyi', '', 's3-cn-north-1.qiniucs.com', '', 'N', '', '1', '1', '', 103, 1, '2023-05-14 15:19:42', 1, '2023-05-14 15:19:42', NULL);
INSERT INTO `sys_oss_config` VALUES (3, '000000', 'aliyun', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'ruoyi', '', 'oss-cn-beijing.aliyuncs.com', '', 'N', '', '1', '1', '', 103, 1, '2023-05-14 15:19:42', 1, '2023-07-13 23:35:23', NULL);
INSERT INTO `sys_oss_config` VALUES (4, '000000', 'qcloud', 'AKIDfDeswnSxypgUG0ncQ8lGbp5EAub8QTCj', 'JOEvQhldIl26wZx62qTt665uYxAAxXv8', 'panda-1253683406', 'panda', 'cos.ap-guangzhou.myqcloud.com', '', 'N', 'ap-guangzhou', '1', '0', '', 103, 1, '2023-05-14 15:19:42', 1, '2023-11-13 23:58:09', '');
INSERT INTO `sys_oss_config` VALUES (4, '000000', 'qcloud', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'ruoyi', 'image', '127.0.0.1:9000', '', 'N', '', '1', '0', '', 103, 1, '2023-05-14 15:19:42', 1, '2023-11-13 23:58:09', '');
INSERT INTO `sys_oss_config` VALUES (5, '000000', 'image', 'ruoyi', 'ruoyi123', 'ruoyi', 'image', '127.0.0.1:9000', '', 'N', '', '1', '1', '', 103, 1, '2023-05-14 15:19:42', 1, '2023-05-14 15:19:42', NULL);
-- ----------------------------
@@ -1658,7 +1542,6 @@
-- Records of sys_tenant
-- ----------------------------
INSERT INTO `sys_tenant` VALUES (1, '000000', '管理组', '15888888888', 'XXX有限公司', NULL, NULL, '多租户通用后台管理管理系统', NULL, NULL, NULL, NULL, -1, '0', '0', 103, 1, '2023-05-14 15:19:39', NULL, NULL);
INSERT INTO `sys_tenant` VALUES (1729685490647072769, '911866', '陈', '11111111111', '5126', '', '', '', '', '', 1729685389795033090, NULL, 1, '0', '2', 103, 1, '2023-11-29 10:15:32', 1, '2023-11-29 10:15:32');
-- ----------------------------
-- Table structure for sys_tenant_package
@@ -1721,7 +1604,7 @@
-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES (1, NULL, '0', 4.00, '00000', 103, 'admin', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com', '15888888888', '1', NULL, NULL, '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '0:0:0:0:0:0:0:1', '2024-01-05 17:11:34', 103, 1, '2023-05-14 15:19:39', 1, '2024-01-05 17:11:34', '管理员');
INSERT INTO `sys_user` VALUES (1, NULL, '0', 4.00, '00000', 103, 'admin', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com', '15888888888', '1', NULL, NULL, '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '0:0:0:0:0:0:0:1', '2024-03-19 17:57:07', 103, 1, '2023-05-14 15:19:39', 1, '2024-03-19 17:57:07', '管理员');
-- ----------------------------
-- Table structure for sys_user_post
@@ -1737,9 +1620,6 @@
-- Records of sys_user_post
-- ----------------------------
INSERT INTO `sys_user_post` VALUES (1, 1);
INSERT INTO `sys_user_post` VALUES (2, 2);
INSERT INTO `sys_user_post` VALUES (1661660085084250114, 2);
INSERT INTO `sys_user_post` VALUES (1661660804847788034, 1);
-- ----------------------------
-- Table structure for sys_user_role
@@ -1755,310 +1635,6 @@
-- Records of sys_user_role
-- ----------------------------
INSERT INTO `sys_user_role` VALUES (1, 1);
INSERT INTO `sys_user_role` VALUES (2, 2);
INSERT INTO `sys_user_role` VALUES (3, 3);
INSERT INTO `sys_user_role` VALUES (4, 4);
INSERT INTO `sys_user_role` VALUES (1661646824293031937, 1661661183933177857);
INSERT INTO `sys_user_role` VALUES (1661660085084250114, 1661661183933177857);
INSERT INTO `sys_user_role` VALUES (1661660804847788034, 2);
INSERT INTO `sys_user_role` VALUES (1713427806956404738, 1);
INSERT INTO `sys_user_role` VALUES (1713439839684689921, 1);
INSERT INTO `sys_user_role` VALUES (1713440206715650049, 1);
INSERT INTO `sys_user_role` VALUES (1713724795803299841, 1);
INSERT INTO `sys_user_role` VALUES (1714176194496339970, 1);
INSERT INTO `sys_user_role` VALUES (1714267685998907393, 1);
INSERT INTO `sys_user_role` VALUES (1714269581270667265, 1);
INSERT INTO `sys_user_role` VALUES (1714270420659949569, 1);
INSERT INTO `sys_user_role` VALUES (1714455864827723777, 1);
INSERT INTO `sys_user_role` VALUES (1714536425072115714, 1);
INSERT INTO `sys_user_role` VALUES (1714819715117105153, 1);
INSERT INTO `sys_user_role` VALUES (1714820415783976961, 1);
INSERT INTO `sys_user_role` VALUES (1714820611611836417, 1);
INSERT INTO `sys_user_role` VALUES (1714820755698761729, 1);
INSERT INTO `sys_user_role` VALUES (1714823588305190914, 1);
INSERT INTO `sys_user_role` VALUES (1714829502936530945, 1);
INSERT INTO `sys_user_role` VALUES (1714835527643185154, 1);
INSERT INTO `sys_user_role` VALUES (1714835835278606337, 1);
INSERT INTO `sys_user_role` VALUES (1714898663033290754, 1);
INSERT INTO `sys_user_role` VALUES (1714942733206175746, 1);
INSERT INTO `sys_user_role` VALUES (1714943378361434113, 1);
INSERT INTO `sys_user_role` VALUES (1714943388671033346, 1);
INSERT INTO `sys_user_role` VALUES (1714945928464711682, 1);
INSERT INTO `sys_user_role` VALUES (1714946100850606082, 1);
INSERT INTO `sys_user_role` VALUES (1714952355237347329, 1);
INSERT INTO `sys_user_role` VALUES (1714954192279584770, 1);
INSERT INTO `sys_user_role` VALUES (1714960721598758913, 1);
INSERT INTO `sys_user_role` VALUES (1714961357132283906, 1);
INSERT INTO `sys_user_role` VALUES (1714963426656403458, 1);
INSERT INTO `sys_user_role` VALUES (1714980339130318850, 1);
INSERT INTO `sys_user_role` VALUES (1714985002550444034, 1);
INSERT INTO `sys_user_role` VALUES (1714996959085084674, 1);
INSERT INTO `sys_user_role` VALUES (1715000784541990913, 1);
INSERT INTO `sys_user_role` VALUES (1715160830886297602, 1);
INSERT INTO `sys_user_role` VALUES (1715174792021426177, 1);
INSERT INTO `sys_user_role` VALUES (1715176760861278209, 1);
INSERT INTO `sys_user_role` VALUES (1715187418688405506, 1);
INSERT INTO `sys_user_role` VALUES (1715263570077564930, 1);
INSERT INTO `sys_user_role` VALUES (1715273299113820162, 1);
INSERT INTO `sys_user_role` VALUES (1715289765028577281, 1);
INSERT INTO `sys_user_role` VALUES (1715642509052624897, 1);
INSERT INTO `sys_user_role` VALUES (1715645217792868353, 1);
INSERT INTO `sys_user_role` VALUES (1715655140035543041, 1);
INSERT INTO `sys_user_role` VALUES (1715688813166346242, 1);
INSERT INTO `sys_user_role` VALUES (1715695623109623810, 1);
INSERT INTO `sys_user_role` VALUES (1716076523383177217, 1);
INSERT INTO `sys_user_role` VALUES (1716077329079615490, 1);
INSERT INTO `sys_user_role` VALUES (1716316658037178370, 1);
INSERT INTO `sys_user_role` VALUES (1716375479287824386, 1);
INSERT INTO `sys_user_role` VALUES (1716376929359380482, 1);
INSERT INTO `sys_user_role` VALUES (1716449431389487106, 1);
INSERT INTO `sys_user_role` VALUES (1716626232627707906, 1);
INSERT INTO `sys_user_role` VALUES (1716668774639484929, 1);
INSERT INTO `sys_user_role` VALUES (1716723582348050434, 1);
INSERT INTO `sys_user_role` VALUES (1717010625036828674, 1);
INSERT INTO `sys_user_role` VALUES (1717112818712723458, 1);
INSERT INTO `sys_user_role` VALUES (1717171039955599361, 1);
INSERT INTO `sys_user_role` VALUES (1717382776042569730, 1);
INSERT INTO `sys_user_role` VALUES (1717383874597896194, 1);
INSERT INTO `sys_user_role` VALUES (1717463477270102018, 1);
INSERT INTO `sys_user_role` VALUES (1717550755342467074, 1);
INSERT INTO `sys_user_role` VALUES (1718643906618605569, 1);
INSERT INTO `sys_user_role` VALUES (1719357065528623105, 1);
INSERT INTO `sys_user_role` VALUES (1719629669720145921, 1);
INSERT INTO `sys_user_role` VALUES (1719631746265530370, 1);
INSERT INTO `sys_user_role` VALUES (1719969371128086529, 1);
INSERT INTO `sys_user_role` VALUES (1719994192431955970, 1);
INSERT INTO `sys_user_role` VALUES (1720001597920264194, 1);
INSERT INTO `sys_user_role` VALUES (1720054174099718145, 1);
INSERT INTO `sys_user_role` VALUES (1720373256426635265, 1);
INSERT INTO `sys_user_role` VALUES (1720615324298264578, 1);
INSERT INTO `sys_user_role` VALUES (1720966085100191746, 1);
INSERT INTO `sys_user_role` VALUES (1721433118342397954, 1);
INSERT INTO `sys_user_role` VALUES (1721798759096270850, 1);
INSERT INTO `sys_user_role` VALUES (1721869407395332097, 1);
INSERT INTO `sys_user_role` VALUES (1721869952080232450, 1);
INSERT INTO `sys_user_role` VALUES (1722083875718737921, 1);
INSERT INTO `sys_user_role` VALUES (1722126825769185282, 1);
INSERT INTO `sys_user_role` VALUES (1722453238653169665, 1);
INSERT INTO `sys_user_role` VALUES (1722501722198552577, 1);
INSERT INTO `sys_user_role` VALUES (1722546398997819394, 1);
INSERT INTO `sys_user_role` VALUES (1722635856464097281, 1);
INSERT INTO `sys_user_role` VALUES (1722652602847768578, 1);
INSERT INTO `sys_user_role` VALUES (1722787874222682114, 1);
INSERT INTO `sys_user_role` VALUES (1722799180870889473, 1);
INSERT INTO `sys_user_role` VALUES (1722872660475817986, 1);
INSERT INTO `sys_user_role` VALUES (1722874592401600514, 1);
INSERT INTO `sys_user_role` VALUES (1722883137289367554, 1);
INSERT INTO `sys_user_role` VALUES (1722918534182645762, 1);
INSERT INTO `sys_user_role` VALUES (1723173295586848769, 1);
INSERT INTO `sys_user_role` VALUES (1723222687891107841, 1);
INSERT INTO `sys_user_role` VALUES (1723224404040921089, 1);
INSERT INTO `sys_user_role` VALUES (1723225015520112641, 1);
INSERT INTO `sys_user_role` VALUES (1723278284531478529, 1);
INSERT INTO `sys_user_role` VALUES (1723330835209564161, 1);
INSERT INTO `sys_user_role` VALUES (1723708198137147393, 1);
INSERT INTO `sys_user_role` VALUES (1723754683843260417, 1);
INSERT INTO `sys_user_role` VALUES (1723878185250369537, 1);
INSERT INTO `sys_user_role` VALUES (1723940614634254337, 1);
INSERT INTO `sys_user_role` VALUES (1723975861757325314, 1);
INSERT INTO `sys_user_role` VALUES (1724306907803725826, 1);
INSERT INTO `sys_user_role` VALUES (1724308252862492673, 1);
INSERT INTO `sys_user_role` VALUES (1724382895124295681, 1);
INSERT INTO `sys_user_role` VALUES (1724727778758406145, 1);
INSERT INTO `sys_user_role` VALUES (1724815478295425026, 1);
INSERT INTO `sys_user_role` VALUES (1725026071145107458, 1);
INSERT INTO `sys_user_role` VALUES (1725026978817658881, 1);
INSERT INTO `sys_user_role` VALUES (1725043562961457154, 1);
INSERT INTO `sys_user_role` VALUES (1725058936893362178, 1);
INSERT INTO `sys_user_role` VALUES (1725363117009162242, 1);
INSERT INTO `sys_user_role` VALUES (1725538633251049474, 1);
INSERT INTO `sys_user_role` VALUES (1725564937467875329, 1);
INSERT INTO `sys_user_role` VALUES (1725891713243021314, 1);
INSERT INTO `sys_user_role` VALUES (1725905000621932546, 1);
INSERT INTO `sys_user_role` VALUES (1726440708294049793, 1);
INSERT INTO `sys_user_role` VALUES (1726443526979584002, 1);
INSERT INTO `sys_user_role` VALUES (1726445663797116929, 1);
INSERT INTO `sys_user_role` VALUES (1726452867329687553, 1);
INSERT INTO `sys_user_role` VALUES (1726472827451998209, 1);
INSERT INTO `sys_user_role` VALUES (1726479651370696705, 1);
INSERT INTO `sys_user_role` VALUES (1726487492674195458, 1);
INSERT INTO `sys_user_role` VALUES (1726496513055784961, 1);
INSERT INTO `sys_user_role` VALUES (1726498781398302722, 1);
INSERT INTO `sys_user_role` VALUES (1726506873632587778, 1);
INSERT INTO `sys_user_role` VALUES (1726529248394739714, 1);
INSERT INTO `sys_user_role` VALUES (1726578079102664705, 1);
INSERT INTO `sys_user_role` VALUES (1726582181383634946, 1);
INSERT INTO `sys_user_role` VALUES (1726583555672506369, 1);
INSERT INTO `sys_user_role` VALUES (1726596448690372609, 1);
INSERT INTO `sys_user_role` VALUES (1726599361261207553, 1);
INSERT INTO `sys_user_role` VALUES (1726604511749079041, 1);
INSERT INTO `sys_user_role` VALUES (1726606973822304258, 1);
INSERT INTO `sys_user_role` VALUES (1726609379524083713, 1);
INSERT INTO `sys_user_role` VALUES (1726616151265640450, 1);
INSERT INTO `sys_user_role` VALUES (1726775811478126594, 1);
INSERT INTO `sys_user_role` VALUES (1726795490141667329, 1);
INSERT INTO `sys_user_role` VALUES (1726798403169681410, 1);
INSERT INTO `sys_user_role` VALUES (1726830794655399937, 1);
INSERT INTO `sys_user_role` VALUES (1726862038013313026, 1);
INSERT INTO `sys_user_role` VALUES (1726919220696186882, 1);
INSERT INTO `sys_user_role` VALUES (1727140184050630658, 1);
INSERT INTO `sys_user_role` VALUES (1727506163368722433, 1);
INSERT INTO `sys_user_role` VALUES (1727518983086931969, 1);
INSERT INTO `sys_user_role` VALUES (1727580969606840321, 1);
INSERT INTO `sys_user_role` VALUES (1727590505323429890, 1);
INSERT INTO `sys_user_role` VALUES (1727918393172164609, 1);
INSERT INTO `sys_user_role` VALUES (1728249002000121857, 1);
INSERT INTO `sys_user_role` VALUES (1728680561446486017, 1);
INSERT INTO `sys_user_role` VALUES (1728964404182577153, 1);
INSERT INTO `sys_user_role` VALUES (1729020459675611137, 1);
INSERT INTO `sys_user_role` VALUES (1729051002043691009, 1);
INSERT INTO `sys_user_role` VALUES (1729423744832172033, 1);
INSERT INTO `sys_user_role` VALUES (1729429590291050497, 1);
INSERT INTO `sys_user_role` VALUES (1729685493222375426, 1729685491108446210);
INSERT INTO `sys_user_role` VALUES (1730050324466036738, 1);
INSERT INTO `sys_user_role` VALUES (1730102403335254018, 1);
INSERT INTO `sys_user_role` VALUES (1730129923250122754, 1);
INSERT INTO `sys_user_role` VALUES (1730155108925763586, 1);
INSERT INTO `sys_user_role` VALUES (1730273428207366145, 1);
INSERT INTO `sys_user_role` VALUES (1730498722784669697, 1);
INSERT INTO `sys_user_role` VALUES (1730815105229713410, 1);
INSERT INTO `sys_user_role` VALUES (1730858886951923714, 1);
INSERT INTO `sys_user_role` VALUES (1731357405659824130, 1);
INSERT INTO `sys_user_role` VALUES (1731475532557090818, 1);
INSERT INTO `sys_user_role` VALUES (1731480953627901953, 1);
INSERT INTO `sys_user_role` VALUES (1731502381106495490, 1);
INSERT INTO `sys_user_role` VALUES (1731524458442162177, 1);
INSERT INTO `sys_user_role` VALUES (1731524630094053377, 1);
INSERT INTO `sys_user_role` VALUES (1731524650293821441, 1);
INSERT INTO `sys_user_role` VALUES (1731529253710233601, 1);
INSERT INTO `sys_user_role` VALUES (1731559936046432258, 1);
INSERT INTO `sys_user_role` VALUES (1731564032228884482, 1);
INSERT INTO `sys_user_role` VALUES (1731565926737281026, 1);
INSERT INTO `sys_user_role` VALUES (1731566918589513729, 1);
INSERT INTO `sys_user_role` VALUES (1731567740094283778, 1);
INSERT INTO `sys_user_role` VALUES (1731575439263563777, 1);
INSERT INTO `sys_user_role` VALUES (1731583864055824385, 1);
INSERT INTO `sys_user_role` VALUES (1731588155382464513, 1);
INSERT INTO `sys_user_role` VALUES (1731589827840212993, 1);
INSERT INTO `sys_user_role` VALUES (1731635461435719682, 1);
INSERT INTO `sys_user_role` VALUES (1731668049902731266, 1);
INSERT INTO `sys_user_role` VALUES (1731922694168412162, 1);
INSERT INTO `sys_user_role` VALUES (1731944975456305153, 1);
INSERT INTO `sys_user_role` VALUES (1731949019394506753, 1);
INSERT INTO `sys_user_role` VALUES (1731951425054343170, 1);
INSERT INTO `sys_user_role` VALUES (1732000242621513729, 1);
INSERT INTO `sys_user_role` VALUES (1732027163380056066, 1);
INSERT INTO `sys_user_role` VALUES (1732289382269353985, 1);
INSERT INTO `sys_user_role` VALUES (1732289439282528258, 1);
INSERT INTO `sys_user_role` VALUES (1732289699585228801, 1);
INSERT INTO `sys_user_role` VALUES (1732290827173527553, 1);
INSERT INTO `sys_user_role` VALUES (1732291549344595969, 1);
INSERT INTO `sys_user_role` VALUES (1732293265184030721, 1);
INSERT INTO `sys_user_role` VALUES (1732329664117506049, 1);
INSERT INTO `sys_user_role` VALUES (1732334104450990081, 1);
INSERT INTO `sys_user_role` VALUES (1732578671045672962, 1);
INSERT INTO `sys_user_role` VALUES (1732584047426174978, 1);
INSERT INTO `sys_user_role` VALUES (1732608690321129474, 1);
INSERT INTO `sys_user_role` VALUES (1732678147815014401, 1);
INSERT INTO `sys_user_role` VALUES (1732731410102910977, 1);
INSERT INTO `sys_user_role` VALUES (1733005266763939841, 1);
INSERT INTO `sys_user_role` VALUES (1733016149837774850, 1);
INSERT INTO `sys_user_role` VALUES (1733053523871432705, 1);
INSERT INTO `sys_user_role` VALUES (1733061400367497218, 1);
INSERT INTO `sys_user_role` VALUES (1733167090469732353, 1);
INSERT INTO `sys_user_role` VALUES (1733298702729641986, 1);
INSERT INTO `sys_user_role` VALUES (1733488544511983617, 1);
INSERT INTO `sys_user_role` VALUES (1733720554119659521, 1);
INSERT INTO `sys_user_role` VALUES (1733846657777827842, 1);
INSERT INTO `sys_user_role` VALUES (1733859832720031745, 1);
INSERT INTO `sys_user_role` VALUES (1734137817339559938, 1);
INSERT INTO `sys_user_role` VALUES (1734227535762849793, 1);
INSERT INTO `sys_user_role` VALUES (1734492373726560257, 1);
INSERT INTO `sys_user_role` VALUES (1734508040978726914, 1);
INSERT INTO `sys_user_role` VALUES (1734513545461661697, 1);
INSERT INTO `sys_user_role` VALUES (1734581580998451202, 1);
INSERT INTO `sys_user_role` VALUES (1734751884580298754, 1);
INSERT INTO `sys_user_role` VALUES (1734781716483612674, 1);
INSERT INTO `sys_user_role` VALUES (1734833221987278849, 1);
INSERT INTO `sys_user_role` VALUES (1734834063154946050, 1);
INSERT INTO `sys_user_role` VALUES (1734880697666576386, 1);
INSERT INTO `sys_user_role` VALUES (1734891995888427009, 1);
INSERT INTO `sys_user_role` VALUES (1735132534701367297, 1);
INSERT INTO `sys_user_role` VALUES (1735242647239991298, 1);
INSERT INTO `sys_user_role` VALUES (1735486862444273666, 1);
INSERT INTO `sys_user_role` VALUES (1735487912727355394, 1);
INSERT INTO `sys_user_role` VALUES (1735542352767426561, 1);
INSERT INTO `sys_user_role` VALUES (1735551915889598466, 1);
INSERT INTO `sys_user_role` VALUES (1735616653411557377, 1);
INSERT INTO `sys_user_role` VALUES (1735835864146714626, 1);
INSERT INTO `sys_user_role` VALUES (1735953007769100289, 1);
INSERT INTO `sys_user_role` VALUES (1735960189784891393, 1);
INSERT INTO `sys_user_role` VALUES (1736265950381547522, 1);
INSERT INTO `sys_user_role` VALUES (1736577606684844034, 1);
INSERT INTO `sys_user_role` VALUES (1736638822375563266, 1);
INSERT INTO `sys_user_role` VALUES (1736779069306511361, 1);
INSERT INTO `sys_user_role` VALUES (1737028378602053634, 1);
INSERT INTO `sys_user_role` VALUES (1737271234797314050, 1);
INSERT INTO `sys_user_role` VALUES (1737315322405920770, 1);
INSERT INTO `sys_user_role` VALUES (1737445221154234370, 1);
INSERT INTO `sys_user_role` VALUES (1737452907568635906, 1);
INSERT INTO `sys_user_role` VALUES (1737453186955419649, 1);
INSERT INTO `sys_user_role` VALUES (1737717777685880833, 1);
INSERT INTO `sys_user_role` VALUES (1737768515594166274, 1);
INSERT INTO `sys_user_role` VALUES (1738108912170246145, 1);
INSERT INTO `sys_user_role` VALUES (1738118086488825858, 1);
INSERT INTO `sys_user_role` VALUES (1738520430804279297, 1);
INSERT INTO `sys_user_role` VALUES (1738802060248817666, 1);
INSERT INTO `sys_user_role` VALUES (1738812447119712257, 1);
INSERT INTO `sys_user_role` VALUES (1738941480197234689, 1);
INSERT INTO `sys_user_role` VALUES (1738963430776840194, 1);
INSERT INTO `sys_user_role` VALUES (1739121784341995522, 1);
INSERT INTO `sys_user_role` VALUES (1739166931951886338, 1);
INSERT INTO `sys_user_role` VALUES (1739272055240073217, 1);
INSERT INTO `sys_user_role` VALUES (1739451838930427905, 1);
INSERT INTO `sys_user_role` VALUES (1739452037375533057, 1);
INSERT INTO `sys_user_role` VALUES (1739452376946384898, 1);
INSERT INTO `sys_user_role` VALUES (1739484503888961537, 1);
INSERT INTO `sys_user_role` VALUES (1739485282335006722, 1);
INSERT INTO `sys_user_role` VALUES (1739577551431999490, 1);
INSERT INTO `sys_user_role` VALUES (1739825609910591489, 1);
INSERT INTO `sys_user_role` VALUES (1739916453439152130, 1);
INSERT INTO `sys_user_role` VALUES (1740188388454629378, 1);
INSERT INTO `sys_user_role` VALUES (1741339991320580097, 1);
INSERT INTO `sys_user_role` VALUES (1741803737633542145, 1);
INSERT INTO `sys_user_role` VALUES (1741823858229923841, 1);
INSERT INTO `sys_user_role` VALUES (1741845883943227393, 1);
INSERT INTO `sys_user_role` VALUES (1742179775941201921, 1);
INSERT INTO `sys_user_role` VALUES (1742437553771458562, 1);
INSERT INTO `sys_user_role` VALUES (1742451201315254273, 1);
INSERT INTO `sys_user_role` VALUES (1742469913120419841, 1);
INSERT INTO `sys_user_role` VALUES (1742798283280568321, 1);
INSERT INTO `sys_user_role` VALUES (1742798987701342210, 1);
INSERT INTO `sys_user_role` VALUES (1742799476950126594, 1);
INSERT INTO `sys_user_role` VALUES (1742799839619010562, 1);
INSERT INTO `sys_user_role` VALUES (1742801019527057410, 1);
INSERT INTO `sys_user_role` VALUES (1742804073915699202, 1);
INSERT INTO `sys_user_role` VALUES (1742821280687149058, 1);
INSERT INTO `sys_user_role` VALUES (1742821467476283394, 1);
INSERT INTO `sys_user_role` VALUES (1742822775600009217, 1);
INSERT INTO `sys_user_role` VALUES (1742823890928357377, 1);
INSERT INTO `sys_user_role` VALUES (1742838225297821697, 1);
INSERT INTO `sys_user_role` VALUES (1742902317295423490, 1);
INSERT INTO `sys_user_role` VALUES (1742910854243373058, 1);
INSERT INTO `sys_user_role` VALUES (1742961994725150721, 1);
INSERT INTO `sys_user_role` VALUES (1742969861079388161, 1);
INSERT INTO `sys_user_role` VALUES (1743068363130228737, 1);
INSERT INTO `sys_user_role` VALUES (1743075924621479938, 1);
INSERT INTO `sys_user_role` VALUES (1743079200725225474, 1);
INSERT INTO `sys_user_role` VALUES (1743085878682144769, 1);
INSERT INTO `sys_user_role` VALUES (1743110774967586818, 1);
INSERT INTO `sys_user_role` VALUES (1743162481042870274, 1);
INSERT INTO `sys_user_role` VALUES (1743166491284033537, 1);
INSERT INTO `sys_user_role` VALUES (1743251016219447297, 1);
INSERT INTO `sys_user_role` VALUES (1743469820367142914, 1);
INSERT INTO `sys_user_role` VALUES (1743514389280522242, 1);
INSERT INTO `sys_user_role` VALUES (1743519646916083714, 1);
INSERT INTO `sys_user_role` VALUES (1743670356026654722, 1);
-- ----------------------------
-- Table structure for test_demo
@@ -2085,19 +1661,6 @@
-- ----------------------------
-- Records of test_demo
-- ----------------------------
INSERT INTO `test_demo` VALUES (1, '000000', 102, 4, 1, '测试数据权限', '测试', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_demo` VALUES (2, '000000', 102, 3, 2, '子节点1', '111', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_demo` VALUES (3, '000000', 102, 3, 3, '子节点2', '222', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_demo` VALUES (4, '000000', 108, 4, 4, '测试数据', 'demo', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_demo` VALUES (5, '000000', 108, 3, 13, '子节点11', '1111', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_demo` VALUES (6, '000000', 108, 3, 12, '子节点22', '2222', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_demo` VALUES (7, '000000', 108, 3, 11, '子节点33', '3333', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_demo` VALUES (8, '000000', 108, 3, 10, '子节点44', '4444', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_demo` VALUES (9, '000000', 108, 3, 9, '子节点55', '5555', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_demo` VALUES (10, '000000', 108, 3, 8, '子节点66', '6666', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_demo` VALUES (11, '000000', 108, 3, 7, '子节点77', '7777', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_demo` VALUES (12, '000000', 108, 3, 6, '子节点88', '8888', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_demo` VALUES (13, '000000', 108, 3, 5, '子节点99', '9999', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
-- ----------------------------
-- Table structure for test_tree
@@ -2123,18 +1686,31 @@
-- ----------------------------
-- Records of test_tree
-- ----------------------------
INSERT INTO `test_tree` VALUES (1, '000000', 0, 102, 4, '测试数据权限', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_tree` VALUES (2, '000000', 1, 102, 3, '子节点1', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_tree` VALUES (3, '000000', 2, 102, 3, '子节点2', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_tree` VALUES (4, '000000', 0, 108, 4, '测试树1', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_tree` VALUES (5, '000000', 4, 108, 3, '子节点11', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_tree` VALUES (6, '000000', 4, 108, 3, '子节点22', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_tree` VALUES (7, '000000', 4, 108, 3, '子节点33', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_tree` VALUES (8, '000000', 5, 108, 3, '子节点44', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_tree` VALUES (9, '000000', 6, 108, 3, '子节点55', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_tree` VALUES (10, '000000', 7, 108, 3, '子节点66', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_tree` VALUES (11, '000000', 7, 108, 3, '子节点77', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_tree` VALUES (12, '000000', 10, 108, 3, '子节点88', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
INSERT INTO `test_tree` VALUES (13, '000000', 10, 108, 3, '子节点99', 0, 103, '2023-05-14 15:20:01', 1, NULL, NULL, 0);
-- ----------------------------
-- Table structure for voice_role
-- ----------------------------
DROP TABLE IF EXISTS `voice_role`;
CREATE TABLE `voice_role`  (
  `id` bigint NOT NULL COMMENT 'id',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称',
  `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '角色描述',
  `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像',
  `voice_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '角色id',
  `file_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '音频地址',
  `pre_process` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '音频预处理(实验性)',
  `create_dept` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `voiceId`(`voice_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '配音角色' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of voice_role
-- ----------------------------
SET FOREIGN_KEY_CHECKS = 1;