Browse Source

框架版本升级至: springboot3.3、jdk17

master
xsx 2 years ago
parent
commit
ebb2f116c5
  1. 7
      im-commom/pom.xml
  2. 1
      im-commom/src/main/java/com/bx/imcommon/mq/RedisMQConfig.java
  3. 8
      im-commom/src/main/java/com/bx/imcommon/mq/RedisMQPullTask.java
  4. 1
      im-commom/src/main/java/com/bx/imcommon/mq/RedisMQTemplate.java
  5. 3
      im-commom/src/main/java/com/bx/imcommon/util/ThreadPoolExecutorFactory.java
  6. 67
      im-platform/pom.xml
  7. 3
      im-platform/src/main/java/com/bx/implatform/IMPlatformApp.java
  8. 1
      im-platform/src/main/java/com/bx/implatform/annotation/OnlineCheck.java
  9. 7
      im-platform/src/main/java/com/bx/implatform/aspect/OnlineCheckAspect.java
  10. 2
      im-platform/src/main/java/com/bx/implatform/aspect/RedisLockAspect.java
  11. 54
      im-platform/src/main/java/com/bx/implatform/config/RedisConfig.java
  12. 9
      im-platform/src/main/java/com/bx/implatform/config/RedissonConfig.java
  13. 51
      im-platform/src/main/java/com/bx/implatform/config/SwaggerConfig.java
  14. 15
      im-platform/src/main/java/com/bx/implatform/controller/FileController.java
  15. 26
      im-platform/src/main/java/com/bx/implatform/controller/FriendController.java
  16. 41
      im-platform/src/main/java/com/bx/implatform/controller/GroupController.java
  17. 37
      im-platform/src/main/java/com/bx/implatform/controller/GroupMessageController.java
  18. 19
      im-platform/src/main/java/com/bx/implatform/controller/LoginController.java
  19. 38
      im-platform/src/main/java/com/bx/implatform/controller/PrivateMessageController.java
  20. 13
      im-platform/src/main/java/com/bx/implatform/controller/SystemController.java
  21. 24
      im-platform/src/main/java/com/bx/implatform/controller/UserController.java
  22. 54
      im-platform/src/main/java/com/bx/implatform/controller/WebrtcGroupController.java
  23. 44
      im-platform/src/main/java/com/bx/implatform/controller/WebrtcPrivateController.java
  24. 10
      im-platform/src/main/java/com/bx/implatform/dto/GroupBanDTO.java
  25. 21
      im-platform/src/main/java/com/bx/implatform/dto/GroupMessageDTO.java
  26. 7
      im-platform/src/main/java/com/bx/implatform/dto/GroupUnbanDTO.java
  27. 20
      im-platform/src/main/java/com/bx/implatform/dto/LoginDTO.java
  28. 12
      im-platform/src/main/java/com/bx/implatform/dto/ModifyPwdDTO.java
  29. 16
      im-platform/src/main/java/com/bx/implatform/dto/PrivateMessageDTO.java
  30. 14
      im-platform/src/main/java/com/bx/implatform/dto/RegisterDTO.java
  31. 9
      im-platform/src/main/java/com/bx/implatform/dto/UserBanDTO.java
  32. 16
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupAnswerDTO.java
  33. 17
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupCandidateDTO.java
  34. 15
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupDeviceDTO.java
  35. 12
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupFailedDTO.java
  36. 13
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupInviteDTO.java
  37. 11
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupJoinDTO.java
  38. 16
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupOfferDTO.java
  39. 13
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupSetupDTO.java
  40. 22
      im-platform/src/main/java/com/bx/implatform/entity/Friend.java
  41. 41
      im-platform/src/main/java/com/bx/implatform/entity/Group.java
  42. 35
      im-platform/src/main/java/com/bx/implatform/entity/GroupMember.java
  43. 30
      im-platform/src/main/java/com/bx/implatform/entity/GroupMessage.java
  44. 25
      im-platform/src/main/java/com/bx/implatform/entity/PrivateMessage.java
  45. 64
      im-platform/src/main/java/com/bx/implatform/entity/User.java
  46. 6
      im-platform/src/main/java/com/bx/implatform/filter/CacheFilter.java
  47. 8
      im-platform/src/main/java/com/bx/implatform/filter/CacheHttpServletRequestWrapper.java
  48. 192
      im-platform/src/main/java/com/bx/implatform/generator/CodeGenerator.java
  49. 5
      im-platform/src/main/java/com/bx/implatform/interceptor/AuthInterceptor.java
  50. 4
      im-platform/src/main/java/com/bx/implatform/interceptor/XssInterceptor.java
  51. 2
      im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java
  52. 10
      im-platform/src/main/java/com/bx/implatform/listener/SystemMessageListener.java
  53. 1
      im-platform/src/main/java/com/bx/implatform/service/IWebrtcGroupService.java
  54. 4
      im-platform/src/main/java/com/bx/implatform/service/IWebrtcPrivateService.java
  55. 7
      im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java
  56. 2
      im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java
  57. 3
      im-platform/src/main/java/com/bx/implatform/session/SessionContext.java
  58. 15
      im-platform/src/main/java/com/bx/implatform/session/WebrtcUserInfo.java
  59. 1
      im-platform/src/main/java/com/bx/implatform/task/UserBannedConsumerTask.java
  60. 2
      im-platform/src/main/java/com/bx/implatform/util/SensitiveFilterUtil.java
  61. 14
      im-platform/src/main/java/com/bx/implatform/vo/FriendVO.java
  62. 13
      im-platform/src/main/java/com/bx/implatform/vo/GroupInviteVO.java
  63. 17
      im-platform/src/main/java/com/bx/implatform/vo/GroupMemberVO.java
  64. 27
      im-platform/src/main/java/com/bx/implatform/vo/GroupMessageVO.java
  65. 29
      im-platform/src/main/java/com/bx/implatform/vo/GroupVO.java
  66. 13
      im-platform/src/main/java/com/bx/implatform/vo/LoginVO.java
  67. 6
      im-platform/src/main/java/com/bx/implatform/vo/OnlineTerminalVO.java
  68. 19
      im-platform/src/main/java/com/bx/implatform/vo/PrivateMessageVO.java
  69. 7
      im-platform/src/main/java/com/bx/implatform/vo/SystemConfigVO.java
  70. 13
      im-platform/src/main/java/com/bx/implatform/vo/SystemMessageVO.java
  71. 9
      im-platform/src/main/java/com/bx/implatform/vo/UploadImageVO.java
  72. 28
      im-platform/src/main/java/com/bx/implatform/vo/UserVO.java
  73. 9
      im-platform/src/main/java/com/bx/implatform/vo/WebrtcGroupFailedVO.java
  74. 11
      im-platform/src/main/java/com/bx/implatform/vo/WebrtcGroupInfoVO.java
  75. 11
      im-platform/src/main/resources/application.yml
  76. 6
      im-server/pom.xml
  77. 33
      im-server/src/main/java/com/bx/imserver/config/RedisConfig.java
  78. 6
      im-server/src/main/java/com/bx/imserver/netty/IMServerGroup.java
  79. 53
      pom.xml

7
im-commom/pom.xml

@ -39,15 +39,9 @@
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId> <artifactId>spring-beans</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>${velocity.version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.datatype</groupId> <groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId> <artifactId>jackson-datatype-joda</artifactId>
<version>2.9.10</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
@ -63,7 +57,6 @@
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency> </dependency>
<!-- 引入redis --> <!-- 引入redis -->
<dependency> <dependency>

1
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQConfig.java

@ -4,7 +4,6 @@ import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer;

8
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQPullTask.java

@ -2,14 +2,18 @@ package com.bx.imcommon.mq;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.bx.imcommon.util.ThreadPoolExecutorFactory; import com.bx.imcommon.util.ThreadPoolExecutorFactory;
import jakarta.annotation.PreDestroy;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PreDestroy;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.*; import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;

1
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQTemplate.java

@ -1,6 +1,5 @@
package com.bx.imcommon.mq; package com.bx.imcommon.mq;
import cn.hutool.core.util.StrUtil;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;

3
im-commom/src/main/java/com/bx/imcommon/util/ThreadPoolExecutorFactory.java

@ -2,7 +2,8 @@ package com.bx.imcommon.util;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.*; import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
/** /**
* 创建单例线程池 * 创建单例线程池

67
im-platform/pom.xml

@ -18,10 +18,6 @@
<artifactId>im-client</artifactId> <artifactId>im-client</artifactId>
<version>2.0.0</version> <version>2.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
@ -29,29 +25,30 @@
<dependency> <dependency>
<groupId>com.baomidou</groupId> <groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId> <artifactId>mybatis-plus-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>druid</artifactId> <artifactId>druid</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>com.mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-j</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId> <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency> </dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.aspectj</groupId> <groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId> <artifactId>aspectjweaver</artifactId>
@ -62,8 +59,9 @@
<artifactId>spring-boot-starter-data-redis</artifactId> <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-boot-starter-security</artifactId> <artifactId>spring-security-crypto</artifactId>
<version>6.3.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.session</groupId> <groupId>org.springframework.session</groupId>
@ -77,27 +75,7 @@
<dependency> <dependency>
<groupId>io.minio</groupId> <groupId>io.minio</groupId>
<artifactId>minio</artifactId> <artifactId>minio</artifactId>
<version>8.4.3</version> <version>${minio.version}</version>
<exclusions>
<exclusion>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</exclusion>
<exclusion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.0</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>1.3.70</version>
</dependency> </dependency>
<!--thumbnailator图片处理--> <!--thumbnailator图片处理-->
<dependency> <dependency>
@ -112,8 +90,13 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.redisson</groupId> <groupId>org.redisson</groupId>
<artifactId>redisson</artifactId> <artifactId>redisson-spring-boot-starter</artifactId>
<version>3.17.3</version> <version>${redisson.version}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>
@ -123,7 +106,7 @@
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.3.RELEASE</version> <version>3.3.1</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>

3
im-platform/src/main/java/com/bx/implatform/IMPlatformApp.java

@ -4,7 +4,6 @@ import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.EnableAspectJAutoProxy;
@ -14,7 +13,7 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy;
@EnableAspectJAutoProxy(exposeProxy = true) @EnableAspectJAutoProxy(exposeProxy = true)
@ComponentScan(basePackages = {"com.bx"}) @ComponentScan(basePackages = {"com.bx"})
@MapperScan(basePackages = {"com.bx.implatform.mapper"}) @MapperScan(basePackages = {"com.bx.implatform.mapper"})
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})// 禁用secrity @SpringBootApplication
public class IMPlatformApp { public class IMPlatformApp {
public static void main(String[] args) { public static void main(String[] args) {

1
im-platform/src/main/java/com/bx/implatform/annotation/OnlineCheck.java

@ -4,7 +4,6 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;
/** /**
* 在线校验标注此注解的接口用户必须保持长连接否则将抛异常 * 在线校验标注此注解的接口用户必须保持长连接否则将抛异常

7
im-platform/src/main/java/com/bx/implatform/aspect/OnlineCheckAspect.java

@ -1,8 +1,6 @@
package com.bx.implatform.aspect; package com.bx.implatform.aspect;
import cn.hutool.core.util.StrUtil;
import com.bx.imclient.IMClient; import com.bx.imclient.IMClient;
import com.bx.implatform.annotation.RedisLock;
import com.bx.implatform.exception.GlobalException; import com.bx.implatform.exception.GlobalException;
import com.bx.implatform.session.SessionContext; import com.bx.implatform.session.SessionContext;
import com.bx.implatform.session.UserSession; import com.bx.implatform.session.UserSession;
@ -11,13 +9,8 @@ import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.redisson.api.RLock;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/** /**
* @author: blue * @author: blue
* @date: 2024-06-16 * @date: 2024-06-16

2
im-platform/src/main/java/com/bx/implatform/aspect/RedisLockAspect.java

@ -8,8 +8,6 @@ import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature; import org.aspectj.lang.reflect.MethodSignature;
import org.redisson.Redisson;
import org.redisson.RedissonLock;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.core.DefaultParameterNameDiscoverer;

54
im-platform/src/main/java/com/bx/implatform/config/RedisConfig.java

@ -1,18 +1,17 @@
package com.bx.implatform.config; package com.bx.implatform.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import jakarta.annotation.Resource;
import org.springframework.cache.CacheManager; import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.CacheErrorHandler;
import org.springframework.cache.interceptor.CacheResolver;
import org.springframework.cache.interceptor.SimpleCacheErrorHandler;
import org.springframework.cache.interceptor.SimpleCacheResolver;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
@ -24,9 +23,7 @@ import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer;
import javax.annotation.Resource;
import java.time.Duration; import java.time.Duration;
import java.util.Objects;
@EnableCaching @EnableCaching
@Configuration @Configuration
@ -40,7 +37,6 @@ public class RedisConfig extends CachingConfigurerSupport {
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setConnectionFactory(redisConnectionFactory);
// 设置值(value)的序列化采用jackson2JsonRedisSerializer // 设置值(value)的序列化采用jackson2JsonRedisSerializer
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer()); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer()); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer());
@ -51,42 +47,28 @@ public class RedisConfig extends CachingConfigurerSupport {
return redisTemplate; return redisTemplate;
} }
@Bean
public CacheManager cacheManager() {
// 设置redis缓存管理器
RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(600))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer()));
return RedisCacheManager.builder(factory).cacheDefaults(cacheConfiguration).build();
}
@Bean @Bean
public Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() { public Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper(); ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// 解决jackson2无法反序列化LocalDateTime的问题 // 解决jackson2无法反序列化LocalDateTime的问题
om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
om.registerModule(new JavaTimeModule()); om.registerModule(new JavaTimeModule());
om.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 忽略空值
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
jackson2JsonRedisSerializer.setObjectMapper(om); //忽略无效字段
return jackson2JsonRedisSerializer; om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
} return new Jackson2JsonRedisSerializer<>(om, Object.class);
@Bean
@Override
public CacheResolver cacheResolver() {
return new SimpleCacheResolver(Objects.requireNonNull(cacheManager()));
}
@Bean
@Override
public CacheErrorHandler errorHandler() {
// 用于捕获从Cache中进行CRUD时的异常的回调处理器。
return new SimpleCacheErrorHandler();
}
@Bean
@Override
public CacheManager cacheManager() {
// 设置redis缓存管理器
RedisCacheConfiguration cacheConfiguration =
RedisCacheConfiguration.defaultCacheConfig()
.disableCachingNullValues()
.entryTtl(Duration.ofMinutes(10))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer()));
return RedisCacheManager.builder(factory).cacheDefaults(cacheConfiguration).build();
} }
} }

9
im-platform/src/main/java/com/bx/implatform/config/RedissonConfig.java

@ -6,11 +6,8 @@ import org.redisson.api.RedissonClient;
import org.redisson.client.codec.StringCodec; import org.redisson.client.codec.StringCodec;
import org.redisson.config.Config; import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig; import org.redisson.config.SingleServerConfig;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties; import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/** /**
* @author: Blue * @author: Blue
@ -18,9 +15,9 @@ import org.springframework.context.annotation.Configuration;
* @version: 1.0 * @version: 1.0
*/ */
@Configuration //@Configuration
@ConditionalOnClass(Config.class) //@ConditionalOnClass(Config.class)
@EnableConfigurationProperties(RedisProperties.class) //@EnableConfigurationProperties(RedisProperties.class)
public class RedissonConfig { public class RedissonConfig {
@Bean @Bean

51
im-platform/src/main/java/com/bx/implatform/config/SwaggerConfig.java

@ -1,41 +1,38 @@
package com.bx.implatform.config; package com.bx.implatform.config;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration @Configuration
@EnableSwagger2
public class SwaggerConfig { public class SwaggerConfig {
@Bean @Bean
public Docket createRestApi() { public GroupedOpenApi userApi() {
String[] paths = {"/**"};
return new Docket(DocumentationType.SWAGGER_2) String[] packagedToMatch = {"com.bx"};
.apiInfo(apiInfo()) return GroupedOpenApi.builder().group("BoxIM")
.select() .pathsToMatch(paths)
//这里采用包含注解的方式来确定要显示的接口 .packagesToScan(packagedToMatch).build();
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
//这里采用包扫描的方式来确定要显示的接口
.paths(PathSelectors.any())
.build();
} }
private ApiInfo apiInfo() { @Bean
return new ApiInfoBuilder() public OpenAPI customOpenAPI() {
.title("IM Platform doc") Contact contact = new Contact();
.description("盒子IM API文档") contact.setName("Blue");
.termsOfServiceUrl("http://8.134.92.70/") return new OpenAPI().info(new Info()
.version("1.0") .title("Box-IM")
.build(); .description("盒子IM")
.contact(contact)
.version("3.0")
.termsOfService("https://www.boxim.online")
.license(new License().name("MIT")
.url("https://www.boxim.online")));
} }
} }

15
im-platform/src/main/java/com/bx/implatform/controller/FileController.java

@ -4,33 +4,34 @@ import com.bx.implatform.result.Result;
import com.bx.implatform.result.ResultUtils; import com.bx.implatform.result.ResultUtils;
import com.bx.implatform.service.thirdparty.FileService; import com.bx.implatform.service.thirdparty.FileService;
import com.bx.implatform.vo.UploadImageVO; import com.bx.implatform.vo.UploadImageVO;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@Slf4j @Slf4j
@RestController @RestController
@Api(tags = "文件上传") @Tag(name = "文件上传")
@RequiredArgsConstructor @RequiredArgsConstructor
public class FileController { public class FileController {
private final FileService fileService; private final FileService fileService;
@ApiOperation(value = "上传图片", notes = "上传图片,上传后返回原图和缩略图的url") @Operation(summary = "上传图片", description = "上传图片,上传后返回原图和缩略图的url")
@PostMapping("/image/upload") @PostMapping("/image/upload")
public Result<UploadImageVO> uploadImage(MultipartFile file) { public Result<UploadImageVO> uploadImage(@RequestParam("file") MultipartFile file) {
return ResultUtils.success(fileService.uploadImage(file)); return ResultUtils.success(fileService.uploadImage(file));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "上传文件", notes = "上传文件,上传后返回文件url") @Operation(summary = "上传文件", description = "上传文件,上传后返回文件url")
@PostMapping("/file/upload") @PostMapping("/file/upload")
public Result<String> uploadFile(MultipartFile file) { public Result<String> uploadFile(@RequestParam("file") MultipartFile file) {
return ResultUtils.success(fileService.uploadFile(file), ""); return ResultUtils.success(fileService.uploadFile(file), "");
} }

26
im-platform/src/main/java/com/bx/implatform/controller/FriendController.java

@ -6,17 +6,17 @@ import com.bx.implatform.result.ResultUtils;
import com.bx.implatform.service.IFriendService; import com.bx.implatform.service.IFriendService;
import com.bx.implatform.session.SessionContext; import com.bx.implatform.session.SessionContext;
import com.bx.implatform.vo.FriendVO; import com.bx.implatform.vo.FriendVO;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Api(tags = "好友") @Tag(name = "好友")
@RestController @RestController
@RequestMapping("/friend") @RequestMapping("/friend")
@RequiredArgsConstructor @RequiredArgsConstructor
@ -25,7 +25,7 @@ public class FriendController {
private final IFriendService friendService; private final IFriendService friendService;
@GetMapping("/list") @GetMapping("/list")
@ApiOperation(value = "好友列表", notes = "获取好友列表") @Operation(summary = "好友列表", description = "获取好友列表")
public Result<List<FriendVO>> findFriends() { public Result<List<FriendVO>> findFriends() {
List<Friend> friends = friendService.findFriendByUserId(SessionContext.getSession().getUserId()); List<Friend> friends = friendService.findFriendByUserId(SessionContext.getSession().getUserId());
List<FriendVO> vos = friends.stream().map(f -> { List<FriendVO> vos = friends.stream().map(f -> {
@ -40,28 +40,28 @@ public class FriendController {
@PostMapping("/add") @PostMapping("/add")
@ApiOperation(value = "添加好友", notes = "双方建立好友关系") @Operation(summary = "添加好友", description = "双方建立好友关系")
public Result addFriend(@NotEmpty(message = "好友id不可为空") @RequestParam("friendId") Long friendId) { public Result addFriend(@NotNull(message = "好友id不可为空") @RequestParam("friendId") Long friendId) {
friendService.addFriend(friendId); friendService.addFriend(friendId);
return ResultUtils.success(); return ResultUtils.success();
} }
@GetMapping("/find/{friendId}") @GetMapping("/find/{friendId}")
@ApiOperation(value = "查找好友信息", notes = "查找好友信息") @Operation(summary = "查找好友信息", description = "查找好友信息")
public Result<FriendVO> findFriend(@NotEmpty(message = "好友id不可为空") @PathVariable("friendId") Long friendId) { public Result<FriendVO> findFriend(@NotNull(message = "好友id不可为空") @PathVariable("friendId") Long friendId) {
return ResultUtils.success(friendService.findFriend(friendId)); return ResultUtils.success(friendService.findFriend(friendId));
} }
@DeleteMapping("/delete/{friendId}") @DeleteMapping("/delete/{friendId}")
@ApiOperation(value = "删除好友", notes = "解除好友关系") @Operation(summary = "删除好友", description = "解除好友关系")
public Result delFriend(@NotEmpty(message = "好友id不可为空") @PathVariable("friendId") Long friendId) { public Result delFriend(@NotNull(message = "好友id不可为空") @PathVariable("friendId") Long friendId) {
friendService.delFriend(friendId); friendService.delFriend(friendId);
return ResultUtils.success(); return ResultUtils.success();
} }
@PutMapping("/update") @PutMapping("/update")
@ApiOperation(value = "更新好友信息", notes = "更新好友头像或昵称") @Operation(summary = "更新好友信息", description = "更新好友头像或昵称")
public Result modifyFriend(@Valid @RequestBody FriendVO vo) { public Result modifyFriend(@Valid @RequestBody FriendVO vo) {
friendService.update(vo); friendService.update(vo);
return ResultUtils.success(); return ResultUtils.success();

41
im-platform/src/main/java/com/bx/implatform/controller/GroupController.java

@ -6,16 +6,16 @@ import com.bx.implatform.service.IGroupService;
import com.bx.implatform.vo.GroupInviteVO; import com.bx.implatform.vo.GroupInviteVO;
import com.bx.implatform.vo.GroupMemberVO; import com.bx.implatform.vo.GroupMemberVO;
import com.bx.implatform.vo.GroupVO; import com.bx.implatform.vo.GroupVO;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List; import java.util.List;
@Api(tags = "群聊") @Tag(name = "群聊")
@RestController @RestController
@RequestMapping("/group") @RequestMapping("/group")
@RequiredArgsConstructor @RequiredArgsConstructor
@ -23,61 +23,62 @@ public class GroupController {
private final IGroupService groupService; private final IGroupService groupService;
@ApiOperation(value = "创建群聊", notes = "创建群聊") @Operation(summary = "创建群聊", description = "创建群聊")
@PostMapping("/create") @PostMapping("/create")
public Result<GroupVO> createGroup(@Valid @RequestBody GroupVO vo) { public Result<GroupVO> createGroup(@Valid @RequestBody GroupVO vo) {
return ResultUtils.success(groupService.createGroup(vo)); return ResultUtils.success(groupService.createGroup(vo));
} }
@ApiOperation(value = "修改群聊信息", notes = "修改群聊信息") @Operation(summary = "修改群聊信息", description = "修改群聊信息")
@PutMapping("/modify") @PutMapping("/modify")
public Result<GroupVO> modifyGroup(@Valid @RequestBody GroupVO vo) { public Result<GroupVO> modifyGroup(@Valid @RequestBody GroupVO vo) {
return ResultUtils.success(groupService.modifyGroup(vo)); return ResultUtils.success(groupService.modifyGroup(vo));
} }
@ApiOperation(value = "解散群聊", notes = "解散群聊") @Operation(summary = "解散群聊", description = "解散群聊")
@DeleteMapping("/delete/{groupId}") @DeleteMapping("/delete/{groupId}")
public Result deleteGroup(@NotNull(message = "群聊id不能为空") @PathVariable Long groupId) { public Result deleteGroup(@NotNull(message = "群聊id不能为空") @PathVariable("groupId") Long groupId) {
groupService.deleteGroup(groupId); groupService.deleteGroup(groupId);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(value = "查询群聊", notes = "查询单个群聊信息") @Operation(summary = "查询群聊", description = "查询单个群聊信息")
@GetMapping("/find/{groupId}") @GetMapping("/find/{groupId}")
public Result<GroupVO> findGroup(@NotNull(message = "群聊id不能为空") @PathVariable Long groupId) { public Result<GroupVO> findGroup(@NotNull(message = "群聊id不能为空") @PathVariable("groupId") Long groupId) {
return ResultUtils.success(groupService.findById(groupId)); return ResultUtils.success(groupService.findById(groupId));
} }
@ApiOperation(value = "查询群聊列表", notes = "查询群聊列表") @Operation(summary = "查询群聊列表", description = "查询群聊列表")
@GetMapping("/list") @GetMapping("/list")
public Result<List<GroupVO>> findGroups() { public Result<List<GroupVO>> findGroups() {
return ResultUtils.success(groupService.findGroups()); return ResultUtils.success(groupService.findGroups());
} }
@ApiOperation(value = "邀请进群", notes = "邀请好友进群") @Operation(summary = "邀请进群", description = "邀请好友进群")
@PostMapping("/invite") @PostMapping("/invite")
public Result invite(@Valid @RequestBody GroupInviteVO vo) { public Result invite(@Valid @RequestBody GroupInviteVO vo) {
groupService.invite(vo); groupService.invite(vo);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(value = "查询群聊成员", notes = "查询群聊成员") @Operation(summary = "查询群聊成员", description = "查询群聊成员")
@GetMapping("/members/{groupId}") @GetMapping("/members/{groupId}")
public Result<List<GroupMemberVO>> findGroupMembers(@NotNull(message = "群聊id不能为空") @PathVariable Long groupId) { public Result<List<GroupMemberVO>> findGroupMembers(
@NotNull(message = "群聊id不能为空") @PathVariable("groupId") Long groupId) {
return ResultUtils.success(groupService.findGroupMembers(groupId)); return ResultUtils.success(groupService.findGroupMembers(groupId));
} }
@ApiOperation(value = "退出群聊", notes = "退出群聊") @Operation(summary = "退出群聊", description = "退出群聊")
@DeleteMapping("/quit/{groupId}") @DeleteMapping("/quit/{groupId}")
public Result quitGroup(@NotNull(message = "群聊id不能为空") @PathVariable Long groupId) { public Result quitGroup(@NotNull(message = "群聊id不能为空") @PathVariable("groupId") Long groupId) {
groupService.quitGroup(groupId); groupService.quitGroup(groupId);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(value = "踢出群聊", notes = "将用户踢出群聊") @Operation(summary = "踢出群聊", description = "将用户踢出群聊")
@DeleteMapping("/kick/{groupId}") @DeleteMapping("/kick/{groupId}")
public Result kickGroup(@NotNull(message = "群聊id不能为空") @PathVariable Long groupId, public Result kickGroup(@NotNull(message = "群聊id不能为空") @PathVariable("groupId") Long groupId,
@NotNull(message = "用户id不能为空") @RequestParam Long userId) { @NotNull(message = "用户id不能为空") @RequestParam Long userId) {
groupService.kickGroup(groupId, userId); groupService.kickGroup(groupId, userId);
return ResultUtils.success(); return ResultUtils.success();
} }

37
im-platform/src/main/java/com/bx/implatform/controller/GroupMessageController.java

@ -5,16 +5,16 @@ import com.bx.implatform.result.Result;
import com.bx.implatform.result.ResultUtils; import com.bx.implatform.result.ResultUtils;
import com.bx.implatform.service.IGroupMessageService; import com.bx.implatform.service.IGroupMessageService;
import com.bx.implatform.vo.GroupMessageVO; import com.bx.implatform.vo.GroupMessageVO;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List; import java.util.List;
@Api(tags = "群聊消息") @Tag(name = "群聊消息")
@RestController @RestController
@RequestMapping("/message/group") @RequestMapping("/message/group")
@RequiredArgsConstructor @RequiredArgsConstructor
@ -23,43 +23,44 @@ public class GroupMessageController {
private final IGroupMessageService groupMessageService; private final IGroupMessageService groupMessageService;
@PostMapping("/send") @PostMapping("/send")
@ApiOperation(value = "发送群聊消息", notes = "发送群聊消息") @Operation(summary = "发送群聊消息", description = "发送群聊消息")
public Result<Long> sendMessage(@Valid @RequestBody GroupMessageDTO vo) { public Result<Long> sendMessage(@Valid @RequestBody GroupMessageDTO vo) {
return ResultUtils.success(groupMessageService.sendMessage(vo)); return ResultUtils.success(groupMessageService.sendMessage(vo));
} }
@DeleteMapping("/recall/{id}") @DeleteMapping("/recall/{id}")
@ApiOperation(value = "撤回消息", notes = "撤回群聊消息") @Operation(summary = "撤回消息", description = "撤回群聊消息")
public Result<Long> recallMessage(@NotNull(message = "消息id不能为空") @PathVariable Long id) { public Result<Long> recallMessage(@NotNull(message = "消息id不能为空") @PathVariable("id") Long id) {
groupMessageService.recallMessage(id); groupMessageService.recallMessage(id);
return ResultUtils.success(); return ResultUtils.success();
} }
@GetMapping("/pullOfflineMessage") @GetMapping("/pullOfflineMessage")
@ApiOperation(value = "拉取离线消息", notes = "拉取离线消息,消息将通过webscoket异步推送") @Operation(summary = "拉取离线消息", description = "拉取离线消息,消息将通过webscoket异步推送")
public Result pullOfflineMessage(@RequestParam Long minId) { public Result pullOfflineMessage(@RequestParam("minId") Long minId) {
groupMessageService.pullOfflineMessage(minId); groupMessageService.pullOfflineMessage(minId);
return ResultUtils.success(); return ResultUtils.success();
} }
@PutMapping("/readed") @PutMapping("/readed")
@ApiOperation(value = "消息已读", notes = "将群聊中的消息状态置为已读") @Operation(summary = "消息已读", description = "将群聊中的消息状态置为已读")
public Result readedMessage(@RequestParam Long groupId) { public Result readedMessage(@RequestParam("groupId") Long groupId) {
groupMessageService.readedMessage(groupId); groupMessageService.readedMessage(groupId);
return ResultUtils.success(); return ResultUtils.success();
} }
@GetMapping("/findReadedUsers") @GetMapping("/findReadedUsers")
@ApiOperation(value = "获取已读用户id", notes = "获取消息已读用户列表") @Operation(summary = "获取已读用户id", description = "获取消息已读用户列表")
public Result<List<Long>> findReadedUsers(@RequestParam Long groupId,@RequestParam Long messageId) { public Result<List<Long>> findReadedUsers(@RequestParam("groupId") Long groupId,
return ResultUtils.success(groupMessageService.findReadedUsers(groupId,messageId)); @RequestParam("messageId") Long messageId) {
return ResultUtils.success(groupMessageService.findReadedUsers(groupId, messageId));
} }
@GetMapping("/history") @GetMapping("/history")
@ApiOperation(value = "查询聊天记录", notes = "查询聊天记录") @Operation(summary = "查询聊天记录", description = "查询聊天记录")
public Result<List<GroupMessageVO>> recallMessage(@NotNull(message = "群聊id不能为空") @RequestParam Long groupId, public Result<List<GroupMessageVO>> recallMessage(@NotNull(message = "群聊id不能为空") @RequestParam Long groupId,
@NotNull(message = "页码不能为空") @RequestParam Long page, @NotNull(message = "页码不能为空") @RequestParam Long page,
@NotNull(message = "size不能为空") @RequestParam Long size) { @NotNull(message = "size不能为空") @RequestParam Long size) {
return ResultUtils.success(groupMessageService.findHistoryMessage(groupId, page, size)); return ResultUtils.success(groupMessageService.findHistoryMessage(groupId, page, size));
} }
} }

19
im-platform/src/main/java/com/bx/implatform/controller/LoginController.java

@ -7,14 +7,13 @@ import com.bx.implatform.result.Result;
import com.bx.implatform.result.ResultUtils; import com.bx.implatform.result.ResultUtils;
import com.bx.implatform.service.IUserService; import com.bx.implatform.service.IUserService;
import com.bx.implatform.vo.LoginVO; import com.bx.implatform.vo.LoginVO;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; @Tag(name = "用户登录和注册")
@Api(tags = "用户登录和注册")
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
public class LoginController { public class LoginController {
@ -22,30 +21,28 @@ public class LoginController {
private final IUserService userService; private final IUserService userService;
@PostMapping("/login") @PostMapping("/login")
@ApiOperation(value = "用户登陆", notes = "用户登陆") @Operation(summary = "用户登陆", description = "用户登陆")
public Result login(@Valid @RequestBody LoginDTO dto) { public Result login(@Valid @RequestBody LoginDTO dto) {
LoginVO vo = userService.login(dto); LoginVO vo = userService.login(dto);
return ResultUtils.success(vo); return ResultUtils.success(vo);
} }
@PutMapping("/refreshToken") @PutMapping("/refreshToken")
@ApiOperation(value = "刷新token", notes = "用refreshtoken换取新的token") @Operation(summary = "刷新token", description = "用refreshtoken换取新的token")
public Result refreshToken(@RequestHeader("refreshToken") String refreshToken) { public Result refreshToken(@RequestHeader("refreshToken") String refreshToken) {
LoginVO vo = userService.refreshToken(refreshToken); LoginVO vo = userService.refreshToken(refreshToken);
return ResultUtils.success(vo); return ResultUtils.success(vo);
} }
@PostMapping("/register") @PostMapping("/register")
@ApiOperation(value = "用户注册", notes = "用户注册") @Operation(summary = "用户注册", description = "用户注册")
public Result register(@Valid @RequestBody RegisterDTO dto) { public Result register(@Valid @RequestBody RegisterDTO dto) {
userService.register(dto); userService.register(dto);
return ResultUtils.success(); return ResultUtils.success();
} }
@PutMapping("/modifyPwd") @PutMapping("/modifyPwd")
@ApiOperation(value = "修改密码", notes = "修改用户密码") @Operation(summary = "修改密码", description = "修改用户密码")
public Result modifyPassword(@Valid @RequestBody ModifyPwdDTO dto) { public Result modifyPassword(@Valid @RequestBody ModifyPwdDTO dto) {
userService.modifyPassword(dto); userService.modifyPassword(dto);
return ResultUtils.success(); return ResultUtils.success();

38
im-platform/src/main/java/com/bx/implatform/controller/PrivateMessageController.java

@ -5,16 +5,16 @@ import com.bx.implatform.result.Result;
import com.bx.implatform.result.ResultUtils; import com.bx.implatform.result.ResultUtils;
import com.bx.implatform.service.IPrivateMessageService; import com.bx.implatform.service.IPrivateMessageService;
import com.bx.implatform.vo.PrivateMessageVO; import com.bx.implatform.vo.PrivateMessageVO;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List; import java.util.List;
@Api(tags = "私聊消息") @Tag(name = "私聊消息")
@RestController @RestController
@RequestMapping("/message/private") @RequestMapping("/message/private")
@RequiredArgsConstructor @RequiredArgsConstructor
@ -23,44 +23,44 @@ public class PrivateMessageController {
private final IPrivateMessageService privateMessageService; private final IPrivateMessageService privateMessageService;
@PostMapping("/send") @PostMapping("/send")
@ApiOperation(value = "发送消息", notes = "发送私聊消息") @Operation(summary = "发送消息", description = "发送私聊消息")
public Result<Long> sendMessage(@Valid @RequestBody PrivateMessageDTO vo) { public Result<Long> sendMessage(@Valid @RequestBody PrivateMessageDTO vo) {
return ResultUtils.success(privateMessageService.sendMessage(vo)); return ResultUtils.success(privateMessageService.sendMessage(vo));
} }
@DeleteMapping("/recall/{id}") @DeleteMapping("/recall/{id}")
@ApiOperation(value = "撤回消息", notes = "撤回私聊消息") @Operation(summary = "撤回消息", description = "撤回私聊消息")
public Result<Long> recallMessage(@NotNull(message = "消息id不能为空") @PathVariable Long id) { public Result<Long> recallMessage(@NotNull(message = "消息id不能为空") @PathVariable("id") Long id) {
privateMessageService.recallMessage(id); privateMessageService.recallMessage(id);
return ResultUtils.success(); return ResultUtils.success();
} }
@GetMapping("/pullOfflineMessage") @GetMapping("/pullOfflineMessage")
@ApiOperation(value = "拉取离线消息", notes = "拉取离线消息,消息将通过webscoket异步推送") @Operation(summary = "拉取离线消息", description = "拉取离线消息,消息将通过webscoket异步推送")
public Result pullOfflineMessage(@RequestParam Long minId) { public Result pullOfflineMessage(@RequestParam("minId") Long minId) {
privateMessageService.pullOfflineMessage(minId); privateMessageService.pullOfflineMessage(minId);
return ResultUtils.success(); return ResultUtils.success();
} }
@PutMapping("/readed") @PutMapping("/readed")
@ApiOperation(value = "消息已读", notes = "将会话中接收的消息状态置为已读") @Operation(summary = "消息已读", description = "将会话中接收的消息状态置为已读")
public Result readedMessage(@RequestParam Long friendId) { public Result readedMessage(@RequestParam("friendId") Long friendId) {
privateMessageService.readedMessage(friendId); privateMessageService.readedMessage(friendId);
return ResultUtils.success(); return ResultUtils.success();
} }
@GetMapping("/maxReadedId") @GetMapping("/maxReadedId")
@ApiOperation(value = "获取最大已读消息的id",notes="获取某个会话中已读消息的最大id") @Operation(summary = "获取最大已读消息的id", description = "获取某个会话中已读消息的最大id")
public Result<Long> getMaxReadedId(@RequestParam Long friendId){ public Result<Long> getMaxReadedId(@RequestParam("friendId") Long friendId) {
return ResultUtils.success(privateMessageService.getMaxReadedId(friendId)); return ResultUtils.success(privateMessageService.getMaxReadedId(friendId));
} }
@GetMapping("/history") @GetMapping("/history")
@ApiOperation(value = "查询聊天记录", notes = "查询聊天记录") @Operation(summary = "查询聊天记录", description = "查询聊天记录")
public Result<List<PrivateMessageVO>> recallMessage(@NotNull(message = "好友id不能为空") @RequestParam Long friendId, public Result<List<PrivateMessageVO>> recallMessage(
@NotNull(message = "页码不能为空") @RequestParam Long page, @NotNull(message = "好友id不能为空") @RequestParam("friendId") Long friendId,
@NotNull(message = "size不能为空") @RequestParam Long size) { @NotNull(message = "页码不能为空") @RequestParam("page") Long page,
@NotNull(message = "size不能为空") @RequestParam("size") Long size) {
return ResultUtils.success(privateMessageService.findHistoryMessage(friendId, page, size)); return ResultUtils.success(privateMessageService.findHistoryMessage(friendId, page, size));
} }

13
im-platform/src/main/java/com/bx/implatform/controller/SystemController.java

@ -1,14 +1,15 @@
package com.bx.implatform.controller; package com.bx.implatform.controller;
import com.bx.implatform.config.WebrtcConfig; import com.bx.implatform.config.WebrtcConfig;
import com.bx.implatform.dto.PrivateMessageDTO;
import com.bx.implatform.result.Result; import com.bx.implatform.result.Result;
import com.bx.implatform.result.ResultUtils; import com.bx.implatform.result.ResultUtils;
import com.bx.implatform.vo.SystemConfigVO; import com.bx.implatform.vo.SystemConfigVO;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -17,7 +18,7 @@ import org.springframework.web.bind.annotation.*;
* @date: 2024-06-10 * @date: 2024-06-10
* @version: 1.0 * @version: 1.0
*/ */
@Api(tags = "系统相关") @Tag(name = "系统相关")
@RestController @RestController
@RequestMapping("/system") @RequestMapping("/system")
@RequiredArgsConstructor @RequiredArgsConstructor
@ -26,7 +27,7 @@ public class SystemController {
private final WebrtcConfig webrtcConfig; private final WebrtcConfig webrtcConfig;
@GetMapping("/config") @GetMapping("/config")
@ApiOperation(value = "加载系统配置", notes = "加载系统配置") @Operation(summary = "加载系统配置", description = "加载系统配置")
public Result<SystemConfigVO> loadConfig() { public Result<SystemConfigVO> loadConfig() {
return ResultUtils.success(new SystemConfigVO(webrtcConfig)); return ResultUtils.success(new SystemConfigVO(webrtcConfig));
} }

24
im-platform/src/main/java/com/bx/implatform/controller/UserController.java

@ -9,16 +9,16 @@ import com.bx.implatform.session.UserSession;
import com.bx.implatform.util.BeanUtils; import com.bx.implatform.util.BeanUtils;
import com.bx.implatform.vo.OnlineTerminalVO; import com.bx.implatform.vo.OnlineTerminalVO;
import com.bx.implatform.vo.UserVO; import com.bx.implatform.vo.UserVO;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import java.util.List; import java.util.List;
@Api(tags = "用户") @Tag(name = "用户")
@RestController @RestController
@RequestMapping("/user") @RequestMapping("/user")
@RequiredArgsConstructor @RequiredArgsConstructor
@ -27,14 +27,14 @@ public class UserController {
private final IUserService userService; private final IUserService userService;
@GetMapping("/terminal/online") @GetMapping("/terminal/online")
@ApiOperation(value = "判断用户哪个终端在线", notes = "返回在线的用户id的终端集合") @Operation(summary = "判断用户哪个终端在线", description = "返回在线的用户id的终端集合")
public Result<List<OnlineTerminalVO>> getOnlineTerminal(@NotEmpty @RequestParam("userIds") String userIds) { public Result<List<OnlineTerminalVO>> getOnlineTerminal(@NotNull @RequestParam("userIds") String userIds) {
return ResultUtils.success(userService.getOnlineTerminals(userIds)); return ResultUtils.success(userService.getOnlineTerminals(userIds));
} }
@GetMapping("/self") @GetMapping("/self")
@ApiOperation(value = "获取当前用户信息", notes = "获取当前用户信息") @Operation(summary = "获取当前用户信息", description = "获取当前用户信息")
public Result<UserVO> findSelfInfo() { public Result<UserVO> findSelfInfo() {
UserSession session = SessionContext.getSession(); UserSession session = SessionContext.getSession();
User user = userService.getById(session.getUserId()); User user = userService.getById(session.getUserId());
@ -44,20 +44,20 @@ public class UserController {
@GetMapping("/find/{id}") @GetMapping("/find/{id}")
@ApiOperation(value = "查找用户", notes = "根据id查找用户") @Operation(summary = "查找用户", description = "根据id查找用户")
public Result<UserVO> findById(@NotEmpty @PathVariable("id") Long id) { public Result<UserVO> findById(@NotNull @PathVariable("id") Long id) {
return ResultUtils.success(userService.findUserById(id)); return ResultUtils.success(userService.findUserById(id));
} }
@PutMapping("/update") @PutMapping("/update")
@ApiOperation(value = "修改用户信息", notes = "修改用户信息,仅允许修改登录用户信息") @Operation(summary = "修改用户信息", description = "修改用户信息,仅允许修改登录用户信息")
public Result update(@Valid @RequestBody UserVO vo) { public Result update(@Valid @RequestBody UserVO vo) {
userService.update(vo); userService.update(vo);
return ResultUtils.success(); return ResultUtils.success();
} }
@GetMapping("/findByName") @GetMapping("/findByName")
@ApiOperation(value = "查找用户", notes = "根据用户名或昵称查找用户") @Operation(summary = "查找用户", description = "根据用户名或昵称查找用户")
public Result<List<UserVO>> findByName(@RequestParam("name") String name) { public Result<List<UserVO>> findByName(@RequestParam("name") String name) {
return ResultUtils.success(userService.findUserByName(name)); return ResultUtils.success(userService.findUserByName(name));
} }

54
im-platform/src/main/java/com/bx/implatform/controller/WebrtcGroupController.java

@ -1,24 +1,22 @@
package com.bx.implatform.controller; package com.bx.implatform.controller;
import com.bx.implatform.config.WebrtcConfig;
import com.bx.implatform.dto.*; import com.bx.implatform.dto.*;
import com.bx.implatform.result.Result; import com.bx.implatform.result.Result;
import com.bx.implatform.result.ResultUtils; import com.bx.implatform.result.ResultUtils;
import com.bx.implatform.service.IWebrtcGroupService; import com.bx.implatform.service.IWebrtcGroupService;
import com.bx.implatform.vo.WebrtcGroupInfoVO; import com.bx.implatform.vo.WebrtcGroupInfoVO;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/** /**
* @author: Blue * @author: Blue
* @date: 2024-06-01 * @date: 2024-06-01
* @version: 1.0 * @version: 1.0
*/ */
@Api(tags = "webrtc视频多人通话") @Tag(name = "webrtc视频多人通话")
@RestController @RestController
@RequestMapping("/webrtc/group") @RequestMapping("/webrtc/group")
@RequiredArgsConstructor @RequiredArgsConstructor
@ -26,101 +24,101 @@ public class WebrtcGroupController {
private final IWebrtcGroupService webrtcGroupService; private final IWebrtcGroupService webrtcGroupService;
@ApiOperation(httpMethod = "POST", value = "发起群视频通话") @Operation(summary = "发起群视频通话")
@PostMapping("/setup") @PostMapping("/setup")
public Result setup(@Valid @RequestBody WebrtcGroupSetupDTO dto) { public Result setup(@Valid @RequestBody WebrtcGroupSetupDTO dto) {
webrtcGroupService.setup(dto); webrtcGroupService.setup(dto);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "接受通话") @Operation(summary = "接受通话")
@PostMapping("/accept") @PostMapping("/accept")
public Result accept(@RequestParam Long groupId) { public Result accept(@RequestParam("groupId") Long groupId) {
webrtcGroupService.accept(groupId); webrtcGroupService.accept(groupId);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "拒绝通话") @Operation(summary = "拒绝通话")
@PostMapping("/reject") @PostMapping("/reject")
public Result reject(@RequestParam Long groupId) { public Result reject(@RequestParam("groupId") Long groupId) {
webrtcGroupService.reject(groupId); webrtcGroupService.reject(groupId);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "通话失败") @Operation(summary = "通话失败")
@PostMapping("/failed") @PostMapping("/failed")
public Result failed(@Valid @RequestBody WebrtcGroupFailedDTO dto) { public Result failed(@Valid @RequestBody WebrtcGroupFailedDTO dto) {
webrtcGroupService.failed(dto); webrtcGroupService.failed(dto);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "进入视频通话") @Operation(summary = "进入视频通话")
@PostMapping("/join") @PostMapping("/join")
public Result join(@RequestParam Long groupId) { public Result join(@RequestParam("groupId") Long groupId) {
webrtcGroupService.join(groupId); webrtcGroupService.join(groupId);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "取消通话") @Operation(summary = "取消通话")
@PostMapping("/cancel") @PostMapping("/cancel")
public Result cancel(@RequestParam Long groupId) { public Result cancel(@RequestParam("groupId") Long groupId) {
webrtcGroupService.cancel(groupId); webrtcGroupService.cancel(groupId);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "离开视频通话") @Operation(summary = "离开视频通话")
@PostMapping("/quit") @PostMapping("/quit")
public Result quit(@RequestParam Long groupId) { public Result quit(@RequestParam("groupId") Long groupId) {
webrtcGroupService.quit(groupId); webrtcGroupService.quit(groupId);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "推送offer信息") @Operation(summary = "推送offer信息")
@PostMapping("/offer") @PostMapping("/offer")
public Result offer(@Valid @RequestBody WebrtcGroupOfferDTO dto) { public Result offer(@Valid @RequestBody WebrtcGroupOfferDTO dto) {
webrtcGroupService.offer(dto); webrtcGroupService.offer(dto);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "推送answer信息") @Operation(summary = "推送answer信息")
@PostMapping("/answer") @PostMapping("/answer")
public Result answer(@Valid @RequestBody WebrtcGroupAnswerDTO dto) { public Result answer(@Valid @RequestBody WebrtcGroupAnswerDTO dto) {
webrtcGroupService.answer(dto); webrtcGroupService.answer(dto);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "邀请用户进入视频通话") @Operation(summary = "邀请用户进入视频通话")
@PostMapping("/invite") @PostMapping("/invite")
public Result invite(@Valid @RequestBody WebrtcGroupInviteDTO dto) { public Result invite(@Valid @RequestBody WebrtcGroupInviteDTO dto) {
webrtcGroupService.invite(dto); webrtcGroupService.invite(dto);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "同步candidate") @Operation(summary = "同步candidate")
@PostMapping("/candidate") @PostMapping("/candidate")
public Result candidate(@Valid @RequestBody WebrtcGroupCandidateDTO dto) { public Result candidate(@Valid @RequestBody WebrtcGroupCandidateDTO dto) {
webrtcGroupService.candidate(dto); webrtcGroupService.candidate(dto);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "设备操作") @Operation(summary = "设备操作")
@PostMapping("/device") @PostMapping("/device")
public Result device(@Valid @RequestBody WebrtcGroupDeviceDTO dto) { public Result device(@Valid @RequestBody WebrtcGroupDeviceDTO dto) {
webrtcGroupService.device(dto); webrtcGroupService.device(dto);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "GET", value = "获取通话信息") @Operation(summary = "获取通话信息")
@GetMapping("/info") @GetMapping("/info")
public Result<WebrtcGroupInfoVO> info(@RequestParam Long groupId) { public Result<WebrtcGroupInfoVO> info(@RequestParam("groupId") Long groupId) {
return ResultUtils.success(webrtcGroupService.info(groupId)); return ResultUtils.success(webrtcGroupService.info(groupId));
} }
@ApiOperation(httpMethod = "POST", value = "获取通话信息") @Operation(summary = "获取通话信息")
@PostMapping("/heartbeat") @PostMapping("/heartbeat")
public Result heartbeat(@RequestParam Long groupId) { public Result heartbeat(@RequestParam("groupId") Long groupId) {
webrtcGroupService.heartbeat(groupId); webrtcGroupService.heartbeat(groupId);
return ResultUtils.success(); return ResultUtils.success();
} }
} }

44
im-platform/src/main/java/com/bx/implatform/controller/WebrtcPrivateController.java

@ -1,18 +1,15 @@
package com.bx.implatform.controller; package com.bx.implatform.controller;
import com.bx.implatform.annotation.OnlineCheck; import com.bx.implatform.annotation.OnlineCheck;
import com.bx.implatform.config.ICEServer;
import com.bx.implatform.result.Result; import com.bx.implatform.result.Result;
import com.bx.implatform.result.ResultUtils; import com.bx.implatform.result.ResultUtils;
import com.bx.implatform.service.IWebrtcPrivateService; import com.bx.implatform.service.IWebrtcPrivateService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; @Tag(name = "webrtc视频单人通话")
@Api(tags = "webrtc视频单人通话")
@RestController @RestController
@RequestMapping("/webrtc/private") @RequestMapping("/webrtc/private")
@RequiredArgsConstructor @RequiredArgsConstructor
@ -21,60 +18,59 @@ public class WebrtcPrivateController {
private final IWebrtcPrivateService webrtcPrivateService; private final IWebrtcPrivateService webrtcPrivateService;
@OnlineCheck @OnlineCheck
@ApiOperation(httpMethod = "POST", value = "呼叫视频通话") @Operation(summary = "呼叫视频通话")
@PostMapping("/call") @PostMapping("/call")
public Result call(@RequestParam Long uid, @RequestParam(defaultValue = "video") String mode, @RequestBody String offer) { public Result call(@RequestParam("uid") Long uid, @RequestParam(name = "mode", defaultValue = "video") String mode,
@RequestBody String offer) {
webrtcPrivateService.call(uid, mode, offer); webrtcPrivateService.call(uid, mode, offer);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "接受视频通话") @Operation(summary = "接受视频通话")
@PostMapping("/accept") @PostMapping("/accept")
public Result accept(@RequestParam Long uid, @RequestBody String answer) { public Result accept(@RequestParam("uid") Long uid, @RequestBody String answer) {
webrtcPrivateService.accept(uid, answer); webrtcPrivateService.accept(uid, answer);
return ResultUtils.success(); return ResultUtils.success();
} }
@Operation(summary = "拒绝视频通话")
@ApiOperation(httpMethod = "POST", value = "拒绝视频通话")
@PostMapping("/reject") @PostMapping("/reject")
public Result reject(@RequestParam Long uid) { public Result reject(@RequestParam("uid") Long uid) {
webrtcPrivateService.reject(uid); webrtcPrivateService.reject(uid);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "取消呼叫") @Operation(summary = "取消呼叫")
@PostMapping("/cancel") @PostMapping("/cancel")
public Result cancel(@RequestParam Long uid) { public Result cancel(@RequestParam("uid") Long uid) {
webrtcPrivateService.cancel(uid); webrtcPrivateService.cancel(uid);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "呼叫失败") @Operation(summary = "呼叫失败")
@PostMapping("/failed") @PostMapping("/failed")
public Result failed(@RequestParam Long uid, @RequestParam String reason) { public Result failed(@RequestParam("uid") Long uid, @RequestParam String reason) {
webrtcPrivateService.failed(uid, reason); webrtcPrivateService.failed(uid, reason);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "挂断") @Operation(summary = "挂断")
@PostMapping("/handup") @PostMapping("/handup")
public Result handup(@RequestParam Long uid) { public Result handup(@RequestParam("uid") Long uid) {
webrtcPrivateService.handup(uid); webrtcPrivateService.handup(uid);
return ResultUtils.success(); return ResultUtils.success();
} }
@PostMapping("/candidate") @PostMapping("/candidate")
@ApiOperation(httpMethod = "POST", value = "同步candidate") @Operation(summary = "同步candidate")
public Result candidate(@RequestParam Long uid, @RequestBody String candidate) { public Result candidate(@RequestParam("uid") Long uid, @RequestBody String candidate) {
webrtcPrivateService.candidate(uid, candidate); webrtcPrivateService.candidate(uid, candidate);
return ResultUtils.success(); return ResultUtils.success();
} }
@ApiOperation(httpMethod = "POST", value = "获取通话信息") @Operation(summary = "获取通话信息")
@PostMapping("/heartbeat") @PostMapping("/heartbeat")
public Result heartbeat(@RequestParam Long uid) { public Result heartbeat(@RequestParam("uid") Long uid) {
webrtcPrivateService.heartbeat(uid); webrtcPrivateService.heartbeat(uid);
return ResultUtils.success(); return ResultUtils.success();
} }

10
im-platform/src/main/java/com/bx/implatform/dto/GroupBanDTO.java

@ -1,7 +1,7 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
/** /**
@ -10,12 +10,12 @@ import lombok.Data;
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel(description = "群组封禁") @Schema(description = "群组封禁")
public class GroupBanDTO { public class GroupBanDTO {
@ApiModelProperty(value = "群组id") @Schema(description = "群组id")
private Long id; private Long id;
@ApiModelProperty(value = "封禁原因") @Schema(description = "封禁原因")
private String reason; private String reason;
} }

21
im-platform/src/main/java/com/bx/implatform/dto/GroupMessageDTO.java

@ -1,36 +1,35 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List; import java.util.List;
@Data @Data
@ApiModel("群聊消息DTO") @Schema(description = "群聊消息DTO")
public class GroupMessageDTO { public class GroupMessageDTO {
@NotNull(message = "群聊id不可为空") @NotNull(message = "群聊id不可为空")
@ApiModelProperty(value = "群聊id") @Schema(description = "群聊id")
private Long groupId; private Long groupId;
@Length(max = 1024, message = "发送内容长度不得大于1024") @Length(max = 1024, message = "发送内容长度不得大于1024")
@NotEmpty(message = "发送内容不可为空") @NotEmpty(message = "发送内容不可为空")
@ApiModelProperty(value = "发送内容") @Schema(description = "发送内容")
private String content; private String content;
@NotNull(message = "消息类型不可为空") @NotNull(message = "消息类型不可为空")
@ApiModelProperty(value = "消息类型") @Schema(description = "消息类型")
private Integer type; private Integer type;
@ApiModelProperty(value = "是否回执消息") @Schema(description = "是否回执消息")
private Boolean receipt = false; private Boolean receipt = false;
@Size(max = 20, message = "一次最多只能@20个小伙伴哦") @Size(max = 20, message = "一次最多只能@20个小伙伴哦")
@ApiModelProperty(value = "被@用户列表") @Schema(description = "被@用户列表")
private List<Long> atUserIds; private List<Long> atUserIds;
} }

7
im-platform/src/main/java/com/bx/implatform/dto/GroupUnbanDTO.java

@ -1,7 +1,6 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
/** /**
@ -10,10 +9,10 @@ import lombok.Data;
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel(description = "群组解锁") @Schema(description = "群组解锁")
public class GroupUnbanDTO { public class GroupUnbanDTO {
@ApiModelProperty(value = "群组id") @Schema(description = "群组id")
private Long id; private Long id;
} }

20
im-platform/src/main/java/com/bx/implatform/dto/LoginDTO.java

@ -1,30 +1,28 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data @Data
@ApiModel("用户登录DTO") @Schema(description = "用户登录DTO")
public class LoginDTO { public class LoginDTO {
@Max(value = 2, message = "登录终端类型取值范围:0,2") @Max(value = 2, message = "登录终端类型取值范围:0,2")
@Min(value = 0, message = "登录终端类型取值范围:0,2") @Min(value = 0, message = "登录终端类型取值范围:0,2")
@NotNull(message = "登录终端类型不可为空") @NotNull(message = "登录终端类型不可为空")
@ApiModelProperty(value = "登录终端 0:web 1:app 2:pc") @Schema(description = "登录终端 0:web 1:app 2:pc")
private Integer terminal; private Integer terminal;
@NotEmpty(message = "用户名不可为空") @NotEmpty(message = "用户名不可为空")
@ApiModelProperty(value = "用户名") @Schema(description = "用户名")
private String userName; private String userName;
@NotEmpty(message = "用户密码不可为空") @NotEmpty(message = "用户密码不可为空")
@ApiModelProperty(value = "用户密码") @Schema(description = "用户密码")
private String password; private String password;
} }

12
im-platform/src/main/java/com/bx/implatform/dto/ModifyPwdDTO.java

@ -1,21 +1,19 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotEmpty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotEmpty;
@Data @Data
@ApiModel("修改密码DTO") @Schema(description = "修改密码DTO")
public class ModifyPwdDTO { public class ModifyPwdDTO {
@NotEmpty(message = "旧用户密码不可为空") @NotEmpty(message = "旧用户密码不可为空")
@ApiModelProperty(value = "旧用户密码") @Schema(description = "旧用户密码")
private String oldPassword; private String oldPassword;
@NotEmpty(message = "新用户密码不可为空") @NotEmpty(message = "新用户密码不可为空")
@ApiModelProperty(value = "新用户密码") @Schema(description = "新用户密码")
private String newPassword; private String newPassword;
} }

16
im-platform/src/main/java/com/bx/implatform/dto/PrivateMessageDTO.java

@ -1,29 +1,27 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data @Data
@ApiModel("私聊消息DTO") @Schema(description = "私聊消息DTO")
public class PrivateMessageDTO { public class PrivateMessageDTO {
@NotNull(message = "接收用户id不可为空") @NotNull(message = "接收用户id不可为空")
@ApiModelProperty(value = "接收用户id") @Schema(description = "接收用户id")
private Long recvId; private Long recvId;
@Length(max = 1024, message = "内容长度不得大于1024") @Length(max = 1024, message = "内容长度不得大于1024")
@NotEmpty(message = "发送内容不可为空") @NotEmpty(message = "发送内容不可为空")
@ApiModelProperty(value = "发送内容") @Schema(description = "发送内容")
private String content; private String content;
@NotNull(message = "消息类型不可为空") @NotNull(message = "消息类型不可为空")
@ApiModelProperty(value = "消息类型") @Schema(description = "消息类型")
private Integer type; private Integer type;
} }

14
im-platform/src/main/java/com/bx/implatform/dto/RegisterDTO.java

@ -1,29 +1,27 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotEmpty;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
@Data @Data
@ApiModel("用户注册DTO") @Schema(description = "用户注册DTO")
public class RegisterDTO { public class RegisterDTO {
@Length(max = 64, message = "用户名不能大于64字符") @Length(max = 64, message = "用户名不能大于64字符")
@NotEmpty(message = "用户名不可为空") @NotEmpty(message = "用户名不可为空")
@ApiModelProperty(value = "用户名") @Schema(description = "用户名")
private String userName; private String userName;
@Length(min = 5, max = 20, message = "密码长度必须在5-20个字符之间") @Length(min = 5, max = 20, message = "密码长度必须在5-20个字符之间")
@NotEmpty(message = "用户密码不可为空") @NotEmpty(message = "用户密码不可为空")
@ApiModelProperty(value = "用户密码") @Schema(description = "用户密码")
private String password; private String password;
@Length(max = 64, message = "昵称不能大于64字符") @Length(max = 64, message = "昵称不能大于64字符")
@NotEmpty(message = "用户昵称不可为空") @NotEmpty(message = "用户昵称不可为空")
@ApiModelProperty(value = "用户昵称") @Schema(description = "用户昵称")
private String nickName; private String nickName;

9
im-platform/src/main/java/com/bx/implatform/dto/UserBanDTO.java

@ -1,7 +1,6 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
/** /**
@ -10,13 +9,13 @@ import lombok.Data;
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("用户锁定DTO") @Schema(description = "用户锁定DTO")
public class UserBanDTO { public class UserBanDTO {
@ApiModelProperty(value = "用户id") @Schema(description = "用户id")
private Long id; private Long id;
@ApiModelProperty(value = "锁定原因") @Schema(description = "锁定原因")
private String reason; private String reason;
} }

16
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupAnswerDTO.java

@ -1,31 +1,29 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/** /**
* @author: Blue * @author: Blue
* @date: 2024-06-01 * @date: 2024-06-01
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("回复用户连接请求DTO") @Schema(description = "回复用户连接请求DTO")
public class WebrtcGroupAnswerDTO { public class WebrtcGroupAnswerDTO {
@NotNull(message = "群聊id不可为空") @NotNull(message = "群聊id不可为空")
@ApiModelProperty(value = "群聊id") @Schema(description = "群聊id")
private Long groupId; private Long groupId;
@NotNull(message = "用户id不可为空") @NotNull(message = "用户id不可为空")
@ApiModelProperty(value = "用户id,代表回复谁的连接请求") @Schema(description = "用户id,代表回复谁的连接请求")
private Long userId; private Long userId;
@NotEmpty(message = "anwer不可为空") @NotEmpty(message = "anwer不可为空")
@ApiModelProperty(value = "用户本地anwer信息") @Schema(description = "用户本地anwer信息")
private String answer; private String answer;
} }

17
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupCandidateDTO.java

@ -1,32 +1,29 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/** /**
* @author: Blue * @author: Blue
* @date: 2024-06-01 * @date: 2024-06-01
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("发起群视频通话DTO") @Schema(description = "发起群视频通话DTO")
public class WebrtcGroupCandidateDTO { public class WebrtcGroupCandidateDTO {
@NotNull(message = "群聊id不可为空") @NotNull(message = "群聊id不可为空")
@ApiModelProperty(value = "群聊id") @Schema(description = "群聊id")
private Long groupId; private Long groupId;
@NotNull(message = "用户id不可为空") @NotNull(message = "用户id不可为空")
@ApiModelProperty(value = "用户id") @Schema(description = "用户id")
private Long userId; private Long userId;
@NotEmpty(message = "candidate信息不可为空") @NotEmpty(message = "candidate信息不可为空")
@ApiModelProperty(value = "candidate信息") @Schema(description = "candidate信息")
private String candidate; private String candidate;
} }

15
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupDeviceDTO.java

@ -1,29 +1,26 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/** /**
* @author: Blue * @author: Blue
* @date: 2024-06-01 * @date: 2024-06-01
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("用户设备操作DTO") @Schema(description = "用户设备操作DTO")
public class WebrtcGroupDeviceDTO { public class WebrtcGroupDeviceDTO {
@NotNull(message = "群聊id不可为空") @NotNull(message = "群聊id不可为空")
@ApiModelProperty(value = "群聊id") @Schema(description = "群聊id")
private Long groupId; private Long groupId;
@ApiModelProperty(value = "是否开启摄像头") @Schema(description = "是否开启摄像头")
private Boolean isCamera; private Boolean isCamera;
@ApiModelProperty(value = "是否开启麦克风") @Schema(description = "是否开启麦克风")
private Boolean isMicroPhone; private Boolean isMicroPhone;
} }

12
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupFailedDTO.java

@ -1,25 +1,23 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
/** /**
* @author: Blue * @author: Blue
* @date: 2024-06-01 * @date: 2024-06-01
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("用户通话失败DTO") @Schema(description = "用户通话失败DTO")
public class WebrtcGroupFailedDTO { public class WebrtcGroupFailedDTO {
@NotNull(message = "群聊id不可为空") @NotNull(message = "群聊id不可为空")
@ApiModelProperty(value = "群聊id") @Schema(description = "群聊id")
private Long groupId; private Long groupId;
@ApiModelProperty(value = "失败原因") @Schema(description = "失败原因")
private String reason; private String reason;
} }

13
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupInviteDTO.java

@ -1,12 +1,11 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import com.bx.implatform.session.WebrtcUserInfo; import com.bx.implatform.session.WebrtcUserInfo;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List; import java.util.List;
/** /**
@ -15,15 +14,15 @@ import java.util.List;
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("邀请用户进入群视频通话DTO") @Schema(description = "邀请用户进入群视频通话DTO")
public class WebrtcGroupInviteDTO { public class WebrtcGroupInviteDTO {
@NotNull(message = "群聊id不可为空") @NotNull(message = "群聊id不可为空")
@ApiModelProperty(value = "群聊id") @Schema(description = "群聊id")
private Long groupId; private Long groupId;
@NotEmpty(message = "参与用户信息不可为空") @NotEmpty(message = "参与用户信息不可为空")
@ApiModelProperty(value = "参与用户信息") @Schema(description = "参与用户信息")
private List<WebrtcUserInfo> userInfos; private List<WebrtcUserInfo> userInfos;
} }

11
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupJoinDTO.java

@ -1,23 +1,20 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/** /**
* @author: Blue * @author: Blue
* @date: 2024-06-01 * @date: 2024-06-01
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("进入群视频通话DTO") @Schema(description = "进入群视频通话DTO")
public class WebrtcGroupJoinDTO { public class WebrtcGroupJoinDTO {
@NotNull(message = "群聊id不可为空") @NotNull(message = "群聊id不可为空")
@ApiModelProperty(value = "群聊id") @Schema(description = "群聊id")
private Long groupId; private Long groupId;
} }

16
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupOfferDTO.java

@ -1,31 +1,29 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/** /**
* @author: Blue * @author: Blue
* @date: 2024-06-01 * @date: 2024-06-01
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("回复用户连接请求DTO") @Schema(description = "回复用户连接请求DTO")
public class WebrtcGroupOfferDTO { public class WebrtcGroupOfferDTO {
@NotNull(message = "群聊id不可为空") @NotNull(message = "群聊id不可为空")
@ApiModelProperty(value = "群聊id") @Schema(description = "群聊id")
private Long groupId; private Long groupId;
@NotNull(message = "用户id不可为空") @NotNull(message = "用户id不可为空")
@ApiModelProperty(value = "用户id,代表回复谁的连接请求") @Schema(description = "用户id,代表回复谁的连接请求")
private Long userId; private Long userId;
@NotEmpty(message = "offer不可为空") @NotEmpty(message = "offer不可为空")
@ApiModelProperty(value = "用户offer信息") @Schema(description = "用户offer信息")
private String offer; private String offer;
} }

13
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupSetupDTO.java

@ -1,12 +1,11 @@
package com.bx.implatform.dto; package com.bx.implatform.dto;
import com.bx.implatform.session.WebrtcUserInfo; import com.bx.implatform.session.WebrtcUserInfo;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List; import java.util.List;
/** /**
@ -15,15 +14,15 @@ import java.util.List;
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("发起群视频通话DTO") @Schema(description = "发起群视频通话DTO")
public class WebrtcGroupSetupDTO { public class WebrtcGroupSetupDTO {
@NotNull(message = "群聊id不可为空") @NotNull(message = "群聊id不可为空")
@ApiModelProperty(value = "群聊id") @Schema(description = "群聊id")
private Long groupId; private Long groupId;
@NotEmpty(message = "参与用户信息不可为空") @NotEmpty(message = "参与用户信息不可为空")
@ApiModelProperty(value = "参与用户信息") @Schema(description = "参与用户信息")
private List<WebrtcUserInfo> userInfos; private List<WebrtcUserInfo> userInfos;
} }

22
im-platform/src/main/java/com/bx/implatform/entity/Friend.java

@ -1,14 +1,9 @@
package com.bx.implatform.entity; package com.bx.implatform.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
/** /**
@ -20,52 +15,39 @@ import java.util.Date;
* @since 2022-10-22 * @since 2022-10-22
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false)
@TableName("im_friend") @TableName("im_friend")
public class Friend extends Model<Friend> { public class Friend{
private static final long serialVersionUID = 1L;
/** /**
* id * id
*/ */
@TableId(value = "id", type = IdType.AUTO) @TableId
private Long id; private Long id;
/** /**
* 用户id * 用户id
*/ */
@TableField("user_id")
private Long userId; private Long userId;
/** /**
* 好友id * 好友id
*/ */
@TableField("friend_id")
private Long friendId; private Long friendId;
/** /**
* 用户昵称 * 用户昵称
*/ */
@TableField("friend_nick_name")
private String friendNickName; private String friendNickName;
/** /**
* 用户头像 * 用户头像
*/ */
@TableField("friend_head_image")
private String friendHeadImage; private String friendHeadImage;
/** /**
* 创建时间 * 创建时间
*/ */
@TableField("created_time")
private Date createdTime; private Date createdTime;
@Override
protected Serializable pkVal() {
return this.id;
}
} }

41
im-platform/src/main/java/com/bx/implatform/entity/Group.java

@ -1,14 +1,9 @@
package com.bx.implatform.entity; package com.bx.implatform.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
/** /**
@ -18,64 +13,60 @@ import java.util.Date;
* @since 2022-10-31 * @since 2022-10-31
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false)
@TableName("im_group") @TableName("im_group")
public class Group extends Model<Group> { public class Group {
private static final long serialVersionUID = 1L;
/** /**
* id * id
*/ */
@TableId(value = "id", type = IdType.AUTO) @TableId
private Long id; private Long id;
/** /**
* 群名字 * 群名字
*/ */
@TableField("name")
private String name; private String name;
/** /**
* 群主id * 群主id
*/ */
@TableField("owner_id")
private Long ownerId; private Long ownerId;
/** /**
* 头像 * 头像
*/ */
@TableField("head_image")
private String headImage; private String headImage;
/** /**
* 头像缩略图 * 头像缩略图
*/ */
@TableField("head_image_thumb")
private String headImageThumb; private String headImageThumb;
/** /**
* 群公告 * 群公告
*/ */
@TableField("notice")
private String notice; private String notice;
/** /**
* 是否已删除 * 是否被封禁
*/ */
@TableField("deleted") private Boolean isBanned;
private Boolean deleted;
/**
* 被封禁原因
*/
private String reason;
/** /**
* 创建时间 * 创建时间
*/ */
@TableField("created_time")
private Date createdTime; private Date createdTime;
/**
* 是否已删除
*/
private Boolean deleted;
@Override
protected Serializable pkVal() {
return this.id;
}
} }

35
im-platform/src/main/java/com/bx/implatform/entity/GroupMember.java

@ -1,14 +1,11 @@
package com.bx.implatform.entity; package com.bx.implatform.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model; import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
/** /**
@ -24,67 +21,51 @@ import java.util.Date;
@TableName("im_group_member") @TableName("im_group_member")
public class GroupMember extends Model<GroupMember> { public class GroupMember extends Model<GroupMember> {
private static final long serialVersionUID = 1L;
/** /**
* id * id
*/ */
@TableId(value = "id", type = IdType.AUTO) @TableId
private Long id; private Long id;
/** /**
* 群id * 群id
*/ */
@TableField("group_id")
private Long groupId; private Long groupId;
/** /**
* 用户id * 用户id
*/ */
@TableField("user_id")
private Long userId; private Long userId;
/** /**
* 内显示名称 * 内显示名称
*/ */
@TableField("alias_name")
private String aliasName; private String aliasName;
/** /**
* 头像 * 用户头像
*/ */
@TableField("head_image")
private String headImage; private String headImage;
/** /**
* 备注 * 备注
*/ */
@TableField("remark")
private String remark; private String remark;
/** /**
* 是否已离开群聊 * 是否已退出
*/ */
@TableField("quit")
private Boolean quit; private Boolean quit;
/**
* 退群时间
*/
@TableField("quit_time")
private Date quitTime;
/** /**
* 创建时间 * 创建时间
*/ */
@TableField("created_time")
private Date createdTime; private Date createdTime;
/**
* 退出时间
*/
private Date quitTime;
@Override
protected Serializable pkVal() {
return this.id;
}
} }

30
im-platform/src/main/java/com/bx/implatform/entity/GroupMessage.java

@ -1,14 +1,9 @@
package com.bx.implatform.entity; package com.bx.implatform.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
/** /**
@ -20,87 +15,68 @@ import java.util.Date;
* @since 2022-10-31 * @since 2022-10-31
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false)
@TableName("im_group_message")
public class GroupMessage extends Model<GroupMessage> {
private static final long serialVersionUID = 1L; @TableName("im_group_message")
public class GroupMessage {
/** /**
* id * id
*/ */
@TableId(value = "id", type = IdType.AUTO) @TableId
private Long id; private Long id;
/** /**
* 群id * 群id
*/ */
@TableField("group_id")
private Long groupId; private Long groupId;
/** /**
* 发送用户id * 发送用户id
*/ */
@TableField("send_id")
private Long sendId; private Long sendId;
/** /**
* 发送用户昵称 * 发送用户昵称
*/ */
@TableField("send_nick_name")
private String sendNickName; private String sendNickName;
/** /**
* 接受用户id,为空表示全体发送 * 接受用户id,为空表示全体发送
*/ */
@TableField("recv_ids")
private String recvIds; private String recvIds;
/** /**
* @用户列表 * @用户列表
*/ */
@TableField("at_user_ids")
private String atUserIds; private String atUserIds;
/** /**
* 发送内容 * 发送内容
*/ */
@TableField("content")
private String content; private String content;
/** /**
* 消息类型 MessageType * 消息类型 MessageType
*/ */
@TableField("type")
private Integer type; private Integer type;
/** /**
* 是否回执消息 * 是否回执消息
*/ */
@TableField("receipt")
private Boolean receipt; private Boolean receipt;
/** /**
* 回执消息是否完成 * 回执消息是否完成
*/ */
@TableField("receipt_ok")
private Boolean receiptOk; private Boolean receiptOk;
/** /**
* 状态 MessageStatus * 状态 MessageStatus
*/ */
@TableField("status")
private Integer status; private Integer status;
/** /**
* 发送时间 * 发送时间
*/ */
@TableField("send_time")
private Date sendTime; private Date sendTime;
@Override
protected Serializable pkVal() {
return this.id;
}
} }

25
im-platform/src/main/java/com/bx/implatform/entity/PrivateMessage.java

@ -1,14 +1,8 @@
package com.bx.implatform.entity; package com.bx.implatform.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
/** /**
@ -20,59 +14,44 @@ import java.util.Date;
* @since 2022-10-01 * @since 2022-10-01
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false)
@TableName("im_private_message") @TableName("im_private_message")
public class PrivateMessage extends Model<PrivateMessage> { public class PrivateMessage {
private static final long serialVersionUID = 1L;
/** /**
* id * id
*/ */
@TableId(value = "id", type = IdType.AUTO)
private Long id; private Long id;
/** /**
* 发送用户id * 发送用户id
*/ */
@TableField("send_id")
private Long sendId; private Long sendId;
/** /**
* 接收用户id * 接收用户id
*/ */
@TableField("recv_id")
private Long recvId; private Long recvId;
/** /**
* 发送内容 * 发送内容
*/ */
@TableField("content")
private String content; private String content;
/** /**
* 消息类型 0:文字 1:图片 2:文件 3:语音 10:撤回消息 * 消息类型 MessageType
*/ */
@TableField("type")
private Integer type; private Integer type;
/** /**
* 状态 * 状态
*/ */
@TableField("status")
private Integer status; private Integer status;
/** /**
* 发送时间 * 发送时间
*/ */
@TableField("send_time")
private Date sendTime; private Date sendTime;
@Override
protected Serializable pkVal() {
return this.id;
}
} }

64
im-platform/src/main/java/com/bx/implatform/entity/User.java

@ -1,14 +1,9 @@
package com.bx.implatform.entity; package com.bx.implatform.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
/** /**
@ -20,93 +15,78 @@ import java.util.Date;
* @since 2022-10-01 * @since 2022-10-01
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false)
@TableName("im_user") @TableName("im_user")
public class User extends Model<User> { public class User {
private static final long serialVersionUID = 1L;
/** /**
* id * id
*/ */
@TableId(value = "id", type = IdType.AUTO) @TableId
private Long id; private Long id;
/** /**
* 用户名 * 用户名
*/ */
@TableField("user_name")
private String userName; private String userName;
/** /**
* 用户 * 用户昵称
*/ */
@TableField("nick_name")
private String nickName; private String nickName;
/** /**
* 性别 * 用户头像
*/ */
@TableField("sex") private String headImage;
private Integer sex;
/** /**
* 头像 * 用户头像缩略图
*/ */
@TableField("head_image") private String headImageThumb;
private String headImage;
/** /**
* 头像缩略图 * 密码(明文)
*/ */
@TableField("head_image_thumb") private String password;
private String headImageThumb;
/** /**
* 用户类型 1:普通用户 2:审核专用账户 * 性别 0: 1::
*/ */
@TableField("type") private Integer sex;
private Integer type;
/** /**
* 个性签名 * 个性签名
*/ */
@TableField("signature")
private String signature; private String signature;
/**
* 密码
*/
@TableField("password")
private String password;
/** /**
* 是否被封禁 * 账号是否被封禁
*/ */
@TableField("is_banned")
private Boolean isBanned; private Boolean isBanned;
/** /**
* 被封禁原因 * 账号被封禁原因
*/ */
@TableField("reason")
private String reason; private String reason;
/** /**
* 最后登录时间 * 最后登录时间
*/ */
@TableField("last_login_time")
private Date lastLoginTime; private Date lastLoginTime;
/** /**
* 创建时间 * 创建时间(注册时间)
*/ */
@TableField("created_time")
private Date createdTime; private Date createdTime;
/**
* 账号类型 1:普通用户 2:wx小程序审核账户
*/
private Integer type;
@Override /**
protected Serializable pkVal() { * 客户端id,用于uni-push推送
return this.id; */
} private String cid;
} }

6
im-platform/src/main/java/com/bx/implatform/filter/CacheFilter.java

@ -1,11 +1,11 @@
package com.bx.implatform.filter; package com.bx.implatform.filter;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
@Component @Component

8
im-platform/src/main/java/com/bx/implatform/filter/CacheHttpServletRequestWrapper.java

@ -1,11 +1,11 @@
package com.bx.implatform.filter; package com.bx.implatform.filter;
import jakarta.servlet.ReadListener;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper;
import org.apache.commons.compress.utils.IOUtils; import org.apache.commons.compress.utils.IOUtils;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.*; import java.io.*;
public class CacheHttpServletRequestWrapper extends HttpServletRequestWrapper { public class CacheHttpServletRequestWrapper extends HttpServletRequestWrapper {

192
im-platform/src/main/java/com/bx/implatform/generator/CodeGenerator.java

@ -1,102 +1,102 @@
package com.bx.implatform.generator; package com.bx.implatform.generator;
import com.baomidou.mybatisplus.annotation.IdType; //import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool; //import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator; //import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig; //import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*; //import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo; //import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType; //import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; //import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine; //import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
//
import java.util.ArrayList; //import java.util.ArrayList;
import java.util.List; //import java.util.List;
public class CodeGenerator { public class CodeGenerator {
public static void main(String[] args) { // public static void main(String[] args) {
// 代码生成器 // // 代码生成器
AutoGenerator mpg = new AutoGenerator(); // AutoGenerator mpg = new AutoGenerator();
//
// 全局配置 // // 全局配置
GlobalConfig gc = new GlobalConfig(); // GlobalConfig gc = new GlobalConfig();
//生成的代码输出路径,自己根据需要修改 // //生成的代码输出路径,自己根据需要修改
String projectPath = "d:\\work\\project\\code"; // String projectPath = "d:\\work\\project\\code";
gc.setOutputDir(projectPath + "/src/main/java"); // gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("blue"); // gc.setAuthor("blue");
gc.setOpen(false); // gc.setOpen(false);
gc.setFileOverride(true); // gc.setFileOverride(true);
gc.setActiveRecord(true); // gc.setActiveRecord(true);
gc.setBaseColumnList(true); // gc.setBaseColumnList(true);
gc.setBaseResultMap(true); // gc.setBaseResultMap(true);
gc.setIdType(IdType.AUTO); // gc.setIdType(IdType.AUTO);
gc.setDateType(DateType.ONLY_DATE); // gc.setDateType(DateType.ONLY_DATE);
mpg.setGlobalConfig(gc); // mpg.setGlobalConfig(gc);
//
// 数据源配置 // // 数据源配置
DataSourceConfig dsc = new DataSourceConfig(); // DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/box-im?useUnicode=true&characterEncoding=utf-8"); // dsc.setUrl("jdbc:mysql://localhost:3306/box-im?useUnicode=true&characterEncoding=utf-8");
dsc.setDriverName("com.mysql.jdbc.Driver"); // dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root"); // dsc.setUsername("root");
dsc.setPassword("root"); // dsc.setPassword("root");
mpg.setDataSource(dsc); // mpg.setDataSource(dsc);
//
// 包配置 // // 包配置
PackageConfig pc = new PackageConfig(); // PackageConfig pc = new PackageConfig();
pc.setModuleName(""); // pc.setModuleName("");
pc.setParent("com.bx"); // pc.setParent("com.bx");
mpg.setPackageInfo(pc); // mpg.setPackageInfo(pc);
//
// 如果模板引擎是 velocity // // 如果模板引擎是 velocity
String templatePath = "/templates/mapper.xml.vm"; // String templatePath = "/templates/mapper.xml.vm";
//
// 自定义输出配置 // // 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>(); // List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出 // // 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) { // focList.add(new FileOutConfig(templatePath) {
@Override // @Override
public String outputFile(TableInfo tableInfo) { // public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! // // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "/src/main/resources/mapper/" // return projectPath + "/src/main/resources/mapper/"
+ tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; // + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
} // }
}); // });
//
// 自定义配置 // // 自定义配置
InjectionConfig cfg = new InjectionConfig() { // InjectionConfig cfg = new InjectionConfig() {
@Override // @Override
public void initMap() { // public void initMap() {
// to do nothing // // to do nothing
} // }
}; // };
cfg.setFileOutConfigList(focList); // cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg); // mpg.setCfg(cfg);
//
// 配置模板 // // 配置模板
TemplateConfig templateConfig = new TemplateConfig(); // TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null); // templateConfig.setXml(null);
mpg.setTemplate(templateConfig); // mpg.setTemplate(templateConfig);
//
// 策略配置 // // 策略配置
StrategyConfig strategy = new StrategyConfig(); // StrategyConfig strategy = new StrategyConfig();
// 下划线转驼峰 // // 下划线转驼峰
strategy.setNaming(NamingStrategy.underline_to_camel); // strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel); // strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityTableFieldAnnotationEnable(true); // strategy.setEntityTableFieldAnnotationEnable(true);
strategy.setVersionFieldName("version"); // strategy.setVersionFieldName("version");
//逻辑删除的字段 // //逻辑删除的字段
strategy.setLogicDeleteFieldName("deleted"); // strategy.setLogicDeleteFieldName("deleted");
strategy.setEntityLombokModel(true); // strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true); // strategy.setRestControllerStyle(true);
//
//
//多张表的时候直接在代码中写表名 // //多张表的时候直接在代码中写表名
strategy.setInclude("friends"); // strategy.setInclude("friends");
strategy.setTablePrefix(""); // strategy.setTablePrefix("");
mpg.setStrategy(strategy); // mpg.setStrategy(strategy);
//
mpg.setTemplateEngine(new VelocityTemplateEngine()); // mpg.setTemplateEngine(new VelocityTemplateEngine());
mpg.execute(); // mpg.execute();
} // }
} }

5
im-platform/src/main/java/com/bx/implatform/interceptor/AuthInterceptor.java

@ -7,6 +7,8 @@ import com.bx.implatform.config.JwtProperties;
import com.bx.implatform.enums.ResultCode; import com.bx.implatform.enums.ResultCode;
import com.bx.implatform.exception.GlobalException; import com.bx.implatform.exception.GlobalException;
import com.bx.implatform.session.UserSession; import com.bx.implatform.session.UserSession;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -14,9 +16,6 @@ import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j @Slf4j
@Component @Component
@AllArgsConstructor @AllArgsConstructor

4
im-platform/src/main/java/com/bx/implatform/interceptor/XssInterceptor.java

@ -3,14 +3,14 @@ package com.bx.implatform.interceptor;
import com.bx.implatform.enums.ResultCode; import com.bx.implatform.enums.ResultCode;
import com.bx.implatform.exception.GlobalException; import com.bx.implatform.exception.GlobalException;
import com.bx.implatform.util.XssUtil; import com.bx.implatform.util.XssUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.util.Map; import java.util.Map;

2
im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java

@ -5,9 +5,7 @@ import com.bx.imclient.listener.MessageListener;
import com.bx.imcommon.enums.IMListenerType; import com.bx.imcommon.enums.IMListenerType;
import com.bx.imcommon.enums.IMSendCode; import com.bx.imcommon.enums.IMSendCode;
import com.bx.imcommon.model.IMSendResult; import com.bx.imcommon.model.IMSendResult;
import com.bx.implatform.contant.RedisKey;
import com.bx.implatform.vo.GroupMessageVO; import com.bx.implatform.vo.GroupMessageVO;
import com.bx.implatform.vo.PrivateMessageVO;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;

10
im-platform/src/main/java/com/bx/implatform/listener/SystemMessageListener.java

@ -1,24 +1,14 @@
package com.bx.implatform.listener; package com.bx.implatform.listener;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.bx.imclient.annotation.IMListener; import com.bx.imclient.annotation.IMListener;
import com.bx.imclient.listener.MessageListener; import com.bx.imclient.listener.MessageListener;
import com.bx.imcommon.enums.IMListenerType; import com.bx.imcommon.enums.IMListenerType;
import com.bx.imcommon.enums.IMSendCode; import com.bx.imcommon.enums.IMSendCode;
import com.bx.imcommon.model.IMSendResult; import com.bx.imcommon.model.IMSendResult;
import com.bx.implatform.entity.PrivateMessage;
import com.bx.implatform.enums.MessageStatus;
import com.bx.implatform.service.IPrivateMessageService;
import com.bx.implatform.vo.PrivateMessageVO;
import com.bx.implatform.vo.SystemMessageVO; import com.bx.implatform.vo.SystemMessageVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
@Slf4j @Slf4j
@IMListener(type = IMListenerType.SYSTEM_MESSAGE) @IMListener(type = IMListenerType.SYSTEM_MESSAGE)

1
im-platform/src/main/java/com/bx/implatform/service/IWebrtcGroupService.java

@ -1,6 +1,5 @@
package com.bx.implatform.service; package com.bx.implatform.service;
import com.bx.implatform.config.WebrtcConfig;
import com.bx.implatform.dto.*; import com.bx.implatform.dto.*;
import com.bx.implatform.vo.WebrtcGroupInfoVO; import com.bx.implatform.vo.WebrtcGroupInfoVO;

4
im-platform/src/main/java/com/bx/implatform/service/IWebrtcPrivateService.java

@ -1,9 +1,5 @@
package com.bx.implatform.service; package com.bx.implatform.service;
import com.bx.implatform.config.ICEServer;
import java.util.List;
/** /**
* webrtc 通信服务 * webrtc 通信服务
* *

7
im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java

@ -18,7 +18,10 @@ import com.bx.implatform.enums.ResultCode;
import com.bx.implatform.exception.GlobalException; import com.bx.implatform.exception.GlobalException;
import com.bx.implatform.mapper.GroupMapper; import com.bx.implatform.mapper.GroupMapper;
import com.bx.implatform.mapper.GroupMessageMapper; import com.bx.implatform.mapper.GroupMessageMapper;
import com.bx.implatform.service.*; import com.bx.implatform.service.IFriendService;
import com.bx.implatform.service.IGroupMemberService;
import com.bx.implatform.service.IGroupService;
import com.bx.implatform.service.IUserService;
import com.bx.implatform.session.SessionContext; import com.bx.implatform.session.SessionContext;
import com.bx.implatform.session.UserSession; import com.bx.implatform.session.UserSession;
import com.bx.implatform.util.BeanUtils; import com.bx.implatform.util.BeanUtils;
@ -40,7 +43,7 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@CacheConfig(cacheNames = RedisKey.IM_CACHE_GROUP) @CacheConfig(cacheManager = "cacheManager",cacheNames = RedisKey.IM_CACHE_GROUP)
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class GroupServiceImpl extends ServiceImpl<GroupMapper, Group> implements IGroupService { public class GroupServiceImpl extends ServiceImpl<GroupMapper, Group> implements IGroupService {

2
im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java

@ -9,6 +9,7 @@ import com.bx.implatform.util.FileUtil;
import com.bx.implatform.util.ImageUtil; import com.bx.implatform.util.ImageUtil;
import com.bx.implatform.util.MinioUtil; import com.bx.implatform.util.MinioUtil;
import com.bx.implatform.vo.UploadImageVO; import com.bx.implatform.vo.UploadImageVO;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -16,7 +17,6 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import java.io.IOException; import java.io.IOException;
import java.util.Objects; import java.util.Objects;

3
im-platform/src/main/java/com/bx/implatform/session/SessionContext.java

@ -1,10 +1,9 @@
package com.bx.implatform.session; package com.bx.implatform.session;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/* /*
* @Description * @Description
* @Author Blue * @Author Blue

15
im-platform/src/main/java/com/bx/implatform/session/WebrtcUserInfo.java

@ -1,7 +1,6 @@
package com.bx.implatform.session; package com.bx.implatform.session;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
/** /**
@ -10,20 +9,20 @@ import lombok.Data;
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("用户信息") @Schema(description = "用户信息")
public class WebrtcUserInfo { public class WebrtcUserInfo {
@ApiModelProperty(value = "用户id") @Schema(description = "用户id")
private Long id; private Long id;
@ApiModelProperty(value = "用户昵称") @Schema(description = "用户昵称")
private String nickName; private String nickName;
@ApiModelProperty(value = "用户头像") @Schema(description = "用户头像")
private String headImage; private String headImage;
@ApiModelProperty(value = "是否开启摄像头") @Schema(description = "是否开启摄像头")
private Boolean isCamera; private Boolean isCamera;
@ApiModelProperty(value = "是否开启麦克风") @Schema(description = "是否开启麦克风")
private Boolean isMicroPhone; private Boolean isMicroPhone;
} }

1
im-platform/src/main/java/com/bx/implatform/task/UserBannedConsumerTask.java

@ -11,6 +11,7 @@ import com.bx.implatform.vo.SystemMessageVO;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Collections; import java.util.Collections;
/** /**

2
im-platform/src/main/java/com/bx/implatform/util/SensitiveFilterUtil.java

@ -1,12 +1,12 @@
package com.bx.implatform.util; package com.bx.implatform.util;
import jakarta.annotation.PostConstruct;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.CharUtils; import org.apache.commons.lang3.CharUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;

14
im-platform/src/main/java/com/bx/implatform/vo/FriendVO.java

@ -1,24 +1,22 @@
package com.bx.implatform.vo; package com.bx.implatform.vo;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
@Data @Data
@ApiModel("好友信息VO") @Schema(description = "好友信息VO")
public class FriendVO { public class FriendVO {
@NotNull(message = "好友id不可为空") @NotNull(message = "好友id不可为空")
@ApiModelProperty(value = "好友id") @Schema(description = "好友id")
private Long id; private Long id;
@NotNull(message = "好友昵称不可为空") @NotNull(message = "好友昵称不可为空")
@ApiModelProperty(value = "好友昵称") @Schema(description = "好友昵称")
private String nickName; private String nickName;
@ApiModelProperty(value = "好友头像") @Schema(description = "好友头像")
private String headImage; private String headImage;
} }

13
im-platform/src/main/java/com/bx/implatform/vo/GroupInviteVO.java

@ -1,22 +1,21 @@
package com.bx.implatform.vo; package com.bx.implatform.vo;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List; import java.util.List;
@Data @Data
@ApiModel("邀请好友进群请求VO") @Schema(description = "邀请好友进群请求VO")
public class GroupInviteVO { public class GroupInviteVO {
@NotNull(message = "群id不可为空") @NotNull(message = "群id不可为空")
@ApiModelProperty(value = "群id") @Schema(description = "群id")
private Long groupId; private Long groupId;
@NotEmpty(message = "群id不可为空") @NotEmpty(message = "群id不可为空")
@ApiModelProperty(value = "好友id列表不可为空") @Schema(description = "好友id列表不可为空")
private List<Long> friendIds; private List<Long> friendIds;
} }

17
im-platform/src/main/java/com/bx/implatform/vo/GroupMemberVO.java

@ -1,29 +1,28 @@
package com.bx.implatform.vo; package com.bx.implatform.vo;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@Data @Data
@ApiModel("群成员信息VO") @Schema(description = "群成员信息VO")
public class GroupMemberVO { public class GroupMemberVO {
@ApiModelProperty("用户id") @Schema(description = "用户id")
private Long userId; private Long userId;
@ApiModelProperty("群内显示名称") @Schema(description = "群内显示名称")
private String aliasName; private String aliasName;
@ApiModelProperty("头像") @Schema(description = "头像")
private String headImage; private String headImage;
@ApiModelProperty("是否已退出") @Schema(description = "是否已退出")
private Boolean quit; private Boolean quit;
@ApiModelProperty(value = "是否在线") @Schema(description = "是否在线")
private Boolean online; private Boolean online;
@ApiModelProperty("备注") @Schema(description = "备注")
private String remark; private String remark;
} }

27
im-platform/src/main/java/com/bx/implatform/vo/GroupMessageVO.java

@ -2,8 +2,7 @@ package com.bx.implatform.vo;
import com.bx.imcommon.serializer.DateToLongSerializer; import com.bx.imcommon.serializer.DateToLongSerializer;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModelProperty; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.models.auth.In;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
@ -12,40 +11,40 @@ import java.util.List;
@Data @Data
public class GroupMessageVO { public class GroupMessageVO {
@ApiModelProperty(value = "消息id") @Schema(description = "消息id")
private Long id; private Long id;
@ApiModelProperty(value = "群聊id") @Schema(description = "群聊id")
private Long groupId; private Long groupId;
@ApiModelProperty(value = " 发送者id") @Schema(description = " 发送者id")
private Long sendId; private Long sendId;
@ApiModelProperty(value = " 发送者昵称") @Schema(description = " 发送者昵称")
private String sendNickName; private String sendNickName;
@ApiModelProperty(value = "消息内容") @Schema(description = "消息内容")
private String content; private String content;
@ApiModelProperty(value = "消息内容类型 具体枚举值由应用层定义") @Schema(description = "消息内容类型 具体枚举值由应用层定义")
private Integer type; private Integer type;
@ApiModelProperty(value = "是否回执消息") @Schema(description = "是否回执消息")
private Boolean receipt; private Boolean receipt;
@ApiModelProperty(value = "回执消息是否完成") @Schema(description = "回执消息是否完成")
private Boolean receiptOk; private Boolean receiptOk;
@ApiModelProperty(value = "已读消息数量") @Schema(description = "已读消息数量")
private Integer readedCount = 0; private Integer readedCount = 0;
@ApiModelProperty(value = "@用户列表") @Schema(description = "@用户列表")
private List<Long> atUserIds; private List<Long> atUserIds;
@ApiModelProperty(value = " 状态") @Schema(description = " 状态")
private Integer status; private Integer status;
@ApiModelProperty(value = "发送时间") @Schema(description = "发送时间")
@JsonSerialize(using = DateToLongSerializer.class) @JsonSerialize(using = DateToLongSerializer.class)
private Date sendTime; private Date sendTime;
} }

29
im-platform/src/main/java/com/bx/implatform/vo/GroupVO.java

@ -1,50 +1,47 @@
package com.bx.implatform.vo; package com.bx.implatform.vo;
import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModel; import jakarta.validation.constraints.NotEmpty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
@Data @Data
@ApiModel("群信息VO") @Schema(description = "群信息VO")
public class GroupVO { public class GroupVO {
@ApiModelProperty(value = "群id") @Schema(description = "群id")
private Long id; private Long id;
@Length(max = 20, message = "群名称长度不能大于20") @Length(max = 20, message = "群名称长度不能大于20")
@NotEmpty(message = "群名称不可为空") @NotEmpty(message = "群名称不可为空")
@ApiModelProperty(value = "群名称") @Schema(description = "群名称")
private String name; private String name;
@ApiModelProperty(value = "群主id") @Schema(description = "群主id")
private Long ownerId; private Long ownerId;
@ApiModelProperty(value = "头像") @Schema(description = "头像")
private String headImage; private String headImage;
@ApiModelProperty(value = "头像缩略图") @Schema(description = "头像缩略图")
private String headImageThumb; private String headImageThumb;
@Length(max = 1024, message = "群聊显示长度不能大于1024") @Length(max = 1024, message = "群聊显示长度不能大于1024")
@ApiModelProperty(value = "群公告") @Schema(description = "群公告")
private String notice; private String notice;
@Length(max = 20, message = "群聊显示长度不能大于20") @Length(max = 20, message = "群聊显示长度不能大于20")
@ApiModelProperty(value = "用户在群显示昵称") @Schema(description = "用户在群显示昵称")
private String aliasName; private String aliasName;
@Length(max = 20, message = "群聊显示长度不能大于20") @Length(max = 20, message = "群聊显示长度不能大于20")
@ApiModelProperty(value = "群聊显示备注") @Schema(description = "群聊显示备注")
private String remark; private String remark;
@ApiModelProperty(value = "是否已删除") @Schema(description = "是否已删除")
private Boolean deleted; private Boolean deleted;
@ApiModelProperty(value = "是否已退出") @Schema(description = "是否已退出")
private Boolean quit; private Boolean quit;

13
im-platform/src/main/java/com/bx/implatform/vo/LoginVO.java

@ -1,23 +1,22 @@
package com.bx.implatform.vo; package com.bx.implatform.vo;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@Data @Data
@ApiModel("用户登录VO") @Schema(description = "用户登录VO")
public class LoginVO { public class LoginVO {
@ApiModelProperty(value = "每次请求都必须在header中携带accessToken") @Schema(description = "每次请求都必须在header中携带accessToken")
private String accessToken; private String accessToken;
@ApiModelProperty(value = "accessToken过期时间(秒)") @Schema(description = "accessToken过期时间(秒)")
private Integer accessTokenExpiresIn; private Integer accessTokenExpiresIn;
@ApiModelProperty(value = "accessToken过期后,通过refreshToken换取新的token") @Schema(description = "accessToken过期后,通过refreshToken换取新的token")
private String refreshToken; private String refreshToken;
@ApiModelProperty(value = "refreshToken过期时间(秒)") @Schema(description = "refreshToken过期时间(秒)")
private Integer refreshTokenExpiresIn; private Integer refreshTokenExpiresIn;
} }

6
im-platform/src/main/java/com/bx/implatform/vo/OnlineTerminalVO.java

@ -1,6 +1,6 @@
package com.bx.implatform.vo; package com.bx.implatform.vo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@ -15,10 +15,10 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
public class OnlineTerminalVO { public class OnlineTerminalVO {
@ApiModelProperty(value = "用户id") @Schema(description = "用户id")
private Long userId; private Long userId;
@ApiModelProperty(value = "在线终端类型") @Schema(description = "在线终端类型")
private List<Integer> terminals; private List<Integer> terminals;
} }

19
im-platform/src/main/java/com/bx/implatform/vo/PrivateMessageVO.java

@ -2,35 +2,34 @@ package com.bx.implatform.vo;
import com.bx.imcommon.serializer.DateToLongSerializer; import com.bx.imcommon.serializer.DateToLongSerializer;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
@Data @Data
@ApiModel("私聊消息VO") @Schema(description = "私聊消息VO")
public class PrivateMessageVO { public class PrivateMessageVO {
@ApiModelProperty(value = " 消息id") @Schema(description = " 消息id")
private Long id; private Long id;
@ApiModelProperty(value = " 发送者id") @Schema(description = " 发送者id")
private Long sendId; private Long sendId;
@ApiModelProperty(value = " 接收者id") @Schema(description = " 接收者id")
private Long recvId; private Long recvId;
@ApiModelProperty(value = " 发送内容") @Schema(description = " 发送内容")
private String content; private String content;
@ApiModelProperty(value = "消息内容类型 IMCmdType") @Schema(description = "消息内容类型 IMCmdType")
private Integer type; private Integer type;
@ApiModelProperty(value = " 状态") @Schema(description = " 状态")
private Integer status; private Integer status;
@ApiModelProperty(value = " 发送时间") @Schema(description = " 发送时间")
@JsonSerialize(using = DateToLongSerializer.class) @JsonSerialize(using = DateToLongSerializer.class)
private Date sendTime; private Date sendTime;
} }

7
im-platform/src/main/java/com/bx/implatform/vo/SystemConfigVO.java

@ -1,8 +1,7 @@
package com.bx.implatform.vo; package com.bx.implatform.vo;
import com.bx.implatform.config.WebrtcConfig; import com.bx.implatform.config.WebrtcConfig;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@ -12,11 +11,11 @@ import lombok.Data;
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("系统配置VO") @Schema(description = "系统配置VO")
@AllArgsConstructor @AllArgsConstructor
public class SystemConfigVO { public class SystemConfigVO {
@ApiModelProperty(value = "webrtc配置") @Schema(description = "webrtc配置")
private WebrtcConfig webrtc; private WebrtcConfig webrtc;
} }

13
im-platform/src/main/java/com/bx/implatform/vo/SystemMessageVO.java

@ -2,26 +2,25 @@ package com.bx.implatform.vo;
import com.bx.imcommon.serializer.DateToLongSerializer; import com.bx.imcommon.serializer.DateToLongSerializer;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
@Data @Data
@ApiModel("系统消息VO") @Schema(description = "系统消息VO")
public class SystemMessageVO { public class SystemMessageVO {
@ApiModelProperty(value = " 消息id") @Schema(description = " 消息id")
private Long id; private Long id;
@ApiModelProperty(value = " 发送内容") @Schema(description = " 发送内容")
private String content; private String content;
@ApiModelProperty(value = "消息内容类型 MessageType") @Schema(description = "消息内容类型 MessageType")
private Integer type; private Integer type;
@ApiModelProperty(value = " 发送时间") @Schema(description = " 发送时间")
@JsonSerialize(using = DateToLongSerializer.class) @JsonSerialize(using = DateToLongSerializer.class)
private Date sendTime; private Date sendTime;
} }

9
im-platform/src/main/java/com/bx/implatform/vo/UploadImageVO.java

@ -1,16 +1,15 @@
package com.bx.implatform.vo; package com.bx.implatform.vo;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@Data @Data
@ApiModel("图片上传VO") @Schema(description = "图片上传VO")
public class UploadImageVO { public class UploadImageVO {
@ApiModelProperty(value = "原图") @Schema(description = "原图")
private String originUrl; private String originUrl;
@ApiModelProperty(value = "缩略图") @Schema(description = "缩略图")
private String thumbUrl; private String thumbUrl;
} }

28
im-platform/src/main/java/com/bx/implatform/vo/UserVO.java

@ -1,48 +1,46 @@
package com.bx.implatform.vo; package com.bx.implatform.vo;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data @Data
@ApiModel("用户信息VO") @Schema(description = "用户信息VO")
public class UserVO { public class UserVO {
@NotNull(message = "用户id不能为空") @NotNull(message = "用户id不能为空")
@ApiModelProperty(value = "id") @Schema(description = "id")
private Long id; private Long id;
@NotEmpty(message = "用户名不能为空") @NotEmpty(message = "用户名不能为空")
@Length(max = 64, message = "用户名不能大于64字符") @Length(max = 64, message = "用户名不能大于64字符")
@ApiModelProperty(value = "用户名") @Schema(description = "用户名")
private String userName; private String userName;
@NotEmpty(message = "用户昵称不能为空") @NotEmpty(message = "用户昵称不能为空")
@Length(max = 64, message = "昵称不能大于64字符") @Length(max = 64, message = "昵称不能大于64字符")
@ApiModelProperty(value = "用户昵称") @Schema(description = "用户昵称")
private String nickName; private String nickName;
@ApiModelProperty(value = "性别") @Schema(description = "性别")
private Integer sex; private Integer sex;
@ApiModelProperty(value = "用户类型 1:普通用户 2:审核账户") @Schema(description = "用户类型 1:普通用户 2:审核账户")
private Integer type; private Integer type;
@Length(max = 1024, message = "个性签名不能大于1024个字符") @Length(max = 1024, message = "个性签名不能大于1024个字符")
@ApiModelProperty(value = "个性签名") @Schema(description = "个性签名")
private String signature; private String signature;
@ApiModelProperty(value = "头像") @Schema(description = "头像")
private String headImage; private String headImage;
@ApiModelProperty(value = "头像缩略图") @Schema(description = "头像缩略图")
private String headImageThumb; private String headImageThumb;
@ApiModelProperty(value = "是否在线") @Schema(description = "是否在线")
private Boolean online; private Boolean online;
} }

9
im-platform/src/main/java/com/bx/implatform/vo/WebrtcGroupFailedVO.java

@ -1,7 +1,6 @@
package com.bx.implatform.vo; package com.bx.implatform.vo;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
@ -12,12 +11,12 @@ import java.util.List;
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("用户加入群通话失败VO") @Schema(description = "用户加入群通话失败VO")
public class WebrtcGroupFailedVO { public class WebrtcGroupFailedVO {
@ApiModelProperty(value = "失败用户列表") @Schema(description = "失败用户列表")
private List<Long> userIds; private List<Long> userIds;
@ApiModelProperty(value = "失败原因") @Schema(description = "失败原因")
private String reason; private String reason;
} }

11
im-platform/src/main/java/com/bx/implatform/vo/WebrtcGroupInfoVO.java

@ -1,8 +1,7 @@
package com.bx.implatform.vo; package com.bx.implatform.vo;
import com.bx.implatform.session.WebrtcUserInfo; import com.bx.implatform.session.WebrtcUserInfo;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
@ -13,16 +12,16 @@ import java.util.List;
* @version: 1.0 * @version: 1.0
*/ */
@Data @Data
@ApiModel("群通话信息VO") @Schema(description = "群通话信息VO")
public class WebrtcGroupInfoVO { public class WebrtcGroupInfoVO {
@ApiModelProperty(value = "是否在通话中") @Schema(description = "是否在通话中")
private Boolean isChating; private Boolean isChating;
@ApiModelProperty(value = "通话发起人") @Schema(description = "通话发起人")
WebrtcUserInfo host; WebrtcUserInfo host;
@ApiModelProperty(value = "通话用户列表") @Schema(description = "通话用户列表")
private List<WebrtcUserInfo> userInfos; private List<WebrtcUserInfo> userInfos;
} }

11
im-platform/src/main/resources/application.yml

@ -7,7 +7,7 @@ spring:
pathmatch: pathmatch:
matching-strategy: ant_path_matcher matching-strategy: ant_path_matcher
datasource: datasource:
driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/box-im?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true url: jdbc:mysql://localhost:3306/box-im?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true
username: root username: root
password: root password: root
@ -22,12 +22,13 @@ spring:
max-request-size: 50MB max-request-size: 50MB
mybatis-plus: mybatis-plus:
global-config:
db-config:
id-type: AUTO # ID自增
configuration: configuration:
# 是否开启自动驼峰命名规则 map-underscore-to-camel-case: true #开启自动驼峰命名规则
map-underscore-to-camel-case: false
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations:
- classpath*:mapper/*.xml
minio: minio:
endpoint: http://127.0.0.1:9001 #内网地址 endpoint: http://127.0.0.1:9001 #内网地址
public: http://127.0.0.1:9001 #外网访问地址 public: http://127.0.0.1:9001 #外网访问地址

6
im-server/pom.xml

@ -18,10 +18,6 @@
<artifactId>im-commom</artifactId> <artifactId>im-commom</artifactId>
<version>2.0.0</version> <version>2.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
</dependency>
<dependency> <dependency>
<groupId>io.netty</groupId> <groupId>io.netty</groupId>
<artifactId>netty-all</artifactId> <artifactId>netty-all</artifactId>
@ -40,7 +36,7 @@
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.3.RELEASE</version> <version>3.3.1</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>

33
im-server/src/main/java/com/bx/imserver/config/RedisConfig.java

@ -1,33 +0,0 @@
package com.bx.imserver.config;
import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 设置值(value)的序列化采用FastJsonRedisSerializer
redisTemplate.setValueSerializer(fastJsonRedisSerializer());
redisTemplate.setHashValueSerializer(fastJsonRedisSerializer());
// 设置键(key)的序列化采用StringRedisSerializer。
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
public FastJsonRedisSerializer fastJsonRedisSerializer() {
return new FastJsonRedisSerializer<>(Object.class);
}
}

6
im-server/src/main/java/com/bx/imserver/netty/IMServerGroup.java

@ -1,13 +1,13 @@
package com.bx.imserver.netty; package com.bx.imserver.netty;
import com.bx.imcommon.contant.IMRedisKey; import com.bx.imcommon.contant.IMRedisKey;
import jakarta.annotation.PreDestroy;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PreDestroy;
import java.util.List; import java.util.List;
@Slf4j @Slf4j
@ -17,7 +17,7 @@ public class IMServerGroup implements CommandLineRunner {
public static volatile long serverId = 0; public static volatile long serverId = 0;
RedisTemplate<String, Object> redisTemplate; private final RedisTemplate<String, Object> redisTemplate;
private final List<IMServer> imServers; private final List<IMServer> imServers;
@ -36,7 +36,7 @@ public class IMServerGroup implements CommandLineRunner {
} }
@Override @Override
public void run(String... args) throws Exception { public void run(String... args) {
// 初始化SERVER_ID // 初始化SERVER_ID
String key = IMRedisKey.IM_MAX_SERVER_ID; String key = IMRedisKey.IM_MAX_SERVER_ID;
serverId = redisTemplate.opsForValue().increment(key, 1); serverId = redisTemplate.opsForValue().increment(key, 1);

53
pom.xml

@ -8,6 +8,11 @@
<groupId>com.bx</groupId> <groupId>com.bx</groupId>
<packaging>pom</packaging> <packaging>pom</packaging>
<version>2.0.0</version> <version>2.0.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.1</version>
</parent>
<modules> <modules>
<module>im-platform</module> <module>im-platform</module>
@ -17,34 +22,24 @@
</modules> </modules>
<properties> <properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version> <java.version>17</java.version>
<mybatisplus.version>3.4.0</mybatisplus.version> <mybatisplus.version>3.5.7</mybatisplus.version>
<fastjson.version>1.2.40</fastjson.version> <fastjson.version>1.2.83</fastjson.version>
<velocity.version>1.7</velocity.version> <knife4j.version>4.5.0</knife4j.version>
<swagger.version>2.7.0</swagger.version> <hutool.version>5.8.28</hutool.version>
<hutool.version>5.8.16</hutool.version>
<druid.version>1.1.22</druid.version> <druid.version>1.1.22</druid.version>
<minio.version>8.5.1</minio.version>
<redisson.version>3.21.3</redisson.version>
<commons-lang3.version>3.8.1</commons-lang3.version> <commons-lang3.version>3.8.1</commons-lang3.version>
<lombok.version>1.18.16</lombok.version> <lombok.version>1.18.32</lombok.version>
<mysql.version>5.1.46</mysql.version> <mybatis.spring.version>3.0.3</mybatis.spring.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.17</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
@ -70,31 +65,11 @@
<artifactId>druid</artifactId> <artifactId>druid</artifactId>
<version>${druid.version}</version> <version>${druid.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>${velocity.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency> <dependency>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>
<version>${hutool.version}</version> <version>${hutool.version}</version>
</dependency> </dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.apache.poi</groupId> <groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId> <artifactId>poi-ooxml</artifactId>

Loading…
Cancel
Save