Jelajahi Sumber

fixed: 修改 websock 通知BUG【机构1 有通知时, 其他机构的登录用户也收到了消息】

lilt085163@126.com 3 tahun lalu
induk
melakukan
fd81ed4f19

+ 5 - 5
src/main/java/com/care/bigscreen/controller/CommonController.java

@@ -46,12 +46,12 @@ public class CommonController {
 //        }
 //    }
     @GetMapping("/pushEvent")
-    public Result<Object> pushEvent(@RequestParam("stationId") Long stationId,@RequestParam(value = "orderId") Long orderId) {
+    public Result<Object> pushEvent(@RequestParam("orgId") Long orgId,@RequestParam("stationId") Long stationId,@RequestParam(value = "orderId") Long orderId) {
         try {
-            bigScreenService.pushRtEventFlag(String.valueOf(stationId),orderId.toString(),"bigscreenRefresh");
-            bigScreenService.pushRtEventFlag(String.valueOf(stationId),orderId.toString(),"orderAdd");
-            bigScreenService.pushRtEventFlag(String.valueOf(stationId),orderId.toString(),"orderUpdate");
-            bigScreenService.pushRtEventFlag(String.valueOf(stationId),orderId.toString(),"orderHandle");
+            bigScreenService.pushRtEventFlag(orgId,stationId,orderId.toString(),"bigscreenRefresh");
+            bigScreenService.pushRtEventFlag(orgId,stationId,orderId.toString(),"orderAdd");
+            bigScreenService.pushRtEventFlag(orgId,stationId,orderId.toString(),"orderUpdate");
+            bigScreenService.pushRtEventFlag(orgId,stationId,orderId.toString(),"orderHandle");
             return Result.success("成功");
         } catch (Exception e) {
             log.error("convertedCodeName: ",e);

+ 1 - 1
src/main/java/com/care/bigscreen/service/BigScreenService.java

@@ -95,7 +95,7 @@ public interface BigScreenService {
     /**
      * 调用websocket推送实时事件标识给前端
      */
-    void pushRtEventFlag(String stationId,String orderId,String flag);
+    void pushRtEventFlag(Long orgId,Long stationId,String orderId,String flag);
 
 
     /**

+ 5 - 5
src/main/java/com/care/bigscreen/service/impl/BigScreenServiceImpl.java

@@ -213,18 +213,18 @@ public class BigScreenServiceImpl implements BigScreenService {
      * 调用websocket推送实时事件标识给前端
      */
     @Override
-    public void pushRtEventFlag(String stationId,String orderId, String flag){
+    public void pushRtEventFlag(Long orgId,Long stationId,String orderId, String flag){
         try {
             //触发统计
             exeStatistics();
             if("bigscreenRefresh".equals(flag)) {
-                StationWebSocketEndpoint.sendMessage(stationId, "rt_event_happen");
+                StationWebSocketEndpoint.sendMessage(stationId!=null?String.valueOf(stationId):"", "rt_event_happen");
             } else if("orderAdd".equals(flag)) {
-                WebSocketEndpoint.sendMessage("rt_event_add_happen@" + orderId);
+                WebSocketEndpoint.sendMessage(orgId,stationId,"rt_event_add_happen@" + orderId);
             } else if("orderUpdate".equals(flag)){
-                WebSocketEndpoint.sendMessage("rt_event_update_happen@" + orderId);
+                WebSocketEndpoint.sendMessage(orgId,stationId,"rt_event_update_happen@" + orderId);
             } else if("orderHandle".equals(flag)){
-                WebSocketEndpoint.sendMessage("rt_event_handle_happen@" + orderId);
+                WebSocketEndpoint.sendMessage(orgId,stationId,"rt_event_handle_happen@" + orderId);
             }
 
         } catch (Exception e){

+ 1 - 1
src/main/java/com/care/bms/controller/EventHandleController.java

@@ -184,7 +184,7 @@ public class EventHandleController {
     public Result<Object> receiveOrder(HttpServletRequest request,@RequestHeader("token") String token,@PathVariable("orderId") Long orderId){
         UserLogindConvertVO loginUser = WebPageUtils.getCurrentLoginedUser(request);
         this.bmsEventOrderService.receiveOrder(orderId,loginUser);
-        bigScreenService.pushRtEventFlag(null,String.valueOf(orderId),"orderHandle");
+        bigScreenService.pushRtEventFlag(loginUser.getOrgId(),loginUser.getStationId(),String.valueOf(orderId),"orderHandle");
         return  Result.success("领取工单成功!");
     }
     @GetMapping("/getEventInfo/{orderId}")

+ 1 - 1
src/main/java/com/care/bms/service/BmsEventOrderService.java

@@ -474,7 +474,7 @@ public class BmsEventOrderService {
                 .set(CareEventOrder::getStatus,orderStatusEnum.getValue())
                 .set(CareEventOrder::getModifyTime,DateUtil.date());
         this.careEventOrderService.update(updateWrapper);
-        this.bigScreenService.pushRtEventFlag(order.getStationId().toString(),orderId.toString(),"bigscreenRefresh");
+        this.bigScreenService.pushRtEventFlag(order.getOrgId(),order.getStationId(),orderId.toString(),"bigscreenRefresh");
     }
 
     /**

+ 17 - 6
src/main/java/com/care/bms/websocket/WebSocketEndpoint.java

@@ -8,6 +8,7 @@ import com.care.common.util.JwtUtils;
 import com.care.common.util.Result;
 import com.care.common.vo.UserLogindConvertVO;
 import io.jsonwebtoken.Claims;
+import io.swagger.annotations.ApiModelProperty;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -40,6 +41,12 @@ public class WebSocketEndpoint {
     //电话作为登陆用户名
     private String phone;
 
+    @ApiModelProperty("机构ID")
+    private Long orgId;
+
+    @ApiModelProperty("服务站ID,角色为坐席时,该字段可能未空")
+    private Long stationId;
+
 
 
     /**
@@ -76,6 +83,8 @@ public class WebSocketEndpoint {
                 UserLogindConvertVO vo = JSONUtil.toBean(claims.getSubject(), UserLogindConvertVO.class);
                 if (vo != null) {
                     this.phone = vo.getPhone();
+                    this.orgId = vo.getOrgId();
+                    this.stationId = vo.getStationId();
                 } else{
                     closeSession(session, "-1", "连接失败,token解析失败");
                     return;
@@ -111,15 +120,17 @@ public class WebSocketEndpoint {
 //        sendMessage(message);
     }
 
-    public static void sendMessage(String message) throws IOException {
+    public static void sendMessage(Long orgId,Long stationId ,String message) throws IOException {
         for (WebSocketEndpoint endpoint : currentWebSocketSession) {
             Session session = endpoint.getSession();
             if (session.isOpen()) {
-                //发送消息
-                try {
-                    session.getBasicRemote().sendText(message);
-                } catch (IOException e) {
-                    logger.info("登录用户={} 发送数据失败,客户端连接已经断开.", endpoint.getPhone());
+                if (endpoint.orgId == orgId){
+                    //发送消息
+                    try {
+                        session.getBasicRemote().sendText(message);
+                    } catch (IOException e) {
+                        logger.info("登录用户={} 发送数据失败,客户端连接已经断开.", endpoint.getPhone());
+                    }
                 }
             }
         }

+ 4 - 4
src/main/java/com/care/mqtt/service/MqttMsgRedisService.java

@@ -180,14 +180,14 @@ public class MqttMsgRedisService {
           if(orderDb != null) { //有未完成的告警事件,不再生成新的告警工单,只作为子事件插入到当前工单的历史记录中。
               careEventOrderService.saveHisOrder(order,orderDb,false);
               //通知页面
-              this.bigScreenService.pushRtEventFlag(order.getStationId().toString(),order.getId().toString(),"orderUpdate");
-              this.bigScreenService.pushRtEventFlag(order.getStationId().toString(),order.getId().toString(),"bigscreenRefresh");
+              this.bigScreenService.pushRtEventFlag(order.getOrgId(),order.getStationId(),order.getId().toString(),"orderUpdate");
+              this.bigScreenService.pushRtEventFlag(order.getOrgId(),order.getStationId(),order.getId().toString(),"bigscreenRefresh");
           }  else { //无未完成的告警事件
               //生成新的工单
               this.careEventOrderService.saveOrder(order);
               //通知页面
-              this.bigScreenService.pushRtEventFlag(order.getStationId().toString(),order.getId().toString(),"orderAdd");
-              this.bigScreenService.pushRtEventFlag(order.getStationId().toString(),order.getId().toString(),"bigscreenRefresh");
+              this.bigScreenService.pushRtEventFlag(order.getOrgId(),order.getStationId(),order.getId().toString(),"orderAdd");
+              this.bigScreenService.pushRtEventFlag(order.getOrgId(),order.getStationId(),order.getId().toString(),"bigscreenRefresh");
           }
 
           careMqttMsg.setStatus(MqttMsgStatusEnum.HANDLED.getValue());

+ 6 - 6
src/main/java/com/care/mqtt/service/MqttMsgService.java

@@ -180,8 +180,8 @@ public class MqttMsgService {
 
                         careEventOrderService.saveHisOrder(order, orderDb,false);
                         //通知页面
-                        this.bigScreenService.pushRtEventFlag(order.getStationId().toString(), order.getId().toString(), "orderUpdate");
-                        this.bigScreenService.pushRtEventFlag(order.getStationId().toString(), order.getId().toString(), "bigscreenRefresh");
+                        this.bigScreenService.pushRtEventFlag(order.getOrgId(),order.getStationId(), order.getId().toString(), "orderUpdate");
+                        this.bigScreenService.pushRtEventFlag(order.getOrgId(),order.getStationId(), order.getId().toString(), "bigscreenRefresh");
                     } else { //取消
                         careMqttMsg.setStatus(MqttMsgStatusEnum.HANDLED.getValue());
                         this.careMqttMsgService.save(careMqttMsg);
@@ -191,8 +191,8 @@ public class MqttMsgService {
                             order.setId(orderDb.getId());
                             this.careEventOrderService.autoCancelOrder(order);
                             //通知页面
-                            this.bigScreenService.pushRtEventFlag(order.getStationId().toString(), order.getId().toString(), "orderUpdate");
-                            this.bigScreenService.pushRtEventFlag(order.getStationId().toString(), order.getId().toString(), "bigscreenRefresh");
+                            this.bigScreenService.pushRtEventFlag(order.getOrgId(),order.getStationId(), order.getId().toString(), "orderUpdate");
+                            this.bigScreenService.pushRtEventFlag(order.getOrgId(),order.getStationId(), order.getId().toString(), "bigscreenRefresh");
                         } else { // 不一致,则只记录一条取消his
                             //记录一条取消his
                             careEventOrderService.saveHisOrder(order, orderDb,true);
@@ -211,8 +211,8 @@ public class MqttMsgService {
                             this.careEventOrderService.saveOrder(order);
 
                             //通知页面
-                            this.bigScreenService.pushRtEventFlag(order.getStationId().toString(), order.getId().toString(), "orderAdd");
-                            this.bigScreenService.pushRtEventFlag(order.getStationId().toString(), order.getId().toString(), "bigscreenRefresh");
+                            this.bigScreenService.pushRtEventFlag(order.getOrgId(),order.getStationId(), order.getId().toString(), "orderAdd");
+                            this.bigScreenService.pushRtEventFlag(order.getOrgId(),order.getStationId(), order.getId().toString(), "bigscreenRefresh");
                         } else { //取消 不处理工单
                             careMqttMsg.setStatus(MqttMsgStatusEnum.CANCEL.getValue());
                             this.careMqttMsgService.save(careMqttMsg);