فهرست منبع

跌倒事件通知授权的被分享者实现

hxd 2 ماه پیش
والد
کامیت
1d1939a5f7

+ 6 - 0
portal-service-common/src/main/java/com/hfln/portal/common/dto/data/user/SendMsgUserDto.java

@@ -9,6 +9,12 @@ public class SendMsgUserDto implements Serializable {
 
     private Long userId;
 
+    //是否授权短信通知
+    private boolean messageFlag;
+
+    //是否授权服务号通知
+    private boolean serviceNumberFlag;
+
     // 发送电话的手机号
     private String phone;
 

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

@@ -198,6 +198,8 @@ public class MqttSubHandle {
                 msgUserDto.setUserId(userId);
                 msgUserDto.setPhone(userInfo.getPhone());
                 msgUserDto.setUnionId(userInfo.getUnionId());
+                msgUserDto.setMessageFlag(true);
+                msgUserDto.setServiceNumberFlag(true);
                 WxRelation wxRelation = wxRelationService.queryOneByUnionId(userInfo.getUnionId());
                 if (wxRelation != null) {
                     msgUserDto.setFwhOpenId(wxRelation.getFwhOpenId());
@@ -216,15 +218,52 @@ public class MqttSubHandle {
                 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());
+                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 被分享者
 
+                // 2  被分享者 - 根据标志位筛选并添加到发送列表
                 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());
+                        // 发送微信跌倒主题消息
+                        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);
+
+                        // 创建被分享者的消息用户DTO
+                        SendMsgUserDto msgUserShared = new SendMsgUserDto();
+                        msgUserShared.setUserId(share.getSharedUserId());
+                        msgUserShared.setPhone(share.getSharedPhone());
+
+                        // 获取完整的分享信息(包含标志位)
+                        DevShare devShare = devShareService.getById(share.getShareId());
+                        if (devShare != null) {
+                            // 将Integer类型的标志位转换为boolean类型:0-授权(true),1-拒绝(false)
+                            boolean messageFlag = devShare.getMessageFlag() != null && devShare.getMessageFlag() == 0;
+                            boolean serviceNumberFlag = devShare.getServiceNumberFlag() != null && devShare.getServiceNumberFlag() == 0;
+
+                            msgUserShared.setMessageFlag(messageFlag);
+                            msgUserShared.setServiceNumberFlag(serviceNumberFlag);
+
+                            // 根据标志位决定是否添加到发送列表
+                            // 只有当短信通知或服务号通知任一被授权时,才添加到发送列表
+                            if (messageFlag || serviceNumberFlag) {
+                                // 获取被分享者的微信关系信息
+                                UserInfo sharedUserInfo = userService.queryById(share.getSharedUserId());
+                                if (sharedUserInfo != null) {
+                                    msgUserShared.setUnionId(sharedUserInfo.getUnionId());
+                                    WxRelation sharedWxRelation = wxRelationService.queryOneByUnionId(sharedUserInfo.getUnionId());
+                                    if (sharedWxRelation != null) {
+                                        msgUserShared.setFwhOpenId(sharedWxRelation.getFwhOpenId());
+                                    }
+                                    sendList.add(msgUserShared);
+                                    log.info("被分享者已添加到发送列表: userId={}, messageFlag={}, serviceNumberFlag={}",
+                                            share.getSharedUserId(), messageFlag, serviceNumberFlag);
+                                }
+                            } else {
+                                log.info("被分享者拒绝所有通知: userId={}, messageFlag={}, serviceNumberFlag={}",
+                                        share.getSharedUserId(), messageFlag, serviceNumberFlag);
+                            }
+                        }
                     }
                 }
             }
@@ -273,27 +312,36 @@ public class MqttSubHandle {
                 }
             }
 
-//            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--开始处理用户通知: userId={}, messageFlag={}, serviceNumberFlag={}",
+                            sendDto.getUserId(), sendDto.isMessageFlag(), sendDto.isServiceNumberFlag());
+
+                    // 根据短信标志位决定是否发送短信
+                    if (sendDto.isMessageFlag()) {
+                        log.info("mqttutil--开始发送跌倒短信: phone={}, dev_name={}", sendDto.getPhone(), devName.toString());
+                        msgClient.sendNotifyMsg(sendDto.getPhone(), devName.toString());
+                        log.info("mqttUtil--短信发送完成");
+                    } else {
+                        log.info("用户拒绝短信通知: userId={}", sendDto.getUserId());
+                    }
+
+                    // 根据服务号标志位决定是否发送微信公众号消息
+                    if (sendDto.isServiceNumberFlag() && StringUtils.isNotBlank(sendDto.getFwhOpenId())) {
+                        log.info("发送微信公众号信息:devName={}, phoneNo={}, fwhOpenId={}",
+                                devName.toString(), sendDto.getPhone(), sendDto.getFwhOpenId());
+                        // 发送微信公众号消息
+                        wxOfficeAccountClient.sendMsg(devId, devName.toString(), sendDto.getPhone(),
+                                sendDto.getFwhOpenId(), "设备检测到跌倒,请前往小程序查看详细信息");
+                        log.info("微信公众号消息发送完成");
+                    } else {
+                        log.info("用户拒绝服务号通知或未绑定微信: userId={}, serviceNumberFlag={}, fwhOpenId={}",
+                                sendDto.getUserId(), sendDto.isServiceNumberFlag(), sendDto.getFwhOpenId());
+                    }
+                }
+            } else {
+                log.info("没有需要发送通知的用户");
+            }
         }
     }