瀏覽代碼

第二版

suntianwu 3 年之前
父節點
當前提交
2773e8d1a0

+ 1 - 1
src/main/java/com/care/bms/mqtt/MqttDataConnector.java

@@ -202,7 +202,7 @@ public class MqttDataConnector {
 
             xbMqttDataConnector.createIotDataSource(configParams);
             MqttMessageListener mqttMessageListener=new MqttMessageListener();
-            xbMqttDataConnector.setReSubscribe("5JPD/monitor/a1/event", new MqttMessageListener());
+            xbMqttDataConnector.setReSubscribe("5JPD/monitor/a1/event", mqttMessageListener);
 
             while (true){
                 xbMqttDataConnector.publish("5JPD/monitor/a1/event","{\n" +

+ 3 - 1
src/main/java/com/care/bms/mqtt/MqttInit.java

@@ -32,13 +32,15 @@ public class MqttInit implements CommandLineRunner {
     private CareOrganizationService careOrganizationService;
     @Autowired
     private CareStationService careStationService;
+    @Autowired
+    private CareMqttMsgService careMqttMsgService;
 
     @Override
     public void run(String... args) throws Exception {
         String mqttOn = CommonConfUtil.getConf("mqtt.on");
         if ("1".equals(mqttOn)){
             logger.info("初始化MQTTstart ...........................");
-            MqttTool.init(careDeviceService,bmsEventOrderService,careEventOrderService,careHouseService,careOrganizationService,careStationService);
+            MqttTool.init(careDeviceService,bmsEventOrderService,careEventOrderService,careHouseService,careOrganizationService,careStationService,careMqttMsgService);
             logger.info("初始化MQTTend ...........................");
         }
     }

+ 135 - 25
src/main/java/com/care/bms/mqtt/MqttMessageListener.java

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
 
 import com.alibaba.fastjson.JSON;
 
+import java.util.Date;
 import java.util.Map;
 
 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.CareEventOrder;
 import com.care.common.entity.CareHouse;
+import com.care.common.entity.CareMqttMsg;
 import com.care.common.enums.OrderStatusEnum;
 import com.care.common.enums.OrderTypeEnum;
 import com.care.common.service.*;
@@ -24,12 +26,30 @@ import org.eclipse.paho.client.mqttv3.MqttMessage;
  * 订阅信息监听类
  */
 public class MqttMessageListener implements IMqttMessageListener {
+    private Map<String,Thread> threadMap;
     private CareDeviceService careDeviceService;
     private BmsEventOrderService bmsEventOrderService;
     private CareEventOrderService careEventOrderService;
     private CareHouseService careHouseService;
     private CareOrganizationService careOrganizationService;
     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() {
@@ -85,29 +105,34 @@ public class MqttMessageListener implements IMqttMessageListener {
 
     @Override
     public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
-
+        try {
 //        System.out.println(mqttMessage.getId());
 //        System.out.println(mqttMessage.getPayload());
 //        System.out.println(mqttMessage.getQos());
 //        System.out.println(mqttMessage.isRetained());
 //        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);
             String type = (String) map.get("type");
             if ("BreathHeartRate".equals(type)) {
@@ -117,10 +142,43 @@ public class MqttMessageListener implements IMqttMessageListener {
                 careDevice.setBreathRate(breath);
                 careDevice.setHeartRate(heart);
                 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){
             e.printStackTrace();
@@ -128,8 +186,7 @@ public class MqttMessageListener implements IMqttMessageListener {
         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());
 
         CareEventOrder order = new CareEventOrder();
@@ -145,10 +202,63 @@ public class MqttMessageListener implements IMqttMessageListener {
         order.setTitle(careHouse.getAddr());
         order.setOrderType(orderType);
         order.setStatus(OrderStatusEnum.TODO.getValue());
-        order.setCreateTime(DateUtil.date());
-        order.setModifyTime(DateUtil.date());
+        order.setCreateTime(date);
+        order.setModifyTime(date);
         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();
+            }
+
+        }
+    }
+
 }

+ 15 - 6
src/main/java/com/care/bms/mqtt/MqttTool.java

@@ -1,7 +1,9 @@
 package com.care.bms.mqtt;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.care.bms.service.BmsEventOrderService;
 import com.care.common.entity.CareDevice;
+import com.care.common.enums.DeviceActiveStatusEnum;
 import com.care.common.service.*;
 import com.care.common.util.CommonConfUtil;
 import org.springframework.util.StringUtils;
@@ -17,10 +19,13 @@ public class MqttTool {
                             CareEventOrderService careEventOrderService,
                             CareHouseService careHouseService,
                             CareOrganizationService careOrganizationService,
-                            CareStationService careStationService) {
-        List<CareDevice> listCareDevice = careDeviceService.list();
+                            CareStationService careStationService,
+                            CareMqttMsgService careMqttMsgService) {
+        QueryWrapper<CareDevice> queryWrapper = new QueryWrapper();
+        queryWrapper.lambda().eq(CareDevice::getActiveStatus, DeviceActiveStatusEnum.ACTIVE.getValue());
+        List<CareDevice> listCareDevice = careDeviceService.list(queryWrapper);
         for (CareDevice careDevice : listCareDevice) {
-            addOne(careDevice,careDeviceService,bmsEventOrderService,careEventOrderService,careHouseService,careOrganizationService,careStationService);
+            addOne(careDevice,careDeviceService,bmsEventOrderService,careEventOrderService,careHouseService,careOrganizationService,careStationService,careMqttMsgService);
         }
     }
 
@@ -38,12 +43,13 @@ public class MqttTool {
                               CareEventOrderService careEventOrderService,
                               CareHouseService careHouseService,
                               CareOrganizationService careOrganizationService,
-                              CareStationService careStationService) {
+                              CareStationService careStationService,
+                              CareMqttMsgService careMqttMsgService) {
         mqttDataConnectorMap.forEach((key, value) -> {
             value.destroy();
             mqttDataConnectorMap.remove(key);
         });
-        init(careDeviceService,bmsEventOrderService,careEventOrderService,careHouseService,careOrganizationService,careStationService);
+        init(careDeviceService,bmsEventOrderService,careEventOrderService,careHouseService,careOrganizationService,careStationService,careMqttMsgService);
     }
 
     /**
@@ -61,7 +67,8 @@ public class MqttTool {
                               CareEventOrderService careEventOrderService,
                               CareHouseService careHouseService,
                               CareOrganizationService careOrganizationService,
-                              CareStationService careStationService) {
+                              CareStationService careStationService,
+                              CareMqttMsgService careMqttMsgService) {
         if (StringUtils.isEmpty(careDevice.getTopic()) || StringUtils.isEmpty(careDevice.getClientId())) {
             return;
         }
@@ -85,6 +92,8 @@ public class MqttTool {
             mqttMessageListener.setCareHouseService(careHouseService);
             mqttMessageListener.setCareOrganizationService(careOrganizationService);
             mqttMessageListener.setCareStationService(careStationService);
+            mqttMessageListener.setCareMqttMsgService(careMqttMsgService);
+            mqttMessageListener.setThreadMap(new HashMap<>());
 
             xbMqttDataConnector.setReSubscribe(topic, mqttMessageListener);
             mqttDataConnectorMap.put(cliendId, xbMqttDataConnector);

+ 2 - 0
src/main/java/com/care/bms/service/BmsSysUserService.java

@@ -65,6 +65,8 @@ public class BmsSysUserService{
             userLogindConvertVO = new UserLogindConvertVO();
             BeanUtil.copyProperties(user,userLogindConvertVO);
             userLogindConvertVO.setOrgName(org.getName());
+            userLogindConvertVO.setSystemName(org.getSystemName());
+            userLogindConvertVO.setLogo(org.getLogo());
             String md5Password = DigestUtils.md5Hex(password);
             if (!md5Password.equalsIgnoreCase(user.getPassword())) {
                 throw new BDException("用户名或密码错误");

+ 54 - 0
src/main/java/com/care/common/entity/CareMqttMsg.java

@@ -0,0 +1,54 @@
+package com.care.common.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * mqtt消息(CareMqttMsg)实体类
+ *
+ * @author makejava
+ * @since 2021-06-02 22:00:37
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("care_mqtt_msg")
+@ApiModel(value = "mqtt消息", description = "")
+public class CareMqttMsg implements Serializable {
+    private static final long serialVersionUID = -60036036914347085L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("mqtt消息")
+    @TableField("MQTT_MESSAGE")
+    private String mqttMessage;
+
+
+    @ApiModelProperty("topic")
+    @TableField("TOPIC")
+    private String topic;
+
+
+    @ApiModelProperty("设备ID")
+    @TableField("DEV_ID")
+    private Long devId;
+
+
+    @ApiModelProperty("createTime")
+    @TableField("CREATE_TIME")
+    private Date createTime;
+
+}

+ 8 - 0
src/main/java/com/care/common/entity/CareOrganization.java

@@ -61,6 +61,14 @@ public class CareOrganization implements Serializable {
     @TableField("LATITUDE")
     private Double latitude;
 
+    @ApiModelProperty("系统名称")
+    @TableField("SYSTEM_NAME")
+    private String systemName;
+
+    @ApiModelProperty("log")
+    @TableField("LOGO")
+    private String logo;
+
 
     @ApiModelProperty("createTime")
     @TableField("CREATE_TIME")

+ 15 - 0
src/main/java/com/care/common/mapper/CareMqttMsgMapper.java

@@ -0,0 +1,15 @@
+package com.care.common.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.care.common.entity.CareMqttMsg;
+
+
+/**
+ * mqtt消息表(CareMqttMsg)表数据库访问层
+ *
+ * @author makejava
+ * @since 2021-05-21 00:08:32
+ */
+public interface CareMqttMsgMapper extends BaseMapper<CareMqttMsg> {
+
+}

+ 15 - 0
src/main/java/com/care/common/service/CareMqttMsgService.java

@@ -0,0 +1,15 @@
+package com.care.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.care.common.entity.CareMqttMsg;
+
+
+/**
+ * Mqtt消息表(CareMqttMsg)表服务接口
+ *
+ * @author makejava
+ * @since 2021-05-21 00:08:32
+ */
+public interface CareMqttMsgService extends IService<CareMqttMsg> {
+
+}

+ 7 - 7
src/main/java/com/care/common/service/impl/CareEventOrderServiceImpl.java

@@ -105,7 +105,7 @@ public class CareEventOrderServiceImpl extends ServiceImpl<CareEventOrderMapper,
                 his.setLogResult("发生"+OrderTypeEnum.getCodeToName(order.getOrderType()));
                 his.setRelationTypeDesc(RelationTypeEnum.HOUSE.getName());
             }
-            his.setCreateTime(DateUtil.date());
+            his.setCreateTime(order.getCreateTime());
             this.careEventOrderHandleHisService.save(his);
             //通知页面
             bigScreenService.pushRtEventFlag2();
@@ -129,7 +129,7 @@ public class CareEventOrderServiceImpl extends ServiceImpl<CareEventOrderMapper,
                 his.setLogResult("发生"+OrderTypeEnum.getCodeToName(order.getOrderType()));
                 his.setRelationTypeDesc(RelationTypeEnum.HOUSE.getName());
             }
-            his.setCreateTime(DateUtil.date());
+            his.setCreateTime(order.getCreateTime());
 
             addOlderToOrderOlder(order);
             addChamberlainToOrder(order);
@@ -187,7 +187,7 @@ public class CareEventOrderServiceImpl extends ServiceImpl<CareEventOrderMapper,
                     ceoo.setIsZhudong(0);
                 }
                 ceoo.setStatus(OrderOlderStatusEnum.WEI_LIAN_XI.getValue());
-                ceoo.setCreateTime(DateUtil.date());
+                ceoo.setCreateTime(order.getCreateTime());
                 ceoos.add(ceoo);
             });
             this.careEventOrderOlderService.saveBatch(ceoos);
@@ -212,8 +212,8 @@ public class CareEventOrderServiceImpl extends ServiceImpl<CareEventOrderMapper,
                 chamb.setPhone(user.getPhone());
                 chamb.setStatus(ChambOrderStatusEnum.TODO.getValue());
                 chamb.setHouseId(dev.getHouseId());
-                chamb.setCreateTime(DateUtil.date());
-                chamb.setModifyTime(DateUtil.date());
+                chamb.setCreateTime(order.getCreateTime());
+                chamb.setModifyTime(order.getCreateTime());
                 this.careEventOrderChambService.save(chamb);
             }
         }
@@ -242,8 +242,8 @@ public class CareEventOrderServiceImpl extends ServiceImpl<CareEventOrderMapper,
                 orderContactStatus.setLatitude(item.getLatitude());
                 orderContactStatus.setRelationTypeDesc(RelationTypeEnum.getCodeToName(item.getRelationType()));
                 orderContactStatus.setContactLevel(item.getContactLevel());
-                orderContactStatus.setCreateTime(DateUtil.date());
-                orderContactStatus.setModifyTime(DateUtil.date());
+                orderContactStatus.setCreateTime(order.getCreateTime());
+                orderContactStatus.setModifyTime(order.getCreateTime());
                 orderContactList.add(orderContactStatus);
             });
             this.careEventOrderContactStatusService.saveBatch(orderContactList);

+ 18 - 0
src/main/java/com/care/common/service/impl/CareMqttMsgServiceImpl.java

@@ -0,0 +1,18 @@
+package com.care.common.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.care.common.entity.CareMqttMsg;
+import com.care.common.mapper.CareMqttMsgMapper;
+import com.care.common.service.CareMqttMsgService;
+import org.springframework.stereotype.Service;
+
+/**
+ * mqtt消息表(CareMqttMsg)表服务实现类
+ *
+ * @author makejava
+ * @since 2021-05-21 00:08:33
+ */
+@Service
+public class CareMqttMsgServiceImpl extends ServiceImpl<CareMqttMsgMapper, CareMqttMsg> implements CareMqttMsgService {
+
+}

+ 4 - 0
src/main/java/com/care/common/vo/UserLogindConvertVO.java

@@ -55,5 +55,9 @@ public class UserLogindConvertVO {
     @ApiModelProperty("1:坐席 2:管家")
     private String role;
 
+    @ApiModelProperty("logo")
+    private String logo;
 
+    @ApiModelProperty("系统名称")
+    private String systemName;
 }

+ 48 - 0
src/main/java/com/care/common/vo/device/MqttMsgVO.java

@@ -0,0 +1,48 @@
+package com.care.common.vo.device;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * mqtt消息(CareMqttMsg)实体类
+ *
+ * @author makejava
+ * @since 2021-06-02 22:00:37
+ */
+
+@Data
+@ApiModel(value = "mqtt消息", description = "")
+public class MqttMsgVO implements Serializable {
+    private static final long serialVersionUID = -60036036914347085L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("mqtt消息")
+    private String mqttMessage;
+
+
+    @ApiModelProperty("topic")
+    private String topic;
+
+
+    @ApiModelProperty("设备ID")
+    private Long devId;
+
+    @ApiModelProperty("createTime")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date createTime;
+
+}

+ 5 - 0
src/main/resources/mybatis/CareHouseContactRelMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.care.common.mapper.CareHouseContactRelMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mybatis/CareHouseOlderRelMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.care.common.mapper.CareHouseOlderRelMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mybatis/CareMqttMsgMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.care.common.mapper.CareMqttMsgMapper">
+
+</mapper>