pom.xml
@@ -18,6 +18,7 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>17</java.version> <mysql.version>8.0.33</mysql.version> <spring-boot.mybatis>3.0.1</spring-boot.mybatis> <springdoc.version>2.1.0</springdoc.version> <therapi-javadoc.version>0.15.0</therapi-javadoc.version> @@ -60,6 +61,7 @@ <weixin-java-miniapp.version>4.5.0</weixin-java-miniapp.version> <weixin-java-pay.version>4.6.0</weixin-java-pay.version> <weixin-java-cp.version>4.6.0</weixin-java-cp.version> <weixin-java-cp.version>4.6.0</weixin-java-cp.version> </properties> <profiles> @@ -95,6 +97,12 @@ <!-- ä¾èµå£°æ --> <dependencyManagement> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- SpringBootçä¾èµé ç½®--> <dependency> @@ -317,6 +325,12 @@ <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-chat-api</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-system-api</artifactId> <version>${revision}</version> </dependency> ruoyi-common/pom.xml
@@ -2,13 +2,20 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>ruoyi-ai</artifactId> <groupId>org.ruoyi</groupId> <version>${revision}</version> <relativePath>../pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>ruoyi-common</artifactId> <packaging>pom</packaging> <description> common éç¨æ¨¡å </description> <modules> <module>ruoyi-common-bom</module> @@ -32,16 +39,6 @@ <module>ruoyi-common-encrypt</module> <module>ruoyi-common-tenant</module> <module>ruoyi-common-chat</module> <module>ruoyi-common-pay</module> <module>ruoyi-common-wechat</module> <module>ruoyi-common-live</module> </modules> <artifactId>ruoyi-common</artifactId> <packaging>pom</packaging> <description> common éç¨æ¨¡å </description> </project> ruoyi-common/ruoyi-common-bom/pom.xml
@@ -159,25 +159,12 @@ <version>${revision}</version> </dependency> <!-- 微信模å --> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-wechat</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-chat</artifactId> <version>${revision}</version> </dependency> <!-- æ¯ä»æ¨¡å --> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-pay</artifactId> <version>${revision}</version> </dependency> </dependencies> </dependencyManagement> ruoyi-common/ruoyi-common-chat/pom.xml
@@ -18,6 +18,10 @@ <properties> <retrofit2.version>2.9.0</retrofit2.version> <azure.version>1.0.0-beta.12</azure.version> <chatglm.version>release-V4-2.3.0</chatglm.version> <okhttp.version>2.7.5</okhttp.version> <jtokkit.version>0.5.0</jtokkit.version> </properties> <dependencies> @@ -26,38 +30,22 @@ <artifactId>ruoyi-common-core</artifactId> </dependency> <!-- åºå忍¡å --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-json</artifactId> </dependency> <!-- redis模å --> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-redis</artifactId> </dependency> <dependency> <groupId>com.azure</groupId> <artifactId>azure-ai-openai</artifactId> <version>1.0.0-beta.12</version> </dependency> <dependency> <groupId>io.github.ollama4j</groupId> <artifactId>ollama4j</artifactId> <version>1.0.79</version> </dependency> <!-- åºå忍¡å --> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-json</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-redis</artifactId> </dependency> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-satoken</artifactId> <version>${azure.version}</version> </dependency> <dependency> @@ -79,13 +67,7 @@ <dependency> <groupId>com.knuddels</groupId> <artifactId>jtokkit</artifactId> <version>0.5.0</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.12</version> <version>${jtokkit.version}</version> </dependency> <dependency> @@ -102,13 +84,14 @@ <dependency> <groupId>cn.bigmodel.openapi</groupId> <artifactId>oapi-java-sdk</artifactId> <version>release-V4-2.3.0</version> <version>${chatglm.version}</version> </dependency> <dependency> <groupId>com.squareup.okhttp</groupId> <artifactId>okhttp</artifactId> <version>2.7.5</version> <scope>compile</scope> <version>${okhttp.version}</version> </dependency> </dependencies> </project> ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/config/ChatConfig.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/config/properties/WebSocketProperties.java
@@ -12,6 +12,9 @@ @Data public class WebSocketProperties { /** * æ¯å¦å¼å¯ */ private Boolean enabled; /** ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/demo/ConsoleEventSourceListenerV2.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/demo/ConsoleEventSourceListenerV3.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/demo/PluginTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/demo/WeatherPlugin.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/demo/WeatherReq.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/demo/WeatherResp.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/demo/WebSearchToolsTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/domain/request/ChatRequest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/domain/request/Dall3Request.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/handler/PlusWebSocketHandler.java
@@ -2,7 +2,6 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson2.JSONObject; import lombok.extern.slf4j.Slf4j; import org.ruoyi.common.chat.config.LocalCache; import org.ruoyi.common.chat.entity.chat.ChatCompletion; @@ -12,7 +11,6 @@ import org.ruoyi.common.chat.openai.OpenAiStreamClient; import org.ruoyi.common.chat.utils.WebSocketUtils; import org.ruoyi.common.core.utils.SpringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.socket.*; import org.springframework.web.socket.handler.AbstractWebSocketHandler; ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/localModels/LocalModelsofitClient.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/localModels/SearchService.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/CmdPlugin.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/request/ChatRequest.java
@@ -2,31 +2,39 @@ import jakarta.validation.constraints.NotEmpty; import lombok.Data; import org.ruoyi.common.chat.entity.chat.Content; import org.ruoyi.common.chat.entity.chat.Message; import java.util.List; /** * æè¿°ï¼ * æè¿°ï¼å¯¹è¯è¯·æ±å¯¹è±¡ * * @author https:www.unfbx.com * @author ageerle * @sine 2023-04-08 */ @Data public class ChatRequest { @NotEmpty(message = "ä¼ å ¥çæ¨¡åä¸è½ä¸ºç©º") private String model; @NotEmpty(message = "å¯¹è¯æ¶æ¯ä¸è½ä¸ºç©º") List<Message> messages; List<Content> imageContent; @NotEmpty(message = "ä¼ å ¥çæ¨¡åä¸è½ä¸ºç©º") private String model; /** * æç¤ºè¯ */ private String prompt; private String userId; /** * æ¯å¦å¼å¯æµå¼å¯¹è¯ */ private Boolean stream = Boolean.TRUE; /** * æ¯å¦å¼å¯èç½æç´¢(0å ³é 1å¼å¯) */ private Boolean search = Boolean.FALSE; /** * ç¥è¯åºid @@ -34,13 +42,14 @@ private String kid; /** * gptçé»è®¤è®¾ç½® * ç¨æ·id */ private String systemMessage = ""; private String userId; private double top_p = 1; private double temperature = 0.2; /** * åºç¨ID */ private String appId; /** * ä¸ä¸æçæ¡æ° @@ -52,4 +61,5 @@ */ private Boolean usingContext = Boolean.TRUE; } ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/ConsoleEventSourceListener.java
@@ -28,7 +28,6 @@ log.info("OpenAIè¿åæ°æ®ï¼{}", data); if ("[DONE]".equals(data)) { log.info("OpenAIè¿åæ°æ®ç»æäº"); return; } } ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/PluginListener.java
@@ -8,7 +8,6 @@ import okhttp3.sse.EventSource; import okhttp3.sse.EventSourceListener; import org.jetbrains.annotations.NotNull; import org.ruoyi.common.chat.constant.OpenAIConst; import org.ruoyi.common.chat.entity.chat.ChatCompletion; import org.ruoyi.common.chat.entity.chat.ChatCompletionResponse; import org.ruoyi.common.chat.entity.chat.FunctionCall; ruoyi-common/ruoyi-common-core/pom.xml
@@ -51,24 +51,12 @@ <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.24</version> <version>${hutool.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-cp</artifactId> <version>${weixin-java-miniapp.version}</version> </dependency> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-cp</artifactId> <version>${weixin-java-cp.version}</version> </dependency> <!-- èªå¨çæYMLé ç½®å ³èJSONæä»¶ --> @@ -94,6 +82,11 @@ <artifactId>ip2region</artifactId> </dependency> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-cp</artifactId> <version>${weixin-java-cp.version}</version> </dependency> <dependency> <groupId>com.github.binarywang</groupId> ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/constant/Constants.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/exception/BaseException.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/IBaseConnectionListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/IBaseMsgListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/IDanmuMsgListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/IEnterRoomMsgListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/IGiftMsgListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/ILikeMsgListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/listener/ISuperChatMsgListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/BaseCmdMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/BaseMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/ICmdMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/IDanmuMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/IEnterRoomMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/IGiftMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/ILikeMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/IMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-base/src/main/java/tech/ordinaryroad/live/chat/client/commons/base/msg/ISuperChatMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-client/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-client/src/main/java/tech/ordinaryroad/live/chat/client/commons/client/BaseLiveChatClient.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-client/src/main/java/tech/ordinaryroad/live/chat/client/commons/client/IBaseLiveChatClient.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-client/src/main/java/tech/ordinaryroad/live/chat/client/commons/client/config/BaseLiveChatClientConfig.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-client/src/main/java/tech/ordinaryroad/live/chat/client/commons/client/enums/ClientStatusEnums.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-util/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-util/src/main/java/tech/ordinaryroad/live/chat/client/commons/util/OrLiveChatCookieUtil.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-util/src/main/java/tech/ordinaryroad/live/chat/client/commons/util/OrLiveChatNumberUtil.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-util/src/main/java/tech/ordinaryroad/live/chat/client/commons/util/OrLiveChatReflectUtil.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/live-chat-client-commons-util/src/main/java/tech/ordinaryroad/live/chat/client/commons/util/OrLocalDateTimeUtil.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-commons/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-client-servers/live-chat-client-servers-netty-client/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-live/live-chat-client-servers/live-chat-client-servers-netty/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-live/live-chat-client-servers/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/api/BilibiliApis.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/api/request/BilibiliLikeReportV3Request.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/api/request/BilibiliSendMsgRequest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/client/BilibiliLiveChatClient.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/config/BilibiliLiveChatClientConfig.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/constant/BilibiliCmdEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/constant/OperationEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/constant/ProtoverEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/listener/IBilibiliConnectionListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/listener/IBilibiliMsgListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/AuthMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/AuthReplyMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/DanmuMsgMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/HeartbeatMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/HeartbeatReplyMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/InteractWordMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/LikeInfoV3ClickMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/SendGiftMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/SendSmsReplyMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/SuperChatMessageMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/base/BaseBilibiliCmdMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/base/BaseBilibiliMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/base/IBilibiliMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/msg/dto/MedalInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/netty/frame/AuthWebSocketFrame.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/netty/frame/HeartbeatWebSocketFrame.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/netty/frame/base/BaseBilibiliWebSocketFrame.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/netty/frame/factory/BilibiliWebSocketFrameFactory.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/netty/handler/BilibiliBinaryFrameHandler.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/netty/handler/BilibiliConnectionHandler.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/protobuf/Dm_v2Proto.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/protobuf/Dm_v2_20Proto.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/protobuf/dm_v2.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/protobuf/dm_v2OrBuilder.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/protobuf/dm_v2_20.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/protobuf/dm_v2_20OrBuilder.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/java/tech/ordinaryroad/live/chat/client/bilibili/util/BilibiliCodecUtil.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/resources/proto/dm_v2.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/main/resources/proto/dm_v2_20.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/test/java/tech/ordinaryroad/live/chat/client/bilibili/api/BilibiliApisTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-bilibili/src/test/java/tech/ordinaryroad/live/chat/client/bilibili/client/BilibiliLiveChatClientTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/ClientModeExample.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/api/DouyinApis.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/client/DouyinLiveChatClient.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/config/DouyinLiveChatClientConfig.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/constant/DouyinCmdEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/listener/IDouyinConnectionListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/listener/IDouyinMsgListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/msg/DouyinDanmuMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/msg/DouyinEnterRoomMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/msg/DouyinGiftMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/msg/DouyinLikeMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/msg/base/IDouyinCmdMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/msg/base/IDouyinMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/netty/handler/DouyinBinaryFrameHandler.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/netty/handler/DouyinConnectionHandler.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/Douyin_cmd_msgProto.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/Douyin_websocket_frameProto.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_cmd_msg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_cmd_msgOrBuilder.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-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-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_websocket_frame.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_websocket_frameOrBuilder.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_websocket_frame_msg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_websocket_frame_msgOrBuilder.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/douyin_websocket_frame_msgProto.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/CommonOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/DoubleLikeDetailOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/GiftIMPriorityOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/GiftStructOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/ImageOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/PatternRefOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/PublicAreaCommonOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextEffectDetailOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextEffectOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextFormatOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextPieceGiftOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextPieceHeartOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextPieceImageOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextPieceOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextPiecePatternRefOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/TextPieceUserOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/java/tech/ordinaryroad/live/chat/client/douyin/protobuf/dto/UserOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/Common.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/DoubleLikeDetail.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/GiftIMPriority.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/GiftStruct.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/Image.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/PatternRef.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/PublicAreaCommon.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/Text.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextEffect.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextEffectDetail.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextFormat.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextPiece.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextPieceGift.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextPieceHeart.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextPieceImage.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextPiecePatternRef.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/TextPieceUser.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/User.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_cmd_msg.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_webcast_chat_message_msg.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_webcast_gift_message_msg.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_webcast_like_message_msg.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_webcast_member_message_msg.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_websocket_frame.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/main/resources/proto/douyin_websocket_frame_msg.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/test/java/tech/ordinaryroad/live/chat/client/douyin/api/DouyinApisTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyin/src/test/java/tech/ordinaryroad/live/chat/client/douyin/client/DouyinLiveChatClientTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/README.md
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/api/DouyuApis.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/client/DouyuDanmuLiveChatClient.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/client/DouyuLiveChatClient.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/client/DouyuWsLiveChatClient.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/client/base/BaseDouyuLiveChatClient.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/config/DouyuLiveChatClientConfig.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/constant/DouyuClientModeEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/constant/DouyuCmdEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/listener/IDouyuConnectionListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/listener/IDouyuMsgListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/ChatmessageMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/ChatmsgMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/DgbMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/DouyuCmdMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/H5ckreqMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/H5csMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/H5gkcreqMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/HeartbeatMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/HeartbeatReplyMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/JoingroupMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/KeepliveMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/LoginreqMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/LoginresMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/MapkbMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/MsgrepeaterproxylistMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/SubMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/UenterMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/base/BaseDouyuCmdMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/base/IDouyuMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/dto/GiftListInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/dto/GiftPropInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/msg/dto/GiftPropSingle.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/frame/AuthWebSocketFrame.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/frame/HeartbeatWebSocketFrame.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/frame/KeepliveWebSocketFrame.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/frame/base/BaseDouyuWebSocketFrame.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/frame/factory/DouyuWebSocketFrameFactory.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/handler/DouyuBinaryFrameHandler.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/netty/handler/DouyuConnectionHandler.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/main/java/tech/ordinaryroad/live/chat/client/douyu/util/DouyuCodecUtil.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/api/DouyuApisTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/ChatChoice.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/ChatCompletionResponse.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/DouyuLiveChatClientTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/Message.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/Usage.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/util/DouyuCodecUtilTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/api/HuyaApis.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/client/HuyaLiveChatClient.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/config/HuyaLiveChatClientConfig.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaClientTemplateTypeEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaCmdEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaDecorationAppTypeEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaDecorationViewTypeEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaGenderEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaLiveSource.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaOperationEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaStreamLineTypeEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/constant/HuyaWupFunctionEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/listener/IHuyaConnectionListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/listener/IHuyaMsgListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/BaseWup.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/ConnectParaInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/LiveLaunchRsp.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/MessageNoticeMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/PushMessage.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/PushMessage_V2.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/RegisterGroupRsp.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/RegisterRsp.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/SendItemSubBroadcastPacketMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/UserInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/VerifyCookieRsp.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/VipEnterBannerMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/WebSocketCommand.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/WupRsp.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/base/BaseHuyaCmdMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/base/BaseHuyaMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/base/IHuyaCmdMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/base/IHuyaMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/ACEnterBanner.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/BadgeInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/BulletBorderGroundFormat.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/BulletFormat.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/ChannelPair.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/CommEnterBanner.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/ContentFormat.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/CustomBadgeDynamicExternal.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/DIYBigGiftEffect.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/DecorationInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/DecorationInfoRsp.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/DeviceInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/DisplayInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/FaithInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/FaithPresenter.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/GuardInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/ItemEffectInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/LiveAppUAEx.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/LiveProxyValue.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/LiveUserbase.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/MessageContentExpand.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/MessageTagInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/MsgItem.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/MsgStatInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/NobleInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/NobleLevelAttr.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/NobleLevelInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/NoblePetAttr.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/PresenterChannelInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/PropView.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/PropsIdentity.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/PropsItem.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/SendMessageFormat.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/SenderInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/SpecialInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/SuperFansInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/UidNickName.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/UserId.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/UserIdentityInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/UserRidePetInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/dto/WeekRankInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/GetLivingInfoReq.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/GetPropsListReq.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/GetPropsListRsp.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/LaunchReq.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/LiveLaunchReq.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/RegisterGroupReq.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/SendMessageReq.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/UpdateUserInfoReq.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/UserHeartBeatReq.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/VerifyCookieReq.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/msg/req/WupReq.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/netty/frame/factory/HuyaWebSocketFrameFactory.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/netty/handler/HuyaBinaryFrameHandler.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/netty/handler/HuyaConnectionHandler.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/main/java/tech/ordinaryroad/live/chat/client/huya/util/HuyaCodecUtil.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/test/java/tech/ordinaryroad/live/chat/client/huya/api/HuyaApisTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/test/java/tech/ordinaryroad/live/chat/client/huya/client/HuyaLiveChatClientTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/test/java/tech/ordinaryroad/live/chat/client/huya/util/HuyaCodecUtilTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/ClientModeExample.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/api/KuaishouApis.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/client/KuaishouLiveChatClient.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/config/KuaishouLiveChatClientConfig.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/listener/IKuaishouConnectionListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/listener/IKuaishouMsgListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/msg/KuaishouDanmuMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/msg/KuaishouGiftMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/msg/KuaishouLikeMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/msg/base/IKuaishouCmdMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/msg/base/IKuaishouMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/netty/handler/KuaishouBinaryFrameHandler.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/netty/handler/KuaishouConnectionHandler.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/AuditAudienceMaskOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSErrorOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSHeartbeatOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSPingOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSWebEnterRoomOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSWebErrorOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSWebHeartbeatOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSWebUserExitOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/CSWebUserPauseOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/ClientIdOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/ConfigSwitchItemOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/ConfigSwitchTypeOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/GzoneNameplateOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/LiveAudienceStateOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/LiveCdnNodeViewOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/LiveFansGroupStateOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/PSHostInfoOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/PayloadTypeOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/PicUrlOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCEchoOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCErrorOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCHeartbeatAckOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCInfoOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCLiveWarningMaskStatusChangedAudienceOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCPingAckOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebAuthorPauseOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebAuthorResumeOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebBetChangedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebBetClosedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebCurrentRedPackFeedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebEnterRoomAckOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebErrorOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebFeedPushOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebGuessClosedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebGuessOpenedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebHeartbeatAckOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebLiveSpecialAccountConfigStateOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebLiveWatchingUsersOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebPipEndedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebPipStartedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebRefreshWalletOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebRideChangedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SCWebSuspectedViolationOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SimpleUserInfoOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/SocketMessageOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/UserInfoOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebComboCommentFeedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebCommentFeedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebCommentFeedShowTypeOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebGiftFeedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebLikeFeedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebLiveAssistantTypeOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebPauseTypeOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebRedPackCoverTypeOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebRedPackInfoOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebShareFeedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebSystemNoticeFeedOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebUserPauseTypeOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/java/tech/ordinaryroad/live/chat/client/kuaishou/protobuf/WebWatchingUserInfoOuterClass.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/AuditAudienceMask.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSError.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSHeartbeat.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSPing.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSWebEnterRoom.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSWebError.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSWebHeartbeat.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSWebUserExit.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/CSWebUserPause.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/ClientId.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/ConfigSwitchItem.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/ConfigSwitchType.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/GzoneNameplate.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/LiveAudienceState.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/LiveCdnNodeView.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/LiveFansGroupState.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/PSHostInfo.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/PayloadType.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/PicUrl.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCEcho.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCError.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCHeartbeatAck.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCInfo.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCLiveWarningMaskStatusChangedAudience.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCPingAck.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebAuthorPause.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebAuthorResume.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebBetChanged.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebBetClosed.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebCurrentRedPackFeed.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebEnterRoomAck.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebError.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebFeedPush.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebGuessClosed.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebGuessOpened.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebHeartbeatAck.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebLiveSpecialAccountConfigState.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebLiveWatchingUsers.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebPipEnded.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebPipStarted.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebRefreshWallet.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebRideChanged.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SCWebSuspectedViolation.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SimpleUserInfo.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/SocketMessage.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/UserInfo.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebComboCommentFeed.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebCommentFeed.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebCommentFeedShowType.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebGiftFeed.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebLikeFeed.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebLiveAssistantType.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebPauseType.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebRedPackCoverType.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebRedPackInfo.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebShareFeed.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebSystemNoticeFeed.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebUserPauseType.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/main/resources/proto/WebWatchingUserInfo.proto
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/test/java/tech/ordinaryroad/live/chat/client/kuaishou/api/KuaishouApisTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/test/java/tech/ordinaryroad/live/chat/client/kuaishou/client/KuaishouLiveChatClientTest.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/live-chat-clients/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-live/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-mail/src/main/java/org/ruoyi/common/mail/config/MailConfig.java
@@ -7,8 +7,7 @@ import org.ruoyi.common.mail.utils.MailAccount; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.scheduling.annotation.Scheduled; /** * JavaMail é ç½® @@ -22,10 +21,9 @@ public class MailConfig { private final ConfigService configService; private MailAccount account; // ç¼åMailAccountå®ä¾ private MailAccount account; @Bean @Scope("singleton") public MailAccount mailAccount() { if (account == null) { account = new MailAccount(); @@ -34,7 +32,6 @@ return account; } @Scheduled(fixedDelay = 10000) // æ¯10ç§æ£æ¥ä¸æ¬¡ public void updateMailAccount() { account.setHost(getKey("host")); account.setPort(NumberUtils.toInt(getKey("port"), 465)); ruoyi-common/ruoyi-common-mail/src/main/java/org/ruoyi/common/mail/config/properties/MailProperties.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-mail/src/main/java/org/ruoyi/common/mail/properties/MailProperties.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,67 @@ package org.ruoyi.common.mail.properties; import lombok.Data; /** * JavaMail é ç½®å±æ§ * * @author Michelle.Chung */ @Data public class MailProperties { /** * è¿æ»¤å¼å ³ */ private Boolean enabled; /** * SMTPæå¡å¨åå */ private String host; /** * SMTPæå¡ç«¯å£ */ private Integer port; /** * æ¯å¦éè¦ç¨æ·åå¯ç éªè¯ */ private Boolean auth; /** * ç¨æ·å */ private String user; /** * å¯ç */ private String pass; /** * åéæ¹ï¼éµå¾ªRFC-822æ å */ private String from; /** * ä½¿ç¨ STARTTLSå®å ¨è¿æ¥ï¼STARTTLSæ¯å¯¹çº¯ææ¬éä¿¡åè®®çæ©å±ãå®å°çº¯ææ¬è¿æ¥å级为å å¯è¿æ¥ï¼TLSæSSLï¼ï¼ è䏿¯ä½¿ç¨ä¸ä¸ªåç¬çå å¯é信端å£ã */ private Boolean starttlsEnable; /** * ä½¿ç¨ SSLå®å ¨è¿æ¥ */ private Boolean sslEnable; /** * SMTPè¶ æ¶æ¶é¿ï¼å使¯«ç§ï¼ç¼ºçå¼ä¸è¶ æ¶ */ private Long timeout; /** * Socketè¿æ¥è¶ æ¶å¼ï¼å使¯«ç§ï¼ç¼ºçå¼ä¸è¶ æ¶ */ private Long connectionTimeout; } ruoyi-common/ruoyi-common-pay/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/config/PayConfig.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/config/PayInit.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/config/WxPayConfiguration.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/listener/ConfigChangeListener.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/response/PayResponse.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/service/PayService.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/service/impl/PayServiceImpl.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/utils/MD5Util.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-web/src/main/java/org/ruoyi/common/web/interceptor/PlusWebInvokeTimeInterceptor.java
@@ -36,20 +36,6 @@ String url = request.getMethod() + " " + request.getRequestURI(); String domainName = request.getServerName(); log.info("ååä¿¡æ¯ï¼{}",domainName); String requestURI = request.getRequestURI(); List<String> urls = whitelistUrls(); boolean isWhitelisted = urls.stream().anyMatch(requestURI::startsWith); if (!isWhitelisted){ // æ ¹æ®ææç¼å·æ¥è¯¢æ¿æ´»ç¶æ // ConfigService configService = SpringUtils.context().getBean(ConfigService.class); // String authNo = configService.getConfigValue("sys", "authcode"); // if(!configService.checkAuth(authNo,domainName)){ // throw new BaseException("ç³»ç»æªæ¿æ´»,请è系管çåææ"); // } } // æå°è¯·æ±åæ° if (isJsonRequest(request)) { String jsonParam = ""; @@ -67,7 +53,6 @@ log.debug("[PLUS]å¼å§è¯·æ± => URL[{}],æ åæ°", url); } } StopWatch stopWatch = new StopWatch(); invokeTimeTL.set(stopWatch); stopWatch.start(); @@ -98,16 +83,5 @@ return StringUtils.startsWithIgnoreCase(contentType, MediaType.APPLICATION_JSON_VALUE); } return false; } // ææç½åå public List<String> whitelistUrls() { return Arrays.asList( "/chat/config", "/pay", "/weixin", "/user/qrcode", "/user/login/qrcode" ); } } ruoyi-common/ruoyi-common-wechat/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/api/MessageTools.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/api/WechatTools.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/beans/AppInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/beans/BaseMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/beans/BaseResponse.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/beans/Member.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/beans/RecommendInfo.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/beans/SendMsg.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/beans/SyncKey.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/beans/User.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/beans/WebWxInit.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/client/HttpClientManage.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/client/SingleHttpClient.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/controller/LoginController.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/core/Core.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/core/CoreManage.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/core/MsgCenter.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/face/IMsgHandlerFace.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/service/ILoginService.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/service/impl/LoginServiceImpl.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/Config.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/ConstantConfigEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/LogInterface.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/MoreConfig.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/SleepUtils.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/MsgCodeEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/MsgTypeEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/OsNameEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/ResultEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/RetCodeEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/SelectorEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/SendMsgType.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/StorageLoginInfoEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/URLEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/VerifyFriendEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/parameters/BaseParaEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/parameters/LoginParaEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/parameters/StatusNotifyParaEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/enums/parameters/UUIDParaEnum.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/tools/CommonTools.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/tools/DownloadTools.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/annotation/UnCheckLogin.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/base/BaseError.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/base/BaseException.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/base/BaseResponse.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/cache/UserSession.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/common/MyConfig.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/common/MyRoute.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/common/OutRoute.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/constant/ConfigKeys.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/constant/UploadConstant.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/controller/ExtendController.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/controller/IndexController.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/controller/KeyWordController.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/controller/RelateController.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/controller/RobotController.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/controller/RobotWorkController.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/controller/ToolController.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/controller/UploadController.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/controller/_BaseController.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/enums/KeyMsgValueType.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/interceptor/ExceptionInterceptor.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/interceptor/VisitLogInterceptor.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/interceptor/VisitLogInterceptor4down.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/model/WxRobConfig.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/model/WxRobKeyword.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/model/WxRobRelation.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/model/_JFinalDemoGenerator.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/model/_MappingKit.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/model/base/BaseWxRobConfig.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/model/base/BaseWxRobKeyword.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/model/base/BaseWxRobRelation.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/utils/Base64Util.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/utils/IpUtil.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/utils/LRUCache.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/utils/MD5Util.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/utils/UUIDShortUtil.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/resources/appConfig.properties
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/resources/passport.properties
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-wechat/src/main/resources/undertow.txt
ÎļþÒÑɾ³ý ruoyi-modules-api/pom.xml
@@ -4,19 +4,19 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-ai</artifactId> <version>1.0.0</version> <groupId>org.ruoyi</groupId> <version>${revision}</version> <relativePath>../pom.xml</relativePath> </parent> <artifactId>ruoyi-modules-api</artifactId> <packaging>pom</packaging> <modules> <module>ruoyi-chat-api</module> <module>ruoyi-device-api</module> <module>ruoyi-knowledge-api</module> <module>ruoyi-system-api</module> <module>ruoyi-weixin-api</module> </modules> <properties> @@ -74,6 +74,11 @@ <artifactId>ruoyi-common-oss</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> ruoyi-modules-api/ruoyi-chat-api/pom.xml
@@ -6,7 +6,8 @@ <parent> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-modules-api</artifactId> <version>1.0.0</version> <version>${revision}</version> <relativePath>../pom.xml</relativePath> </parent> <artifactId>ruoyi-chat-api</artifactId> @@ -17,13 +18,12 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- è天åºç¡æ¨¡å --> <!-- 对è¯åºç¡æ¨¡å --> <dependencies> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-chat</artifactId> </dependency> </dependencies> </project> ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatConfig.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatConfigBo.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatMessageBo.java
@@ -2,12 +2,13 @@ import org.ruoyi.common.core.validate.AddGroup; import org.ruoyi.common.core.validate.EditGroup; import org.ruoyi.system.domain.ChatMessage; import org.ruoyi.common.mybatis.core.domain.BaseEntity; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; import org.ruoyi.domain.ChatMessage; import java.math.BigDecimal; /** @@ -47,17 +48,15 @@ /** * æ£é¤éé¢ */ @NotNull(message = "æ£é¤éé¢ä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) private BigDecimal deductCost; private Double deductCost; /** * 累计 Tokens */ @NotNull(message = "累计 Tokensä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) private Long totalTokens; private Integer totalTokens; /** * 模ååç§° ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatConfigVo.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatConfigMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatConfigService.java
@@ -3,8 +3,6 @@ import org.ruoyi.common.mybatis.core.page.TableDataInfo; import org.ruoyi.common.mybatis.core.page.PageQuery; import org.ruoyi.domain.bo.ChatConfigBo; import org.ruoyi.domain.vo.ChatConfigVo; import java.util.Collection; import java.util.List; ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/ChatConfigServiceImpl.java
@@ -8,10 +8,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.ruoyi.domain.ChatConfig; import org.ruoyi.domain.bo.ChatConfigBo; import org.ruoyi.domain.vo.ChatConfigVo; import org.ruoyi.mapper.ChatConfigMapper; import org.ruoyi.service.IChatConfigService; import org.springframework.stereotype.Service; ruoyi-modules-api/ruoyi-chat-api/src/main/resources/mapper/ChatConfigMapper.xml
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-device-api/pom.xml
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-knowledge-api/pom.xml
@@ -6,7 +6,8 @@ <parent> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-modules-api</artifactId> <version>1.0.0</version> <version>${revision}</version> <relativePath>../pom.xml</relativePath> </parent> <artifactId>ruoyi-knowledge-api</artifactId> ruoyi-modules-api/ruoyi-system-api/pom.xml
@@ -6,7 +6,8 @@ <parent> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-modules-api</artifactId> <version>1.0.0</version> <version>${revision}</version> <relativePath>../pom.xml</relativePath> </parent> <artifactId>ruoyi-system-api</artifactId> ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/ChatConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,77 @@ package org.ruoyi.system.domain; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.Version; import lombok.Data; import lombok.EqualsAndHashCode; import org.ruoyi.common.mybatis.core.domain.BaseEntity; import java.io.Serial; /** * é 置信æ¯å¯¹è±¡ chat_config * * @author ageerle * @date 2025-04-08 */ @Data @EqualsAndHashCode(callSuper = true) @TableName("chat_config") public class ChatConfig extends BaseEntity { @Serial private static final long serialVersionUID = 1L; /** * ä¸»é® */ @TableId(value = "id") private Long id; /** * é 置类å */ private String category; /** * é ç½®åç§° */ private String configName; /** * é ç½®å¼ */ private String configValue; /** * 说æ */ private String configDict; /** * 夿³¨ */ private String remark; /** * çæ¬ */ @Version private Long version; /** * å 餿 å¿ï¼0代表åå¨ 1代表å é¤ï¼ */ @TableLogic private String delFlag; /** * æ´æ°IP */ private String updateIp; } ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/ChatConfigBo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,67 @@ package org.ruoyi.system.domain.bo; import io.github.linpeilie.annotations.AutoMapper; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; import org.ruoyi.common.core.validate.AddGroup; import org.ruoyi.common.core.validate.EditGroup; import org.ruoyi.common.mybatis.core.domain.BaseEntity; import org.ruoyi.system.domain.ChatConfig; /** * é 置信æ¯ä¸å¡å¯¹è±¡ chat_config * * @author ageerle * @date 2025-04-08 */ @Data @EqualsAndHashCode(callSuper = true) @AutoMapper(target = ChatConfig.class, reverseConvertGenerate = false) public class ChatConfigBo extends BaseEntity { /** * ä¸»é® */ @NotNull(message = "主é®ä¸è½ä¸ºç©º", groups = { EditGroup.class }) private Long id; /** * é 置类å */ @NotBlank(message = "é 置类åä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) private String category; /** * é ç½®åç§° */ @NotBlank(message = "é ç½®åç§°ä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) private String configName; /** * é ç½®å¼ */ @NotBlank(message = "é ç½®å¼ä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) private String configValue; /** * 说æ */ @NotBlank(message = "说æä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) private String configDict; /** * 夿³¨ */ @NotBlank(message = "夿³¨ä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) private String remark; /** * æ´æ°IP */ @NotBlank(message = "æ´æ°IPä¸è½ä¸ºç©º", groups = { AddGroup.class, EditGroup.class }) private String updateIp; } ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/ChatConfigVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,70 @@ package org.ruoyi.system.domain.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.ruoyi.system.domain.ChatConfig; import java.io.Serial; import java.io.Serializable; /** * é 置信æ¯è§å¾å¯¹è±¡ chat_config * * @author ageerle * @date 2025-04-08 */ @Data @ExcelIgnoreUnannotated @AutoMapper(target = ChatConfig.class) public class ChatConfigVo implements Serializable { @Serial private static final long serialVersionUID = 1L; /** * ä¸»é® */ @ExcelProperty(value = "主é®") private Long id; /** * é 置类å */ @ExcelProperty(value = "é 置类å") private String category; /** * é ç½®åç§° */ @ExcelProperty(value = "é ç½®åç§°") private String configName; /** * é ç½®å¼ */ @ExcelProperty(value = "é ç½®å¼") private String configValue; /** * 说æ */ @ExcelProperty(value = "说æ") private String configDict; /** * 夿³¨ */ @ExcelProperty(value = "夿³¨") private String remark; /** * æ´æ°IP */ @ExcelProperty(value = "æ´æ°IP") private String updateIp; } ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserModelVo.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatAppStoreMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java
@@ -1,15 +1,16 @@ package org.ruoyi.system.mapper; import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; import org.ruoyi.system.domain.ChatConfig; import org.ruoyi.system.domain.vo.ChatConfigVo; /** * 对è¯é ç½®ä¿¡æ¯ Mapperæ¥å£ * é 置信æ¯Mapperæ¥å£ * * @author Lion Li * @date 2024-04-13 * @author ageerle * @date 2025-04-08 */ public interface ChatConfigMapper extends BaseMapperPlus<ChatConfig, ChatConfigVo> { } ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatGptsMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatMessageMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatPluginMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatTokenMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatVisitorUsageMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatVoucherMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/CoverMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/CoverPromptAudioMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/PaymentOrdersMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysModelMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysPackagePlanMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserGroupMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserModelMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobConfigMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobKeywordMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobRelationMapper.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/SysLoginService.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/SysRegisterService.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/ChatConfigServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,51 @@ package org.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.ruoyi.common.core.service.ConfigService; import org.ruoyi.common.core.utils.StringUtils; import org.ruoyi.system.domain.ChatConfig; import org.ruoyi.system.domain.bo.ChatConfigBo; import org.ruoyi.system.domain.vo.ChatConfigVo; import org.ruoyi.system.mapper.ChatConfigMapper; import org.springframework.stereotype.Service; /** * é 置信æ¯Serviceä¸å¡å±å¤ç * * @author ageerle * @date 2025-04-08 */ @RequiredArgsConstructor @Service public class ChatConfigServiceImpl implements ConfigService { private final ChatConfigMapper baseMapper; /** * æ ¹æ®é 置类ååé ç½®keyè·åå¼ * * @param category åç±» * @param configKey keyåç§° * @return */ @Override public String getConfigValue(String category,String configKey) { ChatConfigBo bo = new ChatConfigBo(); bo.setCategory(category); bo.setConfigName(configKey); LambdaQueryWrapper<ChatConfig> lqw = buildQueryWrapper(bo); ChatConfigVo chatConfigVo = baseMapper.selectVoOne(lqw); return chatConfigVo.getConfigValue(); } private LambdaQueryWrapper<ChatConfig> buildQueryWrapper(ChatConfigBo bo) { LambdaQueryWrapper<ChatConfig> lqw = Wrappers.lambdaQuery(); lqw.eq(StringUtils.isNotBlank(bo.getCategory()), ChatConfig::getCategory, bo.getCategory()); lqw.eq(StringUtils.isNotBlank(bo.getConfigName()), ChatConfig::getConfigName, bo.getConfigName()); lqw.eq(StringUtils.isNotBlank(bo.getConfigValue()), ChatConfig::getConfigValue, bo.getConfigValue()); return lqw; } } ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysUserGroupServiceImpl.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/AesUtils.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/AudioOkHttpUtil.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/DesensitizationUtil.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/HttpUtils.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/KeyUtils.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/OrderNumberGenerator.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WddPptApi.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeChatScanHttpUtil.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinApiUtil.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinMsgUtil.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinQrCodeCacheUtil.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/XmlUtil.java
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/CoverMapper.xml
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/CoverPromptAudioMapper.xml
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/PaymentOrdersMapper.xml
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysLogininforMapper.xml
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysModelMapper.xml
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysPackagePlanMapper.xml
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/WxRobConfigMapper.xml
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/WxRobKeywordMapper.xml
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/WxRobRelationMapper.xml
ÎļþÒÑɾ³ý ruoyi-modules-api/ruoyi-weixin-api/pom.xml
ÎļþÒÑɾ³ý ruoyi-modules/pom.xml
@@ -2,13 +2,14 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>ruoyi-ai</artifactId> <groupId>org.ruoyi</groupId> <version>${revision}</version> <relativePath>../pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>ruoyi-modules</artifactId> <packaging>pom</packaging> ruoyi-modules/ruoyi-chat/pom.xml
@@ -15,7 +15,6 @@ </description> <properties> <hutool.version>5.8.18</hutool.version> <org-json.version>20220924</org-json.version> <jda.version>5.0.0-beta.9</jda.version> <chatgpt-java.version>1.1.2-beta0</chatgpt-java.version> @@ -36,25 +35,11 @@ </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-core</artifactId> <version>${hutool.version}</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-cache</artifactId> <version>${hutool.version}</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-crypto</artifactId> <version>${hutool.version}</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>${org-json.version}</version> </dependency> <dependency> <groupId>net.dv8tion</groupId> <artifactId>JDA</artifactId> @@ -66,6 +51,7 @@ </exclusion> </exclusions> </dependency> <dependency> <groupId>com.unfbx</groupId> <artifactId>chatgpt-java</artifactId> @@ -77,16 +63,19 @@ </exclusion> </exclusions> </dependency> <dependency> <groupId>eu.maxschuster</groupId> <artifactId>dataurl</artifactId> <version>${dataurl.version}</version> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi2-spring-boot-starter</artifactId> <version>${knife4j.verison}</version> </dependency> <dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUtils</artifactId> @@ -98,11 +87,13 @@ <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> @@ -110,25 +101,14 @@ <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-system</artifactId> <artifactId>ruoyi-knowledge-api</artifactId> </dependency> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-knowledge-api</artifactId> </dependency> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-chat-api</artifactId> <version>1.0.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.26</version> <scope>compile</scope> </dependency> </dependencies> </project> ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/config/ChatConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,55 @@ package org.ruoyi.chat.config; import lombok.Getter; import lombok.RequiredArgsConstructor; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import org.ruoyi.common.chat.openai.OpenAiStreamClient; import org.ruoyi.common.chat.openai.function.KeyRandomStrategy; import org.ruoyi.common.chat.openai.interceptor.OpenAILogger; import org.ruoyi.common.core.service.ConfigService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.Collections; import java.util.concurrent.TimeUnit; /** * Chaté 置类 * * @date: 2023/5/16 */ @Configuration @RequiredArgsConstructor public class ChatConfig { @Getter private OpenAiStreamClient openAiStreamClient; private final ConfigService configService; @Bean public OpenAiStreamClient openAiStreamClient() { String apiHost = configService.getConfigValue("chat", "apiHost"); String apiKey = configService.getConfigValue("chat", "apiKey"); openAiStreamClient = createOpenAiStreamClient(apiHost,apiKey); return openAiStreamClient; } public OpenAiStreamClient createOpenAiStreamClient(String apiHost, String apiKey) { HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new OpenAILogger()); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS); OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor(httpLoggingInterceptor) .connectTimeout(30, TimeUnit.SECONDS) .writeTimeout(600, TimeUnit.SECONDS) .readTimeout(600, TimeUnit.SECONDS) .build(); return OpenAiStreamClient.builder() .apiHost(apiHost) .apiKey(Collections.singletonList(apiKey)) .keyStrategy(new KeyRandomStrategy()) .okHttpClient(okHttpClient) .build(); } } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/config/OkHttpConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ package org.ruoyi.chat.config; import jakarta.annotation.PostConstruct; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.ruoyi.common.core.utils.OkHttpUtil; import org.ruoyi.domain.vo.ChatModelVo; import org.ruoyi.service.IChatModelService; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; @Component @RequiredArgsConstructor public class OkHttpConfig { private final IChatModelService chatModelService; private final Map<String, OkHttpUtil> okHttpUtilMap = new HashMap<>(); @Getter private String generate; @PostConstruct public void init() { initializeOkHttpUtil("suno"); initializeOkHttpUtil("luma"); initializeOkHttpUtil("ppt"); } private void initializeOkHttpUtil(String modelName) { ChatModelVo chatModelVo = chatModelService.selectModelByName(modelName); OkHttpUtil okHttpUtil = new OkHttpUtil(); okHttpUtil.setApiHost(chatModelVo.getApiHost()); okHttpUtil.setApiKey(chatModelVo.getApiKey()); generate = String.valueOf(chatModelVo.getModelPrice()); okHttpUtilMap.put(modelName, okHttpUtil); } public OkHttpUtil getOkHttpUtil(String modelName) { return okHttpUtilMap.get(modelName); } } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java
@@ -6,11 +6,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.ruoyi.chat.service.chat.ISseService; import org.ruoyi.common.chat.domain.request.ChatRequest; import org.ruoyi.common.chat.request.ChatRequest; import org.ruoyi.common.chat.entity.Tts.TextToSpeech; import org.ruoyi.common.chat.entity.files.UploadFileResponse; import org.ruoyi.common.chat.entity.whisper.WhisperResponse; import org.ruoyi.common.core.domain.R; import org.ruoyi.common.core.domain.model.LoginUser; @@ -19,7 +17,6 @@ import org.ruoyi.common.mybatis.core.page.TableDataInfo; import org.ruoyi.common.satoken.utils.LoginHelper; import org.ruoyi.domain.bo.ChatMessageBo; import org.ruoyi.domain.vo.ChatMessageVo; import org.ruoyi.service.IChatMessageService; import org.springframework.core.io.Resource; ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/CoverController.java
ÎļþÒÑɾ³ý ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/FaceController.java
@@ -8,6 +8,7 @@ import okhttp3.Request; import org.apache.commons.lang3.math.NumberUtils; import org.ruoyi.chat.domain.InsightFace; import org.ruoyi.chat.service.chat.IChatCostService; import org.ruoyi.chat.util.MjOkHttpUtil; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/LumaController.java
@@ -4,11 +4,13 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import okhttp3.Request; import org.apache.commons.lang3.math.NumberUtils; import org.ruoyi.chat.config.OkHttpConfig; import org.ruoyi.chat.domain.bo.GenerateLuma; import org.ruoyi.chat.service.chat.IChatCostService; import org.ruoyi.common.core.utils.OkHttpUtil; import org.ruoyi.system.cofing.OkHttpConfig; import org.ruoyi.system.domain.GenerateLuma; import org.springframework.web.bind.annotation.*; /** ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/PptController.java
ÎļþÒÑɾ³ý ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java
@@ -9,6 +9,7 @@ import org.apache.commons.lang3.math.NumberUtils; import org.ruoyi.chat.domain.dto.*; import org.ruoyi.chat.enums.ActionType; import org.ruoyi.chat.service.chat.IChatCostService; import org.ruoyi.chat.util.MjOkHttpUtil; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SunoController.java
@@ -4,12 +4,14 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import okhttp3.Request; import org.apache.commons.lang3.math.NumberUtils; import org.ruoyi.chat.config.OkHttpConfig; import org.ruoyi.chat.domain.bo.GenerateLyric; import org.ruoyi.chat.domain.bo.GenerateSuno; import org.ruoyi.chat.service.chat.IChatCostService; import org.ruoyi.common.core.utils.OkHttpUtil; import org.ruoyi.system.cofing.OkHttpConfig; import org.ruoyi.system.domain.GenerateLyric; import org.ruoyi.system.domain.GenerateSuno; import org.springframework.web.bind.annotation.*; @RestController ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/VoiceController.java
ÎļþÒÑɾ³ý ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateLuma.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package org.ruoyi.chat.domain.bo; import lombok.Data; /** * æè¿°ï¼æçè§é¢è¯·æ±å¯¹è±¡ * * @author ageerle@163.com * date 2024/6/27 */ @Data public class GenerateLuma { private String aspect_ratio; private boolean expand_prompt; private String image_url; private String user_prompt; } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateLyric.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package org.ruoyi.chat.domain.bo; import lombok.Data; /** * æè¿°ï¼çææè¯ * * @author ageerle@163.com * date 2024/6/27 */ @Data public class GenerateLyric { /** * æè¯æç¤ºè¯ */ private String prompt; /** * åè°å°å */ private String notify_hook; } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateSuno.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,64 @@ package org.ruoyi.chat.domain.bo; import lombok.Data; import java.io.Serializable; /** * @author WangLe */ @Data public class GenerateSuno implements Serializable { /** * æè¯ (èªå®ä¹æ¨¡å¼ä¸ç¨) */ private String prompt; /** * mv模åï¼chirp-v3-0ãchirp-v3-5ãä¸åé»è®¤ chirp-v3-0 */ private String mv; /** * æ é¢(èªå®ä¹æ¨¡å¼ä¸ç¨) */ private String title; /** * 飿 ¼æ ç¾(èªå®ä¹æ¨¡å¼ä¸ç¨) */ private String tags; /** * æ¯å¦çæçº¯é³ä¹ï¼true 为çæçº¯é³ä¹ */ private boolean make_instrumental; /** * ä»»å¡idï¼ç¨äºå¯¹ä¹åçä»»å¡åæä½ */ private String task_id; /** * floatï¼ææ²å»¶é¿æ¶é´ï¼åä½ç§ */ private int continue_at; /** * ææ²idï¼éè¦ç»ååªé¦æ */ private String continue_clip_id; /** * çµææ¨¡å¼æç¤ºè¯(çµææ¨¡å¼ä¸ç¨) */ private String gpt_description_prompt; /** * åè°å°å */ private String notify_hook; } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/BillingType.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package org.ruoyi.chat.enums; import lombok.Getter; @Getter public enum BillingType { TOKEN("1", "tokenæ£è´¹"), // tokenæ£è´¹ TIMES("2", "æ¬¡æ°æ£è´¹"); // æ¬¡æ°æ£è´¹ private final String code; private final String description; BillingType(String code, String description) { this.code = code; this.description = description; } public static BillingType fromCode(String code) { for (BillingType type : values()) { if (type.getCode().equals(code)) { return type; } } return null; } public String getCode() { return code; } public String getDescription() { return description; } } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/UserGradeType.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package org.ruoyi.chat.enums; import lombok.Getter; @Getter public enum UserGradeType { UNPAID("0", "æªä»è´¹"), // æªä»è´¹ç¨æ· PAID("1", "å·²ä»è´¹"); // å·²ä»è´¹ç¨æ· private final String code; private final String description; UserGradeType(String code, String description) { this.code = code; this.description = description; } public static UserGradeType fromCode(String code) { for (UserGradeType type : values()) { if (type.getCode().equals(code)) { return type; } } return null; } public String getCode() { return code; } public String getDescription() { return description; } } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java
@@ -11,7 +11,10 @@ import okhttp3.sse.EventSource; import okhttp3.sse.EventSourceListener; import org.jetbrains.annotations.NotNull; import org.ruoyi.chat.service.chat.IChatCostService; import org.ruoyi.common.chat.domain.request.ChatRequest; import org.ruoyi.common.chat.entity.chat.ChatCompletionResponse; import org.ruoyi.common.core.utils.SpringUtils; import org.ruoyi.common.core.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -40,6 +43,9 @@ private StringBuilder stringBuffer; private String modelName; private static final IChatCostService chatCostService = SpringUtils.getBean(IChatCostService.class); /** * {@inheritDoc} */ @@ -55,11 +61,15 @@ @Override public void onEvent(@NotNull EventSource eventSource, String id, String type, String data) { try { if ("[DONE]".equals(data)) { //æåååº emitter.complete(); // æ£é¤è´¹ç¨ (æ¶èå符 模ååç§°) // æ£é¤è´¹ç¨ ChatRequest chatRequest = new ChatRequest(); chatRequest.setModel(modelName); chatRequest.setPrompt(stringBuffer.toString()); chatCostService.deductToken(chatRequest); return; } // è§£æè¿åå 容 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/IChatCostService.java
@@ -1,6 +1,6 @@ package org.ruoyi.chat.service.chat; import org.ruoyi.domain.bo.ChatMessageBo; import org.ruoyi.common.chat.request.ChatRequest; /** * 计费管çServiceæ¥å£ @@ -11,16 +11,16 @@ public interface IChatCostService { /** * æ ¹æ®æ¶èçtokensæ£é¤ä½é¢ * æ£é¤ä½é¢å¹¶ä¸ä¿åè®°å½ * * @param chatMessageBo * @param chatRequest 对è¯ä¿¡æ¯ * @return ç»æ */ void deductToken(ChatMessageBo chatMessageBo); void deductToken(ChatRequest chatRequest); /** * æ£é¤ç¨æ·çä½é¢ * ç´æ¥æ£é¤ç¨æ·çä½é¢ * */ void deductUserBalance(Long userId, Double numberCost); ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/ISseService.java
@@ -1,7 +1,7 @@ package org.ruoyi.chat.service.chat; import jakarta.servlet.http.HttpServletRequest; import org.ruoyi.common.chat.domain.request.ChatRequest; import org.ruoyi.common.chat.request.ChatRequest; import org.ruoyi.common.chat.entity.Tts.TextToSpeech; import org.ruoyi.common.chat.entity.files.UploadFileResponse; import org.ruoyi.common.chat.entity.whisper.WhisperResponse; @@ -62,4 +62,13 @@ * @return åå¤å 容 */ String wxCpChat(String prompt); /** * èç½æ¥è¯¢ * * @param prompt æç¤ºè¯ * @return æ¥è¯¢å 容 */ String webSearch (String prompt); } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/ChatCostServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,166 @@ package org.ruoyi.chat.service.chat.impl; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.ruoyi.chat.enums.BillingType; import org.ruoyi.chat.enums.UserGradeType; import org.ruoyi.chat.service.chat.IChatCostService; import org.ruoyi.common.chat.domain.request.ChatRequest; import org.ruoyi.common.chat.utils.TikTokensUtil; import org.ruoyi.common.core.domain.model.LoginUser; import org.ruoyi.common.core.exception.ServiceException; import org.ruoyi.common.core.exception.base.BaseException; import org.ruoyi.common.satoken.utils.LoginHelper; import org.ruoyi.domain.ChatToken; import org.ruoyi.domain.bo.ChatMessageBo; import org.ruoyi.domain.vo.ChatModelVo; import org.ruoyi.service.IChatMessageService; import org.ruoyi.service.IChatModelService; import org.ruoyi.service.IChatTokenService; import org.ruoyi.system.domain.SysUser; import org.ruoyi.system.mapper.SysUserMapper; import org.springframework.stereotype.Service; /** * 计费管çServiceå®ç° * * @author ageerle * @date 2025-04-08 */ @Slf4j @Service @RequiredArgsConstructor public class ChatCostServiceImpl implements IChatCostService { private final SysUserMapper sysUserMapper; private final IChatMessageService chatMessageService; private final IChatTokenService chatTokenService; private final IChatModelService chatModelService; /** * æ£é¤ç¨æ·ä½é¢ */ public void deductToken(ChatRequest chatRequest) { int tokens = TikTokensUtil.tokens(chatRequest.getModel(), chatRequest.getPrompt()); String modelName = chatRequest.getModel(); ChatMessageBo chatMessageBo = new ChatMessageBo(); // è®¡ç®æ»tokenæ° ChatToken chatToken = chatTokenService.queryByUserId(getUserId(), modelName); if (chatToken == null) { chatToken = new ChatToken(); chatToken.setToken(0); } int totalTokens = chatToken.getToken() + tokens; // 妿æ»tokenæ°å¤§äºçäº1000,è¿è¡è´¹ç¨æ£é¤ if (totalTokens >= 1000) { // 计ç®è´¹ç¨ int token1 = totalTokens / 1000; int token2 = totalTokens % 1000; if (token2 > 0) { // ä¿åå©ä½tokens chatToken.setModelName(modelName); chatToken.setUserId(getUserId()); chatToken.setToken(token2); chatTokenService.editToken(chatToken); } else { chatTokenService.resetToken(getUserId(), modelName); } ChatModelVo chatModelVo = chatModelService.selectModelByName(modelName); double cost = chatModelVo.getModelPrice(); if (BillingType.TIMES.getCode().equals(chatModelVo.getModelType())) { // ææ¬¡æ°æ£è´¹ deductUserBalance(getUserId(), cost); chatMessageBo.setDeductCost(cost); }else { // ætokenæ£è´¹ Double numberCost = token1 * cost; deductUserBalance(chatMessageBo.getUserId(), numberCost); chatMessageBo.setDeductCost(numberCost); } chatMessageBo.setContent(chatRequest.getPrompt()); } else { deductUserBalance(getUserId(), 0.0); chatMessageBo.setDeductCost(0d); chatMessageBo.setRemark("䏿»¡1kToken,è®¡å ¥ä¸ä¸æ¬¡!"); chatToken.setToken(totalTokens); chatToken.setModelName(chatMessageBo.getModelName()); chatToken.setUserId(chatMessageBo.getUserId()); chatTokenService.editToken(chatToken); } // ä¿åæ¶æ¯è®°å½ chatMessageService.insertByBo(chatMessageBo); } /** * ä»ç¨æ·ä½é¢ä¸æ£é¤è´¹ç¨ * * @param userId ç¨æ·ID * @param numberCost è¦æ£é¤çè´¹ç¨ */ @Override public void deductUserBalance(Long userId, Double numberCost) { SysUser sysUser = sysUserMapper.selectById(userId); if (sysUser == null) { return; } Double userBalance = sysUser.getUserBalance(); if (userBalance < numberCost || userBalance == 0) { throw new ServiceException("ä½é¢ä¸è¶³, 请å å¼"); } sysUserMapper.update(null, new LambdaUpdateWrapper<SysUser>() .set(SysUser::getUserBalance, Math.max(userBalance - numberCost, 0)) .eq(SysUser::getUserId, userId)); } /** * æ£é¤ä»»å¡è´¹ç¨ */ @Override public void taskDeduct(String type,String prompt, double cost) { // å¤æç¨æ·æ¯å¦ä»è´¹ checkUserGrade(); // æ£é¤è´¹ç¨ deductUserBalance(getUserId(), cost); // ä¿åæ¶æ¯è®°å½ ChatMessageBo chatMessageBo = new ChatMessageBo(); chatMessageBo.setUserId(getUserId()); chatMessageBo.setModelName(type); chatMessageBo.setContent(prompt); chatMessageBo.setDeductCost(cost); chatMessageBo.setTotalTokens(0); chatMessageService.insertByBo(chatMessageBo); } /** * å¤æç¨æ·æ¯å¦ä»è´¹ */ @Override public void checkUserGrade() { SysUser sysUser = sysUserMapper.selectById(getUserId()); if(UserGradeType.UNPAID.getCode().equals(sysUser.getUserGrade())){ throw new BaseException("该模åä» éä»è´¹ç¨æ·ä½¿ç¨ã请å级å¥é¤ï¼å¼å¯é«æä½éªä¹æ ï¼"); } } /** * è·åç¨æ·Id */ public Long getUserId() { LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser == null) { throw new BaseException("ç¨æ·æªç»å½ï¼"); } return loginUser.getUserId(); } } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java
@@ -1,8 +1,11 @@ package org.ruoyi.chat.service.chat.impl; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.extra.servlet.ServletUtil; import cn.hutool.core.collection.CollectionUtil; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.protobuf.ServiceException; import com.zhipu.oapi.ClientV4; import com.zhipu.oapi.service.v4.tools.*; import io.github.ollama4j.OllamaAPI; import io.github.ollama4j.models.chat.OllamaChatMessage; import io.github.ollama4j.models.chat.OllamaChatMessageRole; @@ -13,11 +16,13 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.ruoyi.chat.config.ChatConfig; import org.ruoyi.chat.listener.SSEEventSourceListener; import org.ruoyi.chat.service.chat.IChatCostService; import org.ruoyi.chat.service.chat.ISseService; import org.ruoyi.common.chat.config.ChatConfig; import org.ruoyi.common.chat.domain.request.ChatRequest; import org.ruoyi.chat.util.IpUtil; import org.ruoyi.common.chat.request.ChatRequest; import org.ruoyi.common.chat.entity.Tts.TextToSpeech; import org.ruoyi.common.chat.entity.chat.ChatCompletion; import org.ruoyi.common.chat.entity.chat.ChatCompletionResponse; @@ -26,12 +31,17 @@ import org.ruoyi.common.chat.entity.files.UploadFileResponse; import org.ruoyi.common.chat.entity.whisper.WhisperResponse; import org.ruoyi.common.chat.openai.OpenAiStreamClient; import org.ruoyi.common.core.service.ConfigService; import org.ruoyi.common.core.utils.StringUtils; import org.ruoyi.common.core.utils.file.FileUtils; import org.ruoyi.common.core.utils.file.MimeTypeUtils; import org.ruoyi.common.redis.utils.RedisUtils; import org.ruoyi.domain.vo.ChatModelVo; import org.ruoyi.service.EmbeddingService; import org.ruoyi.service.IChatModelService; import org.ruoyi.service.VectorStoreService; import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.Resource; import org.springframework.http.MediaType; @@ -48,8 +58,12 @@ import java.nio.file.Path; import java.time.Duration; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; @Service @Slf4j @@ -62,33 +76,80 @@ private final IChatModelService chatModelService; private final EmbeddingService embeddingService; private final VectorStoreService vectorStore; private final ConfigService configService; private final IChatCostService chatCostService; private static final String requestIdTemplate = "mycompany-%d"; private static final ObjectMapper mapper = new ObjectMapper(); @Override public SseEmitter sseChat(ChatRequest chatRequest, HttpServletRequest request) { SseEmitter sseEmitter = new SseEmitter(0L); SSEEventSourceListener openAIEventSourceListener = new SSEEventSourceListener(sseEmitter); // è·åå¯¹è¯æ¶æ¯å表 List<Message> messages = chatRequest.getMessages(); // ç¨æ·å¯¹è¯å 容 String chatString = null; try { if (StpUtil.isLogin()) { // éè¿æ¨¡ååç§°æ¥è¯¢æ¨¡åä¿¡æ¯ ChatModelVo chatModelVo = chatModelService.selectModelByName(chatRequest.getModel()); // æå»ºapi请æ±å®¢æ·ç«¯ openAiStreamClient = chatConfig.createOpenAiStreamClient(chatModelVo.getApiHost(), chatModelVo.getApiKey()); // 设置é»è®¤æç¤ºè¯ Message sysMessage = Message.builder().content(chatModelVo.getSystemPrompt()).role(Message.Role.SYSTEM).build(); messages.add(0,sysMessage); // 模å设置é»è®¤æç¤ºè¯ // æ¥è¯¢åéåºç¸å ³ä¿¡æ¯å å ¥å°ä¸ä¸æ if(chatRequest.getKid()!=null){ List<Message> knMessages = new ArrayList<>(); String content = messages.get(messages.size() - 1).getContent().toString(); List<String> nearestList; List<Double> queryVector = embeddingService.getQueryVector(content, chatRequest.getKid()); nearestList = vectorStore.nearest(queryVector, chatRequest.getKid()); for (String prompt : nearestList) { Message userMessage = Message.builder().content(prompt).role(Message.Role.USER).build(); knMessages.add(userMessage); } Message userMessage = Message.builder().content(content + (!nearestList.isEmpty() ? "\n\n注æï¼åçé®é¢æ¶ï¼é¡»ä¸¥æ ¼æ ¹æ®æç»ä½ çç³»ç»ä¸ä¸æå 容åæè¿è¡åçï¼è¯·ä¸è¦èªå·±åæ¥,åçæ¶ä¿æåæ¥ææ¬çæ®µè½å±çº§" : "")).role(Message.Role.USER).build(); knMessages.add(userMessage); messages.addAll(knMessages); } // æ¯å¦å¼å¯èç½æ¥è¯¢ // è·åç¨æ·å¯¹è¯ä¿¡æ¯ Object content = messages.get(messages.size() - 1).getContent(); if (content instanceof List<?> listContent) { if (CollectionUtil.isNotEmpty(listContent)) { chatString = listContent.get(0).toString(); } } else if (content instanceof String) { chatString = (String) content; } // å è½½èç½ä¿¡æ¯ if(chatRequest.getSearch()){ Message message = Message.builder().role(Message.Role.ASSISTANT).content("èç½ä¿¡æ¯:"+webSearch(chatString)).build(); messages.add(message); } }else { // æªç»å½ç¨æ·éå¶å¯¹è¯æ¬¡æ°,é»è®¤5次 String clientIp = ServletUtil.getClientIP((javax.servlet.http.HttpServletRequest) request,"X-Forwarded-For"); // æªç»å½ç¨æ·éå¶å¯¹è¯æ¬¡æ° String clientIp = IpUtil.getClientIp(request); // 访客æ¯å¤©é»è®¤åªè½å¯¹è¯5次 int timeWindowInSeconds = 5; String redisKey = "visitor:" + clientIp; String redisKey = "clientIp:" + clientIp; int count = 0; if (RedisUtils.getCacheObject(redisKey) == null) { // å½åè®¿é®æ¬¡æ° // ç¼åæææ¶é´1天 RedisUtils.setCacheObject(redisKey, count, Duration.ofSeconds(86400)); }else { count = RedisUtils.getCacheObject(redisKey); @@ -104,13 +165,11 @@ .builder() .messages(messages) .model(chatRequest.getModel()) .temperature(chatRequest.getTemperature()) .topP(chatRequest.getTop_p()) .stream(true) .stream(chatRequest.getStream()) .build(); openAiStreamClient.streamChatCompletion(completion, openAIEventSourceListener); // ä¿åæ¶æ¯è®°å½ å¹¶æ£é¤è´¹ç¨ chatCostService.deductToken(chatRequest); } catch (Exception e) { String message = e.getMessage(); sendErrorEvent(sseEmitter, message); @@ -147,7 +206,6 @@ if (body != null) { // å°ResponseBody转æ¢ä¸ºInputStreamResource InputStreamResource resource = new InputStreamResource(body.byteStream()); // å建并è¿åResponseEntity return ResponseEntity.ok() .contentType(MediaType.parseMediaType("audio/mpeg")) @@ -289,4 +347,58 @@ ChatCompletionResponse chatCompletionResponse = openAiStreamClient.chatCompletion(chatCompletion); return chatCompletionResponse.getChoices().get(0).getMessage().getContent().toString(); } public String webSearch (String prompt) { String zhipuValue = configService.getConfigValue("zhipu", "key"); if(StringUtils.isEmpty(zhipuValue)){ throw new IllegalStateException("zhipu config value is empty,请å¨chat_configä¸é ç½®zhipu keyä¿¡æ¯"); }else { ClientV4 client = new ClientV4.Builder(zhipuValue) .networkConfig(300, 100, 100, 100, TimeUnit.SECONDS) .connectionPool(new okhttp3.ConnectionPool(8, 1, TimeUnit.SECONDS)) .build(); SearchChatMessage jsonNodes = new SearchChatMessage(); jsonNodes.setRole(Message.Role.USER.getName()); jsonNodes.setContent(prompt); String requestId = String.format(requestIdTemplate, System.currentTimeMillis()); WebSearchParamsRequest chatCompletionRequest = WebSearchParamsRequest.builder() .model("web-search-pro") .stream(Boolean.TRUE) .messages(Collections.singletonList(jsonNodes)) .requestId(requestId) .build(); WebSearchApiResponse webSearchApiResponse = client.webSearchProStreamingInvoke(chatCompletionRequest); List<ChoiceDelta> choices = new ArrayList<>(); if (webSearchApiResponse.isSuccess()) { AtomicBoolean isFirst = new AtomicBoolean(true); AtomicReference<WebSearchPro> lastAccumulator = new AtomicReference<>(); webSearchApiResponse.getFlowable().map(result -> result) .doOnNext(accumulator -> { { if (isFirst.getAndSet(false)) { log.info("Response: "); } ChoiceDelta delta = accumulator.getChoices().get(0).getDelta(); if (delta != null && delta.getToolCalls() != null) { log.info("tool_calls: {}", mapper.writeValueAsString(delta.getToolCalls())); } choices.add(delta); } }) .doOnComplete(() -> System.out.println("Stream completed.")) .doOnError(throwable -> System.err.println("Error: " + throwable)) .blockingSubscribe(); WebSearchPro chatMessageAccumulator = lastAccumulator.get(); webSearchApiResponse.setFlowable(null); webSearchApiResponse.setData(chatMessageAccumulator); } return choices.get(1).getToolCalls().toString(); } } } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/OpenAiVectorization.java
@@ -4,7 +4,6 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.ruoyi.common.chat.config.ChatConfig; import org.ruoyi.common.chat.entity.embeddings.Embedding; import org.ruoyi.common.chat.entity.embeddings.EmbeddingResponse; import org.ruoyi.common.chat.openai.OpenAiStreamClient; ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/util/IpUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,51 @@ package org.ruoyi.chat.util; import jakarta.servlet.http.HttpServletRequest; import org.springframework.util.StringUtils; /** * @author WangLe */ public class IpUtil { public static String getClientIp(HttpServletRequest request) { String ip = null; // è·å X-Forwarded-For ä¸ç第ä¸ä¸ªé unknown ç IP String xForwardedFor = request.getHeader("X-Forwarded-For"); if (StringUtils.hasLength(xForwardedFor) && !"unknown".equalsIgnoreCase(xForwardedFor)) { String[] ipAddresses = xForwardedFor.split(","); for (String ipAddress : ipAddresses) { if (StringUtils.hasLength(ipAddress) && !"unknown".equalsIgnoreCase(ipAddress.trim())) { ip = ipAddress.trim(); break; } } } // 妿 X-Forwarded-For 䏿²¡ææ¾å°ï¼å便¬¡å°è¯å ¶ä» header if (ip == null) { ip = request.getHeader("X-Real-IP"); } if (ip == null || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } // 妿以ä¸é½æ²¡æè·åå°ï¼åä½¿ç¨ RemoteAddr if (ip == null || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } } ruoyi-modules/ruoyi-demo/pom.xml
@@ -94,22 +94,6 @@ <artifactId>ruoyi-common-tenant</artifactId> </dependency> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-pay</artifactId> </dependency> <!-- çä¿¡ ç¨åªä¸ªå¯¼å ¥åªä¸ªä¾èµ --> <!-- <dependency>--> <!-- <groupId>com.aliyun</groupId>--> <!-- <artifactId>dysmsapi20170525</artifactId>--> <!-- </dependency>--> <!-- <dependency>--> <!-- <groupId>com.tencentcloudapi</groupId>--> <!-- <artifactId>tencentcloud-sdk-java-sms</artifactId>--> <!-- </dependency>--> </dependencies> </project> ruoyi-modules/ruoyi-system/pom.xml
@@ -2,13 +2,13 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-modules</artifactId> <version>${revision}</version> <relativePath>../pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>ruoyi-system</artifactId> @@ -18,6 +18,9 @@ <properties> <httpclient.version>4.5.14</httpclient.version> <jackson.version>2.15.2</jackson.version> </properties> <dependencies> @@ -32,26 +35,12 @@ <artifactId>ruoyi-common-doc</artifactId> </dependency> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-mybatis</artifactId> </dependency> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-translation</artifactId> </dependency> <!-- OSSåè½æ¨¡å --> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-oss</artifactId> </dependency> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-log</artifactId> </dependency> <!-- excel--> <dependency> @@ -98,30 +87,6 @@ <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-wechat</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>${httpclient.version}</version> </dependency> <!-- æ¯ä»åè½æ¨¡å --> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-pay</artifactId> </dependency> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-mail</artifactId> </dependency> @@ -131,6 +96,18 @@ <artifactId>ruoyi-system-api</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>${httpclient.version}</version> </dependency> </dependencies> </project> ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/config/WxMaConfiguration.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,133 @@ package org.ruoyi.system.config; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage; import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; import cn.binarywang.wx.miniapp.message.WxMaMessageHandler; import cn.binarywang.wx.miniapp.message.WxMaMessageRouter; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.error.WxRuntimeException; import org.ruoyi.system.properties.WxMaProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.io.File; import java.util.List; import java.util.stream.Collectors; /** * @author Admin */ @Slf4j @Configuration @EnableConfigurationProperties(WxMaProperties.class) public class WxMaConfiguration { private final WxMaProperties properties; @Autowired public WxMaConfiguration(WxMaProperties properties) { this.properties = properties; } @Bean public WxMaService wxMaService() { List<WxMaProperties.Config> configs = this.properties.getConfigs(); if (configs == null) { throw new WxRuntimeException("大å¥ï¼ææå çä¸é¡¹ç®é¦é¡µç说æï¼readmeæä»¶ï¼ï¼æ·»å ä¸ç¸å ³é ç½®ï¼æ³¨æå«é éäºï¼"); } WxMaService maService = new WxMaServiceImpl(); maService.setMultiConfigs( configs.stream() .map(a -> { WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); // WxMaDefaultConfigImpl config = new WxMaRedisConfigImpl(new JedisPool()); // 使ç¨ä¸é¢çé ç½®æ¶ï¼éè¦åæ¶å¼å ¥jedis-lockçä¾èµï¼å¦å伿¥ç±»æ æ³æ¾å°çå¼å¸¸ config.setAppid(a.getAppid()); config.setSecret(a.getSecret()); config.setToken(a.getToken()); config.setAesKey(a.getAesKey()); config.setMsgDataFormat(a.getMsgDataFormat()); return config; }).collect(Collectors.toMap(WxMaDefaultConfigImpl::getAppid, a -> a, (o, n) -> o))); return maService; } @Bean public WxMaMessageRouter wxMaMessageRouter(WxMaService wxMaService) { final WxMaMessageRouter router = new WxMaMessageRouter(wxMaService); router .rule().handler(logHandler).next() .rule().async(false).content("è®¢é æ¶æ¯").handler(subscribeMsgHandler).end() .rule().async(false).content("ææ¬").handler(textHandler).end() .rule().async(false).content("å¾ç").handler(picHandler).end() .rule().async(false).content("äºç»´ç ").handler(qrcodeHandler).end(); return router; } private final WxMaMessageHandler subscribeMsgHandler = (wxMessage, context, service, sessionManager) -> { service.getMsgService().sendSubscribeMsg(WxMaSubscribeMessage.builder() .templateId("æ¤å¤æ´æ¢ä¸ºèªå·±ç模æ¿id") .data(Lists.newArrayList( new WxMaSubscribeMessage.MsgData("keyword1", "339208499"))) .toUser(wxMessage.getFromUser()) .build()); return null; }; private final WxMaMessageHandler logHandler = (wxMessage, context, service, sessionManager) -> { log.info("æ¶å°æ¶æ¯ï¼" + wxMessage.toString()); service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("æ¶å°ä¿¡æ¯ä¸ºï¼" + wxMessage.toJson()) .toUser(wxMessage.getFromUser()).build()); return null; }; private final WxMaMessageHandler textHandler = (wxMessage, context, service, sessionManager) -> { service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("åå¤ææ¬æ¶æ¯") .toUser(wxMessage.getFromUser()).build()); return null; }; private final WxMaMessageHandler picHandler = (wxMessage, context, service, sessionManager) -> { try { WxMediaUploadResult uploadResult = service.getMediaService() .uploadMedia("image", "png", ClassLoader.getSystemResourceAsStream("tmp.png")); service.getMsgService().sendKefuMsg( WxMaKefuMessage .newImageBuilder() .mediaId(uploadResult.getMediaId()) .toUser(wxMessage.getFromUser()) .build()); } catch (WxErrorException e) { e.printStackTrace(); } return null; }; private final WxMaMessageHandler qrcodeHandler = (wxMessage, context, service, sessionManager) -> { try { final File file = service.getQrcodeService().createQrcode("123", 430); WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia("image", file); service.getMsgService().sendKefuMsg( WxMaKefuMessage .newImageBuilder() .mediaId(uploadResult.getMediaId()) .toUser(wxMessage.getFromUser()) .build()); } catch (WxErrorException e) { e.printStackTrace(); } return null; }; } ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/AuthController.java
@@ -2,10 +2,8 @@ import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.collection.CollUtil; import cn.hutool.json.JSONUtil; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; import org.ruoyi.common.core.constant.Constants; import org.ruoyi.common.core.domain.R; import org.ruoyi.common.core.domain.model.*; @@ -45,13 +43,13 @@ private final ISysTenantService tenantService; @PostMapping("/xcxLogin") public R<LoginVo> login(@Validated @RequestBody String xcxCode) throws WxErrorException { String openidFromCode = loginService.getOpenidFromCode((String) JSONUtil.parseObj(xcxCode).get("xcxCode")); LoginVo loginVo = loginService.mpLogin(openidFromCode); return R.ok(loginVo); } // @PostMapping("/xcxLogin") // public R<LoginVo> login(@Validated @RequestBody String xcxCode) throws WxErrorException { // // String openidFromCode = loginService.getOpenidFromCode((String) JSONUtil.parseObj(xcxCode).get("xcxCode")); // LoginVo loginVo = loginService.mpLogin(openidFromCode); // return R.ok(loginVo); // } /** * ç»å½æ¹æ³ ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/CaptchaController.java
@@ -95,7 +95,6 @@ String suffix = configService.getConfigValue("mail", "suffix"); String prompt = configService.getConfigValue("mail", "prompt"); if(StringUtils.isNotEmpty(suffix)){ // 卿çååå表 String[] invalidDomains = suffix.split(","); for (String domain : invalidDomains) { if (emailRequest.getUsername().endsWith(domain)) { @@ -108,7 +107,7 @@ String mailTitle = configService.getConfigValue("mail", "mailTitle"); String replacedModel = model.replace("{code}", code); try { MailUtils.sendHtml(emailRequest.getUsername(), mailTitle, replacedModel); MailUtils.sendHtml(emailRequest.getUsername(), mailTitle, replacedModel); } catch (Exception e) { log.error("é®ç®±éªè¯ç åéå¼å¸¸ => {}", e.getMessage()); return R.fail(e.getMessage()); ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/properties/WxMaProperties.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,52 @@ package org.ruoyi.system.properties; /** * 微信å°ç¨åºå±æ§é 置类 * * @author: wangle * @date: 2023/5/18 */ import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import java.util.List; /** * @author <a href="https://github.com/binarywang">Binary Wang</a> */ @Data @ConfigurationProperties(prefix = "wx.miniapp") public class WxMaProperties { private List<Config> configs; @Data public static class Config { /** * 设置微信å°ç¨åºçappid */ private String appid; /** * 设置微信å°ç¨åºçSecret */ private String secret; /** * 设置微信å°ç¨åºæ¶æ¯æå¡å¨é ç½®çtoken */ private String token; /** * 设置微信å°ç¨åºæ¶æ¯æå¡å¨é ç½®çEncodingAESKey */ private String aesKey; /** * æ¶æ¯æ ¼å¼ï¼XMLæè JSON */ private String msgDataFormat; } } ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/runner/SystemApplicationRunner.java
ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/SysLoginService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,433 @@ package org.ruoyi.system.service; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import cn.binarywang.wx.miniapp.util.WxMaConfigHolder; import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.math.NumberUtils; import org.ruoyi.common.core.constant.Constants; import org.ruoyi.common.core.constant.GlobalConstants; import org.ruoyi.common.core.constant.TenantConstants; import org.ruoyi.common.core.domain.dto.RoleDTO; import org.ruoyi.common.core.domain.model.LoginUser; import org.ruoyi.common.core.domain.model.VisitorLoginBody; import org.ruoyi.common.core.domain.model.VisitorLoginUser; import org.ruoyi.common.core.enums.*; import org.ruoyi.common.core.exception.user.CaptchaException; import org.ruoyi.common.core.exception.user.CaptchaExpireException; import org.ruoyi.common.core.exception.user.UserException; import org.ruoyi.common.core.service.ConfigService; import org.ruoyi.common.core.utils.*; import org.ruoyi.common.log.event.LogininforEvent; import org.ruoyi.common.redis.utils.RedisUtils; import org.ruoyi.common.satoken.utils.LoginHelper; import org.ruoyi.common.tenant.exception.TenantException; import org.ruoyi.common.tenant.helper.TenantHelper; import org.ruoyi.system.domain.SysUser; import org.ruoyi.system.domain.bo.SysUserBo; import org.ruoyi.system.domain.vo.LoginVo; import org.ruoyi.system.domain.vo.SysTenantVo; import org.ruoyi.system.domain.vo.SysUserVo; import org.ruoyi.system.mapper.SysUserMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.time.Duration; import java.util.Date; import java.util.List; import java.util.UUID; import java.util.function.Supplier; /** * ç»å½æ ¡éªæ¹æ³ * * @author Lion Li */ @RequiredArgsConstructor @Slf4j @Service public class SysLoginService { private final SysUserMapper userMapper; private final WxMaService wxMaService; private final ISysPermissionService permissionService; private final ISysTenantService tenantService; private final ISysUserService userService; private final ConfigService configService; @Value("${user.password.maxRetryCount}") private Integer maxRetryCount; @Value("${user.password.lockTime}") private Integer lockTime; /** * è·å微信 * @param xcxCode è·åxcxCode */ public String getOpenidFromCode(String xcxCode) { try { WxMaJscode2SessionResult sessionInfo = wxMaService.getUserService().getSessionInfo(xcxCode); return sessionInfo.getOpenid(); } catch (WxErrorException e) { e.printStackTrace(); return null; } } /** * ç»å½éªè¯ * * @param username ç¨æ·å * @param password å¯ç * @param code éªè¯ç * @param uuid å¯ä¸æ è¯ * @return ç»æ */ public String login(String tenantId, String username, String password, String code, String uuid) { SysUserVo user = loadUserByUsername(tenantId, username); checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword())); // æ¤å¤å¯æ ¹æ®ç»å½ç¨æ·çæ°æ®ä¸å èªè¡å建 loginUser LoginUser loginUser = buildLoginUser(user); // çætoken LoginHelper.loginByDevice(loginUser, DeviceType.PC); recordLogininfor(loginUser.getTenantId(), username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); recordLoginInfo(user.getUserId()); return StpUtil.getTokenValue(); } public String smsLogin(String tenantId, String phonenumber, String smsCode) { // æ ¡éªç§æ· checkTenant(tenantId); // éè¿ææºå·æ¥æ¾ç¨æ· SysUserVo user = loadUserByPhonenumber(tenantId, phonenumber); checkLogin(LoginType.SMS, tenantId, user.getUserName(), () -> !validateSmsCode(tenantId, phonenumber, smsCode)); // æ¤å¤å¯æ ¹æ®ç»å½ç¨æ·çæ°æ®ä¸å èªè¡å建 loginUser LoginUser loginUser = buildLoginUser(user); // çætoken LoginHelper.loginByDevice(loginUser, DeviceType.APP); recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); recordLoginInfo(user.getUserId()); return StpUtil.getTokenValue(); } public String emailLogin(String tenantId, String email, String emailCode) { // æ ¡éªç§æ· checkTenant(tenantId); // éè¿ææºå·æ¥æ¾ç¨æ· SysUserVo user = loadUserByEmail(tenantId, email); checkLogin(LoginType.EMAIL, tenantId, user.getUserName(), () -> !validateEmailCode(tenantId, email, emailCode)); // æ¤å¤å¯æ ¹æ®ç»å½ç¨æ·çæ°æ®ä¸å èªè¡å建 loginUser LoginUser loginUser = buildLoginUser(user); // çætoken LoginHelper.loginByDevice(loginUser, DeviceType.APP); recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); recordLoginInfo(user.getUserId()); return StpUtil.getTokenValue(); } /** * 游客ç»å½ * * @param loginBody * @return String * @Date 2023/5/18 **/ public void visitorLogin(VisitorLoginBody loginBody) { String openid = ""; // PC端游客ç»å½ if (LoginUserType.PC.getCode().equals(loginBody.getType())) { openid = loginBody.getCode(); } else { // å°ç¨åºå¿åç»å½ try { WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(loginBody.getCode()); openid = session.getOpenid(); } catch (WxErrorException e) { log.error(e.getMessage(), e); } finally { // æ¸ çThreadLocal WxMaConfigHolder.remove(); } } } public LoginVo mpLogin(String openid) { // ä½¿ç¨ openid æ¥è¯¢ç»å®ç¨æ· 妿ªç»å®ç¨æ· åæ ¹æ®ä¸å¡èªè¡å¤ç ä¾å¦ å建é»è®¤ç¨æ· SysUserVo user = userService.selectUserByOpenId(openid); VisitorLoginUser loginUser = new VisitorLoginUser(); if (ObjectUtil.isNull(user)) { SysUserBo sysUser = new SysUserBo(); // æ¹ä¸ºèªå¢ String name = "ç¨æ·" + UUID.randomUUID().toString().replace("-", ""); // 设置é»è®¤ç¨æ·å sysUser.setUserName(name); // 设置é»è®¤æµç§° sysUser.setNickName(name); // 设置é»è®¤å¯ç sysUser.setPassword(BCrypt.hashpw("123456")); // 设置微信openId sysUser.setOpenId(openid); String configValue = configService.getConfigValue("mail", "amount"); // 设置é»è®¤ä½é¢ sysUser.setUserBalance(NumberUtils.toDouble(configValue, 1)); // 注åç¨æ·,设置é»è®¤ç§æ·ä¸º0 SysUser registerUser = userService.registerUser(sysUser, "0"); // æå»ºç»å½ç¨æ·ä¿¡æ¯ loginUser.setTenantId("0"); loginUser.setUserId(registerUser.getUserId()); loginUser.setUsername(registerUser.getUserName()); loginUser.setUserType(UserType.APP_USER.getUserType()); loginUser.setOpenid(openid); loginUser.setNickName(registerUser.getNickName()); } else { // æ¤å¤å¯æ ¹æ®ç»å½ç¨æ·çæ°æ®ä¸å èªè¡å建 loginUser loginUser.setTenantId(user.getTenantId()); loginUser.setUserId(user.getUserId()); loginUser.setUsername(user.getUserName()); loginUser.setUserType(user.getUserType()); loginUser.setNickName(user.getNickName()); loginUser.setAvatar(user.getWxAvatar()); loginUser.setOpenid(openid); } // çætoken LoginHelper.loginByDevice(loginUser, DeviceType.XCX); recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); LoginVo loginVo = new LoginVo(); // çæä»¤ç loginVo.setToken(StpUtil.getTokenValue()); loginVo.setUserInfo(loginUser); return loginVo; } /** * éåºç»å½ */ public void logout() { try { LoginUser loginUser = LoginHelper.getLoginUser(); if (TenantHelper.isEnable() && LoginHelper.isSuperAdmin()) { // è¶ çº§ç®¡çå ç»åºæ¸ é¤å¨æç§æ· TenantHelper.clearDynamic(); } StpUtil.logout(); if (loginUser !=null) { recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGOUT, MessageUtils.message("user.logout.success")); } } catch (NotLoginException ignored) { } } /** * è®°å½ç»å½ä¿¡æ¯ * * @param tenantId ç§æ·ID * @param username ç¨æ·å * @param status ç¶æ * @param message æ¶æ¯å 容 */ private void recordLogininfor(String tenantId, String username, String status, String message) { LogininforEvent logininforEvent = new LogininforEvent(); logininforEvent.setTenantId(tenantId); logininforEvent.setUsername(username); logininforEvent.setStatus(status); logininforEvent.setMessage(message); logininforEvent.setRequest(ServletUtils.getRequest()); SpringUtils.context().publishEvent(logininforEvent); } /** * æ ¡éªçä¿¡éªè¯ç */ private boolean validateSmsCode(String tenantId, String phonenumber, String smsCode) { String code = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + phonenumber); if (StringUtils.isBlank(code)) { recordLogininfor(tenantId, phonenumber, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); throw new CaptchaExpireException(); } return code.equals(smsCode); } /** * æ ¡éªé®ç®±éªè¯ç */ private boolean validateEmailCode(String tenantId, String email, String emailCode) { String code = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + email); if (StringUtils.isBlank(code)) { recordLogininfor(tenantId, email, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); throw new CaptchaExpireException(); } return code.equals(emailCode); } /** * æ ¡éªéªè¯ç * * @param username ç¨æ·å * @param code éªè¯ç * @param uuid å¯ä¸æ è¯ */ public void validateCaptcha(String tenantId, String username, String code, String uuid) { String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.defaultString(uuid, ""); String captcha = RedisUtils.getCacheObject(verifyKey); RedisUtils.deleteObject(verifyKey); if (captcha == null) { recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); throw new CaptchaExpireException(); } if (!code.equalsIgnoreCase(captcha)) { recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")); throw new CaptchaException(); } } private SysUserVo loadUserByUsername(String tenantId, String username) { SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().select(SysUser::getUserName, SysUser::getStatus).eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId).eq(SysUser::getUserName, username)); if (ObjectUtil.isNull(user)) { log.info("ç»å½ç¨æ·ï¼{} ä¸åå¨.", username); throw new UserException("user.not.exists", username); } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { log.info("ç»å½ç¨æ·ï¼{} 已被åç¨.", username); throw new UserException("user.blocked", username); } if (TenantHelper.isEnable()) { return userMapper.selectTenantUserByUserName(username, tenantId); } return userMapper.selectUserByUserName(username); } private SysUserVo loadUserByPhonenumber(String tenantId, String phonenumber) { SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().select(SysUser::getPhonenumber, SysUser::getStatus).eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId).eq(SysUser::getPhonenumber, phonenumber)); if (ObjectUtil.isNull(user)) { log.info("ç»å½ç¨æ·ï¼{} ä¸åå¨.", phonenumber); throw new UserException("user.not.exists", phonenumber); } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { log.info("ç»å½ç¨æ·ï¼{} 已被åç¨.", phonenumber); throw new UserException("user.blocked", phonenumber); } if (TenantHelper.isEnable()) { return userMapper.selectTenantUserByPhonenumber(phonenumber, tenantId); } return userMapper.selectUserByPhonenumber(phonenumber); } private SysUserVo loadUserByEmail(String tenantId, String email) { SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().select(SysUser::getPhonenumber, SysUser::getStatus).eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId).eq(SysUser::getEmail, email)); if (ObjectUtil.isNull(user)) { log.info("ç»å½ç¨æ·ï¼{} ä¸åå¨.", email); throw new UserException("user.not.exists", email); } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { log.info("ç»å½ç¨æ·ï¼{} 已被åç¨.", email); throw new UserException("user.blocked", email); } if (TenantHelper.isEnable()) { return userMapper.selectTenantUserByEmail(email, tenantId); } return userMapper.selectUserByEmail(email); } /** * æå»ºç»å½ç¨æ· */ private LoginUser buildLoginUser(SysUserVo user) { LoginUser loginUser = new LoginUser(); loginUser.setTenantId(user.getTenantId()); loginUser.setUserId(user.getUserId()); loginUser.setDeptId(user.getDeptId()); loginUser.setUsername(user.getUserName()); loginUser.setAvatar(user.getAvatar()); loginUser.setUserType(user.getUserType()); loginUser.setMenuPermission(permissionService.getMenuPermission(user.getUserId())); loginUser.setRolePermission(permissionService.getRolePermission(user.getUserId())); loginUser.setDeptName(ObjectUtil.isNull(user.getDept()) ? "" : user.getDept().getDeptName()); List<RoleDTO> roles = BeanUtil.copyToList(user.getRoles(), RoleDTO.class); loginUser.setRoles(roles); return loginUser; } /** * è®°å½ç»å½ä¿¡æ¯ * * @param userId ç¨æ·ID */ public void recordLoginInfo(Long userId) { SysUser sysUser = new SysUser(); sysUser.setUserId(userId); sysUser.setLoginIp(ServletUtils.getClientIP()); sysUser.setLoginDate(DateUtils.getNowDate()); sysUser.setUpdateBy(userId); userMapper.updateById(sysUser); } /** * ç»å½æ ¡éª */ private void checkLogin(LoginType loginType, String tenantId, String username, Supplier<Boolean> supplier) { String errorKey = GlobalConstants.PWD_ERR_CNT_KEY + username; String loginFail = Constants.LOGIN_FAIL; // è·åç¨æ·ç»å½é误次æ°(å¯èªå®ä¹éå¶çç¥ ä¾å¦: key + username + ip) Integer errorNumber = RedisUtils.getCacheObject(errorKey); // é宿¶é´å ç»å½ åè¸¢åº if (ObjectUtil.isNotNull(errorNumber) && errorNumber.equals(maxRetryCount)) { recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime)); throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime); } if (supplier.get()) { // æ¯å¦ç¬¬ä¸æ¬¡ errorNumber = ObjectUtil.isNull(errorNumber) ? 1 : errorNumber + 1; // è¾¾å°è§å®éè¯¯æ¬¡æ° åéå®ç»å½ if (errorNumber.equals(maxRetryCount)) { RedisUtils.setCacheObject(errorKey, errorNumber, Duration.ofMinutes(lockTime)); recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime)); throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime); } else { // æªè¾¾å°è§å®éè¯¯æ¬¡æ° åéå¢ RedisUtils.setCacheObject(errorKey, errorNumber); recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber)); throw new UserException(loginType.getRetryLimitCount(), errorNumber); } } // ç»å½æå æ¸ ç©ºéè¯¯æ¬¡æ° RedisUtils.deleteObject(errorKey); } private void checkTenant(String tenantId) { if (!TenantHelper.isEnable()) { return; } if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) { return; } SysTenantVo tenant = tenantService.queryByTenantId(tenantId); if (ObjectUtil.isNull(tenant)) { log.info("ç»å½ç§æ·ï¼{} ä¸åå¨.", tenantId); throw new TenantException("tenant.not.exists"); } else if (TenantStatus.DISABLE.getCode().equals(tenant.getStatus())) { log.info("ç»å½ç§æ·ï¼{} 已被åç¨.", tenantId); throw new TenantException("tenant.blocked"); } else if (ObjectUtil.isNotNull(tenant.getExpireTime()) && new Date().after(tenant.getExpireTime())) { log.info("ç»å½ç§æ·ï¼{} å·²è¶ è¿æææ.", tenantId); throw new TenantException("tenant.expired"); } } } ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/SysRegisterService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,150 @@ package org.ruoyi.system.service; import cn.dev33.satoken.secure.BCrypt; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.math.NumberUtils; import org.ruoyi.common.core.constant.Constants; import org.ruoyi.common.core.constant.GlobalConstants; import org.ruoyi.common.core.domain.model.RegisterBody; import org.ruoyi.common.core.exception.base.BaseException; import org.ruoyi.common.core.exception.user.CaptchaException; import org.ruoyi.common.core.exception.user.CaptchaExpireException; import org.ruoyi.common.core.exception.user.UserException; import org.ruoyi.common.core.service.ConfigService; import org.ruoyi.common.core.utils.MessageUtils; import org.ruoyi.common.core.utils.ServletUtils; import org.ruoyi.common.core.utils.SpringUtils; import org.ruoyi.common.core.utils.StringUtils; import org.ruoyi.common.log.event.LogininforEvent; import org.ruoyi.common.redis.utils.RedisUtils; import org.ruoyi.system.domain.SysUser; import org.ruoyi.system.domain.SysUserRole; import org.ruoyi.system.domain.bo.SysUserBo; import org.ruoyi.system.domain.vo.SysUserVo; import org.ruoyi.system.mapper.SysUserRoleMapper; import org.springframework.stereotype.Service; /** * æ³¨åæ ¡éªæ¹æ³ * * @author Lion Li */ @RequiredArgsConstructor @Service public class SysRegisterService { private final ISysUserService userService; private final SysUserRoleMapper userRoleMapper; // private final ConfigService configService; /** * 注å */ public void register(RegisterBody registerBody) { String tenantId = Constants.TENANT_ID; if(StringUtils.isNotBlank(registerBody.getTenantId())){ tenantId = registerBody.getTenantId(); } String username = registerBody.getUsername(); String password = registerBody.getPassword(); // æ£æ¥éªè¯ç æ¯å¦æ£ç¡® validateEmail(username,registerBody.getCode()); SysUserBo sysUser = new SysUserBo(); sysUser.setDomainName(registerBody.getDomainName()); sysUser.setUserName(username); sysUser.setNickName(username); sysUser.setPassword(BCrypt.hashpw(password)); if (!userService.checkUserNameUnique(sysUser)) { throw new UserException("æ·»å ç¨æ·å¤±è´¥", username); } // String configValue = configService.getConfigValue("mail", "amount"); sysUser.setUserBalance(NumberUtils.toDouble("configValue",1)); SysUser user = userService.registerUser(sysUser, tenantId); if (user == null) { throw new UserException("ç¨æ·æ³¨å失败!"); } // 设置é»è®¤è§è² SysUserRole sysRole = new SysUserRole(); sysRole.setUserId(user.getUserId()); sysRole.setRoleId(1L); userRoleMapper.insert(sysRole); recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success")); } /** * éç½®å¯ç */ public void resetPassWord(RegisterBody registerBody) { String username = registerBody.getUsername(); String password = registerBody.getPassword(); SysUserVo user = userService.selectUserByUserName(username); if(user == null){ throw new UserException(String.format("ç¨æ·ã%sã,æªæ³¨å!",username)); } // æ£æ¥éªè¯ç æ¯å¦æ£ç¡® validateEmail(username,registerBody.getCode()); userService.resetUserPwd(user.getUserId(),BCrypt.hashpw(password)); } /** * æ ¡éªé®ç®±éªè¯ç * * @param username ç¨æ·å */ public void validateEmail(String username,String code) { String key = GlobalConstants.CAPTCHA_CODE_KEY + username; String captcha = RedisUtils.getCacheObject(key); if(code.equals(captcha)){ RedisUtils.deleteObject(captcha); }else { throw new BaseException("éªè¯ç é误,请éè¯ï¼"); } } /** * æ ¡éªéªè¯ç * * @param username ç¨æ·å * @param code éªè¯ç * @param uuid å¯ä¸æ è¯ */ public void validateCaptcha(String tenantId, String username, String code, String uuid) { String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.defaultString(uuid, ""); String captcha = RedisUtils.getCacheObject(verifyKey); RedisUtils.deleteObject(verifyKey); if (captcha == null) { recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.jcaptcha.expire")); throw new CaptchaExpireException(); } if (!code.equalsIgnoreCase(captcha)) { recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.jcaptcha.error")); throw new CaptchaException(); } } /** * è®°å½ç»å½ä¿¡æ¯ * * @param tenantId ç§æ·ID * @param username ç¨æ·å * @param status ç¶æ * @param message æ¶æ¯å 容 * @return */ private void recordLogininfor(String tenantId, String username, String status, String message) { LogininforEvent logininforEvent = new LogininforEvent(); logininforEvent.setTenantId(tenantId); logininforEvent.setUsername(username); logininforEvent.setStatus(status); logininforEvent.setMessage(message); logininforEvent.setRequest(ServletUtils.getRequest()); SpringUtils.context().publishEvent(logininforEvent); } } script/docker/database.yml
ÎļþÒÑɾ³ý script/docker/docker-compose.yml
ÎļþÒÑɾ³ý script/docker/nginx/conf/nginx.conf
ÎļþÒÑɾ³ý script/docker/redis/conf/redis.conf
ÎļþÒÑɾ³ý script/docker/redis/data/README.md
ÎļþÒÑɾ³ý script/sql/update/updatdata20250402.sql
@@ -1 +1 @@ INSERT INTO `ry-vue`.`chat_app_store` (`id`, `name`, `description`, `avatar`, `app_url`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (7, '微信æºå¨äºº', '微信æºå¨äºº', 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2025/04/02/0557a7d68fa842bba952ce0d6ef38a2e.png', '/wxbot', NULL, NULL, NULL, NULL, NULL, NULL); INSERT INTO `chat_app_store` (`id`, `name`, `description`, `avatar`, `app_url`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (7, '微信æºå¨äºº', '微信æºå¨äºº', 'https://panda-1253683406.cos.ap-guangzhou.myqcloud.com/panda/2025/04/02/0557a7d68fa842bba952ce0d6ef38a2e.png', '/wxbot', NULL, NULL, NULL, NULL, NULL, NULL); script/sql/update/updatdata20250407-2.sql
ÎļþÒÑɾ³ý script/sql/update/updatdata20250407.sql
@@ -1,4 +1,4 @@ INSERT INTO `ruoyi-ai`.`chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907575746601119746, '000000', 'vector', 'text-embedding-3-small', 'text-embedding-3-small', 0, '2', '0', NULL, 'https://api.pandarobot.chat/', 'sk-cdBlIaZcufccm2RaDe547cBd054d49C7B0782eCa72A0052b', 103, 1, '2025-04-03 07:27:54', 1, '2025-04-03 07:27:54', 'text-embedding-3-small'); INSERT INTO `ruoyi-ai`.`chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907576007017066497, '000000', 'vector', 'quentinz/bge-large-zh-v1.5', 'bge-large-zh-v1.5', 0, '2', '0', NULL, 'https://api.pandarobot.chat/', 'cdBlIaZcufccm2RaDe547cBd054d49C7B0782eCa72A0052b', 103, 1, '2025-04-03 07:28:56', 1, '2025-04-03 07:28:56', 'bge-large-zh-v1.5'); INSERT INTO `ruoyi-ai`.`chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907576806191362049, '000000', 'vector', 'nomic-embed-text', 'nomic-embed-text', 0, '2', '0', NULL, 'http://127.0.0.1:11434/', 'nomic-embed-text', 103, 1, '2025-04-03 07:32:06', 1, '2025-04-03 07:32:06', 'nomic-embed-text'); INSERT INTO `ruoyi-ai`.`chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907577073490161665, '000000', 'vector', 'snowflake-arctic-embed', 'snowflake-arctic-embed', 0, '2', '0', NULL, 'http://127.0.0.1:11434/', 'snowflake-arctic-embed', 103, 1, '2025-04-03 07:33:10', 1, '2025-04-03 07:33:10', 'snowflake-arctic-embed'); INSERT INTO `chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907575746601119746, '000000', 'vector', 'text-embedding-3-small', 'text-embedding-3-small', 0, '2', '0', NULL, 'https://api.pandarobot.chat/', 'sk-cdBlIaZcufccm2RaDe547cBd054d49C7B0782eCa72A0052b', 103, 1, '2025-04-03 07:27:54', 1, '2025-04-03 07:27:54', 'text-embedding-3-small'); INSERT INTO `chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907576007017066497, '000000', 'vector', 'quentinz/bge-large-zh-v1.5', 'bge-large-zh-v1.5', 0, '2', '0', NULL, 'https://api.pandarobot.chat/', 'cdBlIaZcufccm2RaDe547cBd054d49C7B0782eCa72A0052b', 103, 1, '2025-04-03 07:28:56', 1, '2025-04-03 07:28:56', 'bge-large-zh-v1.5'); INSERT INTO `chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907576806191362049, '000000', 'vector', 'nomic-embed-text', 'nomic-embed-text', 0, '2', '0', NULL, 'http://127.0.0.1:11434/', 'nomic-embed-text', 103, 1, '2025-04-03 07:32:06', 1, '2025-04-03 07:32:06', 'nomic-embed-text'); INSERT INTO `chat_model` (`id`, `tenant_id`, `category`, `model_name`, `model_describe`, `model_price`, `model_type`, `model_show`, `system_prompt`, `api_host`, `api_key`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1907577073490161665, '000000', 'vector', 'snowflake-arctic-embed', 'snowflake-arctic-embed', 0, '2', '0', NULL, 'http://127.0.0.1:11434/', 'snowflake-arctic-embed', 103, 1, '2025-04-03 07:33:10', 1, '2025-04-03 07:33:10', 'snowflake-arctic-embed');