Browse Source

!107 修复几个bug
Merge pull request !107 from blue/v_3.0.0

blue 1 year ago
parent
commit
48af793cee
45 changed files with 128 additions and 96 deletions
  1. 1 1
      .gitignore
  2. 1 1
      db/im-platform.sql
  3. 1 1
      im-client/pom.xml
  4. 1 1
      im-common/pom.xml
  5. 0 0
      im-common/src/main/java/com/bx/imcommon/contant/IMConstant.java
  6. 0 0
      im-common/src/main/java/com/bx/imcommon/contant/IMRedisKey.java
  7. 0 0
      im-common/src/main/java/com/bx/imcommon/enums/IMCmdType.java
  8. 0 0
      im-common/src/main/java/com/bx/imcommon/enums/IMListenerType.java
  9. 0 0
      im-common/src/main/java/com/bx/imcommon/enums/IMSendCode.java
  10. 0 0
      im-common/src/main/java/com/bx/imcommon/enums/IMTerminalType.java
  11. 0 0
      im-common/src/main/java/com/bx/imcommon/model/IMGroupMessage.java
  12. 0 0
      im-common/src/main/java/com/bx/imcommon/model/IMHeartbeatInfo.java
  13. 0 0
      im-common/src/main/java/com/bx/imcommon/model/IMLoginInfo.java
  14. 0 0
      im-common/src/main/java/com/bx/imcommon/model/IMPrivateMessage.java
  15. 0 0
      im-common/src/main/java/com/bx/imcommon/model/IMRecvInfo.java
  16. 0 0
      im-common/src/main/java/com/bx/imcommon/model/IMSendInfo.java
  17. 0 0
      im-common/src/main/java/com/bx/imcommon/model/IMSendResult.java
  18. 0 0
      im-common/src/main/java/com/bx/imcommon/model/IMSessionInfo.java
  19. 0 0
      im-common/src/main/java/com/bx/imcommon/model/IMSystemMessage.java
  20. 0 0
      im-common/src/main/java/com/bx/imcommon/model/IMUserInfo.java
  21. 0 0
      im-common/src/main/java/com/bx/imcommon/mq/RedisMQConfig.java
  22. 0 0
      im-common/src/main/java/com/bx/imcommon/mq/RedisMQConsumer.java
  23. 0 0
      im-common/src/main/java/com/bx/imcommon/mq/RedisMQListener.java
  24. 2 5
      im-common/src/main/java/com/bx/imcommon/mq/RedisMQPullTask.java
  25. 4 12
      im-common/src/main/java/com/bx/imcommon/mq/RedisMQTemplate.java
  26. 0 0
      im-common/src/main/java/com/bx/imcommon/serializer/DateToLongSerializer.java
  27. 0 0
      im-common/src/main/java/com/bx/imcommon/util/CommaTextUtils.java
  28. 0 0
      im-common/src/main/java/com/bx/imcommon/util/JwtUtil.java
  29. 0 0
      im-common/src/main/java/com/bx/imcommon/util/ThreadPoolExecutorFactory.java
  30. 27 0
      im-platform/src/main/java/com/bx/implatform/config/TaskSchedulerConfig.java
  31. 1 1
      im-platform/src/main/java/com/bx/implatform/entity/Group.java
  32. 2 1
      im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java
  33. 2 2
      im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java
  34. 1 1
      im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java
  35. 1 1
      im-platform/src/main/java/com/bx/implatform/task/consumer/GroupBannedConsumerTask.java
  36. 1 1
      im-platform/src/main/java/com/bx/implatform/task/consumer/GroupUnbanConsumerTask.java
  37. 1 1
      im-platform/src/main/java/com/bx/implatform/task/consumer/UserBannedConsumerTask.java
  38. 26 0
      im-platform/src/main/java/com/bx/implatform/task/schedule/ReloadSensitiveWordTask.java
  39. 19 20
      im-platform/src/main/java/com/bx/implatform/util/SensitiveFilterUtil.java
  40. 2 2
      im-platform/src/main/java/com/bx/implatform/vo/GroupVO.java
  41. 1 1
      im-server/pom.xml
  42. 8 21
      im-server/src/main/java/com/bx/imserver/netty/processor/ProcessorFactory.java
  43. 21 19
      im-server/src/main/java/com/bx/imserver/netty/processor/SystemMessageProcessor.java
  44. 4 3
      im-uniapp/manifest.json
  45. 1 1
      pom.xml

+ 1 - 1
.gitignore

@@ -7,7 +7,7 @@
 /im-platform/src/main/resources/logback-prod.xml
 /im-server/src/main/resources/application-prod.yml
 /im-server/src/main/resources/logback-prod.xml
-/im-commom/im-commom.iml
+/im-common/im-common.iml
 /im-uniapp/node_modules/
 /im-web/package-lock.json
 /im-uniapp/unpackage/

+ 1 - 1
db/im-platform.sql

@@ -49,7 +49,7 @@ create table `im_group`(
     `notice` varchar(1024)  default '' comment '群公告',
     `is_banned` tinyint(1) default 0 comment '是否被封禁 0:否 1:是',
     `reason` varchar(255) default '' comment '被封禁原因',
-    `deleted` tinyint(1) default 0   comment '是否已删除',
+    `dissolve` tinyint(1) default 0   comment '是否已解散',
     `created_time` datetime default CURRENT_TIMESTAMP comment '创建时间'
 )ENGINE=InnoDB CHARSET=utf8mb4 comment '群';
 

+ 1 - 1
im-client/pom.xml

@@ -14,7 +14,7 @@
     <dependencies>
         <dependency>
             <groupId>com.bx</groupId>
-            <artifactId>im-commom</artifactId>
+            <artifactId>im-common</artifactId>
             <version>3.0.0</version>
         </dependency>
     </dependencies>

+ 1 - 1
im-commom/pom.xml → im-common/pom.xml

@@ -8,7 +8,7 @@
         <version>3.0.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-    <artifactId>im-commom</artifactId>
+    <artifactId>im-common</artifactId>
     <packaging>jar</packaging>
     <dependencies>
         <dependency>

+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/contant/IMConstant.java → im-common/src/main/java/com/bx/imcommon/contant/IMConstant.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/contant/IMRedisKey.java → im-common/src/main/java/com/bx/imcommon/contant/IMRedisKey.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/enums/IMCmdType.java → im-common/src/main/java/com/bx/imcommon/enums/IMCmdType.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/enums/IMListenerType.java → im-common/src/main/java/com/bx/imcommon/enums/IMListenerType.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/enums/IMSendCode.java → im-common/src/main/java/com/bx/imcommon/enums/IMSendCode.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/enums/IMTerminalType.java → im-common/src/main/java/com/bx/imcommon/enums/IMTerminalType.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/model/IMGroupMessage.java → im-common/src/main/java/com/bx/imcommon/model/IMGroupMessage.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/model/IMHeartbeatInfo.java → im-common/src/main/java/com/bx/imcommon/model/IMHeartbeatInfo.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/model/IMLoginInfo.java → im-common/src/main/java/com/bx/imcommon/model/IMLoginInfo.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/model/IMPrivateMessage.java → im-common/src/main/java/com/bx/imcommon/model/IMPrivateMessage.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java → im-common/src/main/java/com/bx/imcommon/model/IMRecvInfo.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/model/IMSendInfo.java → im-common/src/main/java/com/bx/imcommon/model/IMSendInfo.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/model/IMSendResult.java → im-common/src/main/java/com/bx/imcommon/model/IMSendResult.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/model/IMSessionInfo.java → im-common/src/main/java/com/bx/imcommon/model/IMSessionInfo.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/model/IMSystemMessage.java → im-common/src/main/java/com/bx/imcommon/model/IMSystemMessage.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/model/IMUserInfo.java → im-common/src/main/java/com/bx/imcommon/model/IMUserInfo.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQConfig.java → im-common/src/main/java/com/bx/imcommon/mq/RedisMQConfig.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQConsumer.java → im-common/src/main/java/com/bx/imcommon/mq/RedisMQConsumer.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQListener.java → im-common/src/main/java/com/bx/imcommon/mq/RedisMQListener.java


+ 2 - 5
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQPullTask.java → im-common/src/main/java/com/bx/imcommon/mq/RedisMQPullTask.java

@@ -52,11 +52,6 @@ public class RedisMQPullTask implements CommandLineRunner {
                 public void run() {
                     List<Object> datas = new LinkedList<>();
                     try {
-                        if(redisMQTemplate.isClose()){
-                            // 如果redis未初始化或已断开,3s后再重新尝试消费
-                            EXECUTOR.schedule(this, 3, TimeUnit.SECONDS);
-                            return;
-                        }
                         if (consumer.isReady()) {
                             String key = consumer.generateKey();
                             // 拉取一个批次的数据
@@ -75,6 +70,8 @@ public class RedisMQPullTask implements CommandLineRunner {
                         }
                     } catch (Exception e) {
                         log.error("数据消费异常,队列:{}", queue, e);
+                        // 出现异常,10s后再重新尝试消费
+                        EXECUTOR.schedule(this, 10, TimeUnit.SECONDS);
                         return;
                     }
                     // 继续消费数据

+ 4 - 12
im-commom/src/main/java/com/bx/imcommon/mq/RedisMQTemplate.java → im-common/src/main/java/com/bx/imcommon/mq/RedisMQTemplate.java

@@ -2,10 +2,9 @@ package com.bx.imcommon.mq;
 
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.data.redis.connection.RedisConnection;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisConnectionUtils;
 import org.springframework.data.redis.core.RedisTemplate;
 
-import java.util.Objects;
 import java.util.Properties;
 
 /**
@@ -19,9 +18,10 @@ public class RedisMQTemplate extends RedisTemplate<String, Object> {
 
     public String getVersion() {
         if (version.isEmpty()) {
-            RedisConnection redisConnection = this.getConnectionFactory().getConnection();
-            Properties properties = redisConnection.info();
+            RedisConnection connection = RedisConnectionUtils.getConnection(getConnectionFactory());
+            Properties properties = connection.info();
             version = properties.getProperty("redis_version");
+            RedisConnectionUtils.releaseConnection(connection,getConnectionFactory());
         }
         return version;
     }
@@ -41,12 +41,4 @@ public class RedisMQTemplate extends RedisTemplate<String, Object> {
         return firVersion > 6 || (firVersion == 6 && secVersion >= 2);
     }
 
-
-    Boolean isClose(){
-        try {
-            return  getConnectionFactory().getConnection().isClosed();
-        }catch (Exception e){
-            return true;
-        }
-    }
 }

+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/serializer/DateToLongSerializer.java → im-common/src/main/java/com/bx/imcommon/serializer/DateToLongSerializer.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/util/CommaTextUtils.java → im-common/src/main/java/com/bx/imcommon/util/CommaTextUtils.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/util/JwtUtil.java → im-common/src/main/java/com/bx/imcommon/util/JwtUtil.java


+ 0 - 0
im-commom/src/main/java/com/bx/imcommon/util/ThreadPoolExecutorFactory.java → im-common/src/main/java/com/bx/imcommon/util/ThreadPoolExecutorFactory.java


+ 27 - 0
im-platform/src/main/java/com/bx/implatform/config/TaskSchedulerConfig.java

@@ -0,0 +1,27 @@
+package com.bx.implatform.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+/**
+ * @author: Blue
+ * @date: 2024-09-01
+ * @version: 1.0
+ */
+
+@EnableScheduling
+@Configuration
+public class TaskSchedulerConfig {
+
+    @Bean
+    public TaskScheduler taskScheduler() {
+        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
+        taskScheduler.setPoolSize(10); // 设置线程池大小
+        taskScheduler.setThreadNamePrefix("scheduled-task-");
+        taskScheduler.initialize();
+        return taskScheduler;
+    }
+}

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

@@ -65,7 +65,7 @@ public class Group {
     /**
      * 是否已删除
      */
-    private Boolean deleted;
+    private Boolean dissolve;
 
 
 

+ 2 - 1
im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java

@@ -73,11 +73,12 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
         msg.setSendTime(new Date());
         msg.setSendNickName(member.getShowNickName());
         msg.setAtUserIds(CommaTextUtils.asText(dto.getAtUserIds()));
-        this.save(msg);
         // 过滤内容中的敏感词
         if(MessageType.TEXT.code().equals(dto.getType())){
             msg.setContent(sensitiveFilterUtil.filter(dto.getContent()));
         }
+        this.save(msg);
+
         // 群发
         GroupMessageVO msgInfo = BeanUtils.copyProperties(msg, GroupMessageVO.class);
         msgInfo.setAtUserIds(dto.getAtUserIds());

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

@@ -114,7 +114,7 @@ public class GroupServiceImpl extends ServiceImpl<GroupMapper, Group> implements
         // 群聊用户id
         List<Long> userIds = groupMemberService.findUserIdsByGroupId(groupId);
         // 逻辑删除群数据
-        group.setDeleted(true);
+        group.setDissolve(true);
         this.updateById(group);
         // 删除成员数据
         groupMemberService.removeByGroupId(groupId);
@@ -190,7 +190,7 @@ public class GroupServiceImpl extends ServiceImpl<GroupMapper, Group> implements
         if (Objects.isNull(group)) {
             throw new GlobalException("群组不存在");
         }
-        if (group.getDeleted()) {
+        if (group.getDissolve()) {
             throw new GlobalException("群组'" + group.getName() + "'已解散");
         }
         if (group.getIsBanned()) {

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java

@@ -56,11 +56,11 @@ public class PrivateMessageServiceImpl extends ServiceImpl<PrivateMessageMapper,
         msg.setSendId(session.getUserId());
         msg.setStatus(MessageStatus.UNSEND.code());
         msg.setSendTime(new Date());
-        this.save(msg);
         // 过滤内容中的敏感词
         if (MessageType.TEXT.code().equals(dto.getType())) {
             msg.setContent(sensitiveFilterUtil.filter(dto.getContent()));
         }
+        this.save(msg);
         // 推送消息
         PrivateMessageVO msgInfo = BeanUtils.copyProperties(msg, PrivateMessageVO.class);
         IMPrivateMessage<PrivateMessageVO> sendMessage = new IMPrivateMessage<>();

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/task/GroupBannedConsumerTask.java → im-platform/src/main/java/com/bx/implatform/task/consumer/GroupBannedConsumerTask.java

@@ -1,4 +1,4 @@
-package com.bx.implatform.task;
+package com.bx.implatform.task.consumer;
 
 import com.bx.imclient.IMClient;
 import com.bx.imcommon.enums.IMTerminalType;

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/task/GroupUnbanConsumerTask.java → im-platform/src/main/java/com/bx/implatform/task/consumer/GroupUnbanConsumerTask.java

@@ -1,4 +1,4 @@
-package com.bx.implatform.task;
+package com.bx.implatform.task.consumer;
 
 import com.bx.imclient.IMClient;
 import com.bx.imcommon.enums.IMTerminalType;

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

@@ -1,4 +1,4 @@
-package com.bx.implatform.task;
+package com.bx.implatform.task.consumer;
 
 import com.bx.imclient.IMClient;
 import com.bx.imcommon.model.IMSystemMessage;

+ 26 - 0
im-platform/src/main/java/com/bx/implatform/task/schedule/ReloadSensitiveWordTask.java

@@ -0,0 +1,26 @@
+package com.bx.implatform.task.schedule;
+
+import com.bx.implatform.util.SensitiveFilterUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author: Blue
+ * @date: 2024-09-01
+ * @version: 1.0
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class ReloadSensitiveWordTask {
+
+    private final SensitiveFilterUtil sensitiveFilterUtil;
+
+    @Scheduled(fixedRate = 60000)
+    public void run() {
+        log.info("【定时任务】重新装载敏感词...");
+        sensitiveFilterUtil.reload();
+    }
+}

+ 19 - 20
im-platform/src/main/java/com/bx/implatform/util/SensitiveFilterUtil.java

@@ -14,7 +14,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
 
 /**
  * 敏感词过滤器——SensitiveFilter
@@ -35,7 +34,7 @@ public final class SensitiveFilterUtil {
     /**
      * 根节点
      */
-    private static final TrieNode ROOT_NODE = new TrieNode();
+    private static  TrieNode ROOT_NODE = new TrieNode();
 
     /**
      * 线程池
@@ -86,41 +85,41 @@ public final class SensitiveFilterUtil {
      * @date 2023/12/4 11:18
      */
     @PostConstruct
-    public void init() {
-        // 每120s装载一次敏感词
-        EXECUTOR_SERVICE.scheduleAtFixedRate(() -> {
-            List<String> keywords = sensitiveWordService.findAllEnabledWords();
-            keywords.forEach(keyword->{
-                if(StrUtil.isNotEmpty(keyword)){
-                    // 添加到前缀树
-                    addKeyword(keyword);
-                }
-            });
-        },0,120, TimeUnit.SECONDS);
+    public void reload() {
+        // 使用copy on write的方式,防止出现并发问题
+        TrieNode newNode = new TrieNode();
+        List<String> keywords = sensitiveWordService.findAllEnabledWords();
+        keywords.forEach(keyword -> {
+            if (StrUtil.isNotEmpty(keyword)) {
+                // 添加到前缀树
+                addKeyword(newNode,keyword);
+            }
+        });
+        ROOT_NODE = newNode;
     }
 
     /**
      * 3、将一个敏感词添加到前缀树中
      *
+     * @param node
      * @param keyword
      * @author NXY
      * @date 2023/12/4 11:15
      */
-    private void addKeyword(String keyword) {
-        TrieNode tempNode = ROOT_NODE;
+    private void addKeyword(TrieNode node, String keyword) {
         for (int i = 0; i < keyword.length(); i++) {
             char c = keyword.charAt(i);
-            TrieNode subNode = tempNode.getSubNode(c);
+            TrieNode subNode = node.getSubNode(c);
             if (subNode == null) {
                 // 初始化子节点
                 subNode = new TrieNode();
-                tempNode.addSubNode(c, subNode);
+                node.addSubNode(c, subNode);
             }
             // 指向子节点,进入下一轮循环
-            tempNode = subNode;
+            node = subNode;
             // 设置结束标识
             if (i == keyword.length() - 1) {
-                tempNode.setKeywordEnd(true);
+                node.setKeywordEnd(true);
             }
         }
     }
@@ -195,9 +194,9 @@ public final class SensitiveFilterUtil {
     /**
      * 判断是否为符号 ——特殊符号
      *
+     * @return boolean
      * @author NXY
      * @date 2023/12/4 11:17
-     * @return boolean
      */
     private boolean isSymbol(Character c) {
         // 0x2E80~0x9FFF 是东亚文字范围

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

@@ -44,8 +44,8 @@ public class GroupVO {
     @Schema(description = "群名备注")
     private String remarkGroupName;
 
-    @Schema(description = "是否已删除")
-    private Boolean deleted;
+    @Schema(description = "是否已解散")
+    private Boolean dissolve;
 
     @Schema(description = "是否已退出")
     private Boolean quit;

+ 1 - 1
im-server/pom.xml

@@ -15,7 +15,7 @@
     <dependencies>
         <dependency>
             <groupId>com.bx</groupId>
-            <artifactId>im-commom</artifactId>
+            <artifactId>im-common</artifactId>
             <version>3.0.0</version>
         </dependency>
         <dependency>

+ 8 - 21
im-server/src/main/java/com/bx/imserver/netty/processor/ProcessorFactory.java

@@ -6,27 +6,14 @@ import com.bx.imserver.util.SpringContextHolder;
 public class ProcessorFactory {
 
     public static AbstractMessageProcessor createProcessor(IMCmdType cmd) {
-        AbstractMessageProcessor processor = null;
-        switch (cmd) {
-            case LOGIN:
-                processor = SpringContextHolder.getApplicationContext().getBean(LoginProcessor.class);
-                break;
-            case HEART_BEAT:
-                processor = SpringContextHolder.getApplicationContext().getBean(HeartbeatProcessor.class);
-                break;
-            case PRIVATE_MESSAGE:
-                processor = SpringContextHolder.getApplicationContext().getBean(PrivateMessageProcessor.class);
-                break;
-            case GROUP_MESSAGE:
-                processor = SpringContextHolder.getApplicationContext().getBean(GroupMessageProcessor.class);
-                break;
-            case SYSTEM_MESSAGE:
-                processor = SpringContextHolder.getApplicationContext().getBean(SystemMessageProcessor.class);
-                break;
-            default:
-                break;
-        }
-        return processor;
+        return switch (cmd) {
+            case LOGIN->SpringContextHolder.getApplicationContext().getBean(LoginProcessor.class);
+            case HEART_BEAT -> SpringContextHolder.getApplicationContext().getBean(HeartbeatProcessor.class);
+            case PRIVATE_MESSAGE->SpringContextHolder.getApplicationContext().getBean(PrivateMessageProcessor.class);
+            case GROUP_MESSAGE->SpringContextHolder.getApplicationContext().getBean(GroupMessageProcessor.class);
+            case SYSTEM_MESSAGE->SpringContextHolder.getApplicationContext().getBean(SystemMessageProcessor.class);
+            default -> null;
+        };
     }
 
 }

+ 21 - 19
im-server/src/main/java/com/bx/imserver/netty/processor/SystemMessageProcessor.java

@@ -26,27 +26,29 @@ public class SystemMessageProcessor extends AbstractMessageProcessor<IMRecvInfo>
 
     @Override
     public void process(IMRecvInfo recvInfo) {
-        IMUserInfo receiver = recvInfo.getReceivers().get(0);
-        log.info("接收到系统消息,接收者:{},内容:{}",  receiver.getId(), recvInfo.getData());
-        try {
-            ChannelHandlerContext channelCtx = UserChannelCtxMap.getChannelCtx(receiver.getId(), receiver.getTerminal());
-            if (!Objects.isNull(channelCtx)) {
-                // 推送消息到用户
-                IMSendInfo<Object> sendInfo = new IMSendInfo<>();
-                sendInfo.setCmd(IMCmdType.SYSTEM_MESSAGE.code());
-                sendInfo.setData(recvInfo.getData());
-                channelCtx.channel().writeAndFlush(sendInfo);
-                // 消息发送成功确认
-                sendResult(recvInfo, IMSendCode.SUCCESS);
-            } else {
+        log.info("接收到系统消息,接收用户数量:{},内容:{}",  recvInfo.getReceivers().size(), recvInfo.getData());
+        for (IMUserInfo receiver : recvInfo.getReceivers()) {
+            try {
+                ChannelHandlerContext channelCtx =
+                    UserChannelCtxMap.getChannelCtx(receiver.getId(), receiver.getTerminal());
+                if (!Objects.isNull(channelCtx)) {
+                    // 推送消息到用户
+                    IMSendInfo<Object> sendInfo = new IMSendInfo<>();
+                    sendInfo.setCmd(IMCmdType.SYSTEM_MESSAGE.code());
+                    sendInfo.setData(recvInfo.getData());
+                    channelCtx.channel().writeAndFlush(sendInfo);
+                    // 消息发送成功确认
+                    sendResult(recvInfo, IMSendCode.SUCCESS);
+                } else {
+                    // 消息推送失败确认
+                    sendResult(recvInfo, IMSendCode.NOT_FIND_CHANNEL);
+                    log.error("未找到channel,接收者:{},内容:{}", receiver.getId(), recvInfo.getData());
+                }
+            } catch (Exception e) {
                 // 消息推送失败确认
-                sendResult(recvInfo, IMSendCode.NOT_FIND_CHANNEL);
-                log.error("未找到channel,接收者:{},内容:{}",receiver.getId(), recvInfo.getData());
+                sendResult(recvInfo, IMSendCode.UNKONW_ERROR);
+                log.error("发送异常,,接收者:{},内容:{}", receiver.getId(), recvInfo.getData(), e);
             }
-        } catch (Exception e) {
-            // 消息推送失败确认
-            sendResult(recvInfo, IMSendCode.UNKONW_ERROR);
-            log.error("发送异常,,接收者:{},内容:{}", receiver.getId(), recvInfo.getData(), e);
         }
 
     }

+ 4 - 3
im-uniapp/manifest.json

@@ -2,8 +2,8 @@
     "name" : "盒子IM",
     "appid" : "__UNI__69DD57A",
     "description" : "",
-    "versionName" : "1.0.7",
-    "versionCode" : 107,
+    "versionName" : "3.0.0",
+    "versionCode" : 300,
     "transformPx" : false,
     /* 5+App特有相关 */
     "app-plus" : {
@@ -54,7 +54,8 @@
                 "privacyDescription" : {
                     "NSMicrophoneUsageDescription" : "",
                     "NSCameraUsageDescription" : ""
-                }
+                },
+                "idfa" : false
             },
             /* SDK配置 */
             "sdkConfigs" : {

+ 1 - 1
pom.xml

@@ -17,7 +17,7 @@
     <modules>
         <module>im-platform</module>
         <module>im-server</module>
-        <module>im-commom</module>
+        <module>im-common</module>
         <module>im-client</module>
     </modules>