diff --git a/pom.xml b/pom.xml
index 7074a4b3..077f25f8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -336,6 +336,7 @@
ruoyi-sms
ruoyi-cai
ruoyi-yunxin
+ ruoyi-ad-websocket
pom
diff --git a/ruoyi-ad-websocket/pom.xml b/ruoyi-ad-websocket/pom.xml
new file mode 100644
index 00000000..0c5dc533
--- /dev/null
+++ b/ruoyi-ad-websocket/pom.xml
@@ -0,0 +1,88 @@
+
+
+ 4.0.0
+
+ com.ruoyi
+ ruoyi-vue-plus
+ 4.8.2
+
+
+ ruoyi-ad-websocket
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ true
+
+
+
+ com.mysql
+ mysql-connector-j
+
+
+
+ com.ruoyi
+ ruoyi-framework
+
+
+ com.ruoyi
+ ruoyi-system
+
+
+ forest-core
+ com.dtflys.forest
+
+
+
+
+
+ com.ruoyi
+ ruoyi-oss
+
+
+
+ com.ruoyi
+ ruoyi-cai
+
+
+
+
+ websocket
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+ true
+
+
+
+
+ repackage
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ 3.2.2
+
+ false
+ ${project.artifactId}
+
+
+
+
+
diff --git a/ruoyi-ad-websocket/src/main/java/com/ruoyi/RuoYiWebSocketApplication.java b/ruoyi-ad-websocket/src/main/java/com/ruoyi/RuoYiWebSocketApplication.java
new file mode 100644
index 00000000..8efb530d
--- /dev/null
+++ b/ruoyi-ad-websocket/src/main/java/com/ruoyi/RuoYiWebSocketApplication.java
@@ -0,0 +1,26 @@
+package com.ruoyi;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * 启动程序
+ *
+ * @author ruoyi
+ */
+
+@SpringBootApplication
+@EnableScheduling
+public class RuoYiWebSocketApplication {
+
+ public static void main(String[] args) {
+ System.setProperty("spring.devtools.restart.enabled", "false");
+ SpringApplication application = new SpringApplication(RuoYiWebSocketApplication.class);
+ application.setApplicationStartup(new BufferingApplicationStartup(2048));
+ application.run(args);
+ System.out.println("(♥◠‿◠)ノ゙ Web Socket 服务启动成功 ლ(´ڡ`ლ)゙");
+ }
+
+}
diff --git a/ruoyi-ad-websocket/src/main/java/com/ruoyi/RuoYiWebSocketServletInitializer.java b/ruoyi-ad-websocket/src/main/java/com/ruoyi/RuoYiWebSocketServletInitializer.java
new file mode 100644
index 00000000..5dfe42c7
--- /dev/null
+++ b/ruoyi-ad-websocket/src/main/java/com/ruoyi/RuoYiWebSocketServletInitializer.java
@@ -0,0 +1,18 @@
+package com.ruoyi;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+/**
+ * web容器中进行部署
+ *
+ * @author ruoyi
+ */
+public class RuoYiWebSocketServletInitializer extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+ return application.sources(RuoYiWebSocketApplication.class);
+ }
+
+}
diff --git a/ruoyi-ad-websocket/src/main/resources/application-dev.yml b/ruoyi-ad-websocket/src/main/resources/application-dev.yml
new file mode 100644
index 00000000..e8f8a600
--- /dev/null
+++ b/ruoyi-ad-websocket/src/main/resources/application-dev.yml
@@ -0,0 +1,178 @@
+--- # 监控中心配置
+#spring.boot.admin.client:
+# # 增加客户端开关
+# enabled: true
+# url: http://localhost:9090/admin
+# instance:
+# service-host-type: IP
+# username: ruoyi
+# password: 123456
+
+--- # xxl-job 配置
+xxl.job:
+ # 执行器开关
+ enabled: false
+ # 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。
+ admin-addresses: http://localhost:9100/xxl-job-admin
+ # 执行器通讯TOKEN:非空时启用
+ access-token: xxl-job
+ executor:
+ # 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册
+ appname: xxl-job-executor
+ # 28080 端口 随着主应用端口飘逸 避免集群冲突
+ port: 2${server.port}
+ # 执行器注册:默认IP:PORT
+ address:
+ # 执行器IP:默认自动获取IP
+ ip:
+ # 执行器运行日志文件存储磁盘路径
+ logpath: ./logs/xxl-job
+ # 执行器日志文件保存天数:大于3生效
+ logretentiondays: 30
+
+--- # 数据源配置
+spring:
+ datasource:
+ type: com.zaxxer.hikari.HikariDataSource
+ # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
+ dynamic:
+ # 性能分析插件(有性能损耗 不建议生产环境使用)
+ p6spy: true
+ # 设置默认的数据源或者数据源组,默认值即为 master
+ primary: master
+ # 严格模式 匹配不到数据源则报错
+ strict: true
+ datasource:
+ # 主库数据源
+ master:
+ type: ${spring.datasource.type}
+ driverClassName: com.mysql.cj.jdbc.Driver
+ # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
+ # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
+ url: jdbc:mysql://124.222.254.188:4306/cai-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
+ username: root
+ password: 383200134
+ # 从库数据源
+ slave:
+ lazy: true
+ type: ${spring.datasource.type}
+ driverClassName: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
+ username:
+ password:
+ hikari:
+ # 最大连接池数量
+ maxPoolSize: 20
+ # 最小空闲线程数量
+ minIdle: 10
+ # 配置获取连接等待超时的时间
+ connectionTimeout: 30000
+ # 校验超时时间
+ validationTimeout: 5000
+ # 空闲连接存活最大时间,默认10分钟
+ idleTimeout: 600000
+ # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
+ maxLifetime: 1800000
+ # 多久检查一次连接的活性
+ keepaliveTime: 30000
+
+--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
+spring:
+ redis:
+ # 地址
+ host: 124.222.254.188
+ # 端口,默认为6379
+ port: 9379
+ # 数据库索引
+ database: 15
+ # 密码(如没有密码请注释掉)
+ password: 383200134
+ # 连接超时时间
+ timeout: 15s
+ # 是否开启ssl
+ ssl: false
+
+redisson:
+ # redis key前缀
+ keyPrefix:
+ # 线程池数量
+ threads: 4
+ # Netty线程池数量
+ nettyThreads: 8
+ # 单节点配置
+ singleServerConfig:
+ # 客户端名称
+ clientName: ${ruoyi.name}
+ # 最小空闲连接数
+ connectionMinimumIdleSize: 8
+ # 连接池大小
+ connectionPoolSize: 32
+ # 连接空闲超时,单位:毫秒
+ idleConnectionTimeout: 10000
+ # 命令等待超时,单位:毫秒
+ timeout: 3000
+ # 发布和订阅连接池大小
+ subscriptionConnectionPoolSize: 50
+
+--- # mail 邮件发送
+mail:
+ enabled: false
+ host: smtp.163.com
+ port: 465
+ # 是否需要用户名密码验证
+ auth: true
+ # 发送方,遵循RFC-822标准
+ from: xxx@163.com
+ # 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
+ user: xxx@163.com
+ # 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助)
+ pass: xxxxxxxxxx
+ # 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。
+ starttlsEnable: true
+ # 使用SSL安全连接
+ sslEnable: true
+ # SMTP超时时长,单位毫秒,缺省值不超时
+ timeout: 0
+ # Socket连接超时值,单位毫秒,缺省值不超时
+ connectionTimeout: 0
+
+--- # sms 短信 支持 阿里云 腾讯云 云片 等等各式各样的短信服务商
+# https://wind.kim/doc/start 文档地址 各个厂商可同时使用
+sms:
+ # 阿里云 dysmsapi.aliyuncs.com
+ alibaba:
+ #请求地址 默认为 dysmsapi.aliyuncs.com 如无特殊改变可以不用设置
+ requestUrl: dysmsapi.aliyuncs.com
+ #阿里云的accessKey
+ accessKeyId: xxxxxxx
+ #阿里云的accessKeySecret
+ accessKeySecret: xxxxxxx
+ #短信签名
+ signature: 测试
+ tencent:
+ #请求地址默认为 sms.tencentcloudapi.com 如无特殊改变可不用设置
+ requestUrl: sms.tencentcloudapi.com
+ #腾讯云的accessKey
+ accessKeyId: xxxxxxx
+ #腾讯云的accessKeySecret
+ accessKeySecret: xxxxxxx
+ #短信签名
+ signature: 测试
+ #短信sdkAppId
+ sdkAppId: appid
+ #地域信息默认为 ap-guangzhou 如无特殊改变可不用设置
+ territory: ap-guangzhou
+spring:
+ rabbitmq:
+ addresses: 124.222.254.188 #ip地址
+ username: admin # 账号
+ password: 383200134 # 密码
+ port: 5672
+ virtual-host: /cai-dev
+agora:
+ app-id: app
+ key: 627b8e17b0c616c1346cba2d87e10251
+ secret: c47628fe2538
+yunxin:
+ app-key: 748496374b04344194c68b53e411e09c
+ app-secret: 77c09917d2de
diff --git a/ruoyi-ad-websocket/src/main/resources/application-prod.yml b/ruoyi-ad-websocket/src/main/resources/application-prod.yml
new file mode 100644
index 00000000..55edbf87
--- /dev/null
+++ b/ruoyi-ad-websocket/src/main/resources/application-prod.yml
@@ -0,0 +1,181 @@
+--- # 临时文件存储位置 避免临时文件被系统清理报错
+spring.servlet.multipart.location: /ruoyi/server/temp
+
+--- # 监控中心配置
+#spring.boot.admin.client:
+# # 增加客户端开关
+# enabled: false
+# url: http://localhost:9090/admin
+# instance:
+# service-host-type: IP
+# username: ruoyi
+# password: 123456
+
+--- # xxl-job 配置
+xxl.job:
+ # 执行器开关
+ enabled: false
+ # 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。
+ admin-addresses: http://localhost:9100/xxl-job-admin
+ # 执行器通讯TOKEN:非空时启用
+ access-token: xxl-job
+ executor:
+ # 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册
+ appname: xxl-job-executor
+ # 28080 端口 随着主应用端口飘逸 避免集群冲突
+ port: 2${server.port}
+ # 执行器注册:默认IP:PORT
+ address:
+ # 执行器IP:默认自动获取IP
+ ip:
+ # 执行器运行日志文件存储磁盘路径
+ logpath: ./logs/xxl-job
+ # 执行器日志文件保存天数:大于3生效
+ logretentiondays: 30
+
+--- # 数据源配置
+spring:
+ datasource:
+ type: com.zaxxer.hikari.HikariDataSource
+ # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
+ dynamic:
+ # 性能分析插件(有性能损耗 不建议生产环境使用)
+ p6spy: false
+ # 设置默认的数据源或者数据源组,默认值即为 master
+ primary: master
+ # 严格模式 匹配不到数据源则报错
+ strict: true
+ datasource:
+ # 主库数据源
+ master:
+ type: ${spring.datasource.type}
+ driverClassName: com.mysql.cj.jdbc.Driver
+ # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
+ # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
+ url: jdbc:mysql://localhost:4306/cai-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
+ username: root
+ password: 383200134
+ # 从库数据源
+ slave:
+ lazy: true
+ type: ${spring.datasource.type}
+ driverClassName: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
+ username:
+ password:
+ hikari:
+ # 最大连接池数量
+ maxPoolSize: 20
+ # 最小空闲线程数量
+ minIdle: 10
+ # 配置获取连接等待超时的时间
+ connectionTimeout: 30000
+ # 校验超时时间
+ validationTimeout: 5000
+ # 空闲连接存活最大时间,默认10分钟
+ idleTimeout: 600000
+ # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
+ maxLifetime: 1800000
+ # 多久检查一次连接的活性
+ keepaliveTime: 30000
+
+--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
+spring:
+ redis:
+ # 地址
+ host: localhost
+ # 端口,默认为6379
+ port: 9379
+ # 数据库索引
+ database: 15
+ # 密码(如没有密码请注释掉)
+ password: 383200134
+ # 连接超时时间
+ timeout: 10s
+ # 是否开启ssl
+ ssl: false
+
+redisson:
+ # redis key前缀
+ keyPrefix:
+ # 线程池数量
+ threads: 16
+ # Netty线程池数量
+ nettyThreads: 32
+ # 单节点配置
+ singleServerConfig:
+ # 客户端名称
+ clientName: ${ruoyi.name}
+ # 最小空闲连接数
+ connectionMinimumIdleSize: 32
+ # 连接池大小
+ connectionPoolSize: 64
+ # 连接空闲超时,单位:毫秒
+ idleConnectionTimeout: 10000
+ # 命令等待超时,单位:毫秒
+ timeout: 3000
+ # 发布和订阅连接池大小
+ subscriptionConnectionPoolSize: 50
+
+--- # mail 邮件发送
+mail:
+ enabled: false
+ host: smtp.163.com
+ port: 465
+ # 是否需要用户名密码验证
+ auth: true
+ # 发送方,遵循RFC-822标准
+ from: xxx@163.com
+ # 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
+ user: xxx@163.com
+ # 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助)
+ pass: xxxxxxxxxx
+ # 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。
+ starttlsEnable: true
+ # 使用SSL安全连接
+ sslEnable: true
+ # SMTP超时时长,单位毫秒,缺省值不超时
+ timeout: 0
+ # Socket连接超时值,单位毫秒,缺省值不超时
+ connectionTimeout: 0
+
+--- # sms 短信 支持 阿里云 腾讯云 云片 等等各式各样的短信服务商
+# https://wind.kim/doc/start 文档地址 各个厂商可同时使用
+sms:
+ # 阿里云 dysmsapi.aliyuncs.com
+ alibaba:
+ #请求地址 默认为 dysmsapi.aliyuncs.com 如无特殊改变可以不用设置
+ requestUrl: dysmsapi.aliyuncs.com
+ #阿里云的accessKey
+ accessKeyId: xxxxxxx
+ #阿里云的accessKeySecret
+ accessKeySecret: xxxxxxx
+ #短信签名
+ signature: 测试
+ tencent:
+ #请求地址默认为 sms.tencentcloudapi.com 如无特殊改变可不用设置
+ requestUrl: sms.tencentcloudapi.com
+ #腾讯云的accessKey
+ accessKeyId: xxxxxxx
+ #腾讯云的accessKeySecret
+ accessKeySecret: xxxxxxx
+ #短信签名
+ signature: 测试
+ #短信sdkAppId
+ sdkAppId: appid
+ #地域信息默认为 ap-guangzhou 如无特殊改变可不用设置
+ territory: ap-guangzhou
+spring:
+ rabbitmq:
+ addresses: 127.0.0.1 #ip地址
+ username: admin # 账号
+ password: 383200134 # 密码
+ port: 5672
+ virtual-host: /cai
+agora:
+ app-id: app
+ key: key
+ secret: secret
+yunxin:
+ app-key: 748496374b04344194c68b53e411e09c
+ app-secret: 77c09917d2de
diff --git a/ruoyi-ad-websocket/src/main/resources/application.yml b/ruoyi-ad-websocket/src/main/resources/application.yml
new file mode 100644
index 00000000..b406b37d
--- /dev/null
+++ b/ruoyi-ad-websocket/src/main/resources/application.yml
@@ -0,0 +1,247 @@
+# 项目相关配置
+ruoyi:
+ # 名称
+ name: RuoYi-Vue-Plus
+ # 版本
+ version: ${ruoyi-vue-plus.version}
+ # 版权年份
+ copyrightYear: 2023
+ # 缓存懒加载
+ cacheLazy: false
+ ser
+
+captcha:
+ # 页面 <参数设置> 可开启关闭 验证码校验
+ # 验证码类型 math 数组计算 char 字符验证
+ type: MATH
+ # line 线段干扰 circle 圆圈干扰 shear 扭曲干扰
+ category: CIRCLE
+ # 数字验证码位数
+ numberLength: 1
+ # 字符验证码长度
+ charLength: 4
+# 开发环境配置
+server:
+ # 服务器的HTTP端口,默认为8080
+ port: 8080
+ servlet:
+ # 应用的访问路径
+ context-path: /
+ # undertow 配置
+ undertow:
+ # HTTP post内容的最大大小。当值为-1时,默认值为大小是无限的
+ max-http-post-size: -1
+ # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
+ # 每块buffer的空间大小,越小的空间被利用越充分
+ buffer-size: 512
+ # 是否分配的直接内存
+ direct-buffers: true
+ threads:
+ # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
+ io: 8
+ # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
+ worker: 256
+
+# 日志配置
+logging:
+ level:
+ com.ruoyi: @logging.level@
+ org.springframework: warn
+ config: classpath:logback-plus.xml
+
+# 用户配置
+user:
+ password:
+ # 密码最大错误次数
+ maxRetryCount: 5
+ # 密码锁定时间(默认10分钟)
+ lockTime: 10
+
+# Spring配置
+spring:
+ main:
+ allow-circular-references: true
+ application:
+ name: ${ruoyi.name}
+ # 资源信息
+ messages:
+ # 国际化资源文件路径
+ basename: i18n/messages
+ profiles:
+ active: @profiles.active@
+ # 文件上传
+ servlet:
+ multipart:
+ # 单个文件大小
+ max-file-size: 10MB
+ # 设置总上传的文件大小
+ max-request-size: 20MB
+ # 服务模块
+ devtools:
+ restart:
+ # 热部署开关
+ enabled: true
+ mvc:
+ format:
+ date-time: yyyy-MM-dd HH:mm:ss
+ jackson:
+ # 日期格式化
+ date-format: yyyy-MM-dd HH:mm:ss
+ serialization:
+ # 格式化输出
+ indent_output: false
+ # 忽略无法转换的对象
+ fail_on_empty_beans: false
+ deserialization:
+ # 允许对象忽略json中不存在的属性
+ fail_on_unknown_properties: false
+
+# Sa-Token配置
+sa-token:
+ # token名称 (同时也是cookie名称)
+ token-name: Authorization
+ # token有效期 设为30天 (必定过期) 单位: 秒
+ timeout: 2592000
+ # 多端不同 token 有效期 可查看 LoginHelper.loginByDevice 方法自定义
+ # token最低活跃时间 (指定时间无操作就过期) 单位: 秒 86400
+ active-timeout: 2592000
+ # 允许动态设置 token 有效期
+ dynamic-active-timeout: true
+ # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
+ is-concurrent: true
+ # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
+ is-share: false
+ # 是否尝试从header里读取token
+ is-read-header: true
+ # 是否尝试从cookie里读取token
+ is-read-cookie: false
+ # token前缀
+ token-prefix: "Bearer"
+ # jwt秘钥
+ jwt-secret-key: abcdefghijklmnopqrstuvwxyz
+
+# security配置
+security:
+ # 排除路径
+ excludes:
+ # 静态资源
+# - /*.html
+# - /**/*.html
+# - /**/*.css
+# - /**/*.js
+ # 公共路径
+# - /favicon.ico
+# - /error
+ # swagger 文档配置
+# - /*/api-docs
+# - /*/api-docs/**
+# - /v3/api-docs/swagger-config
+# - /doc.html
+# - /doc.html#/
+# - /swagger-resources/**
+# - /webjars/**
+ # actuator 监控配置
+ # - /actuator
+ # - /actuator/**
+
+# MyBatisPlus配置
+# https://baomidou.com/config/
+mybatis-plus:
+ # 不支持多包, 如有需要可在注解配置 或 提升扫包等级
+ # 例如 com.**.**.mapper
+ mapperPackage: com.ruoyi.**.mapper
+ # 对应的 XML 文件位置
+ mapperLocations: classpath*:mapper/**/*Mapper.xml
+ # 实体扫描,多个package用逗号或者分号分隔
+ typeAliasesPackage: com.ruoyi.**.domain
+ # 启动时是否检查 MyBatis XML 文件的存在,默认不检查
+ checkConfigLocation: false
+ configuration:
+ # 自动驼峰命名规则(camel case)映射
+ mapUnderscoreToCamelCase: true
+ # MyBatis 自动映射策略
+ # NONE:不启用 PARTIAL:只对非嵌套 resultMap 自动映射 FULL:对所有 resultMap 自动映射
+ autoMappingBehavior: PARTIAL
+ # MyBatis 自动映射时未知列或未知属性处理策
+ # NONE:不做处理 WARNING:打印相关警告 FAILING:抛出异常和详细信息
+ autoMappingUnknownColumnBehavior: NONE
+ # 更详细的日志输出 会有性能损耗 org.apache.ibatis.logging.stdout.StdOutImpl
+ # 关闭日志记录 (可单纯使用 p6spy 分析) org.apache.ibatis.logging.nologging.NoLoggingImpl
+ # 默认日志输出 org.apache.ibatis.logging.slf4j.Slf4jImpl
+ logImpl: org.apache.ibatis.logging.nologging.NoLoggingImpl
+ global-config:
+ # 是否打印 Logo banner
+ banner: true
+ dbConfig:
+ # 主键类型
+ # AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
+ idType: ASSIGN_ID
+ # 逻辑已删除值
+ logicDeleteValue: 2
+ # 逻辑未删除值
+ logicNotDeleteValue: 0
+ # 字段验证策略之 insert,在 insert 的时候的字段验证策略
+ # IGNORED 忽略 NOT_NULL 非NULL NOT_EMPTY 非空 DEFAULT 默认 NEVER 不加入 SQL
+ insertStrategy: NOT_NULL
+ # 字段验证策略之 update,在 update 的时候的字段验证策略
+ updateStrategy: NOT_NULL
+ # 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
+ where-strategy: NOT_NULL
+# 数据加密
+mybatis-encryptor:
+ # 是否开启加密
+ enable: false
+ # 默认加密算法
+ algorithm: BASE64
+ # 编码方式 BASE64/HEX。默认BASE64
+ encode: BASE64
+ # 安全秘钥 对称算法的秘钥 如:AES,SM4
+ password:
+ # 公私钥 非对称算法的公私钥 如:SM2,RSA
+ publicKey:
+ privateKey:
+
+springdoc:
+ api-docs:
+ # 是否开启接口文档
+ enabled: true
+ swagger-ui:
+ path: /swagger-ui.html
+ tags-sorter: alpha
+ operations-sorter: alpha
+ #这里定义了两个分组,可定义多个,也可以不定义
+ group-configs:
+ - group: 'default'
+ paths-to-match: '/api/**'
+ packages-to-scan: com.ruoyi.cai
+
+# 防止XSS攻击
+xss:
+ # 过滤开关
+ enabled: true
+ # 排除链接(多个用逗号分隔)
+ excludes: /system/notice
+ # 匹配链接
+ urlPatterns: /system/*,/monitor/*,/tool/*
+
+# 全局线程池相关配置
+thread-pool:
+ # 是否开启线程池
+ enabled: false
+ # 队列最大长度
+ queueCapacity: 128
+ # 线程池维护线程所允许的空闲时间
+ keepAliveSeconds: 300
+websocket:
+ enabled: true
+--- # 分布式锁 lock4j 全局配置
+lock4j:
+ # 获取分布式锁超时时间,默认为 3000 毫秒
+ acquire-timeout: 3000
+ # 分布式锁的超时时间,默认为 30 秒
+ expire: 30000
+
+--- # Actuator 监控端点的配置项
+management:
+ endpoints:
+ enabled-by-default: false
diff --git a/ruoyi-ad-websocket/src/main/resources/banner.txt b/ruoyi-ad-websocket/src/main/resources/banner.txt
new file mode 100644
index 00000000..21455e82
--- /dev/null
+++ b/ruoyi-ad-websocket/src/main/resources/banner.txt
@@ -0,0 +1,2 @@
+Application Version: ${ruoyi-vue-plus.version}
+Spring Boot Version: ${spring-boot.version}
diff --git a/ruoyi-ad-websocket/src/main/resources/i18n/messages.properties b/ruoyi-ad-websocket/src/main/resources/i18n/messages.properties
new file mode 100644
index 00000000..ffdd8f30
--- /dev/null
+++ b/ruoyi-ad-websocket/src/main/resources/i18n/messages.properties
@@ -0,0 +1,49 @@
+#错误消息
+not.null=* 必须填写
+user.jcaptcha.error=验证码错误
+user.jcaptcha.expire=验证码已失效
+user.not.exists=对不起, 您的账号:{0} 不存在.
+user.password.not.match=用户不存在/密码错误
+user.password.retry.limit.count=密码输入错误{0}次
+user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟
+user.password.delete=对不起,您的账号:{0} 已被删除
+user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
+role.blocked=角色已封禁,请联系管理员
+user.logout.success=退出成功
+length.not.valid=长度必须在{min}到{max}个字符之间
+user.username.not.blank=用户名不能为空
+user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
+user.username.length.valid=账户长度必须在{min}到{max}个字符之间
+user.password.not.blank=用户密码不能为空
+user.password.length.valid=用户密码长度必须在{min}到{max}个字符之间
+user.password.not.valid=* 5-50个字符
+user.email.not.valid=邮箱格式错误
+user.email.not.blank=邮箱不能为空
+user.phonenumber.not.blank=用户手机号不能为空
+user.mobile.phone.number.not.valid=手机号格式错误
+user.login.success=登录成功
+user.register.success=注册成功
+user.register.save.error=保存用户 {0} 失败,注册账号已存在
+user.register.error=注册失败,请联系系统管理人员
+user.notfound=请重新登录
+user.forcelogout=管理员强制退出,请重新登录
+user.unknown.error=未知错误,请重新登录
+##文件上传消息
+upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
允许的文件最大大小是:{0}MB!
+upload.filename.exceed.length=上传的文件名最长{0}个字符
+##权限
+no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
+no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
+no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
+no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
+no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
+no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
+repeat.submit.message=不允许重复提交,请稍候再试
+rate.limiter.message=访问过于频繁,请稍候再试
+sms.code.not.blank=短信验证码不能为空
+sms.code.retry.limit.count=短信验证码输入错误{0}次
+sms.code.retry.limit.exceed=短信验证码输入错误{0}次,帐户锁定{1}分钟
+email.code.not.blank=邮箱验证码不能为空
+email.code.retry.limit.count=邮箱验证码输入错误{0}次
+email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,帐户锁定{1}分钟
+xcx.code.not.blank=小程序code不能为空
diff --git a/ruoyi-ad-websocket/src/main/resources/i18n/messages_en_US.properties b/ruoyi-ad-websocket/src/main/resources/i18n/messages_en_US.properties
new file mode 100644
index 00000000..c1ca4391
--- /dev/null
+++ b/ruoyi-ad-websocket/src/main/resources/i18n/messages_en_US.properties
@@ -0,0 +1,49 @@
+#错误消息
+not.null=* Required fill in
+user.jcaptcha.error=Captcha error
+user.jcaptcha.expire=Captcha invalid
+user.not.exists=Sorry, your account: {0} does not exist
+user.password.not.match=User does not exist/Password error
+user.password.retry.limit.count=Password input error {0} times
+user.password.retry.limit.exceed=Password input error {0} times, account locked for {1} minutes
+user.password.delete=Sorry, your account:{0} has been deleted
+user.blocked=Sorry, your account: {0} has been disabled. Please contact the administrator
+role.blocked=Role disabled,please contact administrators
+user.logout.success=Exit successful
+length.not.valid=The length must be between {min} and {max} characters
+user.username.not.blank=Username cannot be blank
+user.username.not.valid=* 2 to 20 chinese characters, letters, numbers or underscores, and must start with a non number
+user.username.length.valid=Account length must be between {min} and {max} characters
+user.password.not.blank=Password cannot be empty
+user.password.length.valid=Password length must be between {min} and {max} characters
+user.password.not.valid=* 5-50 characters
+user.email.not.valid=Mailbox format error
+user.email.not.blank=Mailbox cannot be blank
+user.phonenumber.not.blank=Phone number cannot be blank
+user.mobile.phone.number.not.valid=Phone number format error
+user.login.success=Login successful
+user.register.success=Register successful
+user.register.save.error=Failed to save user {0}, The registered account already exists
+user.register.error=Register failed, please contact system administrator
+user.notfound=Please login again
+user.forcelogout=The administrator is forced to exit,please login again
+user.unknown.error=Unknown error, please login again
+##文件上传消息
+upload.exceed.maxSize=The uploaded file size exceeds the limit file size!
the maximum allowed file size is:{0}MB!
+upload.filename.exceed.length=The maximum length of uploaded file name is {0} characters
+##权限
+no.permission=You do not have permission to the data,please contact your administrator to add permissions [{0}]
+no.create.permission=You do not have permission to create data,please contact your administrator to add permissions [{0}]
+no.update.permission=You do not have permission to modify data,please contact your administrator to add permissions [{0}]
+no.delete.permission=You do not have permission to delete data,please contact your administrator to add permissions [{0}]
+no.export.permission=You do not have permission to export data,please contact your administrator to add permissions [{0}]
+no.view.permission=You do not have permission to view data,please contact your administrator to add permissions [{0}]
+repeat.submit.message=Repeat submit is not allowed, please try again later
+rate.limiter.message=Visit too frequently, please try again later
+sms.code.not.blank=Sms code cannot be blank
+sms.code.retry.limit.count=Sms code input error {0} times
+sms.code.retry.limit.exceed=Sms code input error {0} times, account locked for {1} minutes
+email.code.not.blank=Email code cannot be blank
+email.code.retry.limit.count=Email code input error {0} times
+email.code.retry.limit.exceed=Email code input error {0} times, account locked for {1} minutes
+xcx.code.not.blank=Mini program code cannot be blank
diff --git a/ruoyi-ad-websocket/src/main/resources/i18n/messages_zh_CN.properties b/ruoyi-ad-websocket/src/main/resources/i18n/messages_zh_CN.properties
new file mode 100644
index 00000000..ffdd8f30
--- /dev/null
+++ b/ruoyi-ad-websocket/src/main/resources/i18n/messages_zh_CN.properties
@@ -0,0 +1,49 @@
+#错误消息
+not.null=* 必须填写
+user.jcaptcha.error=验证码错误
+user.jcaptcha.expire=验证码已失效
+user.not.exists=对不起, 您的账号:{0} 不存在.
+user.password.not.match=用户不存在/密码错误
+user.password.retry.limit.count=密码输入错误{0}次
+user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟
+user.password.delete=对不起,您的账号:{0} 已被删除
+user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
+role.blocked=角色已封禁,请联系管理员
+user.logout.success=退出成功
+length.not.valid=长度必须在{min}到{max}个字符之间
+user.username.not.blank=用户名不能为空
+user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
+user.username.length.valid=账户长度必须在{min}到{max}个字符之间
+user.password.not.blank=用户密码不能为空
+user.password.length.valid=用户密码长度必须在{min}到{max}个字符之间
+user.password.not.valid=* 5-50个字符
+user.email.not.valid=邮箱格式错误
+user.email.not.blank=邮箱不能为空
+user.phonenumber.not.blank=用户手机号不能为空
+user.mobile.phone.number.not.valid=手机号格式错误
+user.login.success=登录成功
+user.register.success=注册成功
+user.register.save.error=保存用户 {0} 失败,注册账号已存在
+user.register.error=注册失败,请联系系统管理人员
+user.notfound=请重新登录
+user.forcelogout=管理员强制退出,请重新登录
+user.unknown.error=未知错误,请重新登录
+##文件上传消息
+upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
允许的文件最大大小是:{0}MB!
+upload.filename.exceed.length=上传的文件名最长{0}个字符
+##权限
+no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
+no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
+no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
+no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
+no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
+no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
+repeat.submit.message=不允许重复提交,请稍候再试
+rate.limiter.message=访问过于频繁,请稍候再试
+sms.code.not.blank=短信验证码不能为空
+sms.code.retry.limit.count=短信验证码输入错误{0}次
+sms.code.retry.limit.exceed=短信验证码输入错误{0}次,帐户锁定{1}分钟
+email.code.not.blank=邮箱验证码不能为空
+email.code.retry.limit.count=邮箱验证码输入错误{0}次
+email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,帐户锁定{1}分钟
+xcx.code.not.blank=小程序code不能为空
diff --git a/ruoyi-ad-websocket/src/main/resources/ip2region.xdb b/ruoyi-ad-websocket/src/main/resources/ip2region.xdb
new file mode 100644
index 00000000..31f96a1f
Binary files /dev/null and b/ruoyi-ad-websocket/src/main/resources/ip2region.xdb differ
diff --git a/ruoyi-ad-websocket/src/main/resources/logback-plus.xml b/ruoyi-ad-websocket/src/main/resources/logback-plus.xml
new file mode 100644
index 00000000..1d55ec52
--- /dev/null
+++ b/ruoyi-ad-websocket/src/main/resources/logback-plus.xml
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+ ${console.log.pattern}
+ utf-8
+
+
+
+
+
+ ${log.path}/sys-console.log
+
+
+ ${log.path}/sys-console.%d{yyyy-MM-dd}.log
+
+ 1
+
+
+ ${log.pattern}
+ utf-8
+
+
+
+ INFO
+
+
+
+
+
+ ${log.path}/sys-info.log
+
+
+
+ ${log.path}/sys-info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/sys-error.log
+
+
+
+ ${log.path}/sys-error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+
+ 0
+
+ 512
+
+
+
+
+
+
+
+ 0
+
+ 512
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ad-websocket/src/main/resources/spy.properties b/ruoyi-ad-websocket/src/main/resources/spy.properties
new file mode 100644
index 00000000..abbd8931
--- /dev/null
+++ b/ruoyi-ad-websocket/src/main/resources/spy.properties
@@ -0,0 +1,28 @@
+# p6spy 性能分析插件配置文件
+modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
+# 自定义日志打印
+logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
+#日志输出到控制台
+appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
+# 使用日志系统记录 sql
+#appender=com.p6spy.engine.spy.appender.Slf4JLogger
+# 设置 p6spy driver 代理
+#deregisterdrivers=true
+# 取消JDBC URL前缀
+useprefix=true
+# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
+excludecategories=info,debug,result,commit,resultset
+# 日期格式
+dateformat=yyyy-MM-dd HH:mm:ss
+# SQL语句打印时间格式
+databaseDialectTimestampFormat=yyyy-MM-dd HH:mm:ss
+# 实际驱动可多个
+#driverlist=org.h2.Driver
+# 是否开启慢SQL记录
+outagedetection=true
+# 慢SQL记录标准 2 秒
+outagedetectioninterval=2
+# 是否过滤 Log
+filter=true
+# 过滤 Log 时所排除的 sql 关键字,以逗号分隔
+exclude=SELECT 1
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/config/WebSocketConfig.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/config/WebSocketConfig.java
deleted file mode 100644
index 8b1949f0..00000000
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/config/WebSocketConfig.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.ruoyi.cai.ws.config;
-
-import cn.hutool.core.util.StrUtil;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.socket.WebSocketHandler;
-import org.springframework.web.socket.config.annotation.EnableWebSocket;
-import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
-import org.springframework.web.socket.server.HandshakeInterceptor;
-
-/**
- * WebSocket 配置
- *
- * @author zendwang
- */
-@Configuration
-@ConditionalOnProperty(value = "websocket.enabled", havingValue = "true")
-@EnableConfigurationProperties(WebSocketProperties.class)
-@EnableWebSocket
-public class WebSocketConfig {
-
- @Bean
- public WebSocketConfigurer webSocketConfigurer(HandshakeInterceptor handshakeInterceptor,
- WebSocketHandler webSocketHandler,
- WebSocketProperties webSocketProperties) {
- if (StrUtil.isBlank(webSocketProperties.getPath())) {
- webSocketProperties.setPath("/ws");
- }
- if (StrUtil.isBlank(webSocketProperties.getAllowedOrigins())) {
- webSocketProperties.setAllowedOrigins("*");
- }
- return registry -> registry
- .addHandler(webSocketHandler, webSocketProperties.getPath())
- .addInterceptors(handshakeInterceptor)
- .setAllowedOrigins(webSocketProperties.getAllowedOrigins());
- }
-
-}