Explorar el Código

消息、通知、交易

qrs hace 4 meses
padre
commit
ddc4365755

+ 1 - 1
alien-second/src/main/java/shop/alien/second/service/impl/SecondTradeRecordServiceImpl.java

@@ -63,7 +63,7 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
                 LambdaQueryWrapper<SecondTradeRecord> wrapper = new LambdaQueryWrapper<>();
                 wrapper.between(SecondTradeRecord::getCreatedTime, now + " 00:00:00", now + " 23:59:59");
                 int count = secondTradeRecordMapper.selectCount(wrapper);
-                String tradeNo = "S" + now.toString().replace("-", "") + String.format("%05d", count);
+                String tradeNo = "S" + now.toString().replace("-", "") + String.format("%05d", count + 1);
                 trade.setTradeNo(tradeNo);
             }
             // 保存交易记录

+ 103 - 88
alien-store/src/main/java/shop/alien/store/config/WebSocketProcess.java

@@ -51,7 +51,6 @@ public class WebSocketProcess implements ApplicationContextAware {
     @Override
     public void setApplicationContext(ApplicationContext context) {
         WebSocketProcess.applicationContext = context;
-        // 初始化Mapper
         WebSocketProcess.lifeBlacklistMapper = context.getBean(LifeBlacklistMapper.class);
         WebSocketProcess.lifeMessageMapper = context.getBean(LifeMessageMapper.class);
         WebSocketProcess.baseRedisService = context.getBean(BaseRedisService.class);
@@ -63,11 +62,108 @@ public class WebSocketProcess implements ApplicationContextAware {
      **/
     private Session session;
 
-    /*
+    /**
+     * 接收到客户端消息时触发
+     */
+    @OnMessage
+    public void onMessage(@PathParam("sendId") String id, String message) throws Exception {
+        try {
+            // 解析消息
+            WebSocketVo webSocketVo = JSONObject.parseObject(message, WebSocketVo.class);
+
+            // 过滤心跳
+            if (null == webSocketVo || "heartbeat".equals(webSocketVo.getCategory())) return;
+
+            // 记录已读消息id
+            if ("receipt".equals(webSocketVo.getCategory())) {
+                baseRedisService.setListRight("readMessageIdKey", String.valueOf(webSocketVo.getMessageId()));
+                return;
+            }
+
+            // 检查消息合规性
+            if (!checkCompliance(webSocketVo)) {
+                webSocketVo.setType("7");
+                webSocketVo.setText("发送内容存在违规行为");
+                sendMessage(webSocketVo.getSenderId(), JSONObject.from(webSocketVo).toJSONString());
+                return;
+            }
+
+            log.info("webSocketVo----------------{}", JSONObject.from(webSocketVo).toJSONString());
+            log.info("concurrentHashMap----------{}", concurrentHashMap.keySet());
+
+            // 保存消息记录
+            LifeMessage lifeMessage = new LifeMessage();
+            lifeMessage.setSenderId(webSocketVo.getSenderId());
+            lifeMessage.setReceiverId(webSocketVo.getReceiverId());
+            lifeMessage.setContent(webSocketVo.getText());
+            lifeMessage.setType(webSocketVo.getType());
+            // 查询自己是否在对方的黑名单中
+            if (baseRedisService.hasKey("blackList_" + webSocketVo.getSenderId())) {
+                List<String> blackList = baseRedisService.getList("blackList_" + webSocketVo.getSenderId());
+                if (blackList.contains(webSocketVo.getReceiverId())) {
+                    lifeMessage.setDeletePhoneId(webSocketVo.getReceiverId());
+                    lifeMessageMapper.insert(lifeMessage);
+                    // 发送消息
+                    webSocketVo.setMessageId(lifeMessage.getId());
+                    webSocketVo.setCategory("message");
+                    webSocketVo.setCreatedTime(lifeMessage.getCreatedTime());
+                    sendMessage(webSocketVo.getSenderId(), JSONObject.from(webSocketVo).toJSONString());
+                    return;
+                }
+            }
+
+            lifeMessageMapper.insert(lifeMessage);
+            // 发送消息
+            webSocketVo.setMessageId(lifeMessage.getId());
+            webSocketVo.setCategory("message");
+            webSocketVo.setCreatedTime(lifeMessage.getCreatedTime());
+            sendMessage(webSocketVo.getSenderId(), JSONObject.from(webSocketVo).toJSONString());
+            sendMessage(webSocketVo.getReceiverId(), JSONObject.from(webSocketVo).toJSONString());
+        } catch (Exception e) {
+            log.error("WebSocketProcess.onMessage()----error----Msg={}", e.getMessage());
+        }
+    }
+
+    /**
+     * 发送消息到指定客户端
+     */
+    public void sendMessageBySession(String id, String message, Session session) throws Exception {
+        log.info("WebSocketProcess.sendMessage()--readySend--type8--id={},message={}", id, message);
+        // 根据id,从map中获取存储的webSocket对象
+        // 当客户端是Open状态时,才能发送消息
+        if (session.isOpen()) {
+            session.getBasicRemote().sendText(message);
+            log.info("WebSocketProcess.sendMessage()---sendSuccess--type8--id={},message={}", id, message);
+        } else {
+            log.error("WebSocketProcess.sendMessage()---sendError--type8--websocket session:{} is closed ", id);
+        }
+    }
+
+    /**
+     * 发送消息到指定客户端
+     */
+    public void sendMessage(String id, String message) throws Exception {
+        log.info("WebSocketProcess.sendMessage()--readySend----id={},message={}", id, message);
+        // 根据id,从map中获取存储的webSocket对象
+        WebSocketProcess webSocketProcess = concurrentHashMap.get(id);
+        if (!ObjectUtils.isEmpty(webSocketProcess)) {
+            // 当客户端是Open状态时,才能发送消息
+            if (webSocketProcess.session.isOpen()) {
+                webSocketProcess.session.getBasicRemote().sendText(message);
+                log.info("WebSocketProcess.sendMessage()---sendSuccess---id={},message={}", id, message);
+            } else {
+                log.error("WebSocketProcess.sendMessage()---sendError----websocket session:{} is closed ", id);
+            }
+        } else {
+            log.error("WebSocketProcess.sendMessage()---sendError----websocket session:{} is not exit ", id);
+        }
+    }
+
+    /**
      * 客户端创建连接时触发
      * */
     @OnOpen
-    public void onOpen(Session session, @PathParam("sendId") String id) {
+    public void onOpen(@PathParam("sendId") String id, Session session) {
         //每新建立一个连接,就把当前客户id为key,this为value存储到map中
         this.session = session;
         concurrentHashMap.put(id, this);
@@ -97,71 +193,13 @@ public class WebSocketProcess implements ApplicationContextAware {
      * 连接发生异常时候触发
      */
     @OnError
-    public void onError(Session session, Throwable error) {
-        log.error("WebSocketProcess.onError() Error Mgs=", error);
+    public void onError(@PathParam("sendId") String id, Throwable error) {
+        log.error("WebSocketProcess.onError() Error,id={}, Msg=", id, error);
     }
 
     /**
-     * 接收到客户端消息时触发
+     * 验证消息合规性
      */
-    @OnMessage
-    public void onMessage(String message) throws Exception {
-        try {
-            // 过滤心跳
-            WebSocketVo websocketVo = JSONObject.parseObject(message, WebSocketVo.class);
-            if (null == websocketVo || "heartbeat".equals(websocketVo.getCategory())) return;
-
-            // 记录已读消息id
-            if ("receipt".equals(websocketVo.getCategory())) {
-                baseRedisService.setListRight("readMessageIdKey", String.valueOf(websocketVo.getMessageId()));
-                return;
-            }
-
-            // 检查消息合规性
-            if (!checkCompliance(websocketVo)) {
-                websocketVo.setType("7");
-                websocketVo.setText("发送内容存在违规行为");
-                sendMessage(websocketVo.getSenderId(), JSONObject.from(websocketVo).toJSONString());
-                return;
-            }
-
-            log.info("websocketVo----------------{}",JSONObject.from(websocketVo).toJSONString());
-            log.info("concurrentHashMap----------{}",concurrentHashMap.keySet());
-
-            // 保存消息记录
-            LifeMessage lifeMessage = new LifeMessage();
-            lifeMessage.setSenderId(websocketVo.getSenderId());
-            lifeMessage.setReceiverId(websocketVo.getReceiverId());
-            lifeMessage.setContent(websocketVo.getText());
-            lifeMessage.setType(websocketVo.getType());
-            // 查询自己是否在对方的黑名单中
-            if (baseRedisService.hasKey("blackList_" + websocketVo.getSenderId())) {
-                List<String> blackList = baseRedisService.getList("blackList_" + websocketVo.getSenderId());
-                if (blackList.contains(websocketVo.getReceiverId())) {
-                    lifeMessage.setDeletePhoneId(websocketVo.getReceiverId());
-                    lifeMessageMapper.insert(lifeMessage);
-                    // 发送消息
-                    websocketVo.setMessageId(lifeMessage.getId());
-                    websocketVo.setCategory("message");
-                    websocketVo.setCreatedTime(lifeMessage.getCreatedTime());
-                    sendMessage(websocketVo.getSenderId(), JSONObject.from(websocketVo).toJSONString());
-                    return;
-                }
-            }
-
-            lifeMessageMapper.insert(lifeMessage);
-            // 发送消息
-            websocketVo.setMessageId(lifeMessage.getId());
-            websocketVo.setCategory("message");
-            websocketVo.setCreatedTime(lifeMessage.getCreatedTime());
-            sendMessage(websocketVo.getSenderId(), JSONObject.from(websocketVo).toJSONString());
-            sendMessage(websocketVo.getReceiverId(), JSONObject.from(websocketVo).toJSONString());
-        } catch (Exception e) {
-            log.error("WebSocketProcess.onMessage()----error----Msg={}", e.getMessage());
-        }
-    }
-
-
     private boolean checkCompliance(WebSocketVo websocketVo) throws Exception {
         List<String> servicesList = Lists.newArrayList();
         TextModerationResultVO textModerationResultVO = null;
@@ -174,30 +212,7 @@ public class WebSocketProcess implements ApplicationContextAware {
             servicesList.add(ImageReviewServiceEnum.TONALITY_IMPROVE.getService());
             textModerationResultVO = textModerationUtil.invokeFunction(websocketVo.getText(), servicesList);
         }
-        if (null != textModerationResultVO && "high".equals(textModerationResultVO.getRiskLevel())) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 发送消息到指定客户端
-     */
-    public void sendMessage(String id, String message) throws Exception {
-        log.info("WebSocketProcess.sendMessage()--ready----id={},message={}", id, message);
-        //根据id,从map中获取存储的webSocket对象
-        WebSocketProcess webSocketProcess = concurrentHashMap.get(id);
-        if (!ObjectUtils.isEmpty(webSocketProcess)) {
-            //当客户端是Open状态时,才能发送消息
-            if (webSocketProcess.session.isOpen()) {
-                webSocketProcess.session.getBasicRemote().sendText(message);
-                log.info("WebSocketProcess.sendMessage()---success---id={},message={}", id, message);
-            } else {
-                log.error("WebSocketProcess.sendMessage()---error----websocket session:{} is closed ", id);
-            }
-        } else {
-            log.error("WebSocketProcess.sendMessage()---error----websocket session:{} is not exit ", id);
-        }
+        return !(null != textModerationResultVO && "high".equals(textModerationResultVO.getRiskLevel()));
     }
 
     /**

+ 21 - 13
alien-store/src/main/java/shop/alien/store/controller/WebSocketController.java

@@ -30,6 +30,27 @@ public class WebSocketController {
 
     private final WebSocketProcess webSocketProcess;
 
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("向指定客户端发消息")
+    @GetMapping(value = "/sendMsgToClientByPhoneId")
+    public R<Boolean> sendMsgToClientByPhoneId(String messageReceiverId, String webSocketVoStr) {
+        try {
+            log.info("WebSocketController.sendMsgToClientByPhoneId?messageReceiverId={}, webSocketVoStr={}", messageReceiverId, webSocketVoStr);
+            webSocketProcess.sendMessage(messageReceiverId, webSocketVoStr);
+            return R.success("发送成功");
+        } catch (Exception e) {
+            log.error("WebSocketController_sendMsgToClientById Error Mgs={}", e.getMessage());
+        }
+        return R.fail("发送失败");
+    }
+
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("socket轮询获取token状态")
+    @GetMapping(value = "/getTokenStatus")
+    public R<Boolean> getTokenStatus() {
+        return R.data(true);
+    }
+
 //    @ApiOperationSupport(order = 1)
 //    @ApiOperation("向指定客户端发消息")
 //    @GetMapping(value = "/sendMsgToClientByPhoneId")
@@ -59,19 +80,6 @@ public class WebSocketController {
 //        return R.fail("发送失败");
 //    }
 
-    @ApiOperationSupport(order = 1)
-    @ApiOperation("向指定客户端发消息")
-    @GetMapping(value = "/sendMsgToClientByPhoneId")
-    public R<Boolean> sendMsgToClientByPhoneId(String messageReceiverId, String webSocketVoStr) {
-        try {
-            log.info("WebSocketController.sendMsgToClientByPhoneId?messageReceiverId={}, webSocketVoStr={}", messageReceiverId, webSocketVoStr);
-            webSocketProcess.sendMessage(messageReceiverId, webSocketVoStr);
-            return R.success("发送成功");
-        } catch (Exception e) {
-            log.error("WebSocketController_sendMsgToClientById Error Mgs={}", e.getMessage());
-        }
-        return R.fail("发送失败");
-    }
 
 //    /**
 //     * 向指定客户端发消息