|
@@ -67,6 +67,9 @@ public class MqttSubHandle {
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private AdminUserService adminUserService;
|
|
private AdminUserService adminUserService;
|
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private DevShareService devShareService;
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* MQTT消息统一入口处理方法
|
|
* MQTT消息统一入口处理方法
|
|
|
*
|
|
*
|
|
@@ -129,15 +132,12 @@ public class MqttSubHandle {
|
|
|
JSONObject obj = JSONObject.parseObject(payload);
|
|
JSONObject obj = JSONObject.parseObject(payload);
|
|
|
String clientId = obj.getString("dev_id");
|
|
String clientId = obj.getString("dev_id");
|
|
|
String event = obj.getString("event");
|
|
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");
|
|
byte messageType = obj.getByteValue("message_type");
|
|
@@ -148,45 +148,29 @@ public class MqttSubHandle {
|
|
|
return;
|
|
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();
|
|
JSONObject msg = new JSONObject();
|
|
|
msg.put("target_points", targetPointArray);
|
|
msg.put("target_points", targetPointArray);
|
|
|
msg.put("x", x);
|
|
msg.put("x", x);
|
|
@@ -195,14 +179,12 @@ public class MqttSubHandle {
|
|
|
msg.put("clientId", clientId);
|
|
msg.put("clientId", clientId);
|
|
|
msg.put("event", event);
|
|
msg.put("event", event);
|
|
|
msg.put("msgType", "event");
|
|
msg.put("msgType", "event");
|
|
|
-
|
|
|
|
|
// 发送socket
|
|
// 发送socket
|
|
|
mqttClient.sendMessage(String.format("/mps/%s/event", clientId), msg.toString());
|
|
mqttClient.sendMessage(String.format("/mps/%s/event", clientId), msg.toString());
|
|
|
|
|
|
|
|
// 发送短信
|
|
// 发送短信
|
|
|
if (event.equals("fall_confirmed")) {
|
|
if (event.equals("fall_confirmed")) {
|
|
|
log.info("mqttutil--有跌倒事件");
|
|
log.info("mqttutil--有跌倒事件");
|
|
|
- List<Long> userIds = new ArrayList<>();
|
|
|
|
|
List<SendMsgUserDto> sendList = new ArrayList<>();
|
|
List<SendMsgUserDto> sendList = new ArrayList<>();
|
|
|
String devName = dev.getDevName();
|
|
String devName = dev.getDevName();
|
|
|
String devId = dev.getClientId();
|
|
String devId = dev.getClientId();
|
|
@@ -221,9 +203,31 @@ public class MqttSubHandle {
|
|
|
msgUserDto.setFwhOpenId(wxRelation.getFwhOpenId());
|
|
msgUserDto.setFwhOpenId(wxRelation.getFwhOpenId());
|
|
|
}
|
|
}
|
|
|
sendList.add(msgUserDto);
|
|
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 = "";
|
|
String tenantName = "";
|
|
@@ -262,34 +266,34 @@ public class MqttSubHandle {
|
|
|
|
|
|
|
|
// 判断当前用户是否登录网页
|
|
// 判断当前用户是否登录网页
|
|
|
if (redisUtil.sIsMember(RedisCacheConstant.MQTT_CLIENT_USERID, RedisCacheConstant.WEB_USER_PRE + adminUserInfo.getUserId())) {
|
|
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("发送微信公众号消息发完了");
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|