Kaynağa Gözat

小程序跌倒通知,包含被分享者

chejianzheng 2 ay önce
ebeveyn
işleme
338769eb9b

+ 1 - 1
portal-service-common/src/main/java/com/hfln/portal/common/constant/mqtt/topic/TopicConstants.java

@@ -47,7 +47,7 @@ public interface TopicConstants {
     // 发送实时点位
     String TOPIC_MPS_REALTIME_POS = "/mps/%s/realtime_pos";
 
-    String TOPIC_MPS_WEB_NOTIC = "/mps/%s/notice";
+    String TOPIC_MPS_NOTIC = "/mps/%s/notice";
     // 接收前端mqtt客户端连接 断开信息 主题
     String TOPIC_MQTT_CLIENT_CONNECT = "/mps/client/connect";
 

+ 76 - 72
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/mqtt/MqttSubHandle.java

@@ -67,6 +67,9 @@ public class MqttSubHandle {
     @Autowired
     private AdminUserService adminUserService;
 
+    @Autowired
+    private DevShareService devShareService;
+
     /**
      * MQTT消息统一入口处理方法
      *
@@ -129,15 +132,12 @@ public class MqttSubHandle {
         JSONObject obj = JSONObject.parseObject(payload);
         String clientId = obj.getString("dev_id");
         String event = obj.getString("event");
-        // 跌倒确认返回
-        if (event.equals("fall_confirmed")) {
-            if (mqttClient != null) {
-                Map<String, Object> payloadMap = new HashMap<>();
-                payloadMap.put("dev_id", clientId);
-                mqttClient.sendMessage("/mps/fall_event/ack", JSON.toJSONString(payloadMap));
-            } else {
-                log.warn("MQTT template is not available, message not sent to topic: /mps/fall_event/ack");
-            }
+
+        // 1 校验
+        DevInfo dev = devInfoService.queryByClientId(clientId);
+        if (dev == null) {
+            log.warn("Device not found for clientId: {}", clientId);
+            return;
         }
 
         byte messageType = obj.getByteValue("message_type");
@@ -148,45 +148,29 @@ public class MqttSubHandle {
             return;
         }
 
-        JSONArray targetPointOne = targetPointArray.getJSONArray(0);
-        BigDecimal x = targetPointOne.getBigDecimal(0);
-        BigDecimal y = targetPointOne.getBigDecimal(1);
-        BigDecimal z = targetPointOne.getBigDecimal(2);
-
-        BigDecimal[][] targetPoints = new BigDecimal[targetPointArray.size()][3];
-        for (int i = 0; i < targetPointArray.size(); i++) {
+        // 2 存储跌倒确认事件
+        if (messageType == 3 && ("fall_confirmed").equals(event)) {
 
-            JSONArray targetPoint = targetPointArray.getJSONArray(i);
-            targetPoints[i] = new BigDecimal[]{targetPoint.getBigDecimal(0), targetPoint.getBigDecimal(1), targetPoint.getBigDecimal(2)};
-        }
-
-        String targetPointsStr = JSON.toJSONString(targetPoints);
-        DevInfo dev = devInfoService.queryByClientId(clientId);
-        if (dev == null) {
-            log.warn("Device not found for clientId: {}", clientId);
-            return;
-        }
-        //  存储跌倒事件
-        if (messageType == 3) {
-
-                event = obj.getString("event");
-                if (event.equals("fall_confirmed")) {
-                    EventList eventListVO = new EventList();
-                    eventListVO.setDevId(dev.getDevId());
-                    eventListVO.setPose((int)pose);
-                    eventListVO.setIsHandle(0);
-                    eventListVO.setTargetPoints(targetPointsStr);
-                    eventListVO.setEventType((int)messageType);
-                    eventService.save(eventListVO);
-                }
+            BigDecimal[][] targetPoints = new BigDecimal[targetPointArray.size()][3];
+            for (int i = 0; i < targetPointArray.size(); i++) {
+                JSONArray targetPoint = targetPointArray.getJSONArray(i);
+                targetPoints[i] = new BigDecimal[]{targetPoint.getBigDecimal(0), targetPoint.getBigDecimal(1), targetPoint.getBigDecimal(2)};
             }
+            String targetPointsStr = JSON.toJSONString(targetPoints);
+
+            EventList eventListVO = new EventList();
+            eventListVO.setDevId(dev.getDevId());
+            eventListVO.setPose((int)pose);
+            eventListVO.setIsHandle(0);
+            eventListVO.setTargetPoints(targetPointsStr);
+            eventListVO.setEventType((int)messageType);
+            eventService.save(eventListVO);
+        }
 
-//        if (!targetPointsStr.equals(dev.getTargetPoints())) {
-//        } else {
-//            log.info("此次targetPoints与上次相同!");
-//        }
-
-        //向前端发送数据
+        // 3 向前端发送数据
+        JSONArray targetPointOne = targetPointArray.getJSONArray(0);
+        BigDecimal x = targetPointOne.getBigDecimal(0);
+        BigDecimal y = targetPointOne.getBigDecimal(1);
         JSONObject msg = new JSONObject();
         msg.put("target_points", targetPointArray);
         msg.put("x", x);
@@ -195,14 +179,12 @@ public class MqttSubHandle {
         msg.put("clientId", clientId);
         msg.put("event", event);
         msg.put("msgType", "event");
-
         // 发送socket
         mqttClient.sendMessage(String.format("/mps/%s/event", clientId), msg.toString());
 
         // 发送短信
         if (event.equals("fall_confirmed")) {
             log.info("mqttutil--有跌倒事件");
-            List<Long> userIds = new ArrayList<>();
             List<SendMsgUserDto> sendList = new ArrayList<>();
             String devName = dev.getDevName();
             String devId = dev.getClientId();
@@ -221,9 +203,31 @@ public class MqttSubHandle {
                     msgUserDto.setFwhOpenId(wxRelation.getFwhOpenId());
                 }
                 sendList.add(msgUserDto);
-            }
 
-            // 2 todo 被分享者
+                // 对于 小程序拥有者,给出全局跌倒提醒,-- 被分享者是否需要
+
+                JSONObject wxMsg = new JSONObject();
+                wxMsg.put("targetPoints", targetPointArray);
+                wxMsg.put("x", x);
+                wxMsg.put("y", y);
+                wxMsg.put("zt", pose);
+                wxMsg.put("clientId", clientId);
+                wxMsg.put("event", "fall_confirmed");
+                wxMsg.put("msgType", "fall");
+                wxMsg.put("devName", devName.toString());
+
+                log.info("发送网页跌倒主题消息:topic:{}, msg:{}", String.format(TopicConstants.TOPIC_MPS_NOTIC, RedisCacheConstant.WX_USER_PRE + userInfo.getUserId()), wxMsg.toString());
+                mqttClient.sendMessage(String.format(TopicConstants.TOPIC_MPS_NOTIC, RedisCacheConstant.WX_USER_PRE + userInfo.getUserId()), wxMsg.toString(), 2, false);
+                // 2 todo 被分享者
+
+                List<DevShare> shares = devShareService.queryConfirmedByDevId(dev.getDevId());
+                if (!CollectionUtils.isEmpty(shares)) {
+                    for (DevShare share : shares) {
+                        log.info("发送网页跌倒主题消息:topic:{}, msg:{}", String.format(TopicConstants.TOPIC_MPS_NOTIC, RedisCacheConstant.WX_USER_PRE + share.getSharedUserId()), wxMsg.toString());
+                        mqttClient.sendMessage(String.format(TopicConstants.TOPIC_MPS_NOTIC, RedisCacheConstant.WX_USER_PRE + share.getSharedUserId()), wxMsg.toString(), 2, false);
+                    }
+                }
+            }
 
             // 针对跌倒事件 发送 网页 主题消息提示
             String tenantName = "";
@@ -262,34 +266,34 @@ public class MqttSubHandle {
 
                         // 判断当前用户是否登录网页
                         if (redisUtil.sIsMember(RedisCacheConstant.MQTT_CLIENT_USERID, RedisCacheConstant.WEB_USER_PRE + adminUserInfo.getUserId())) {
-                            log.info("发送网页跌倒主题消息:topic:{}, msg:{}", String.format(TopicConstants.TOPIC_MPS_WEB_NOTIC, RedisCacheConstant.WEB_USER_PRE + adminUserInfo.getUserId()), webMsg.toString());
-                            mqttClient.sendMessage(String.format(TopicConstants.TOPIC_MPS_WEB_NOTIC, RedisCacheConstant.WEB_USER_PRE + adminUserInfo.getUserId()), webMsg.toString(), 2, false);
+                            log.info("发送网页跌倒主题消息:topic:{}, msg:{}", String.format(TopicConstants.TOPIC_MPS_NOTIC, RedisCacheConstant.WEB_USER_PRE + adminUserInfo.getUserId()), webMsg.toString());
+                            mqttClient.sendMessage(String.format(TopicConstants.TOPIC_MPS_NOTIC, RedisCacheConstant.WEB_USER_PRE + adminUserInfo.getUserId()), webMsg.toString(), 2, false);
                         }
                     }
                 }
             }
 
-            if (!CollectionUtils.isEmpty(sendList)) {
-                for (SendMsgUserDto sendDto : sendList) {
-                    // 发送跌倒短信
-                    log.info("mqttutil--开始发送跌倒消息");
-                    log.info("mqttutil--sendmsg:phone{}, dev_name:{}", sendDto.getPhone(), devName.toString());
-                    msgClient.sendNotifyMsg(sendDto.getPhone(), devName.toString());
-                    log.info("mqttUtil--消息发完了");
-
-                    // 发送微信公众号消息
-                    List<WxRelation> wxRelations = wxRelationService.queryByUnionId(sendDto.getUnionId());
-                    String fwhOpenId = "";
-                    if (wxRelations != null && !wxRelations.isEmpty()) {
-                        fwhOpenId = wxRelations.get(0).getFwhOpenId();
-                    }
-//                        log.info("mqttutil--当前useropenid=" + sendDto.getOpenid() + ", fwhopenId=" + fwhOpenId);
-                    log.info("发送微信公众号信息:devName=" + devName.toString() + ", phoneNo=" + sendDto.getPhone() + "fwhOpenId=" + fwhOpenId);
-                    // 发送微信公告号消息
-                    wxOfficeAccountClient.sendMsg(devId, devName.toString(), sendDto.getPhone(), fwhOpenId, "设备检测到跌倒,请前往小程序查看详细信息");
-                    log.info("发送微信公众号消息发完了");
-                }
-            }
+//            if (!CollectionUtils.isEmpty(sendList)) {
+//                for (SendMsgUserDto sendDto : sendList) {
+//                    // 发送跌倒短信
+//                    log.info("mqttutil--开始发送跌倒消息");
+//                    log.info("mqttutil--sendmsg:phone{}, dev_name:{}", sendDto.getPhone(), devName.toString());
+//                    msgClient.sendNotifyMsg(sendDto.getPhone(), devName.toString());
+//                    log.info("mqttUtil--消息发完了");
+//
+//                    // 发送微信公众号消息
+//                    List<WxRelation> wxRelations = wxRelationService.queryByUnionId(sendDto.getUnionId());
+//                    String fwhOpenId = "";
+//                    if (wxRelations != null && !wxRelations.isEmpty()) {
+//                        fwhOpenId = wxRelations.get(0).getFwhOpenId();
+//                    }
+////                        log.info("mqttutil--当前useropenid=" + sendDto.getOpenid() + ", fwhopenId=" + fwhOpenId);
+//                    log.info("发送微信公众号信息:devName=" + devName.toString() + ", phoneNo=" + sendDto.getPhone() + "fwhOpenId=" + fwhOpenId);
+//                    // 发送微信公告号消息
+//                    wxOfficeAccountClient.sendMsg(devId, devName.toString(), sendDto.getPhone(), fwhOpenId, "设备检测到跌倒,请前往小程序查看详细信息");
+//                    log.info("发送微信公众号消息发完了");
+//                }
+//            }
         }
     }
 

+ 1 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/DevShareService.java

@@ -20,4 +20,5 @@ public interface DevShareService extends IService<DevShare> {
 
     List<DevShare> queryBySharedUserId(Long sharedUserId);
 
+    List<DevShare> queryConfirmedByDevId(Long devId);
 }

+ 9 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/impl/DevShareServiceImpl.java

@@ -86,4 +86,13 @@ public class DevShareServiceImpl extends ServiceImpl<DevShareMapper, DevShare> i
         wrapper.eq(DevShare::getIsDeleted, 0);
         return this.baseMapper.selectList(wrapper);
     }
+
+    @Override
+    public List<DevShare> queryConfirmedByDevId(Long devId) {
+        LambdaQueryWrapper<DevShare> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DevShare::getDevId, devId);
+        wrapper.eq(DevShare::getState, 1);
+        wrapper.eq(DevShare::getIsDeleted, 0);
+        return this.baseMapper.selectList(wrapper);
+    }
 }