From fb2128a3bf8d5a6f1e91ba735241af5924e74ffe Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 21 六月 2024 14:07:36 +0800
Subject: [PATCH] 修改websocket bug

---
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java                   |    9 ++
 /dev/null                                                                                                      |   22 -----
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java          |    8 +
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java |   11 +-
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java                        |    2 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/WebsocketMessageDTO.java                  |   32 ++++++++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java                       |    1 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java      |   17 ++--
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java              |   14 +++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java                  |   43 ++++++++++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java        |   19 ++--
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java              |    8 +
 12 files changed, 133 insertions(+), 53 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/WebsocketMessageDTO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/WebsocketMessageDTO.java
new file mode 100644
index 0000000..75c9c16
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/WebsocketMessageDTO.java
@@ -0,0 +1,32 @@
+package com.ruoyi.system.api.domain;
+
+import com.ruoyi.common.core.enums.ClientTypeEnum;
+import io.swagger.annotations.ApiModel;
+import java.io.Serializable;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author mitao
+ * @date 2024/6/21
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "websocket消息传输对象", description = "websocket消息传输对象")
+public class WebsocketMessageDTO implements Serializable {
+
+    private static final long serialVersionUID = 5118829583970565292L;
+
+    /**
+     * 客户端类型
+     */
+    private ClientTypeEnum clientType;
+    /**
+     * 消息
+     */
+    private String message;
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java
index fb51e6d..391d19c 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java
@@ -5,6 +5,7 @@
 import com.ruoyi.system.api.domain.DelayTask;
 import com.ruoyi.system.api.domain.SysRole;
 import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.domain.WebsocketMessageDTO;
 import com.ruoyi.system.api.domain.dto.MgtAfterSaleSettingDTO;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import java.util.List;
@@ -94,6 +95,19 @@
             public R<MgtAfterSaleSettingDTO> getAfterSaleSetting() {
                 return R.fail("获取售后设置失败:" + cause.getMessage());
             }
+
+
+            @Override
+            public R<?> pushByClientType(WebsocketMessageDTO dto, String source) {
+                return R.fail("向" + dto.getClientType().getDesc() + "发送websocket消息失败:"
+                        + cause.getMessage());
+            }
+
+            @Override
+            public R<?> pushAll(String message, String source) {
+                return R.fail("向所有用户发送websocket消息失败:"
+                        + cause.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java
index 240b60e..5109722 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java
@@ -7,6 +7,7 @@
 import com.ruoyi.system.api.domain.DelayTask;
 import com.ruoyi.system.api.domain.SysRole;
 import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.domain.WebsocketMessageDTO;
 import com.ruoyi.system.api.domain.dto.MgtAfterSaleSettingDTO;
 import com.ruoyi.system.api.factory.SysUserFallbackFactory;
 import java.util.List;
@@ -100,4 +101,12 @@
 
     @GetMapping("/custom-config/get-after-sale-setting")
     R<MgtAfterSaleSettingDTO> getAfterSaleSetting();
+
+    @PostMapping("/websocket/push-by-client-type")
+    R<?> pushByClientType(@RequestBody WebsocketMessageDTO dto,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    @GetMapping("/websocket/push-all/{message}")
+    R<?> pushAll(@PathVariable("message") String message,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
index cbd7b2a..82f5b98 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -45,6 +45,7 @@
 import com.ruoyi.system.api.domain.MemberAddress;
 import com.ruoyi.system.api.domain.Order;
 import com.ruoyi.system.api.domain.OrderAuctionBond;
+import com.ruoyi.system.api.domain.WebsocketMessageDTO;
 import com.ruoyi.system.api.domain.dto.AuctionGoodsListDTO;
 import com.ruoyi.system.api.domain.dto.AuctionGoodsListPageDTO;
 import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
@@ -59,7 +60,6 @@
 import com.ruoyi.system.api.feignClient.MemberClient;
 import com.ruoyi.system.api.feignClient.OrderClient;
 import com.ruoyi.system.api.feignClient.SysUserClient;
-import com.ruoyi.system.api.util.WebSocketUsers;
 import io.seata.spring.annotation.GlobalTransactional;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
@@ -608,7 +608,8 @@
             map.put("target_id", id);
             map.put("message_type", "end");
             String msg = objectMapper.writeValueAsString(map);
-            WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), msg);
+            sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg)
+                    .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER);
             log.info("===================>发送websocket通知,消息体{}", msg);
         }
     }
@@ -627,7 +628,8 @@
             map.put("target_id", id);
             map.put("message_type", "start");
             String msg = objectMapper.writeValueAsString(map);
-            WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), msg);
+            sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg)
+                    .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER);
             log.info("===================>发送websocket通知,消息体{}", msg);
         }
     }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java
index 9212419..448aff0 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java
@@ -20,8 +20,8 @@
 import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
 import com.ruoyi.common.core.enums.AuctionStartStatusEnum;
 import com.ruoyi.common.core.enums.BidStatusEnum;
-import com.ruoyi.common.core.enums.ClientTypeEnum;
 import com.ruoyi.common.core.enums.OrderFromEnum;
+import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.system.api.constants.NotificationTypeConstant;
 import com.ruoyi.system.api.domain.AuctionSalesroom;
 import com.ruoyi.system.api.domain.CustomConfig;
@@ -46,7 +46,6 @@
 import com.ruoyi.system.api.feignClient.MemberClient;
 import com.ruoyi.system.api.feignClient.OrderClient;
 import com.ruoyi.system.api.feignClient.SysUserClient;
-import com.ruoyi.system.api.util.WebSocketUsers;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
@@ -337,7 +336,7 @@
             msg = objectMapper.writeValueAsString(map);
         } catch (JsonProcessingException e) {
         }
-        WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), msg);
+        sysUserClient.pushAll(msg, SecurityConstants.INNER);
 
     }
 
@@ -401,7 +400,7 @@
             msg = objectMapper.writeValueAsString(map);
         } catch (JsonProcessingException e) {
         }
-        WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), msg);
+        sysUserClient.pushAll(msg, SecurityConstants.INNER);
     }
 
 
@@ -447,7 +446,7 @@
         } catch (JsonProcessingException e) {
             throw new RuntimeException(e);
         }
-        WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), msg);
+        sysUserClient.pushAll(msg, SecurityConstants.INNER);
     }
 
 
@@ -517,7 +516,7 @@
         } catch (JsonProcessingException e) {
             throw new RuntimeException(e);
         }
-        WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), msg);
+        sysUserClient.pushAll(msg, SecurityConstants.INNER);
 
     }
 
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
index ea82965..9da3265 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -53,7 +53,6 @@
 import com.ruoyi.common.core.utils.page.Checker;
 import com.ruoyi.common.core.utils.page.CollUtils;
 import com.ruoyi.common.core.utils.page.PageDTO;
-import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.system.api.RemoteFileService;
 import com.ruoyi.system.api.constants.NotificationTypeConstant;
 import com.ruoyi.system.api.domain.AppMiniLoginVO;
@@ -64,6 +63,7 @@
 import com.ruoyi.system.api.domain.OrderAuctionBond;
 import com.ruoyi.system.api.domain.PromotionVideo;
 import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.domain.WebsocketMessageDTO;
 import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO;
 import com.ruoyi.system.api.domain.dto.AuctionSalesroomDTO;
 import com.ruoyi.system.api.domain.dto.BidDTO;
@@ -85,7 +85,6 @@
 import com.ruoyi.system.api.feignClient.OrderClient;
 import com.ruoyi.system.api.feignClient.PromotionClient;
 import com.ruoyi.system.api.feignClient.SysUserClient;
-import com.ruoyi.system.api.util.WebSocketUsers;
 import io.seata.spring.annotation.GlobalTransactional;
 import java.io.IOException;
 import java.math.BigDecimal;
@@ -103,8 +102,6 @@
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import javax.annotation.Resource;
-
-import lombok.Data;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.util.EntityUtils;
@@ -655,7 +652,8 @@
             Thread socketSender=new Thread(()->{
                 try {
                     Thread.sleep(1000);//先休眠1秒
-                    WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), finalMsg);
+                    sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(finalMsg)
+                            .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER);
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
@@ -724,7 +722,8 @@
             Thread socketSender=new Thread(()->{
                 try {
                     Thread.sleep(1000);//先休眠1秒
-                    WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), finalMsg);
+                    sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(finalMsg)
+                            .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER);
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
@@ -1368,7 +1367,8 @@
         map.put("auctionSalesroomId", auctionSalesroom.getId());
         map.put("message_type", "start");
         String msg = objectMapper.writeValueAsString(map);
-        WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.AUCTIONEER.getCode(), msg);
+        sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg)
+                .clientType(ClientTypeEnum.AUCTIONEER).build(), SecurityConstants.INNER);
     }
 
     @Override
@@ -1418,7 +1418,8 @@
         map.put("auctionSalesroomId", auctionSalesroom.getId());
         map.put("message_type", "end");
         String msg = objectMapper.writeValueAsString(map);
-        WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.AUCTIONEER.getCode(), msg);
+        sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg)
+                .clientType(ClientTypeEnum.AUCTIONEER).build(), SecurityConstants.INNER);
     }
 
     @Override
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
index 5fcea94..0f12e35 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
@@ -33,6 +33,7 @@
 import com.ruoyi.system.api.domain.GoodsGroupPurchase;
 import com.ruoyi.system.api.domain.GoodsSku;
 import com.ruoyi.system.api.domain.Order;
+import com.ruoyi.system.api.domain.WebsocketMessageDTO;
 import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
 import com.ruoyi.system.api.domain.dto.OrderUpdDTO;
@@ -41,13 +42,12 @@
 import com.ruoyi.system.api.domain.vo.OrderVO;
 import com.ruoyi.system.api.domain.vo.WdGoodsGroupPurchaseVO;
 import com.ruoyi.system.api.feignClient.OrderClient;
-import com.ruoyi.system.api.util.WebSocketUsers;
+import com.ruoyi.system.api.feignClient.SysUserClient;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
-import javax.annotation.Resource;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -65,14 +65,12 @@
 @RequiredArgsConstructor
 public class GoodsGroupPurchaseServiceImpl extends ServiceImpl<GoodsGroupPurchaseMapper, GoodsGroupPurchase> implements IGoodsGroupPurchaseService {
 
-    @Resource
-    private OrderClient orderClient;
+    private final OrderClient orderClient;
     private final IGoodsSkuService goodsSkuService;
     private final AsyncMethodService asyncMethodService;
     private final RedisService redisService;
-
-    @Resource
-    private IMemberGoodsCollectionService iMemberGoodsCollectionService;
+    private final IMemberGoodsCollectionService iMemberGoodsCollectionService;
+    private final SysUserClient sysUserClient;
     // 创建一个静态共享的ObjectMapper实例以重用
     private static final ObjectMapper objectMapper = new ObjectMapper();
     /**
@@ -216,7 +214,9 @@
             map.put("target_id", groupPurchaseId);
             map.put("message_type", "start");
             String msg = objectMapper.writeValueAsString(map);
-            WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), msg);
+
+            sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg)
+                    .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER);
             log.info("===================>发送websocket通知,消息体{}", msg);
         }
     }
@@ -240,7 +240,8 @@
             map.put("target_id", groupPurchaseId);
             map.put("message_type", "end");
             String msg = objectMapper.writeValueAsString(map);
-            WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), msg);
+            sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg)
+                    .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER);
             log.info("===================>发送websocket通知,消息体{}", msg);
         }
     }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
index 5307822..2ba2951 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
@@ -36,6 +36,7 @@
 import com.ruoyi.system.api.domain.GoodsSeckill;
 import com.ruoyi.system.api.domain.GoodsSeries;
 import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.domain.WebsocketMessageDTO;
 import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
 import com.ruoyi.system.api.domain.vo.HomeGoodsSeckillInfoVO;
@@ -43,7 +44,6 @@
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import com.ruoyi.system.api.feignClient.OrderClient;
 import com.ruoyi.system.api.feignClient.SysUserClient;
-import com.ruoyi.system.api.util.WebSocketUsers;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -221,7 +221,8 @@
         map.put("target_id", seckillId);
         map.put("message_type", "start");
         String msg = objectMapper.writeValueAsString(map);
-        WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), msg);
+        sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg)
+                .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER);
         log.info("===================>发送websocket通知,消息体{}", msg);
     }
 
@@ -248,7 +249,8 @@
         map.put("target_id", seckillId);
         map.put("message_type", "end");
         String msg = objectMapper.writeValueAsString(map);
-        WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), msg);
+        sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg)
+                .clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER);
         log.info("===================>发送websocket通知,消息体{}", msg);
     }
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java
new file mode 100644
index 0000000..8a721a0
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java
@@ -0,0 +1,43 @@
+package com.ruoyi.system.controller;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.security.annotation.InnerAuth;
+import com.ruoyi.system.api.domain.WebsocketMessageDTO;
+import com.ruoyi.system.websocket.WebSocketUsers;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/websocket")
+public class WebSocketController {
+
+    @GetMapping("/push")
+    public R<?> push() {
+        WebSocketUsers.sendMessageToUsersByText("长江长江,我是黄河!");
+        return R.ok();
+    }
+
+    @GetMapping("/push/{type}/{msg}")
+    public R<?> push(@PathVariable("type") Integer type, @PathVariable("msg") String msg) {
+        WebSocketUsers.sendMessageToUsersByType(type, msg);
+        return R.ok();
+    }
+
+    @InnerAuth
+    @PostMapping("/push-by-client-type")
+    public R<?> pushByClientType(@RequestBody WebsocketMessageDTO dto) {
+        WebSocketUsers.sendMessageToUsersByType(dto.getClientType().getCode(), dto.getMessage());
+        return R.ok();
+    }
+
+    @InnerAuth
+    @GetMapping("/push-all/{message}")
+    public R<?> pushAll(@PathVariable("message") String message) {
+        WebSocketUsers.sendMessageToUsersByText(message);
+        return R.ok();
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketTestController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketTestController.java
deleted file mode 100644
index 4108fb6..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketTestController.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.ruoyi.system.controller;
-
-import com.ruoyi.system.api.util.WebSocketUsers;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/websocket")
-public class WebSocketTestController {
-
-    @GetMapping("/push")
-    public void push() {
-        WebSocketUsers.sendMessageToUsersByText("长江长江,我是黄河!");
-    }
-
-    @GetMapping("/push/{type}/{msg}")
-    public void push(@PathVariable("type") Integer type, @PathVariable("msg") String msg) {
-        WebSocketUsers.sendMessageToUsersByType(type, msg);
-    }
-}
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java
index 009af79..ee679e8 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java
@@ -1,6 +1,5 @@
 package com.ruoyi.system.websocket;
 
-import com.ruoyi.system.api.util.WebSocketUsers;
 import java.util.concurrent.Semaphore;
 import javax.websocket.OnClose;
 import javax.websocket.OnError;
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/util/WebSocketUsers.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java
similarity index 98%
rename from ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/util/WebSocketUsers.java
rename to ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java
index 1b546e3..9b162c2 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/util/WebSocketUsers.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java
@@ -1,4 +1,4 @@
-package com.ruoyi.system.api.util;
+package com.ruoyi.system.websocket;
 
 import java.io.IOException;
 import java.util.Collection;

--
Gitblit v1.7.1