From cf09ab1b079e7dacda4ce2834f1e301b8029067a Mon Sep 17 00:00:00 2001 From: xsx <825657193@qq.com> Date: Wed, 15 Nov 2023 23:47:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=A3=8E=E6=A0=BC=E4=BC=98?= =?UTF-8?q?=E5=8C=96(=E9=98=BF=E9=87=8C=E8=A7=84=E7=BA=A6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/bx/imclient/IMClient.java | 1 - .../com/bx/imclient/config/RedisConfig.java | 9 -- .../java/com/bx/imclient/sender/IMSender.java | 12 +- .../task/AbstractMessageResultTask.java | 3 +- .../task/GroupMessageResultResultTask.java | 2 - .../task/PrivateMessageResultResultTask.java | 2 - .../java/com/bx/imcommon/enums/IMCmdType.java | 4 +- .../com/bx/imcommon/enums/IMListenerType.java | 4 +- .../com/bx/imcommon/enums/IMSendCode.java | 17 +- .../com/bx/imcommon/enums/IMTerminalType.java | 4 +- .../com/bx/imcommon/model/IMGroupMessage.java | 3 +- .../com/bx/imcommon/model/IMRecvInfo.java | 10 +- .../com/bx/imcommon/model/IMSendInfo.java | 4 +- .../com/bx/imcommon/model/IMSendResult.java | 4 +- .../com/bx/imcommon/model/IMSessionInfo.java | 5 +- .../com/bx/imcommon/model/IMUserInfo.java | 2 - .../java/com/bx/imcommon/util/JwtUtil.java | 28 ++-- .../implatform/config/GlobalCorsConfig.java | 1 - .../com/bx/implatform/config/ICEServer.java | 6 - .../com/bx/implatform/config/MvcConfig.java | 19 +-- .../implatform/controller/FileController.java | 1 - .../controller/FriendController.java | 1 - .../controller/GroupController.java | 3 - .../controller/GroupMessageController.java | 7 +- .../controller/LoginController.java | 6 +- .../controller/PrivateMessageController.java | 6 +- .../implatform/controller/UserController.java | 1 - .../controller/WebrtcController.java | 1 - .../interceptor/AuthInterceptor.java | 11 +- .../interceptor/XssInterceptor.java | 3 +- .../listener/GroupMessageListener.java | 3 +- .../listener/PrivateMessageListener.java | 3 +- .../com/bx/implatform/result/ResultUtils.java | 36 ++--- .../service/IGroupMessageService.java | 4 +- .../service/IPrivateMessageService.java | 4 +- .../bx/implatform/service/IUserService.java | 4 +- .../bx/implatform/service/IWebrtcService.java | 1 + .../service/impl/GroupMemberServiceImpl.java | 5 - .../service/impl/GroupMessageServiceImpl.java | 69 +++------ .../service/impl/GroupServiceImpl.java | 146 ++++++++---------- .../impl/PrivateMessageServiceImpl.java | 12 +- .../service/impl/UserServiceImpl.java | 100 ++++++------ .../service/impl/WebrtcServiceImpl.java | 8 +- .../service/thirdparty/FileService.java | 21 ++- .../bx/implatform/session/WebrtcSession.java | 2 - .../com/bx/implatform/util/BeanUtils.java | 133 +--------------- .../com/bx/implatform/util/DateTimeUtils.java | 18 +-- .../java/com/bx/implatform/util/FileUtil.java | 3 +- .../com/bx/implatform/util/MinioUtil.java | 58 ++----- .../java/com/bx/implatform/util/XssUtil.java | 4 +- .../java/com/bx/implatform/vo/GroupVO.java | 1 - .../com/bx/imserver/config/RedisConfig.java | 14 +- .../bx/imserver/netty/IMChannelHandler.java | 23 ++- .../com/bx/imserver/netty/IMServerGroup.java | 1 - .../bx/imserver/netty/UserChannelCtxMap.java | 1 - .../processor/GroupMessageProcessor.java | 5 +- .../netty/processor/HeartbeatProcessor.java | 11 +- .../netty/processor/LoginProcessor.java | 11 +- .../processor/PrivateMessageProcessor.java | 9 +- .../netty/processor/ProcessorFactory.java | 8 +- .../bx/imserver/netty/ws/WebSocketServer.java | 7 +- .../ws/endecode/MessageProtocolEncoder.java | 1 - .../task/AbstractPullMessageTask.java | 4 +- .../imserver/task/PullGroupMessageTask.java | 7 +- .../imserver/task/PullPrivateMessageTask.java | 9 +- 65 files changed, 304 insertions(+), 622 deletions(-) diff --git a/im-client/src/main/java/com/bx/imclient/IMClient.java b/im-client/src/main/java/com/bx/imclient/IMClient.java index fcaafcd..a17f6a9 100644 --- a/im-client/src/main/java/com/bx/imclient/IMClient.java +++ b/im-client/src/main/java/com/bx/imclient/IMClient.java @@ -5,7 +5,6 @@ import com.bx.imcommon.enums.IMTerminalType; import com.bx.imcommon.model.IMGroupMessage; import com.bx.imcommon.model.IMPrivateMessage; import lombok.AllArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import java.util.List; diff --git a/im-client/src/main/java/com/bx/imclient/config/RedisConfig.java b/im-client/src/main/java/com/bx/imclient/config/RedisConfig.java index a9799f8..d2312c0 100644 --- a/im-client/src/main/java/com/bx/imclient/config/RedisConfig.java +++ b/im-client/src/main/java/com/bx/imclient/config/RedisConfig.java @@ -1,21 +1,12 @@ package com.bx.imclient.config; import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer; -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; 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.GenericJackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; -import javax.annotation.Resource; - @Configuration("IMRedisConfig") public class RedisConfig { diff --git a/im-client/src/main/java/com/bx/imclient/sender/IMSender.java b/im-client/src/main/java/com/bx/imclient/sender/IMSender.java index b090051..79c31c1 100644 --- a/im-client/src/main/java/com/bx/imclient/sender/IMSender.java +++ b/im-client/src/main/java/com/bx/imclient/sender/IMSender.java @@ -8,23 +8,21 @@ import com.bx.imcommon.enums.IMListenerType; import com.bx.imcommon.enums.IMSendCode; import com.bx.imcommon.enums.IMTerminalType; import com.bx.imcommon.model.*; -import lombok.AllArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; +import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.*; @Service -@AllArgsConstructor +@RequiredArgsConstructor public class IMSender { - @Autowired - @Qualifier("IMRedisTemplate") + @Resource(name="IMRedisTemplate") private RedisTemplate redisTemplate; - private MessageListenerMulticaster listenerMulticaster; + private final MessageListenerMulticaster listenerMulticaster; public void sendPrivateMessage(IMPrivateMessage message) { for (Integer terminal : message.getRecvTerminals()) { diff --git a/im-client/src/main/java/com/bx/imclient/task/AbstractMessageResultTask.java b/im-client/src/main/java/com/bx/imclient/task/AbstractMessageResultTask.java index 52f437b..b7615a6 100644 --- a/im-client/src/main/java/com/bx/imclient/task/AbstractMessageResultTask.java +++ b/im-client/src/main/java/com/bx/imclient/task/AbstractMessageResultTask.java @@ -5,7 +5,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.CommandLineRunner; import javax.annotation.PreDestroy; -import java.util.concurrent.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; @Slf4j public abstract class AbstractMessageResultTask implements CommandLineRunner { diff --git a/im-client/src/main/java/com/bx/imclient/task/GroupMessageResultResultTask.java b/im-client/src/main/java/com/bx/imclient/task/GroupMessageResultResultTask.java index 67cfd8b..3fa8d12 100644 --- a/im-client/src/main/java/com/bx/imclient/task/GroupMessageResultResultTask.java +++ b/im-client/src/main/java/com/bx/imclient/task/GroupMessageResultResultTask.java @@ -6,8 +6,6 @@ import com.bx.imcommon.contant.IMRedisKey; import com.bx.imcommon.enums.IMListenerType; import com.bx.imcommon.model.IMSendResult; import lombok.AllArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; diff --git a/im-client/src/main/java/com/bx/imclient/task/PrivateMessageResultResultTask.java b/im-client/src/main/java/com/bx/imclient/task/PrivateMessageResultResultTask.java index 39ee51c..92fa7e0 100644 --- a/im-client/src/main/java/com/bx/imclient/task/PrivateMessageResultResultTask.java +++ b/im-client/src/main/java/com/bx/imclient/task/PrivateMessageResultResultTask.java @@ -7,8 +7,6 @@ import com.bx.imcommon.enums.IMListenerType; import com.bx.imcommon.model.IMSendResult; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java b/im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java index 2311468..4503340 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java @@ -13,9 +13,9 @@ public enum IMCmdType { GROUP_MESSAGE(4,"群发消息"); - private Integer code; + private final Integer code; - private String desc; + private final String desc; public static IMCmdType fromCode(Integer code){ diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java b/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java index c0de103..21da1e9 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java @@ -8,9 +8,9 @@ public enum IMListenerType{ PRIVATE_MESSAGE(1,"私聊消息"), GROUP_MESSAGE(2,"群聊消息"); - private Integer code; + private final Integer code; - private String desc; + private final String desc; diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/IMSendCode.java b/im-commom/src/main/java/com/bx/imcommon/enums/IMSendCode.java index 5189a2f..a633a1a 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/IMSendCode.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/IMSendCode.java @@ -10,21 +10,8 @@ public enum IMSendCode { NOT_FIND_CHANNEL(2,"未找到对方的channel"), UNKONW_ERROR(9999,"未知异常"); - private Integer code; - private String desc; - - - public static IMSendCode fromCode(Integer code){ - for (IMSendCode typeEnum:values()) { - if (typeEnum.code.equals(code)) { - return typeEnum; - } - } - return null; - } - - - + private final Integer code; + private final String desc; public Integer code(){ return this.code; diff --git a/im-commom/src/main/java/com/bx/imcommon/enums/IMTerminalType.java b/im-commom/src/main/java/com/bx/imcommon/enums/IMTerminalType.java index d0f4b81..db118da 100644 --- a/im-commom/src/main/java/com/bx/imcommon/enums/IMTerminalType.java +++ b/im-commom/src/main/java/com/bx/imcommon/enums/IMTerminalType.java @@ -12,9 +12,9 @@ public enum IMTerminalType { WEB(0,"web"), APP(1,"app"); - private Integer code; + private final Integer code; - private String desc; + private final String desc; public static IMTerminalType fromCode(Integer code){ diff --git a/im-commom/src/main/java/com/bx/imcommon/model/IMGroupMessage.java b/im-commom/src/main/java/com/bx/imcommon/model/IMGroupMessage.java index 2c298ca..b9f97aa 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/IMGroupMessage.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/IMGroupMessage.java @@ -3,7 +3,6 @@ package com.bx.imcommon.model; import com.bx.imcommon.enums.IMTerminalType; import lombok.Data; -import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -18,7 +17,7 @@ public class IMGroupMessage { /** * 接收者id列表(群成员列表,为空则不会推送) */ - private List recvIds = Collections.EMPTY_LIST; + private List recvIds = new LinkedList<>(); /** diff --git a/im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java index b0939aa..bbd085c 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java @@ -7,27 +7,27 @@ import java.util.List; @Data public class IMRecvInfo { - /* + /** * 命令类型 IMCmdType */ private Integer cmd; - /* + /** * 发送方 */ private IMUserInfo sender; - /* + /** * 接收方用户列表 */ List receivers; - /* + /** * 是否需要回调发送结果 */ private Boolean sendResult; - /* + /** * 推送消息体 */ private Object data; diff --git a/im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java index 769851b..7bf7e68 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java @@ -5,12 +5,12 @@ import lombok.Data; @Data public class IMSendInfo { - /* + /** * 命令 */ private Integer cmd; - /* + /** * 推送消息体 */ private T data; diff --git a/im-commom/src/main/java/com/bx/imcommon/model/IMSendResult.java b/im-commom/src/main/java/com/bx/imcommon/model/IMSendResult.java index 15d1b43..97ea07e 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/IMSendResult.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/IMSendResult.java @@ -15,12 +15,12 @@ public class IMSendResult { */ private IMUserInfo receiver; - /* + /** * 发送状态 IMCmdType */ private Integer code; - /* + /** * 消息内容 */ private T data; diff --git a/im-commom/src/main/java/com/bx/imcommon/model/IMSessionInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/IMSessionInfo.java index d97256e..ee7122e 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/IMSessionInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/IMSessionInfo.java @@ -1,16 +1,15 @@ package com.bx.imcommon.model; -import com.bx.imcommon.enums.IMTerminalType; import lombok.Data; @Data public class IMSessionInfo { - /* + /** * 用户id */ private Long userId; - /* + /** * 终端类型 */ private Integer terminal; diff --git a/im-commom/src/main/java/com/bx/imcommon/model/IMUserInfo.java b/im-commom/src/main/java/com/bx/imcommon/model/IMUserInfo.java index 72007ea..a25cd0f 100644 --- a/im-commom/src/main/java/com/bx/imcommon/model/IMUserInfo.java +++ b/im-commom/src/main/java/com/bx/imcommon/model/IMUserInfo.java @@ -4,8 +4,6 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.List; - /** * @author: 谢绍许 * @date: 2023-09-24 09:23:11 diff --git a/im-commom/src/main/java/com/bx/imcommon/util/JwtUtil.java b/im-commom/src/main/java/com/bx/imcommon/util/JwtUtil.java index 72f6b43..9259253 100644 --- a/im-commom/src/main/java/com/bx/imcommon/util/JwtUtil.java +++ b/im-commom/src/main/java/com/bx/imcommon/util/JwtUtil.java @@ -12,11 +12,11 @@ public class JwtUtil { /** * 生成jwt字符串 JWT(json web token) - * @param userId - * @param info - * @param expireIn - * @param secret - * @return + * @param userId 用户id + * @param info 用户细腻系 + * @param expireIn 过期时间 + * @param secret 秘钥 + * @return token * */ public static String sign(Long userId, String info,long expireIn,String secret) { try { @@ -38,8 +38,8 @@ public class JwtUtil { /** * 根据token获取userId - * @param token - * @return + * @param token 登录token + * @return 用户id * */ public static Long getUserId(String token) { try { @@ -51,9 +51,9 @@ public class JwtUtil { } /** - * 根据token获取自定义数据info - * @param token - * @return + * 根据token获取用户数据 + * @param token 用户登录token + * @return 用户数据 * */ public static String getInfo(String token) { try { @@ -65,11 +65,11 @@ public class JwtUtil { /** * 校验token - * @param token - * @param secret - * @return + * @param token 用户登录token + * @param secret 秘钥 + * @return true/false * */ - public static boolean checkSign(String token,String secret) { + public static Boolean checkSign(String token,String secret) { try{ Algorithm algorithm = Algorithm.HMAC256(secret); JWTVerifier verifier = JWT.require(algorithm).build(); diff --git a/im-platform/src/main/java/com/bx/implatform/config/GlobalCorsConfig.java b/im-platform/src/main/java/com/bx/implatform/config/GlobalCorsConfig.java index 4ee8955..113a221 100644 --- a/im-platform/src/main/java/com/bx/implatform/config/GlobalCorsConfig.java +++ b/im-platform/src/main/java/com/bx/implatform/config/GlobalCorsConfig.java @@ -2,7 +2,6 @@ package com.bx.implatform.config; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; diff --git a/im-platform/src/main/java/com/bx/implatform/config/ICEServer.java b/im-platform/src/main/java/com/bx/implatform/config/ICEServer.java index d29c182..cdd4ad0 100644 --- a/im-platform/src/main/java/com/bx/implatform/config/ICEServer.java +++ b/im-platform/src/main/java/com/bx/implatform/config/ICEServer.java @@ -6,14 +6,8 @@ import lombok.Data; @Data public class ICEServer { - - private String urls; - - private String username; - - private String credential; } diff --git a/im-platform/src/main/java/com/bx/implatform/config/MvcConfig.java b/im-platform/src/main/java/com/bx/implatform/config/MvcConfig.java index 4ebff3c..095fd26 100644 --- a/im-platform/src/main/java/com/bx/implatform/config/MvcConfig.java +++ b/im-platform/src/main/java/com/bx/implatform/config/MvcConfig.java @@ -2,6 +2,7 @@ package com.bx.implatform.config; import com.bx.implatform.interceptor.AuthInterceptor; import com.bx.implatform.interceptor.XssInterceptor; +import lombok.AllArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -11,30 +12,22 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration +@AllArgsConstructor public class MvcConfig implements WebMvcConfigurer { + private final AuthInterceptor authInterceptor; + private final XssInterceptor xssInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(xssInterceptor()) + registry.addInterceptor(xssInterceptor) .addPathPatterns("/**"); - registry.addInterceptor(authInterceptor()) + registry.addInterceptor(authInterceptor) .addPathPatterns("/**") .excludePathPatterns("/login","/logout","/register","/refreshToken", "/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**"); } - @Bean - public AuthInterceptor authInterceptor() { - return new AuthInterceptor(); - } - - @Bean - public XssInterceptor xssInterceptor() { - return new XssInterceptor(); - } - - @Bean public PasswordEncoder passwordEncoder(){ // 使用BCrypt加密密码 diff --git a/im-platform/src/main/java/com/bx/implatform/controller/FileController.java b/im-platform/src/main/java/com/bx/implatform/controller/FileController.java index 55b29b3..795caf4 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/FileController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/FileController.java @@ -8,7 +8,6 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; diff --git a/im-platform/src/main/java/com/bx/implatform/controller/FriendController.java b/im-platform/src/main/java/com/bx/implatform/controller/FriendController.java index e889eaa..4e55180 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/FriendController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/FriendController.java @@ -9,7 +9,6 @@ import com.bx.implatform.vo.FriendVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; diff --git a/im-platform/src/main/java/com/bx/implatform/controller/GroupController.java b/im-platform/src/main/java/com/bx/implatform/controller/GroupController.java index 2bd9c46..fb73e5c 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/GroupController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/GroupController.java @@ -1,6 +1,5 @@ package com.bx.implatform.controller; - import com.bx.implatform.result.Result; import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IGroupService; @@ -10,11 +9,9 @@ import com.bx.implatform.vo.GroupVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; diff --git a/im-platform/src/main/java/com/bx/implatform/controller/GroupMessageController.java b/im-platform/src/main/java/com/bx/implatform/controller/GroupMessageController.java index 38a54f1..55432c1 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/GroupMessageController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/GroupMessageController.java @@ -1,16 +1,13 @@ package com.bx.implatform.controller; - -import com.bx.implatform.vo.GroupMessageVO; +import com.bx.implatform.dto.GroupMessageDTO; import com.bx.implatform.result.Result; import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IGroupMessageService; -import com.bx.implatform.dto.GroupMessageDTO; -import com.bx.implatform.vo.PrivateMessageVO; +import com.bx.implatform.vo.GroupMessageVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; diff --git a/im-platform/src/main/java/com/bx/implatform/controller/LoginController.java b/im-platform/src/main/java/com/bx/implatform/controller/LoginController.java index 7bcf0df..8394a8f 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/LoginController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/LoginController.java @@ -1,17 +1,15 @@ package com.bx.implatform.controller; - +import com.bx.implatform.dto.LoginDTO; import com.bx.implatform.dto.ModifyPwdDTO; +import com.bx.implatform.dto.RegisterDTO; import com.bx.implatform.result.Result; import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IUserService; -import com.bx.implatform.dto.LoginDTO; -import com.bx.implatform.dto.RegisterDTO; import com.bx.implatform.vo.LoginVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; diff --git a/im-platform/src/main/java/com/bx/implatform/controller/PrivateMessageController.java b/im-platform/src/main/java/com/bx/implatform/controller/PrivateMessageController.java index 625d58b..7c502b1 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/PrivateMessageController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/PrivateMessageController.java @@ -1,15 +1,13 @@ package com.bx.implatform.controller; - -import com.bx.implatform.vo.PrivateMessageVO; +import com.bx.implatform.dto.PrivateMessageDTO; import com.bx.implatform.result.Result; import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IPrivateMessageService; -import com.bx.implatform.dto.PrivateMessageDTO; +import com.bx.implatform.vo.PrivateMessageVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; diff --git a/im-platform/src/main/java/com/bx/implatform/controller/UserController.java b/im-platform/src/main/java/com/bx/implatform/controller/UserController.java index c5ad0c1..1037aef 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/UserController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/UserController.java @@ -12,7 +12,6 @@ import com.bx.implatform.vo.UserVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; diff --git a/im-platform/src/main/java/com/bx/implatform/controller/WebrtcController.java b/im-platform/src/main/java/com/bx/implatform/controller/WebrtcController.java index cb98ef9..ef12c0e 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/WebrtcController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/WebrtcController.java @@ -7,7 +7,6 @@ import com.bx.implatform.service.IWebrtcService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; diff --git a/im-platform/src/main/java/com/bx/implatform/interceptor/AuthInterceptor.java b/im-platform/src/main/java/com/bx/implatform/interceptor/AuthInterceptor.java index 2201159..0337bbd 100644 --- a/im-platform/src/main/java/com/bx/implatform/interceptor/AuthInterceptor.java +++ b/im-platform/src/main/java/com/bx/implatform/interceptor/AuthInterceptor.java @@ -1,26 +1,27 @@ package com.bx.implatform.interceptor; - import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; +import com.bx.imcommon.util.JwtUtil; import com.bx.implatform.config.JwtProperties; import com.bx.implatform.enums.ResultCode; import com.bx.implatform.exception.GlobalException; import com.bx.implatform.session.UserSession; -import com.bx.imcommon.util.JwtUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Slf4j +@Component +@AllArgsConstructor public class AuthInterceptor implements HandlerInterceptor { - @Autowired - private JwtProperties jwtProperties; + private final JwtProperties jwtProperties; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { diff --git a/im-platform/src/main/java/com/bx/implatform/interceptor/XssInterceptor.java b/im-platform/src/main/java/com/bx/implatform/interceptor/XssInterceptor.java index 96278fa..1137a39 100644 --- a/im-platform/src/main/java/com/bx/implatform/interceptor/XssInterceptor.java +++ b/im-platform/src/main/java/com/bx/implatform/interceptor/XssInterceptor.java @@ -5,6 +5,7 @@ import com.bx.implatform.exception.GlobalException; import com.bx.implatform.util.XssUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; @@ -13,9 +14,9 @@ import java.io.BufferedReader; import java.util.Map; @Slf4j +@Component public class XssInterceptor implements HandlerInterceptor { - @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { // 检查参数 diff --git a/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java b/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java index 3527998..024aa7b 100644 --- a/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java +++ b/im-platform/src/main/java/com/bx/implatform/listener/GroupMessageListener.java @@ -4,12 +4,11 @@ import com.bx.imclient.annotation.IMListener; import com.bx.imclient.listener.MessageListener; import com.bx.imcommon.enums.IMListenerType; import com.bx.imcommon.enums.IMSendCode; -import com.bx.implatform.vo.GroupMessageVO; import com.bx.imcommon.model.IMSendResult; import com.bx.implatform.contant.RedisKey; +import com.bx.implatform.vo.GroupMessageVO; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; diff --git a/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java b/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java index 13a58ee..6e98e44 100644 --- a/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java +++ b/im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java @@ -5,12 +5,11 @@ import com.bx.imclient.annotation.IMListener; import com.bx.imclient.listener.MessageListener; import com.bx.imcommon.enums.IMListenerType; import com.bx.imcommon.enums.IMSendCode; -import com.bx.implatform.vo.PrivateMessageVO; 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 lombok.AllArgsConstructor; +import com.bx.implatform.vo.PrivateMessageVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; diff --git a/im-platform/src/main/java/com/bx/implatform/result/ResultUtils.java b/im-platform/src/main/java/com/bx/implatform/result/ResultUtils.java index 50326fd..88e3883 100644 --- a/im-platform/src/main/java/com/bx/implatform/result/ResultUtils.java +++ b/im-platform/src/main/java/com/bx/implatform/result/ResultUtils.java @@ -5,61 +5,53 @@ import com.bx.implatform.enums.ResultCode; public class ResultUtils { - public static final Result success(){ - Result result=new Result(); + public static Result success(){ + Result result=new Result<>(); result.setCode(ResultCode.SUCCESS.getCode()); result.setMessage(ResultCode.SUCCESS.getMsg()); return result; } - public static final Result success(T data){ - Result result=new Result(); + public static Result success(T data){ + Result result=new Result<>(); result.setCode(ResultCode.SUCCESS.getCode()); result.setMessage(ResultCode.SUCCESS.getMsg()); result.setData(data); return result; } - public static final Result success(T data, String messsage){ - Result result=new Result(); + public static Result success(T data, String messsage){ + Result result=new Result<>(); result.setCode(ResultCode.SUCCESS.getCode()); result.setMessage(messsage); result.setData(data); return result; } - public static final Result success(String messsage){ - Result result=new Result(); + public static Result success(String messsage){ + Result result=new Result<>(); result.setCode(ResultCode.SUCCESS.getCode()); result.setMessage(messsage); return result; } - public static final Result error(Integer code, String messsage){ - Result result=new Result(); + public static Result error(Integer code, String messsage){ + Result result=new Result<>(); result.setCode(code); result.setMessage(messsage); return result; } - public static final Result error(ResultCode resultCode, String messsage){ - Result result=new Result(); + public static Result error(ResultCode resultCode, String messsage){ + Result result=new Result<>(); result.setCode(resultCode.getCode()); result.setMessage(messsage); return result; } - public static final Result error(ResultCode resultCode, String messsage, T data){ - Result result=new Result(); - result.setCode(resultCode.getCode()); - result.setMessage(messsage); - result.setData(data); - return result; - } - - public static final Result error(ResultCode resultCode){ - Result result=new Result(); + public static Result error(ResultCode resultCode){ + Result result=new Result<>(); result.setCode(resultCode.getCode()); result.setMessage(resultCode.getMsg()); return result; diff --git a/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java b/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java index b92ba78..610925c 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/IGroupMessageService.java @@ -1,9 +1,9 @@ package com.bx.implatform.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.bx.implatform.vo.GroupMessageVO; -import com.bx.implatform.entity.GroupMessage; import com.bx.implatform.dto.GroupMessageDTO; +import com.bx.implatform.entity.GroupMessage; +import com.bx.implatform.vo.GroupMessageVO; import java.util.List; diff --git a/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java b/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java index 9cfeaca..750f1d7 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/IPrivateMessageService.java @@ -1,9 +1,9 @@ package com.bx.implatform.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.bx.implatform.vo.PrivateMessageVO; -import com.bx.implatform.entity.PrivateMessage; import com.bx.implatform.dto.PrivateMessageDTO; +import com.bx.implatform.entity.PrivateMessage; +import com.bx.implatform.vo.PrivateMessageVO; import java.util.List; diff --git a/im-platform/src/main/java/com/bx/implatform/service/IUserService.java b/im-platform/src/main/java/com/bx/implatform/service/IUserService.java index 8a1c2d1..f24fb2b 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/IUserService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/IUserService.java @@ -1,10 +1,10 @@ package com.bx.implatform.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.bx.implatform.dto.ModifyPwdDTO; -import com.bx.implatform.entity.User; import com.bx.implatform.dto.LoginDTO; +import com.bx.implatform.dto.ModifyPwdDTO; import com.bx.implatform.dto.RegisterDTO; +import com.bx.implatform.entity.User; import com.bx.implatform.vo.LoginVO; import com.bx.implatform.vo.OnlineTerminalVO; import com.bx.implatform.vo.UserVO; diff --git a/im-platform/src/main/java/com/bx/implatform/service/IWebrtcService.java b/im-platform/src/main/java/com/bx/implatform/service/IWebrtcService.java index 0b2e345..4a52746 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/IWebrtcService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/IWebrtcService.java @@ -2,6 +2,7 @@ package com.bx.implatform.service; import com.bx.implatform.config.ICEServer; import org.springframework.web.bind.annotation.RequestBody; + import java.util.List; diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMemberServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMemberServiceImpl.java index 7edda3d..8f0181e 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMemberServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMemberServiceImpl.java @@ -21,17 +21,12 @@ import java.util.stream.Collectors; @Service @CacheConfig(cacheNames = RedisKey.IM_CACHE_GROUP_MEMBER_ID) public class GroupMemberServiceImpl extends ServiceImpl implements IGroupMemberService { - - - @CacheEvict(key="#member.getGroupId()") @Override public boolean save(GroupMember member) { return super.save(member); } - - @CacheEvict(key="#groupId") @Override public boolean saveOrUpdateBatch(Long groupId,List members) { diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java index dd0cc79..7599c56 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java @@ -40,11 +40,10 @@ import java.util.stream.Collectors; @Service @AllArgsConstructor public class GroupMessageServiceImpl extends ServiceImpl implements IGroupMessageService { - private IGroupService groupService; - private IGroupMemberService groupMemberService; - private RedisTemplate redisTemplate; - private IMClient imClient; - + private final IGroupService groupService; + private final IGroupMemberService groupMemberService; + private final RedisTemplate redisTemplate; + private final IMClient imClient; @Override public Long sendMessage(GroupMessageDTO dto) { @@ -58,7 +57,7 @@ public class GroupMessageServiceImpl extends ServiceImpl wrapper = Wrappers.lambdaQuery(); - wrapper.eq(GroupMessage::getGroupId, member.getGroupId()) - .gt(GroupMessage::getSendTime, member.getCreatedTime()) - .ne(GroupMessage::getSendId, session.getUserId()) - .ne(GroupMessage::getStatus, MessageStatus.RECALL.code()); + wrapper.eq(GroupMessage::getGroupId, member.getGroupId()).gt(GroupMessage::getSendTime, member.getCreatedTime()) + .ne(GroupMessage::getSendId, session.getUserId()).ne(GroupMessage::getStatus, MessageStatus.RECALL.code()); if (maxReadedId != null) { wrapper.gt(GroupMessage::getId, maxReadedId); } @@ -174,43 +169,37 @@ public class GroupMessageServiceImpl extends ServiceImpl loadMessage(Long minId) { UserSession session = SessionContext.getSession(); List members = groupMemberService.findByUserId(session.getUserId()); List ids = members.stream().map(GroupMember::getGroupId).collect(Collectors.toList()); - if(CollectionUtil.isEmpty(ids)){ + if (CollectionUtil.isEmpty(ids)) { return new ArrayList<>(); } // 只能拉取最近1个月的 Date minDate = DateTimeUtils.addMonths(new Date(), -1); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); - wrapper.gt(GroupMessage::getId, minId) - .gt(GroupMessage::getSendTime, minDate) - .in(GroupMessage::getGroupId, ids) - .ne(GroupMessage::getStatus, MessageStatus.RECALL.code()) - .orderByAsc(GroupMessage::getId) - .last("limit 100"); + wrapper.gt(GroupMessage::getId, minId).gt(GroupMessage::getSendTime, minDate).in(GroupMessage::getGroupId, ids) + .ne(GroupMessage::getStatus, MessageStatus.RECALL.code()).orderByAsc(GroupMessage::getId).last("limit 100"); List messages = this.list(wrapper); // 转成vo List vos = messages.stream().map(m -> { GroupMessageVO vo = BeanUtils.copyProperties(m, GroupMessageVO.class); // 被@用户列表 - List atIds = Arrays.asList(StrUtil.split(m.getAtUserIds(),",")); + List atIds = Arrays.asList(StrUtil.split(m.getAtUserIds(), ",")); vo.setAtUserIds(atIds.stream().map(Long::parseLong).collect(Collectors.toList())); return vo; }).collect(Collectors.toList()); // 消息状态,数据库没有存群聊的消息状态,需要从redis取 - List keys = ids.stream() - .map(id -> String.join(":", RedisKey.IM_GROUP_READED_POSITION, id.toString(), session.getUserId().toString())) - .collect(Collectors.toList()); + List keys = ids.stream().map(id -> String.join(":", RedisKey.IM_GROUP_READED_POSITION, id.toString(), session.getUserId().toString())) + .collect(Collectors.toList()); List sendPos = redisTemplate.opsForValue().multiGet(keys); int idx = 0; for (Long id : ids) { Object o = sendPos.get(idx); - Integer sendMaxId = Objects.isNull(o) ? -1 : (Integer) o; + Integer sendMaxId = Objects.isNull(o) ? -1 : (Integer)o; vos.stream().filter(vo -> vo.getGroupId().equals(id)).forEach(vo -> { if (vo.getId() <= sendMaxId) { // 已读 @@ -225,18 +214,14 @@ public class GroupMessageServiceImpl extends ServiceImpl wrapper = Wrappers.lambdaQuery(); - wrapper.eq(GroupMessage::getGroupId, groupId) - .orderByDesc(GroupMessage::getId) - .last("limit 1") - .select(GroupMessage::getId); + wrapper.eq(GroupMessage::getGroupId, groupId).orderByDesc(GroupMessage::getId).last("limit 1").select(GroupMessage::getId); GroupMessage message = this.getOne(wrapper); - if(Objects.isNull(message)){ + if (Objects.isNull(message)) { return; } // 推送消息给自己的其他终端 @@ -252,12 +237,11 @@ public class GroupMessageServiceImpl extends ServiceImpl findHistoryMessage(Long groupId, Long page, Long size) { page = page > 0 ? page : 1; @@ -271,17 +255,14 @@ public class GroupMessageServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(GroupMessage::getGroupId, groupId) - .gt(GroupMessage::getSendTime, member.getCreatedTime()) - .ne(GroupMessage::getStatus, MessageStatus.RECALL.code()) - .orderByDesc(GroupMessage::getId) - .last("limit " + stIdx + "," + size); + wrapper.lambda().eq(GroupMessage::getGroupId, groupId).gt(GroupMessage::getSendTime, member.getCreatedTime()) + .ne(GroupMessage::getStatus, MessageStatus.RECALL.code()).orderByDesc(GroupMessage::getId).last("limit " + stIdx + "," + size); List messages = this.list(wrapper); - List messageInfos = messages.stream().map(m -> BeanUtils.copyProperties(m, GroupMessageVO.class)).collect(Collectors.toList()); + List messageInfos = + messages.stream().map(m -> BeanUtils.copyProperties(m, GroupMessageVO.class)).collect(Collectors.toList()); log.info("拉取群聊记录,用户id:{},群聊id:{},数量:{}", userId, groupId, messageInfos.size()); return messageInfos; } - } diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java index 7cd737b..080b72c 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java @@ -38,24 +38,22 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; - @Slf4j @CacheConfig(cacheNames = RedisKey.IM_CACHE_GROUP) @Service @AllArgsConstructor public class GroupServiceImpl extends ServiceImpl implements IGroupService { - private IUserService userService; - private IGroupMemberService groupMemberService; - private IFriendService friendsService; - private IMClient imClient; - + private final IUserService userService; + private final IGroupMemberService groupMemberService; + private final IFriendService friendsService; + private final IMClient imClient; @Override public GroupVO createGroup(GroupVO vo) { UserSession session = SessionContext.getSession(); User user = userService.getById(session.getUserId()); // 保存群组数据 - Group group = BeanUtils.copyProperties(vo,Group.class); + Group group = BeanUtils.copyProperties(vo, Group.class); group.setOwnerId(user.getId()); this.save(group); // 把群主加入群 @@ -63,18 +61,17 @@ public class GroupServiceImpl extends ServiceImpl implements groupMember.setGroupId(group.getId()); groupMember.setUserId(user.getId()); groupMember.setHeadImage(user.getHeadImageThumb()); - groupMember.setAliasName(StringUtils.isEmpty(vo.getAliasName())?session.getNickName():vo.getAliasName()); - groupMember.setRemark(StringUtils.isEmpty(vo.getRemark())?group.getName():vo.getRemark()); + groupMember.setAliasName(StringUtils.isEmpty(vo.getAliasName()) ? session.getNickName() : vo.getAliasName()); + groupMember.setRemark(StringUtils.isEmpty(vo.getRemark()) ? group.getName() : vo.getRemark()); groupMemberService.save(groupMember); vo.setId(group.getId()); vo.setAliasName(groupMember.getAliasName()); vo.setRemark(groupMember.getRemark()); - log.info("创建群聊,群聊id:{},群聊名称:{}",group.getId(),group.getName()); + log.info("创建群聊,群聊id:{},群聊名称:{}", group.getId(), group.getName()); return vo; } - @CacheEvict(value = "#vo.getId()") @Transactional(rollbackFor = Exception.class) @Override @@ -83,109 +80,99 @@ public class GroupServiceImpl extends ServiceImpl implements // 校验是不是群主,只有群主能改信息 Group group = this.getById(vo.getId()); // 群主有权修改群基本信息 - if(group.getOwnerId().equals(session.getUserId()) ){ - group = BeanUtils.copyProperties(vo,Group.class); + if (group.getOwnerId().equals(session.getUserId())) { + group = BeanUtils.copyProperties(vo, Group.class); this.updateById(group); } // 更新成员信息 - GroupMember member = groupMemberService.findByGroupAndUserId(vo.getId(),session.getUserId()); - if(member == null){ - throw new GlobalException(ResultCode.PROGRAM_ERROR,"您不是群聊的成员"); + GroupMember member = groupMemberService.findByGroupAndUserId(vo.getId(), session.getUserId()); + if (member == null) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "您不是群聊的成员"); } - member.setAliasName(StringUtils.isEmpty(vo.getAliasName())?session.getNickName():vo.getAliasName()); - member.setRemark(StringUtils.isEmpty(vo.getRemark())?group.getName():vo.getRemark()); + member.setAliasName(StringUtils.isEmpty(vo.getAliasName()) ? session.getNickName() : vo.getAliasName()); + member.setRemark(StringUtils.isEmpty(vo.getRemark()) ? group.getName() : vo.getRemark()); groupMemberService.updateById(member); - log.info("修改群聊,群聊id:{},群聊名称:{}",group.getId(),group.getName()); + log.info("修改群聊,群聊id:{},群聊名称:{}", group.getId(), group.getName()); return vo; } - - @Transactional(rollbackFor = Exception.class) @CacheEvict(value = "#groupId") @Override public void deleteGroup(Long groupId) { UserSession session = SessionContext.getSession(); Group group = this.getById(groupId); - if(!group.getOwnerId().equals(session.getUserId())){ - throw new GlobalException(ResultCode.PROGRAM_ERROR,"只有群主才有权限解除群聊"); + if (!group.getOwnerId().equals(session.getUserId())) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "只有群主才有权限解除群聊"); } // 逻辑删除群数据 group.setDeleted(true); this.updateById(group); // 删除成员数据 groupMemberService.removeByGroupId(groupId); - log.info("删除群聊,群聊id:{},群聊名称:{}",group.getId(),group.getName()); + log.info("删除群聊,群聊id:{},群聊名称:{}", group.getId(), group.getName()); } - - @Override public void quitGroup(Long groupId) { Long userId = SessionContext.getSession().getUserId(); Group group = this.getById(groupId); - if(group.getOwnerId().equals(userId)){ - throw new GlobalException(ResultCode.PROGRAM_ERROR,"您是群主,不可退出群聊"); + if (group.getOwnerId().equals(userId)) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "您是群主,不可退出群聊"); } // 删除群聊成员 - groupMemberService.removeByGroupAndUserId(groupId,userId); - log.info("退出群聊,群聊id:{},群聊名称:{},用户id:{}",group.getId(),group.getName(),userId); + groupMemberService.removeByGroupAndUserId(groupId, userId); + log.info("退出群聊,群聊id:{},群聊名称:{},用户id:{}", group.getId(), group.getName(), userId); } - - @Override public void kickGroup(Long groupId, Long userId) { UserSession session = SessionContext.getSession(); Group group = this.getById(groupId); - if(!group.getOwnerId().equals(session.getUserId()) ){ - throw new GlobalException(ResultCode.PROGRAM_ERROR,"您不是群主,没有权限踢人"); + if (!group.getOwnerId().equals(session.getUserId())) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "您不是群主,没有权限踢人"); } - if(userId.equals(session.getUserId())){ - throw new GlobalException(ResultCode.PROGRAM_ERROR,"亲,不能自己踢自己哟"); + if (userId.equals(session.getUserId())) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "亲,不能自己踢自己哟"); } // 删除群聊成员 - groupMemberService.removeByGroupAndUserId(groupId,userId); - log.info("踢出群聊,群聊id:{},群聊名称:{},用户id:{}",group.getId(),group.getName(),userId); + groupMemberService.removeByGroupAndUserId(groupId, userId); + log.info("踢出群聊,群聊id:{},群聊名称:{},用户id:{}", group.getId(), group.getName(), userId); } @Override public GroupVO findById(Long groupId) { UserSession session = SessionContext.getSession(); Group group = this.getById(groupId); - GroupMember member = groupMemberService.findByGroupAndUserId(groupId,session.getUserId()); - if(member == null){ - throw new GlobalException(ResultCode.PROGRAM_ERROR,"您未加入群聊"); + GroupMember member = groupMemberService.findByGroupAndUserId(groupId, session.getUserId()); + if (member == null) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "您未加入群聊"); } - GroupVO vo = BeanUtils.copyProperties(group,GroupVO.class); + GroupVO vo = BeanUtils.copyProperties(group, GroupVO.class); vo.setAliasName(member.getAliasName()); vo.setRemark(member.getRemark()); - return vo; + return vo; } - @Cacheable(value = "#groupId") @Override - public Group getById(Long groupId){ + public Group getById(Long groupId) { Group group = super.getById(groupId); - if(group == null){ - throw new GlobalException(ResultCode.PROGRAM_ERROR,"群组不存在"); + if (group == null) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "群组不存在"); } - if(group.getDeleted()){ - throw new GlobalException(ResultCode.PROGRAM_ERROR,"群组'"+group.getName()+"'已解散"); + if (group.getDeleted()) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "群组'" + group.getName() + "'已解散"); } return group; } - - - @Override public List findGroups() { UserSession session = SessionContext.getSession(); // 查询当前用户的群id列表 List groupMembers = groupMemberService.findByUserId(session.getUserId()); - if(groupMembers.isEmpty()){ + if (groupMembers.isEmpty()) { return new LinkedList<>(); } // 拉取群列表 @@ -203,58 +190,55 @@ public class GroupServiceImpl extends ServiceImpl implements }).collect(Collectors.toList()); } - @Override public void invite(GroupInviteVO vo) { UserSession session = SessionContext.getSession(); Group group = this.getById(vo.getGroupId()); - if(group == null){ + if (group == null) { throw new GlobalException(ResultCode.PROGRAM_ERROR, "群聊不存在"); } // 群聊人数校验 List members = groupMemberService.findByGroupId(vo.getGroupId()); - long size = members.stream().filter(m->!m.getQuit()).count(); - if(vo.getFriendIds().size() + size > Constant.MAX_GROUP_MEMBER){ - throw new GlobalException(ResultCode.PROGRAM_ERROR, "群聊人数不能大于"+Constant.MAX_GROUP_MEMBER+"人"); + long size = members.stream().filter(m -> !m.getQuit()).count(); + if (vo.getFriendIds().size() + size > Constant.MAX_GROUP_MEMBER) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "群聊人数不能大于" + Constant.MAX_GROUP_MEMBER + "人"); } // 找出好友信息 List friends = friendsService.findFriendByUserId(session.getUserId()); - List friendsList = vo.getFriendIds().stream().map(id -> - friends.stream().filter(f -> f.getFriendId().equals(id)).findFirst().get()).collect(Collectors.toList()); + List friendsList = vo.getFriendIds().stream().map(id -> friends.stream().filter(f -> f.getFriendId().equals(id)).findFirst().get()) + .collect(Collectors.toList()); if (friendsList.size() != vo.getFriendIds().size()) { throw new GlobalException(ResultCode.PROGRAM_ERROR, "部分用户不是您的好友,邀请失败"); } // 批量保存成员数据 - List groupMembers = friendsList.stream() - .map(f -> { - Optional optional = members.stream().filter(m->m.getUserId().equals(f.getFriendId())).findFirst(); - GroupMember groupMember = optional.orElseGet(GroupMember::new); - groupMember.setGroupId(vo.getGroupId()); - groupMember.setUserId(f.getFriendId()); - groupMember.setAliasName(f.getFriendNickName()); - groupMember.setRemark(group.getName()); - groupMember.setHeadImage(f.getFriendHeadImage()); - groupMember.setCreatedTime(new Date()); - groupMember.setQuit(false); - return groupMember; - }).collect(Collectors.toList()); - if(!groupMembers.isEmpty()) { - groupMemberService.saveOrUpdateBatch(group.getId(),groupMembers); + List groupMembers = friendsList.stream().map(f -> { + Optional optional = members.stream().filter(m -> m.getUserId().equals(f.getFriendId())).findFirst(); + GroupMember groupMember = optional.orElseGet(GroupMember::new); + groupMember.setGroupId(vo.getGroupId()); + groupMember.setUserId(f.getFriendId()); + groupMember.setAliasName(f.getFriendNickName()); + groupMember.setRemark(group.getName()); + groupMember.setHeadImage(f.getFriendHeadImage()); + groupMember.setCreatedTime(new Date()); + groupMember.setQuit(false); + return groupMember; + }).collect(Collectors.toList()); + if (!groupMembers.isEmpty()) { + groupMemberService.saveOrUpdateBatch(group.getId(), groupMembers); } - log.info("邀请进入群聊,群聊id:{},群聊名称:{},被邀请用户id:{}",group.getId(),group.getName(),vo.getFriendIds()); + log.info("邀请进入群聊,群聊id:{},群聊名称:{},被邀请用户id:{}", group.getId(), group.getName(), vo.getFriendIds()); } - @Override public List findGroupMembers(Long groupId) { List members = groupMemberService.findByGroupId(groupId); - List userIds = members.stream().map(GroupMember::getUserId).collect(Collectors.toList()); + List userIds = members.stream().map(GroupMember::getUserId).collect(Collectors.toList()); List onlineUserIds = imClient.getOnlineUser(userIds); - return members.stream().map(m->{ - GroupMemberVO vo = BeanUtils.copyProperties(m,GroupMemberVO.class); + return members.stream().map(m -> { + GroupMemberVO vo = BeanUtils.copyProperties(m, GroupMemberVO.class); vo.setOnline(onlineUserIds.contains(m.getUserId())); return vo; - }).sorted((m1,m2)-> m2.getOnline().compareTo(m1.getOnline())).collect(Collectors.toList()); + }).sorted((m1, m2) -> m2.getOnline().compareTo(m1.getOnline())).collect(Collectors.toList()); } } diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java index 55ea18b..dd14355 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java @@ -9,9 +9,8 @@ import com.bx.imclient.IMClient; import com.bx.imcommon.contant.IMConstant; import com.bx.imcommon.model.IMPrivateMessage; import com.bx.imcommon.model.IMUserInfo; +import com.bx.implatform.dto.PrivateMessageDTO; import com.bx.implatform.entity.Friend; -import com.bx.implatform.util.DateTimeUtils; -import com.bx.implatform.vo.PrivateMessageVO; import com.bx.implatform.entity.PrivateMessage; import com.bx.implatform.enums.MessageStatus; import com.bx.implatform.enums.MessageType; @@ -23,7 +22,8 @@ import com.bx.implatform.service.IPrivateMessageService; import com.bx.implatform.session.SessionContext; import com.bx.implatform.session.UserSession; import com.bx.implatform.util.BeanUtils; -import com.bx.implatform.dto.PrivateMessageDTO; +import com.bx.implatform.util.DateTimeUtils; +import com.bx.implatform.vo.PrivateMessageVO; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -40,10 +40,8 @@ import java.util.stream.Collectors; @AllArgsConstructor public class PrivateMessageServiceImpl extends ServiceImpl implements IPrivateMessageService { - private IFriendService friendService; - - private IMClient imClient; - + private final IFriendService friendService; + private final IMClient imClient; @Override public Long sendMessage(PrivateMessageDTO dto) { diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java index 4a90a32..39dcdf5 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java @@ -37,36 +37,34 @@ import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; - @Slf4j @Service @AllArgsConstructor public class UserServiceImpl extends ServiceImpl implements IUserService { - RedisTemplate redisTemplate; - private PasswordEncoder passwordEncoder; - private IGroupMemberService groupMemberService; - private IFriendService friendService; - private JwtProperties jwtProperties; - private IMClient imClient; - + private final RedisTemplate redisTemplate; + private final PasswordEncoder passwordEncoder; + private final IGroupMemberService groupMemberService; + private final IFriendService friendService; + private final JwtProperties jwtProperties; + private final IMClient imClient; @Override public LoginVO login(LoginDTO dto) { User user = this.findUserByUserName(dto.getUserName()); - if(null == user){ - throw new GlobalException(ResultCode.PROGRAM_ERROR,"用户不存在"); + if (null == user) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "用户不存在"); } - if(!passwordEncoder.matches(dto.getPassword(),user.getPassword())){ - throw new GlobalException(ResultCode.PASSWOR_ERROR); + if (!passwordEncoder.matches(dto.getPassword(), user.getPassword())) { + throw new GlobalException(ResultCode.PASSWOR_ERROR); } // 生成token - UserSession session = BeanUtils.copyProperties(user,UserSession.class); + UserSession session = BeanUtils.copyProperties(user, UserSession.class); session.setUserId(user.getId()); session.setTerminal(dto.getTerminal()); String strJson = JSON.toJSONString(session); - String accessToken = JwtUtil.sign(user.getId(),strJson,jwtProperties.getAccessTokenExpireIn(),jwtProperties.getAccessTokenSecret()); - String refreshToken = JwtUtil.sign(user.getId(),strJson,jwtProperties.getRefreshTokenExpireIn(),jwtProperties.getRefreshTokenSecret()); + String accessToken = JwtUtil.sign(user.getId(), strJson, jwtProperties.getAccessTokenExpireIn(), jwtProperties.getAccessTokenSecret()); + String refreshToken = JwtUtil.sign(user.getId(), strJson, jwtProperties.getRefreshTokenExpireIn(), jwtProperties.getRefreshTokenSecret()); LoginVO vo = new LoginVO(); vo.setAccessToken(accessToken); vo.setAccessTokenExpiresIn(jwtProperties.getAccessTokenExpireIn()); @@ -78,14 +76,14 @@ public class UserServiceImpl extends ServiceImpl implements IU @Override public LoginVO refreshToken(String refreshToken) { //验证 token - if(!JwtUtil.checkSign(refreshToken, jwtProperties.getRefreshTokenSecret())){ + if (!JwtUtil.checkSign(refreshToken, jwtProperties.getRefreshTokenSecret())) { throw new GlobalException("refreshToken无效或已过期"); } String strJson = JwtUtil.getInfo(refreshToken); Long userId = JwtUtil.getUserId(refreshToken); - String accessToken = JwtUtil.sign(userId,strJson,jwtProperties.getAccessTokenExpireIn(),jwtProperties.getAccessTokenSecret()); - String newRefreshToken = JwtUtil.sign(userId,strJson,jwtProperties.getRefreshTokenExpireIn(),jwtProperties.getRefreshTokenSecret()); - LoginVO vo =new LoginVO(); + String accessToken = JwtUtil.sign(userId, strJson, jwtProperties.getAccessTokenExpireIn(), jwtProperties.getAccessTokenSecret()); + String newRefreshToken = JwtUtil.sign(userId, strJson, jwtProperties.getRefreshTokenExpireIn(), jwtProperties.getRefreshTokenSecret()); + LoginVO vo = new LoginVO(); vo.setAccessToken(accessToken); vo.setAccessTokenExpiresIn(jwtProperties.getAccessTokenExpireIn()); vo.setRefreshToken(newRefreshToken); @@ -93,68 +91,63 @@ public class UserServiceImpl extends ServiceImpl implements IU return vo; } - @Override public void register(RegisterDTO dto) { User user = this.findUserByUserName(dto.getUserName()); - if(null != user){ - throw new GlobalException(ResultCode.USERNAME_ALREADY_REGISTER); + if (null != user) { + throw new GlobalException(ResultCode.USERNAME_ALREADY_REGISTER); } - user = BeanUtils.copyProperties(dto,User.class); + user = BeanUtils.copyProperties(dto, User.class); user.setPassword(passwordEncoder.encode(user.getPassword())); this.save(user); - log.info("注册用户,用户id:{},用户名:{},昵称:{}",user.getId(),dto.getUserName(),dto.getNickName()); + log.info("注册用户,用户id:{},用户名:{},昵称:{}", user.getId(), dto.getUserName(), dto.getNickName()); } - @Override public void modifyPassword(ModifyPwdDTO dto) { UserSession session = SessionContext.getSession(); User user = this.getById(session.getUserId()); - if(!passwordEncoder.matches(dto.getOldPassword(),user.getPassword())){ - throw new GlobalException("旧密码不正确"); + if (!passwordEncoder.matches(dto.getOldPassword(), user.getPassword())) { + throw new GlobalException("旧密码不正确"); } user.setPassword(passwordEncoder.encode(dto.getNewPassword())); this.updateById(user); - log.info("用户修改密码,用户id:{},用户名:{},昵称:{}",user.getId(),user.getUserName(),user.getNickName()); + log.info("用户修改密码,用户id:{},用户名:{},昵称:{}", user.getId(), user.getUserName(), user.getNickName()); } - @Override public User findUserByUserName(String username) { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - queryWrapper.eq(User::getUserName,username); + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(User::getUserName, username); return this.getOne(queryWrapper); } - - @Transactional(rollbackFor = Exception.class) @Override public void update(UserVO vo) { UserSession session = SessionContext.getSession(); - if(!session.getUserId().equals(vo.getId()) ){ - throw new GlobalException(ResultCode.PROGRAM_ERROR,"不允许修改其他用户的信息!"); + if (!session.getUserId().equals(vo.getId())) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "不允许修改其他用户的信息!"); } User user = this.getById(vo.getId()); - if(Objects.isNull(user)){ - throw new GlobalException(ResultCode.PROGRAM_ERROR,"用户不存在"); + if (Objects.isNull(user)) { + throw new GlobalException(ResultCode.PROGRAM_ERROR, "用户不存在"); } // 更新好友昵称和头像 - if(!user.getNickName().equals(vo.getNickName()) || !user.getHeadImageThumb().equals(vo.getHeadImageThumb())){ + if (!user.getNickName().equals(vo.getNickName()) || !user.getHeadImageThumb().equals(vo.getHeadImageThumb())) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lambda().eq(Friend::getFriendId,session.getUserId()); + queryWrapper.lambda().eq(Friend::getFriendId, session.getUserId()); List friends = friendService.list(queryWrapper); - for(Friend friend: friends){ + for (Friend friend : friends) { friend.setFriendNickName(vo.getNickName()); friend.setFriendHeadImage(vo.getHeadImageThumb()); } friendService.updateBatchById(friends); } // 更新群聊中的头像 - if(!user.getHeadImageThumb().equals(vo.getHeadImageThumb())){ + if (!user.getHeadImageThumb().equals(vo.getHeadImageThumb())) { List members = groupMemberService.findByUserId(session.getUserId()); - for(GroupMember member:members){ + for (GroupMember member : members) { member.setHeadImage(vo.getHeadImageThumb()); } groupMemberService.updateBatchById(members); @@ -169,45 +162,38 @@ public class UserServiceImpl extends ServiceImpl implements IU log.info("用户信息更新,用户:{}}", user); } - @Override public UserVO findUserById(Long id) { User user = this.getById(id); - UserVO vo = BeanUtils.copyProperties(user,UserVO.class); + UserVO vo = BeanUtils.copyProperties(user, UserVO.class); vo.setOnline(imClient.isOnline(id)); return vo; } - @Override public List findUserByName(String name) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - queryWrapper.like(User::getUserName,name) - .or() - .like(User::getNickName,name) - .last("limit 20"); + queryWrapper.like(User::getUserName, name).or().like(User::getNickName, name).last("limit 20"); List users = this.list(queryWrapper); List userIds = users.stream().map(User::getId).collect(Collectors.toList()); List onlineUserIds = imClient.getOnlineUser(userIds); - return users.stream().map(u-> { - UserVO vo = BeanUtils.copyProperties(u,UserVO.class); + return users.stream().map(u -> { + UserVO vo = BeanUtils.copyProperties(u, UserVO.class); vo.setOnline(onlineUserIds.contains(u.getId())); return vo; }).collect(Collectors.toList()); } - @Override public List getOnlineTerminals(String userIds) { - List userIdList = Arrays.stream(userIds.split(",")) - .map(Long::parseLong).collect(Collectors.toList()); + List userIdList = Arrays.stream(userIds.split(",")).map(Long::parseLong).collect(Collectors.toList()); // 查询在线的终端 - Map> terminalMap = imClient.getOnlineTerminal(userIdList); + Map> terminalMap = imClient.getOnlineTerminal(userIdList); // 组装vo List vos = new LinkedList<>(); - terminalMap.forEach((userId,types)->{ + terminalMap.forEach((userId, types) -> { List terminals = types.stream().map(IMTerminalType::code).collect(Collectors.toList()); - vos.add(new OnlineTerminalVO(userId,terminals)); + vos.add(new OnlineTerminalVO(userId, terminals)); }); return vos; } diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/WebrtcServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/WebrtcServiceImpl.java index c80c3c8..b8a2e71 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/WebrtcServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/WebrtcServiceImpl.java @@ -3,7 +3,6 @@ package com.bx.implatform.service.impl; import com.bx.imclient.IMClient; import com.bx.imcommon.model.IMPrivateMessage; import com.bx.imcommon.model.IMUserInfo; -import com.bx.implatform.vo.PrivateMessageVO; import com.bx.implatform.config.ICEServer; import com.bx.implatform.config.ICEServerConfig; import com.bx.implatform.contant.RedisKey; @@ -13,6 +12,7 @@ import com.bx.implatform.service.IWebrtcService; import com.bx.implatform.session.SessionContext; import com.bx.implatform.session.UserSession; import com.bx.implatform.session.WebrtcSession; +import com.bx.implatform.vo.PrivateMessageVO; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.RedisTemplate; @@ -28,9 +28,9 @@ import java.util.concurrent.TimeUnit; @AllArgsConstructor public class WebrtcServiceImpl implements IWebrtcService { - private IMClient imClient; - private RedisTemplate redisTemplate; - private ICEServerConfig iceServerConfig; + private final IMClient imClient; + private final RedisTemplate redisTemplate; + private final ICEServerConfig iceServerConfig; @Override public void call(Long uid, String offer) { diff --git a/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java b/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java index c3541a7..6f2fbd2 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/thirdparty/FileService.java @@ -9,9 +9,9 @@ import com.bx.implatform.util.FileUtil; import com.bx.implatform.util.ImageUtil; import com.bx.implatform.util.MinioUtil; import com.bx.implatform.vo.UploadImageVO; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -22,28 +22,25 @@ import java.io.IOException; /** * todo 通过校验文件MD5实现重复文件秒传 * 文件上传服务 - * @Author Blue - * @Date 2022/10/28 + * @author Blue + * @date 2022/10/28 * */ @Slf4j @Service +@RequiredArgsConstructor public class FileService { - - @Autowired - private MinioUtil minioUtil; - + private final MinioUtil minioUtil; @Value("${minio.public}") - private String minIOServer; + private String minIoServer; @Value("${minio.bucketName}") private String bucketName; - @Value("${minio.imagePath}") private String imagePath; - @Value("${minio.filePath}") private String filePath; + @PostConstruct public void init(){ if(!minioUtil.bucketExists(bucketName)){ @@ -108,7 +105,7 @@ public class FileService { public String generUrl(FileType fileTypeEnum, String fileName){ - String url = minIOServer+"/"+bucketName; + String url = minIoServer +"/"+bucketName; switch (fileTypeEnum){ case FILE: url += "/file/"; @@ -119,6 +116,8 @@ public class FileService { case VIDEO: url += "/video/"; break; + default: + break; } url += fileName; return url; diff --git a/im-platform/src/main/java/com/bx/implatform/session/WebrtcSession.java b/im-platform/src/main/java/com/bx/implatform/session/WebrtcSession.java index fe4e08f..a26f298 100644 --- a/im-platform/src/main/java/com/bx/implatform/session/WebrtcSession.java +++ b/im-platform/src/main/java/com/bx/implatform/session/WebrtcSession.java @@ -1,7 +1,5 @@ package com.bx.implatform.session; -import com.bx.imcommon.enums.IMTerminalType; -import io.swagger.models.auth.In; import lombok.Data; /* diff --git a/im-platform/src/main/java/com/bx/implatform/util/BeanUtils.java b/im-platform/src/main/java/com/bx/implatform/util/BeanUtils.java index 9bc74be..224362d 100644 --- a/im-platform/src/main/java/com/bx/implatform/util/BeanUtils.java +++ b/im-platform/src/main/java/com/bx/implatform/util/BeanUtils.java @@ -1,13 +1,6 @@ package com.bx.implatform.util; - -import org.springframework.beans.BeanWrapper; -import org.springframework.beans.BeanWrapperImpl; import org.springframework.util.ReflectionUtils; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; public class BeanUtils { @@ -17,63 +10,19 @@ public class BeanUtils { } - - public static List copyProperties(List sourceList, Class clazz) { - - if(sourceList == null || sourceList.size() <= 0) { - return new ArrayList<>(); - } - - List result = new ArrayList<>(); - for (T source : sourceList) { - result.add(copyProperties(source, clazz)); - } - - return result; - } /** - * 如果source , 为空返回空对象 - * @param sourceList - * @param clazz - * @return - */ - public static List copyPropertiesList(List sourceList, Class clazz) { - - if(sourceList == null || sourceList.size() <= 0) { - return new ArrayList(); - } - - List result = new ArrayList<>(); - U target = null; - for (T source : sourceList) { - try { - target = clazz.newInstance(); - copyProperties(source, target); - }catch(Exception e) { - handleReflectionException(e); - return new ArrayList<>(); - } - result.add(target); - } - - return result; - } - - /** - * source空为null - * @param orig - * @param destClass - * @param - * @return + * 属性拷贝 + * @param orig 源对象 + * @param destClass 目标 + * @return T */ public static T copyProperties(Object orig, Class destClass) { - try { Object target = destClass.newInstance(); if(orig == null) { return null; } - copyProperties(orig, (Object)target); + copyProperties(orig, target); return (T) target; }catch(Exception e) { handleReflectionException(e); @@ -81,78 +30,6 @@ public class BeanUtils { } } - /** - * source 为null 返回 空对象 - * @param orig - * @param destClass - * @param - * @return - */ - public static T copyProperty(Object orig, Class destClass) { - - try { - Object target = destClass.newInstance(); - if(orig == null) { - return (T)target; - } - - copyProperties(orig, (Object)target); - return (T) target; - }catch(Exception e) { - handleReflectionException(e); - Object o1 = new Object(); - try { - o1 = destClass.newInstance(); - }catch(Exception ex) { - handleReflectionException(e); - } - return (T)o1; - } - } - - public static List copyProperties(List sourceList, Class clazz, String... ignoreProperties) { - - if(sourceList == null || sourceList.size() <= 0) { - return new ArrayList(); - } - - List result = new ArrayList<>(); - for (T source : sourceList) { - result.add(copyProperties(source, clazz, ignoreProperties)); - } - - return result; - } - - public static T copyProperties(Object orig, Class destClass, String... ignoreProperties) { - - if(orig == null) { - return null; - } - - try { - Object target = destClass.newInstance(); - org.springframework.beans.BeanUtils.copyProperties(orig, (Object)target, ignoreProperties); - return (T)target; - }catch(Exception e) { - return null; - } - } - - public static String[] getNullPropertyNames(Object source) { - final BeanWrapper beanWrapper = new BeanWrapperImpl(source); - java.beans.PropertyDescriptor[] propDesc = beanWrapper.getPropertyDescriptors(); - - Set emptynames = new HashSet(); - - for(java.beans.PropertyDescriptor pd : propDesc) { - Object srcValue = beanWrapper.getPropertyValue(pd.getName()); - if (srcValue == null) {emptynames.add(pd.getName());} - } - - String[] result = new String[emptynames.size()]; - return emptynames.toArray(result); - } public static void copyProperties(Object orig, Object dest) { try { diff --git a/im-platform/src/main/java/com/bx/implatform/util/DateTimeUtils.java b/im-platform/src/main/java/com/bx/implatform/util/DateTimeUtils.java index 83c36a5..a265b8f 100644 --- a/im-platform/src/main/java/com/bx/implatform/util/DateTimeUtils.java +++ b/im-platform/src/main/java/com/bx/implatform/util/DateTimeUtils.java @@ -1,21 +1,10 @@ package com.bx.implatform.util; -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; -import java.sql.Timestamp; -import java.text.DateFormat; -import java.text.ParseException; import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.format.DateTimeFormatter; -import java.util.*; +import java.util.Date; /** * 日期处理工具类 @@ -25,7 +14,6 @@ import java.util.*; public class DateTimeUtils extends DateUtils { public static final String FULL_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; - public static final String PART_DATE_FORMAT = "yyyy-MM-dd"; public static final String PARTDATEFORMAT = "yyyyMMdd"; @@ -34,11 +22,11 @@ public class DateTimeUtils extends DateUtils { * * @param date 日期 * @param xFormat 格式 - * @return + * @return 日期 */ public static String getFormatDate(Date date, String xFormat) { date = date == null ? new Date() : date; - xFormat = StringUtils.isNotEmpty(xFormat) == true ? xFormat : FULL_DATE_FORMAT; + xFormat = StringUtils.isNotEmpty(xFormat) ? xFormat : FULL_DATE_FORMAT; SimpleDateFormat sdf = new SimpleDateFormat(xFormat); return sdf.format(date); } diff --git a/im-platform/src/main/java/com/bx/implatform/util/FileUtil.java b/im-platform/src/main/java/com/bx/implatform/util/FileUtil.java index 8e7347a..32688d3 100644 --- a/im-platform/src/main/java/com/bx/implatform/util/FileUtil.java +++ b/im-platform/src/main/java/com/bx/implatform/util/FileUtil.java @@ -9,8 +9,7 @@ public class FileUtil { * @return boolean */ public static String getFileExtension(String fileName) { - String extension = fileName.substring(fileName.lastIndexOf(".") + 1); - return extension; + return fileName.substring(fileName.lastIndexOf(".") + 1); } /** diff --git a/im-platform/src/main/java/com/bx/implatform/util/MinioUtil.java b/im-platform/src/main/java/com/bx/implatform/util/MinioUtil.java index 911d940..298b630 100644 --- a/im-platform/src/main/java/com/bx/implatform/util/MinioUtil.java +++ b/im-platform/src/main/java/com/bx/implatform/util/MinioUtil.java @@ -2,9 +2,9 @@ package com.bx.implatform.util; import io.minio.*; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; @@ -14,11 +14,10 @@ import java.util.Date; @Slf4j @Component +@AllArgsConstructor public class MinioUtil { - - @Autowired - private MinioClient minioClient; + private final MinioClient minioClient; /** * 查看存储bucket是否存在 @@ -35,25 +34,21 @@ public class MinioUtil { /** * 创建存储bucket - * @return Boolean */ - public Boolean makeBucket(String bucketName) { + public void makeBucket(String bucketName) { try { minioClient.makeBucket(MakeBucketArgs.builder() .bucket(bucketName) .build()); } catch (Exception e) { log.error("创建bucket失败,",e); - return false; } - return true; } /** - * 设置bucket权限为public - * @return Boolean + * 设置bucket权限为public */ - public Boolean setBucketPublic(String bucketName) { + public void setBucketPublic(String bucketName) { try { // 设置公开 String sb = "{\"Version\":\"2012-10-17\"," + @@ -70,34 +65,13 @@ public class MinioUtil { .build()); } catch (Exception e) { log.error("创建bucket失败,",e); - return false; } - return true; - } - - /** - * 删除存储bucket - * @return Boolean - */ - public Boolean removeBucket(String bucketName) { - try { - minioClient.removeBucket(RemoveBucketArgs.builder() - .bucket(bucketName) - .build()); - } catch (Exception e) { - log.error("删除bucket失败,",e); - return false; - } - return true; - } - - /** * 文件上传 - * @bucketName bucket名称 - * @path 路径 + * @param bucketName bucket名称 + * @param path 路径 * @param file 文件 * @return Boolean */ @@ -129,8 +103,8 @@ public class MinioUtil { * @param path 路径 * @param name 文件名 * @param fileByte 文件内容 - * @param contentType - * @return Boolean + * @param contentType contentType + * @return objectName */ public String upload(String bucketName,String path,String name,byte[] fileByte,String contentType) { @@ -142,9 +116,8 @@ public class MinioUtil { .stream(stream, fileByte.length, -1).contentType(contentType).build(); //文件名称相同会覆盖 minioClient.putObject(objectArgs); - } catch (Exception e) { - log.error("上传图片失败,",e); + log.error("上传文件失败,",e); return null; } return objectName; @@ -154,16 +127,15 @@ public class MinioUtil { /** * 删除 * @param bucketName bucket名称 - * @path path - * @param fileName - * @return - * @throws Exception + * @param path 路径 + * @param fileName 文件名 + * @return true/false */ public boolean remove(String bucketName,String path,String fileName){ try { minioClient.removeObject( RemoveObjectArgs.builder().bucket(bucketName).object(path+fileName).build()); }catch (Exception e){ - log.error("删除图片失败,",e); + log.error("删除文件失败,",e); return false; } return true; diff --git a/im-platform/src/main/java/com/bx/implatform/util/XssUtil.java b/im-platform/src/main/java/com/bx/implatform/util/XssUtil.java index 15461a3..72b3e71 100644 --- a/im-platform/src/main/java/com/bx/implatform/util/XssUtil.java +++ b/im-platform/src/main/java/com/bx/implatform/util/XssUtil.java @@ -11,9 +11,7 @@ public class XssUtil { public static boolean checkXss(String inputString) { if (inputString!=null) { Matcher matcher = PATTERN.matcher(inputString); - if (matcher.find()) { - return true; - } + return matcher.find(); } return false; } diff --git a/im-platform/src/main/java/com/bx/implatform/vo/GroupVO.java b/im-platform/src/main/java/com/bx/implatform/vo/GroupVO.java index 3f98bed..7b07b46 100644 --- a/im-platform/src/main/java/com/bx/implatform/vo/GroupVO.java +++ b/im-platform/src/main/java/com/bx/implatform/vo/GroupVO.java @@ -6,7 +6,6 @@ import lombok.Data; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; @Data @ApiModel("群信息VO") diff --git a/im-server/src/main/java/com/bx/imserver/config/RedisConfig.java b/im-server/src/main/java/com/bx/imserver/config/RedisConfig.java index 35c044c..8e17105 100644 --- a/im-server/src/main/java/com/bx/imserver/config/RedisConfig.java +++ b/im-server/src/main/java/com/bx/imserver/config/RedisConfig.java @@ -1,27 +1,18 @@ package com.bx.imserver.config; import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer; -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; 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.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; -import javax.annotation.Resource; - @Configuration public class RedisConfig { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { - RedisTemplate redisTemplate = new RedisTemplate(); + RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 设置值(value)的序列化采用FastJsonRedisSerializer redisTemplate.setValueSerializer(fastJsonRedisSerializer()); @@ -35,8 +26,7 @@ public class RedisConfig { public FastJsonRedisSerializer fastJsonRedisSerializer(){ - FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); - return fastJsonRedisSerializer; + return new FastJsonRedisSerializer<>(Object.class); } diff --git a/im-server/src/main/java/com/bx/imserver/netty/IMChannelHandler.java b/im-server/src/main/java/com/bx/imserver/netty/IMChannelHandler.java index d748d6e..d01e47e 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/IMChannelHandler.java +++ b/im-server/src/main/java/com/bx/imserver/netty/IMChannelHandler.java @@ -27,12 +27,11 @@ public class IMChannelHandler extends SimpleChannelInboundHandler { /** * 读取到消息后进行处理 * - * @param ctx - * @param sendInfo - * @throws Exception + * @param ctx channel上下文 + * @param sendInfo 发送消息 */ @Override - protected void channelRead0(ChannelHandlerContext ctx, IMSendInfo sendInfo) throws Exception { + protected void channelRead0(ChannelHandlerContext ctx, IMSendInfo sendInfo) { // 创建处理器进行处理 AbstractMessageProcessor processor = ProcessorFactory.createProcessor(IMCmdType.fromCode(sendInfo.getCmd())); processor.process(ctx,processor.transForm(sendInfo.getData())); @@ -41,12 +40,11 @@ public class IMChannelHandler extends SimpleChannelInboundHandler { /** * 出现异常的处理 打印报错日志 * - * @param ctx - * @param cause - * @throws Exception + * @param ctx channel上下文 + * @param cause 异常信息 */ @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { log.error(cause.getMessage()); //关闭上下文 //ctx.close(); @@ -55,16 +53,15 @@ public class IMChannelHandler extends SimpleChannelInboundHandler { /** * 监控浏览器上线 * - * @param ctx - * @throws Exception + * @param ctx channel上下文 */ @Override - public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + public void handlerAdded(ChannelHandlerContext ctx) { log.info(ctx.channel().id().asLongText() + "连接"); } @Override - public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { + public void handlerRemoved(ChannelHandlerContext ctx) { AttributeKey userIdAttr = AttributeKey.valueOf(ChannelAttrKey.USER_ID); Long userId = ctx.channel().attr(userIdAttr).get(); AttributeKey terminalAttr = AttributeKey.valueOf(ChannelAttrKey.TERMINAL_TYPE); @@ -75,7 +72,7 @@ public class IMChannelHandler extends SimpleChannelInboundHandler { // 移除channel UserChannelCtxMap.removeChannelCtx(userId,terminal); // 用户下线 - RedisTemplate redisTemplate = SpringContextHolder.getBean("redisTemplate"); + RedisTemplate redisTemplate = SpringContextHolder.getBean("redisTemplate"); String key = String.join(":", IMRedisKey.IM_USER_SERVER_ID,userId.toString(), terminal.toString()); redisTemplate.delete(key); log.info("断开连接,userId:{},终端类型:{}",userId,terminal); diff --git a/im-server/src/main/java/com/bx/imserver/netty/IMServerGroup.java b/im-server/src/main/java/com/bx/imserver/netty/IMServerGroup.java index 3983239..24d6c42 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/IMServerGroup.java +++ b/im-server/src/main/java/com/bx/imserver/netty/IMServerGroup.java @@ -3,7 +3,6 @@ package com.bx.imserver.netty; import com.bx.imcommon.contant.IMRedisKey; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; diff --git a/im-server/src/main/java/com/bx/imserver/netty/UserChannelCtxMap.java b/im-server/src/main/java/com/bx/imserver/netty/UserChannelCtxMap.java index 7bd3fcc..281af5a 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/UserChannelCtxMap.java +++ b/im-server/src/main/java/com/bx/imserver/netty/UserChannelCtxMap.java @@ -2,7 +2,6 @@ package com.bx.imserver.netty; import io.netty.channel.ChannelHandlerContext; -import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/im-server/src/main/java/com/bx/imserver/netty/processor/GroupMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/netty/processor/GroupMessageProcessor.java index 2e26e1b..4cfe144 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/processor/GroupMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/netty/processor/GroupMessageProcessor.java @@ -5,13 +5,12 @@ import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.enums.IMSendCode; import com.bx.imcommon.model.IMRecvInfo; import com.bx.imcommon.model.IMSendInfo; -import com.bx.imcommon.model.IMUserInfo; import com.bx.imcommon.model.IMSendResult; +import com.bx.imcommon.model.IMUserInfo; import com.bx.imserver.netty.UserChannelCtxMap; import io.netty.channel.ChannelHandlerContext; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; @@ -23,7 +22,7 @@ import java.util.List; @AllArgsConstructor public class GroupMessageProcessor extends AbstractMessageProcessor { - private RedisTemplate redisTemplate; + private final RedisTemplate redisTemplate; @Async @Override diff --git a/im-server/src/main/java/com/bx/imserver/netty/processor/HeartbeatProcessor.java b/im-server/src/main/java/com/bx/imserver/netty/processor/HeartbeatProcessor.java index b84f5d0..3200a2d 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/processor/HeartbeatProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/netty/processor/HeartbeatProcessor.java @@ -7,12 +7,10 @@ import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.model.IMHeartbeatInfo; import com.bx.imcommon.model.IMSendInfo; import com.bx.imserver.constant.ChannelAttrKey; -import com.bx.imserver.netty.ws.WebSocketServer; import io.netty.channel.ChannelHandlerContext; import io.netty.util.AttributeKey; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; @@ -24,7 +22,7 @@ import java.util.concurrent.TimeUnit; @AllArgsConstructor public class HeartbeatProcessor extends AbstractMessageProcessor { - RedisTemplate redisTemplate; + private final RedisTemplate redisTemplate; @Override public void process(ChannelHandlerContext ctx, IMHeartbeatInfo beatInfo) { @@ -37,22 +35,21 @@ public class HeartbeatProcessor extends AbstractMessageProcessor heartBeatAttr = AttributeKey.valueOf(ChannelAttrKey.HEARTBEAT_TIMES); Long heartbeatTimes = ctx.channel().attr(heartBeatAttr).get(); ctx.channel().attr(heartBeatAttr).set(++heartbeatTimes); - if(heartbeatTimes%10 == 0){ + if (heartbeatTimes % 10 == 0) { // 每心跳10次,用户在线状态续一次命 AttributeKey userIdAttr = AttributeKey.valueOf(ChannelAttrKey.USER_ID); Long userId = ctx.channel().attr(userIdAttr).get(); AttributeKey terminalAttr = AttributeKey.valueOf(ChannelAttrKey.TERMINAL_TYPE); Integer terminal = ctx.channel().attr(terminalAttr).get(); - String key = String.join(":", IMRedisKey.IM_USER_SERVER_ID,userId.toString(),terminal.toString()); + String key = String.join(":", IMRedisKey.IM_USER_SERVER_ID, userId.toString(), terminal.toString()); redisTemplate.expire(key, IMConstant.ONLINE_TIMEOUT_SECOND, TimeUnit.SECONDS); } } - @Override public IMHeartbeatInfo transForm(Object o) { HashMap map = (HashMap)o; IMHeartbeatInfo heartbeatInfo = BeanUtil.fillBeanWithMap(map, new IMHeartbeatInfo(), false); - return heartbeatInfo; + return heartbeatInfo; } } diff --git a/im-server/src/main/java/com/bx/imserver/netty/processor/LoginProcessor.java b/im-server/src/main/java/com/bx/imserver/netty/processor/LoginProcessor.java index e37b2ea..c1b50d3 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/processor/LoginProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/netty/processor/LoginProcessor.java @@ -5,19 +5,17 @@ import com.alibaba.fastjson.JSON; import com.bx.imcommon.contant.IMConstant; import com.bx.imcommon.contant.IMRedisKey; import com.bx.imcommon.enums.IMCmdType; +import com.bx.imcommon.model.IMLoginInfo; import com.bx.imcommon.model.IMSendInfo; import com.bx.imcommon.model.IMSessionInfo; -import com.bx.imcommon.model.IMLoginInfo; import com.bx.imcommon.util.JwtUtil; import com.bx.imserver.constant.ChannelAttrKey; import com.bx.imserver.netty.IMServerGroup; import com.bx.imserver.netty.UserChannelCtxMap; import io.netty.channel.ChannelHandlerContext; import io.netty.util.AttributeKey; -import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; @@ -49,7 +47,7 @@ public class LoginProcessor extends AbstractMessageProcessor { ChannelHandlerContext context = UserChannelCtxMap.getChannelCtx(userId,terminal); if(context != null && !ctx.channel().id().equals(context.channel().id())){ // 不允许多地登录,强制下线 - IMSendInfo sendInfo = new IMSendInfo(); + IMSendInfo sendInfo = new IMSendInfo<>(); sendInfo.setCmd(IMCmdType.FORCE_LOGUT.code()); sendInfo.setData("您已在其他地方登陆,将被强制下线"); context.channel().writeAndFlush(sendInfo); @@ -70,7 +68,7 @@ public class LoginProcessor extends AbstractMessageProcessor { String key = String.join(":", IMRedisKey.IM_USER_SERVER_ID,userId.toString(), terminal.toString()); redisTemplate.opsForValue().set(key, IMServerGroup.serverId, IMConstant.ONLINE_TIMEOUT_SECOND, TimeUnit.SECONDS); // 响应ws - IMSendInfo sendInfo = new IMSendInfo(); + IMSendInfo sendInfo = new IMSendInfo<>(); sendInfo.setCmd(IMCmdType.LOGIN.code()); ctx.channel().writeAndFlush(sendInfo); } @@ -79,7 +77,6 @@ public class LoginProcessor extends AbstractMessageProcessor { @Override public IMLoginInfo transForm(Object o) { HashMap map = (HashMap)o; - IMLoginInfo loginInfo = BeanUtil.fillBeanWithMap(map, new IMLoginInfo(), false); - return loginInfo; + return BeanUtil.fillBeanWithMap(map, new IMLoginInfo(), false); } } diff --git a/im-server/src/main/java/com/bx/imserver/netty/processor/PrivateMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/netty/processor/PrivateMessageProcessor.java index 6778714..b04727b 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/processor/PrivateMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/netty/processor/PrivateMessageProcessor.java @@ -5,13 +5,12 @@ import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.enums.IMSendCode; import com.bx.imcommon.model.IMRecvInfo; import com.bx.imcommon.model.IMSendInfo; -import com.bx.imcommon.model.IMUserInfo; import com.bx.imcommon.model.IMSendResult; +import com.bx.imcommon.model.IMUserInfo; import com.bx.imserver.netty.UserChannelCtxMap; import io.netty.channel.ChannelHandlerContext; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; @@ -20,7 +19,7 @@ import org.springframework.stereotype.Component; @AllArgsConstructor public class PrivateMessageProcessor extends AbstractMessageProcessor { - private RedisTemplate redisTemplate; + private final RedisTemplate redisTemplate; @Override public void process(IMRecvInfo recvInfo) { @@ -31,7 +30,7 @@ public class PrivateMessageProcessor extends AbstractMessageProcessor sendInfo = new IMSendInfo<>(); sendInfo.setCmd(IMCmdType.PRIVATE_MESSAGE.code()); sendInfo.setData(recvInfo.getData()); channelCtx.channel().writeAndFlush(sendInfo); @@ -52,7 +51,7 @@ public class PrivateMessageProcessor extends AbstractMessageProcessor result = new IMSendResult<>(); result.setSender(recvInfo.getSender()); result.setReceiver(recvInfo.getReceivers().get(0)); result.setCode(sendCode.code()); diff --git a/im-server/src/main/java/com/bx/imserver/netty/processor/ProcessorFactory.java b/im-server/src/main/java/com/bx/imserver/netty/processor/ProcessorFactory.java index b3c71d1..ef87892 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/processor/ProcessorFactory.java +++ b/im-server/src/main/java/com/bx/imserver/netty/processor/ProcessorFactory.java @@ -9,16 +9,16 @@ public class ProcessorFactory { AbstractMessageProcessor processor = null; switch (cmd){ case LOGIN: - processor = (AbstractMessageProcessor) SpringContextHolder.getApplicationContext().getBean(LoginProcessor.class); + processor = SpringContextHolder.getApplicationContext().getBean(LoginProcessor.class); break; case HEART_BEAT: - processor = (AbstractMessageProcessor) SpringContextHolder.getApplicationContext().getBean(HeartbeatProcessor.class); + processor = SpringContextHolder.getApplicationContext().getBean(HeartbeatProcessor.class); break; case PRIVATE_MESSAGE: - processor = (AbstractMessageProcessor)SpringContextHolder.getApplicationContext().getBean(PrivateMessageProcessor.class); + processor = SpringContextHolder.getApplicationContext().getBean(PrivateMessageProcessor.class); break; case GROUP_MESSAGE: - processor = (AbstractMessageProcessor)SpringContextHolder.getApplicationContext().getBean(GroupMessageProcessor.class); + processor = SpringContextHolder.getApplicationContext().getBean(GroupMessageProcessor.class); break; default: break; diff --git a/im-server/src/main/java/com/bx/imserver/netty/ws/WebSocketServer.java b/im-server/src/main/java/com/bx/imserver/netty/ws/WebSocketServer.java index 3a0fe93..52bf1bd 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/ws/WebSocketServer.java +++ b/im-server/src/main/java/com/bx/imserver/netty/ws/WebSocketServer.java @@ -37,7 +37,6 @@ public class WebSocketServer implements IMServer { private volatile boolean ready = false; - private ServerBootstrap bootstrap; private EventLoopGroup bossGroup; private EventLoopGroup workGroup; @@ -49,7 +48,7 @@ public class WebSocketServer implements IMServer { @Override public void start() { - bootstrap = new ServerBootstrap(); + ServerBootstrap bootstrap = new ServerBootstrap(); bossGroup = new NioEventLoopGroup(); workGroup = new NioEventLoopGroup(); // 设置为主从线程模型 @@ -60,7 +59,7 @@ public class WebSocketServer implements IMServer { .childHandler(new ChannelInitializer() { // 添加处理的Handler,通常包括消息编解码、业务处理,也可以是日志、权限、过滤等 @Override - protected void initChannel(Channel ch) throws Exception { + protected void initChannel(Channel ch) { // 获取职责链 ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast(new IdleStateHandler(120, 0, 0, TimeUnit.SECONDS)); @@ -82,7 +81,7 @@ public class WebSocketServer implements IMServer { try { // 绑定端口,启动select线程,轮询监听channel事件,监听到事件之后就会交给从线程池处理 - Channel channel = bootstrap.bind(port).sync().channel(); + bootstrap.bind(port).sync().channel(); // 就绪标志 this.ready = true; log.info("websocket server 初始化完成,端口:{}",port); diff --git a/im-server/src/main/java/com/bx/imserver/netty/ws/endecode/MessageProtocolEncoder.java b/im-server/src/main/java/com/bx/imserver/netty/ws/endecode/MessageProtocolEncoder.java index 967e39a..3c1a3ba 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/ws/endecode/MessageProtocolEncoder.java +++ b/im-server/src/main/java/com/bx/imserver/netty/ws/endecode/MessageProtocolEncoder.java @@ -14,7 +14,6 @@ public class MessageProtocolEncoder extends MessageToMessageEncoder protected void encode(ChannelHandlerContext channelHandlerContext, IMSendInfo sendInfo, List list) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); String text = objectMapper.writeValueAsString(sendInfo); - TextWebSocketFrame frame = new TextWebSocketFrame(text); list.add(frame); } diff --git a/im-server/src/main/java/com/bx/imserver/task/AbstractPullMessageTask.java b/im-server/src/main/java/com/bx/imserver/task/AbstractPullMessageTask.java index 9559315..3605de8 100644 --- a/im-server/src/main/java/com/bx/imserver/task/AbstractPullMessageTask.java +++ b/im-server/src/main/java/com/bx/imserver/task/AbstractPullMessageTask.java @@ -6,9 +6,9 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; -import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; -import java.util.concurrent.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; @Slf4j public abstract class AbstractPullMessageTask implements CommandLineRunner { diff --git a/im-server/src/main/java/com/bx/imserver/task/PullGroupMessageTask.java b/im-server/src/main/java/com/bx/imserver/task/PullGroupMessageTask.java index ef177f7..ec6c8ce 100644 --- a/im-server/src/main/java/com/bx/imserver/task/PullGroupMessageTask.java +++ b/im-server/src/main/java/com/bx/imserver/task/PullGroupMessageTask.java @@ -7,18 +7,19 @@ import com.bx.imcommon.model.IMRecvInfo; import com.bx.imserver.netty.IMServerGroup; import com.bx.imserver.netty.processor.AbstractMessageProcessor; import com.bx.imserver.netty.processor.ProcessorFactory; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; + import java.util.concurrent.TimeUnit; @Slf4j @Component +@AllArgsConstructor public class PullGroupMessageTask extends AbstractPullMessageTask { - @Autowired - private RedisTemplate redisTemplate; + private final RedisTemplate redisTemplate; @Override public void pullMessage() { diff --git a/im-server/src/main/java/com/bx/imserver/task/PullPrivateMessageTask.java b/im-server/src/main/java/com/bx/imserver/task/PullPrivateMessageTask.java index 1ebe771..30cd37d 100644 --- a/im-server/src/main/java/com/bx/imserver/task/PullPrivateMessageTask.java +++ b/im-server/src/main/java/com/bx/imserver/task/PullPrivateMessageTask.java @@ -1,6 +1,5 @@ package com.bx.imserver.task; - import com.alibaba.fastjson.JSONObject; import com.bx.imcommon.contant.IMRedisKey; import com.bx.imcommon.enums.IMCmdType; @@ -8,19 +7,19 @@ import com.bx.imcommon.model.IMRecvInfo; import com.bx.imserver.netty.IMServerGroup; import com.bx.imserver.netty.processor.AbstractMessageProcessor; import com.bx.imserver.netty.processor.ProcessorFactory; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; + import java.util.concurrent.TimeUnit; @Slf4j @Component +@AllArgsConstructor public class PullPrivateMessageTask extends AbstractPullMessageTask { - - @Autowired - private RedisTemplate redisTemplate; + private final RedisTemplate redisTemplate; @Override public void pullMessage() {