|
@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
|
|
|
+import java.util.Date;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
@@ -12,6 +13,7 @@ import com.care.bms.service.BmsEventOrderService;
|
|
import com.care.common.entity.CareDevice;
|
|
import com.care.common.entity.CareDevice;
|
|
import com.care.common.entity.CareEventOrder;
|
|
import com.care.common.entity.CareEventOrder;
|
|
import com.care.common.entity.CareHouse;
|
|
import com.care.common.entity.CareHouse;
|
|
|
|
+import com.care.common.entity.CareMqttMsg;
|
|
import com.care.common.enums.OrderStatusEnum;
|
|
import com.care.common.enums.OrderStatusEnum;
|
|
import com.care.common.enums.OrderTypeEnum;
|
|
import com.care.common.enums.OrderTypeEnum;
|
|
import com.care.common.service.*;
|
|
import com.care.common.service.*;
|
|
@@ -24,12 +26,30 @@ import org.eclipse.paho.client.mqttv3.MqttMessage;
|
|
* 订阅信息监听类
|
|
* 订阅信息监听类
|
|
*/
|
|
*/
|
|
public class MqttMessageListener implements IMqttMessageListener {
|
|
public class MqttMessageListener implements IMqttMessageListener {
|
|
|
|
+ private Map<String,Thread> threadMap;
|
|
private CareDeviceService careDeviceService;
|
|
private CareDeviceService careDeviceService;
|
|
private BmsEventOrderService bmsEventOrderService;
|
|
private BmsEventOrderService bmsEventOrderService;
|
|
private CareEventOrderService careEventOrderService;
|
|
private CareEventOrderService careEventOrderService;
|
|
private CareHouseService careHouseService;
|
|
private CareHouseService careHouseService;
|
|
private CareOrganizationService careOrganizationService;
|
|
private CareOrganizationService careOrganizationService;
|
|
private CareStationService careStationService;
|
|
private CareStationService careStationService;
|
|
|
|
+ private CareMqttMsgService careMqttMsgService;
|
|
|
|
+
|
|
|
|
+ public Map<String, Thread> getThreadMap() {
|
|
|
|
+ return threadMap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void setThreadMap(Map<String, Thread> threadMap) {
|
|
|
|
+ this.threadMap = threadMap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public CareMqttMsgService getCareMqttMsgService() {
|
|
|
|
+ return careMqttMsgService;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void setCareMqttMsgService(CareMqttMsgService careMqttMsgService) {
|
|
|
|
+ this.careMqttMsgService = careMqttMsgService;
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
public CareOrganizationService getCareOrganizationService() {
|
|
public CareOrganizationService getCareOrganizationService() {
|
|
@@ -85,29 +105,34 @@ public class MqttMessageListener implements IMqttMessageListener {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
|
|
public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
|
|
-
|
|
|
|
|
|
+ try {
|
|
// System.out.println(mqttMessage.getId());
|
|
// System.out.println(mqttMessage.getId());
|
|
// System.out.println(mqttMessage.getPayload());
|
|
// System.out.println(mqttMessage.getPayload());
|
|
// System.out.println(mqttMessage.getQos());
|
|
// System.out.println(mqttMessage.getQos());
|
|
// System.out.println(mqttMessage.isRetained());
|
|
// System.out.println(mqttMessage.isRetained());
|
|
// System.out.println(mqttMessage.isDuplicate());
|
|
// System.out.println(mqttMessage.isDuplicate());
|
|
|
|
|
|
- String mqttMessageStr = mqttMessage.toString();
|
|
|
|
- System.out.println("mqttMessageStr == " + mqttMessageStr);
|
|
|
|
- if(mqttMessageStr == null || !mqttMessageStr.startsWith("{")){
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- QueryWrapper<CareDevice> queryWrapper = new QueryWrapper<>();
|
|
|
|
- queryWrapper.lambda().eq(CareDevice::getTopic,topic);
|
|
|
|
- if(careDeviceService == null){
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- CareDevice careDevice = careDeviceService.getOne(queryWrapper);
|
|
|
|
- if(careDevice == null) {
|
|
|
|
- System.out.println("数据库中没找到对应设备");
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- try {
|
|
|
|
|
|
+ String mqttMessageStr = mqttMessage.toString();
|
|
|
|
+ System.out.println("mqttMessageStr == " + mqttMessageStr);
|
|
|
|
+ if(mqttMessageStr == null || !mqttMessageStr.startsWith("{")){
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ QueryWrapper<CareDevice> queryWrapper = new QueryWrapper<>();
|
|
|
|
+ queryWrapper.lambda().eq(CareDevice::getTopic,topic);
|
|
|
|
+ CareDevice careDevice = careDeviceService.getOne(queryWrapper);
|
|
|
|
+ if(careDevice != null) {
|
|
|
|
+ CareMqttMsg careMqttMsg = new CareMqttMsg();
|
|
|
|
+ careMqttMsg.setMqttMessage(mqttMessageStr);
|
|
|
|
+ careMqttMsg.setTopic(topic);
|
|
|
|
+ careMqttMsg.setDevId(careDevice.getId());
|
|
|
|
+ careMqttMsg.setCreateTime(new Date());
|
|
|
|
+ this.careMqttMsgService.save(careMqttMsg);
|
|
|
|
+ } else {
|
|
|
|
+ System.out.println("数据库中没找到对应设备");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
Map map = JSON.parseObject(mqttMessageStr);
|
|
Map map = JSON.parseObject(mqttMessageStr);
|
|
String type = (String) map.get("type");
|
|
String type = (String) map.get("type");
|
|
if ("BreathHeartRate".equals(type)) {
|
|
if ("BreathHeartRate".equals(type)) {
|
|
@@ -117,10 +142,43 @@ public class MqttMessageListener implements IMqttMessageListener {
|
|
careDevice.setBreathRate(breath);
|
|
careDevice.setBreathRate(breath);
|
|
careDevice.setHeartRate(heart);
|
|
careDevice.setHeartRate(heart);
|
|
careDeviceService.updateById(careDevice);
|
|
careDeviceService.updateById(careDevice);
|
|
- } else if ("FallDown".equals(type)) {
|
|
|
|
- saveOrder(careDevice, OrderTypeEnum.DI_EDAO.getValue());
|
|
|
|
- } else if ("StayTooLong".equals(type)) {
|
|
|
|
- saveOrder(careDevice, OrderTypeEnum.JIU_ZHI.getValue());
|
|
|
|
|
|
+ } else if ("FallDown".equals(type)) { //跌到
|
|
|
|
+ Integer fallResponseTime = careDevice.getFallResponseTime();
|
|
|
|
+ MyThread myThread = new MyThread();
|
|
|
|
+ myThread.setCareDevice(careDevice);
|
|
|
|
+ myThread.setOrderType(OrderTypeEnum.DI_EDAO.getValue());
|
|
|
|
+ myThread.setSleepTime(fallResponseTime);
|
|
|
|
+ myThread.setDate(DateUtil.date());
|
|
|
|
+ threadMap.put("FallDown-" + System.currentTimeMillis(),myThread);
|
|
|
|
+ myThread.start();
|
|
|
|
+
|
|
|
|
+ } else if ("StayTooLong".equals(type)) { //久滞
|
|
|
|
+ Integer longlagResponseTime = careDevice.getLonglagResponseTime();
|
|
|
|
+ MyThread myThread = new MyThread();
|
|
|
|
+ myThread.setCareDevice(careDevice);
|
|
|
|
+ myThread.setOrderType(OrderTypeEnum.JIU_ZHI.getValue());
|
|
|
|
+ myThread.setSleepTime(longlagResponseTime);
|
|
|
|
+ myThread.setDate(DateUtil.date());
|
|
|
|
+ threadMap.put("StayTooLong-" + System.currentTimeMillis(),myThread);
|
|
|
|
+ myThread.start();
|
|
|
|
+ } else if ("quxiao".equals(type)) { //取消
|
|
|
|
+ if ("FallDown".equals("FallDown")) { //跌到类型 todo
|
|
|
|
+ threadMap.forEach((key,value) -> {
|
|
|
|
+ if(key.startsWith("FallDown")) {
|
|
|
|
+ if(!value.isInterrupted()){
|
|
|
|
+ value.interrupt();//停止线程
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ } else if("StayTooLong".equals("StayTooLong")) {//久滞 todo
|
|
|
|
+ threadMap.forEach((key,value) -> {
|
|
|
|
+ if(key.startsWith("StayTooLong")) {
|
|
|
|
+ if(!value.isInterrupted()){
|
|
|
|
+ value.interrupt();//停止线程
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
}
|
|
}
|
|
} catch (Exception e){
|
|
} catch (Exception e){
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
@@ -128,8 +186,7 @@ public class MqttMessageListener implements IMqttMessageListener {
|
|
System.out.println(topic);
|
|
System.out.println(topic);
|
|
}
|
|
}
|
|
|
|
|
|
- private void saveOrder(CareDevice careDevice,String orderType ){
|
|
|
|
-
|
|
|
|
|
|
+ private void saveOrder(CareDevice careDevice,String orderType,Date date){
|
|
CareHouse careHouse = careHouseService.getById(careDevice.getHouseId());
|
|
CareHouse careHouse = careHouseService.getById(careDevice.getHouseId());
|
|
|
|
|
|
CareEventOrder order = new CareEventOrder();
|
|
CareEventOrder order = new CareEventOrder();
|
|
@@ -145,10 +202,63 @@ public class MqttMessageListener implements IMqttMessageListener {
|
|
order.setTitle(careHouse.getAddr());
|
|
order.setTitle(careHouse.getAddr());
|
|
order.setOrderType(orderType);
|
|
order.setOrderType(orderType);
|
|
order.setStatus(OrderStatusEnum.TODO.getValue());
|
|
order.setStatus(OrderStatusEnum.TODO.getValue());
|
|
- order.setCreateTime(DateUtil.date());
|
|
|
|
- order.setModifyTime(DateUtil.date());
|
|
|
|
|
|
+ order.setCreateTime(date);
|
|
|
|
+ order.setModifyTime(date);
|
|
careEventOrderService.saveOrder(order);
|
|
careEventOrderService.saveOrder(order);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ class MyThread extends Thread {
|
|
|
|
+ private CareDevice careDevice;
|
|
|
|
+ private String orderType;
|
|
|
|
+ private Integer sleepTime; //分钟
|
|
|
|
+ private Date date;
|
|
|
|
+
|
|
|
|
+ public Date getDate() {
|
|
|
|
+ return date;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void setDate(Date date) {
|
|
|
|
+ this.date = date;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public CareDevice getCareDevice() {
|
|
|
|
+ return careDevice;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void setCareDevice(CareDevice careDevice) {
|
|
|
|
+ this.careDevice = careDevice;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getOrderType() {
|
|
|
|
+ return orderType;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void setOrderType(String orderType) {
|
|
|
|
+ this.orderType = orderType;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public Integer getSleepTime() {
|
|
|
|
+ return sleepTime;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void setSleepTime(Integer sleepTime) {
|
|
|
|
+ this.sleepTime = sleepTime;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void run(){
|
|
|
|
+ try {
|
|
|
|
+ if(sleepTime != null && sleepTime > 0){
|
|
|
|
+ Thread.sleep(sleepTime * 60 * 1000);
|
|
|
|
+ }
|
|
|
|
+ saveOrder(careDevice,orderType,date);
|
|
|
|
+ } catch (Exception e){
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|