瀏覽代碼

fix 权限

18339543638 3 年之前
父節點
當前提交
3c04f0ac0c

+ 19 - 0
nb-admin/src/test/java/com/nb/admin/AliyunTest.java

@@ -1,7 +1,11 @@
 package com.nb.admin;
 
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.nb.aliyun.api.service.AliyunIotSdk;
+import com.nb.im.enums.ImMsgType;
+import com.nb.im.ws.PubMsgInfo;
 import com.nb.web.api.entity.BusDeviceEntity;
 import com.nb.web.api.entity.BusInfusionHistoryEntity;
 import com.nb.web.service.bus.listener.event.bean.DeviceInfoEvent;
@@ -15,6 +19,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.context.ApplicationContext;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.io.IOException;
 import java.util.Date;
 import java.util.List;
 
@@ -89,4 +94,18 @@ public class AliyunTest {
         Date date = new Date(1658227636571L);
         System.out.println(infusionHistory.getLastUploadTime().equals(date));
     }
+
+    @Autowired
+    ObjectMapper objectMapper;
+    @Test
+    public void test006() throws IOException {
+        PubMsgInfo pubMsgInfo = PubMsgInfo.builder()
+                .key("123")
+                .msgType(ImMsgType.txt)
+                .build();
+        System.out.println(JSONUtil.toJsonStr(pubMsgInfo));
+        String str="{\"msgType\":\"0\",\"key\":\"123\"}";
+        PubMsgInfo pubMsgInfo1 = objectMapper.readerFor(PubMsgInfo.class).readValue(str);
+        System.out.println(pubMsgInfo1);
+    }
 }

+ 11 - 1
nb-common/ws-common/src/main/java/com/nb/common/websocket/filter/DefaultPubMsgFilter.java

@@ -3,6 +3,8 @@ package com.nb.common.websocket.filter;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
+import com.nb.common.websocket.TopicMessage;
+import com.nb.common.websocket.msg.MessageResponse;
 import com.nb.common.websocket.msg.MessagingRequest;
 import com.nb.common.websocket.PubResponse;
 import org.springframework.stereotype.Component;
@@ -23,7 +25,15 @@ public class DefaultPubMsgFilter implements PubMsgFilter {
     @Override
     public boolean doFilter(ChannelContext channelContext, MessagingRequest source) {
         if(StrUtil.isBlank(source.getKey())){
-            Tio.send(channelContext, WsResponse.fromText(JSONUtil.toJsonStr(PubResponse.fail("","发布消息时key不能为空")), WsPacket.CHARSET_NAME));
+            for (String param : source.getParams()) {
+                Tio.send(channelContext, WsResponse.fromText(JSONUtil.toJsonStr(
+                        MessageResponse.of("im","im-result",
+                                param,
+                                PubResponse.fail(source.getKey(),"发布消息时key不能为空"),
+                                source.getKey())
+
+                ), WsPacket.CHARSET_NAME));
+            }
             return false;
         }
         return ObjectUtil.isNotNull(source.getPayload());

+ 1 - 0
nb-common/ws-common/src/main/java/com/nb/common/websocket/filter/PubMsgFilter.java

@@ -1,5 +1,6 @@
 package com.nb.common.websocket.filter;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.nb.common.websocket.msg.MessagingRequest;
 import org.tio.core.ChannelContext;
 

+ 2 - 1
nb-common/ws-common/src/main/java/com/nb/common/websocket/msg/handler/IMsgRequestHandler.java

@@ -1,5 +1,6 @@
 package com.nb.common.websocket.msg.handler;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.nb.common.websocket.DefaultMessageListener;
 import com.nb.common.websocket.TopicMessage;
@@ -39,7 +40,7 @@ public interface IMsgRequestHandler {
      * @param topicWrapper 主题
      * @return void
      */
-    void handler(MessagingRequest message, ChannelContext channelContext, TopicWrapper topicWrapper);
+    void handler(MessagingRequest message, ChannelContext channelContext, TopicWrapper topicWrapper) throws JsonProcessingException;
 
     /**
      * 描述: 获取序列化方式

+ 8 - 1
nb-im/src/main/java/com/nb/im/utils/ImUtils.java

@@ -7,6 +7,7 @@ import com.nb.common.websocket.PubResponse;
 import com.nb.common.websocket.TopicMessage;
 import com.nb.common.websocket.WebSocketConstant;
 import com.nb.common.websocket.handler.TopicWrapper;
+import com.nb.common.websocket.msg.MessageResponse;
 import com.nb.im.entity.ImMsgEntity;
 import com.nb.im.entity.ImRoomEntity;
 import com.nb.im.entity.ImRoomUserEntity;
@@ -101,7 +102,13 @@ public class ImUtils {
                 .publishAsync( TopicMessage.of(roomMsg,param,pubMsgInfo.getKey()))
                 .whenComplete((r,e)->{
                     if(channelContext!=null){
-                        Tio.send(channelContext, WsResponse.fromText(JSONUtil.toJsonStr(PubResponse.success(pubMsgInfo.getKey())), WsPacket.CHARSET_NAME));
+                        Tio.send(channelContext, WsResponse.fromText(JSONUtil.toJsonStr(
+                                MessageResponse.of("im","im-result",
+                                        param,
+                                        PubResponse.success(pubMsgInfo.getKey()),
+                                        pubMsgInfo.getKey())
+
+                        ), WsPacket.CHARSET_NAME));
                     }
                 });
 

+ 4 - 0
nb-im/src/main/java/com/nb/im/ws/PubMsgInfo.java

@@ -7,8 +7,10 @@ import com.nb.app.msg.enums.MsgEnum;
 import com.nb.im.enums.ImMsgType;
 import com.nb.im.enums.SponsorEnum;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 
 import java.io.Serializable;
@@ -22,7 +24,9 @@ import java.io.Serializable;
  */
 @Data
 @Validated
+@NoArgsConstructor
 @Builder
+@AllArgsConstructor
 public class PubMsgInfo implements Serializable {
     @ApiModelProperty("客户端生产的唯一消息key")
     private String key;

+ 3 - 2
nb-im/src/main/java/com/nb/im/ws/PubMsgRequestHandler.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.nb.app.msg.enums.MsgEnum;
 import com.nb.common.websocket.PubResponse;
@@ -57,13 +58,13 @@ public class PubMsgRequestHandler implements IMsgRequestHandler {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void handler(MessagingRequest message, ChannelContext channelContext, TopicWrapper topicWrapper) {
+    public void handler(MessagingRequest message, ChannelContext channelContext, TopicWrapper topicWrapper) throws JsonProcessingException {
         String param = topicWrapper.getParam();
         if(CollectionUtil.isNotEmpty(msgFilters)){
             boolean result = msgFilters.stream()
                     .allMatch(filter -> filter.doFilter(channelContext, message));
             if(result){
-                PubMsgInfo pubMsgInfo = JSONUtil.toBean(JSONUtil.toJsonStr(message.getPayload()), PubMsgInfo.class);
+                PubMsgInfo pubMsgInfo = objectMapper.readerFor(PubMsgInfo.class).readValue(String.valueOf(message.getPayload()));
                 pubMsgInfo.setOperationType(MsgEnum.NORMAL);
                 imUtils.send(param,topicWrapper,pubMsgInfo,channelContext,false);
             }

+ 29 - 5
nb-im/src/main/java/com/nb/im/ws/filter/MsgFormatFilter.java

@@ -2,10 +2,15 @@ package com.nb.im.ws.filter;
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.nb.common.websocket.msg.MessageResponse;
 import com.nb.common.websocket.msg.MessagingRequest;
 import com.nb.common.websocket.PubResponse;
 import com.nb.common.websocket.filter.PubMsgFilter;
+import com.nb.im.enums.ImMsgType;
 import com.nb.im.ws.PubMsgInfo;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.tio.core.ChannelContext;
 import org.tio.core.Tio;
@@ -21,25 +26,44 @@ import org.tio.websocket.common.WsResponse;
  */
 @Component
 public class MsgFormatFilter implements PubMsgFilter {
+    @Autowired
+    ObjectMapper objectMapper;
     @Override
     public boolean doFilter(ChannelContext channelContext, MessagingRequest source) {
         String id = source.getId();
         if("im".equalsIgnoreCase(id)){
             if(ObjectUtil.isEmpty(source.getPayload())){
-                Tio.send(channelContext,WsResponse.fromText(JSONUtil.toJsonStr(PubResponse.fail("","发布消息不可为空")),WsPacket.CHARSET_NAME));
+                for (String param : source.getParams()) {
+                    Tio.send(channelContext, WsResponse.fromText(JSONUtil.toJsonStr(
+                            MessageResponse.of("im","im-result",
+                                    param,
+                                    PubResponse.fail(source.getKey(),"发布消息不能为空"),
+                                    source.getKey())
+
+                    ), WsPacket.CHARSET_NAME));
+                }
                 return false;
             }
-            PubMsgInfo pubMsgInfo = JSONUtil.toBean(JSONUtil.toJsonStr(source.getPayload()), PubMsgInfo.class);
+            PubMsgInfo pubMsgInfo =null;
             try {
+                pubMsgInfo = objectMapper.readerFor(PubMsgInfo.class).readValue(String.valueOf(source.getPayload()));
                 pubMsgInfo.validate();
-            }catch (RuntimeException e){
-                Tio.send(channelContext,WsResponse.fromText(JSONUtil.toJsonStr(PubResponse.fail(pubMsgInfo.getKey(),e.getMessage())),WsPacket.CHARSET_NAME));
+            }catch (Exception e){
+                Tio.send(channelContext,WsResponse.fromText(JSONUtil.toJsonStr(PubResponse.fail(pubMsgInfo!=null?pubMsgInfo.getKey():"",e.getMessage())),WsPacket.CHARSET_NAME));
+                for (String param : source.getParams()) {
+                    Tio.send(channelContext, WsResponse.fromText(JSONUtil.toJsonStr(
+                            MessageResponse.of("im","im-result",
+                                    param,
+                                    PubResponse.fail(pubMsgInfo!=null?pubMsgInfo.getKey():"",e.getMessage()),
+                                    source.getKey())
+
+                    ), WsPacket.CHARSET_NAME));
+                }
                 return false;
             }
         }
         return true;
     }
 
-
     //敏感词过滤
 }