浏览代码

第二版,发布mqtt消息

suntianwu 3 年之前
父节点
当前提交
48fed892b2

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

@@ -33,7 +33,7 @@ public class MqttDataConnector {
         //密码
         String password = configParams.get("MQTT_PASSWORD");
         //ssl  验证时是双向验证还是单向验证
-        String sslType=configParams.get("MQTT_SSLTYPE");
+        String sslType = configParams.get("MQTT_SSLTYPE");
 
 
         //缓存两种模式 存在内存 文件  设置成null 缓存在内存中 最多缓存65535条信息
@@ -53,21 +53,21 @@ public class MqttDataConnector {
         // mqttConnectOptions.setWill("sec", "close".getBytes(), 2, true);
         if("two".equals(sslType)){
             //服务端证书路径
-            String rootCrtPath=configParams.get("MQTT_SSLROOT_CRTPATH");
+            String rootCrtPath = configParams.get("MQTT_SSLROOT_CRTPATH");
             //客户端证书路径
-            String clientCrtPath=configParams.get("MQTT_SSLCLIENT_CRTPATH");
+            String clientCrtPath = configParams.get("MQTT_SSLCLIENT_CRTPATH");
             //客户端密匙路径
-            String clientKeyPath=configParams.get("MQTT_SSLCLIENT_KEYPATH");
+            String clientKeyPath = configParams.get("MQTT_SSLCLIENT_KEYPATH");
             //密匙加密密码
-            String clientPassword=configParams.get("MQTT_SSLPASSWORD");
+            String clientPassword = configParams.get("MQTT_SSLPASSWORD");
             //ssl 协议版本 一般看mqtt服务端broker设置  不设置默认为TLSv1.1
-            String sslProtocol=configParams.get("MQTT_SSLPROTOCOL");
+            String sslProtocol = configParams.get("MQTT_SSLPROTOCOL");
             logger.info("sslProtocol======{}",sslProtocol);
             mqttConnectOptions.setSocketFactory(SslUtil.getSocketFactory(rootCrtPath, clientCrtPath, clientKeyPath, clientPassword,sslProtocol));
 
         }else if("one".equals(sslType)){
-            String rootCrtPath=configParams.get("MQTT_SSLROOT_CRTPATH");
-            String sslProtocol=configParams.get("MQTT_SSLPROTOCOL");
+            String rootCrtPath = configParams.get("MQTT_SSLROOT_CRTPATH");
+            String sslProtocol = configParams.get("MQTT_SSLPROTOCOL");
 
             mqttConnectOptions.setSocketFactory(SslUtil.getSocketFactorySingle(rootCrtPath,sslProtocol));
         }
@@ -146,7 +146,7 @@ public class MqttDataConnector {
      * @param data
      * @throws Exception
      */
-    public void publish( String publicLiveTopic, String data)   throws Exception{
+    public void publish(String publicLiveTopic, String data)   throws Exception{
         MqttMessage mqttMessage = new MqttMessage();
         mqttMessage.setPayload(data.getBytes("UTF-8"));
         //QoS:发布消息的服务质量,即:保证消息传递的次数(消费者收到的次数)

+ 10 - 10
src/main/java/com/care/common/entity/CareRoomRegion.java

@@ -53,28 +53,28 @@ public class CareRoomRegion implements Serializable {
 
 
     @ApiModelProperty("x轴位置(m)")
-    @TableField("POSITIONX")
-    private Double positionx;
+    @TableField("POSITION_X")
+    private Double positionX;
 
 
     @ApiModelProperty("y轴位置(m)")
-    @TableField("POSITIONY")
-    private Double positiony;
+    @TableField("POSITION_Y")
+    private Double positionY;
 
 
     @ApiModelProperty("x轴方向长度(m)")
-    @TableField("SCALEX")
-    private Double scalex;
+    @TableField("SCALE_X")
+    private Double scaleX;
 
 
     @ApiModelProperty("y轴方向长度(m)")
-    @TableField("SCALEY")
-    private Double scaley;
+    @TableField("SCALE_Y")
+    private Double scaleY;
 
 
     @ApiModelProperty("z轴方向长度(m)")
-    @TableField("SCALEZ")
-    private Double scalez;
+    @TableField("SCALE_Z")
+    private Double scaleZ;
 
 
     @ApiModelProperty("旋转角度")

+ 68 - 0
src/main/java/com/care/installation/service/MqttPublishService.java

@@ -0,0 +1,68 @@
+package com.care.installation.service;
+
+
+import com.care.bms.mqtt.MqttDataConnector;
+
+import com.care.common.entity.CareDevice;
+import com.care.common.util.CommonConfUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Author: stw
+ * @Date: 2021/8/14
+ * @Desc:
+ */
+@Service
+public class MqttPublishService {
+
+
+    /**
+     * 初始化mqtt
+     */
+    private MqttDataConnector init(String cliendId) {
+        try {
+            MqttDataConnector xbMqttDataConnector = new MqttDataConnector();
+            Map<String, String> configParams = new HashMap<>();
+            String host = "ws://" + CommonConfUtil.getConf("mqtt.broker") + ":" + CommonConfUtil.getConf("mqtt.port");
+            String username = CommonConfUtil.getConf("mqtt.username");
+            String password = CommonConfUtil.getConf("mqtt.password");
+            configParams.put("MQTT_HOST", host);
+            configParams.put("MQTT_CLIENTID", cliendId);
+            configParams.put("MQTT_USERNAME", username);
+            configParams.put("MQTT_PASSWORD", password);
+            xbMqttDataConnector.createIotDataSource(configParams);
+            return xbMqttDataConnector;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 发布消息
+     */
+    public boolean publish(CareDevice careDevice,String data) {
+        try {
+            String topic = careDevice.getTopic();
+            String cliendId = careDevice.getClientId();
+            if (StringUtils.isEmpty(topic) || StringUtils.isEmpty(cliendId)) {
+                return false;
+            }
+            String publishTopic = topic.replace("event","control");
+            MqttDataConnector mqttDataConnector = init(cliendId);
+            if(mqttDataConnector == null){
+                return false;
+            }
+            mqttDataConnector.publish(publishTopic, data);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+}

+ 109 - 6
src/main/java/com/care/installation/service/RoomService.java

@@ -6,14 +6,13 @@ import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.care.common.entity.*;
 import com.care.common.service.*;
+import com.care.common.util.JsonUtil;
 import com.care.installation.vo.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 @Slf4j
 @Service
@@ -28,8 +27,10 @@ public class RoomService {
     private CareRoomGateService careRoomGateService;
     @Resource
     private CareRoomRegionService careRoomRegionService;
-
-
+    @Resource
+    private CareDeviceService careDeviceService;
+    @Resource
+    private MqttPublishService mqttPublishService;
 
     public RoomVO getRoomInfo(String devCode) {
         QueryWrapper<CareRoom> queryWrapper = new QueryWrapper<>();
@@ -177,9 +178,111 @@ public class RoomService {
      * @return
      */
     public Boolean commitRoomInfo(DeviceRoomAllVO vo) {
+        try {
+            RoomVO roomVO = vo.getRoomVO();
+            RoomSensorVO roomSensorVO = vo.getRoomSensorVO();
+            List<RoomGateVO> roomGateVOList = vo.getRoomGateVOList();
+            List<RoomRegionVO> roomRegionVOList = vo.getRoomRegionVOList();
+            if (roomVO == null || roomSensorVO == null || CollUtil.isEmpty(roomGateVOList)) {
+                return false;
+            }
+
+            QueryWrapper<CareDevice> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(CareDevice::getDevCode, roomVO.getRoomId());
+            CareDevice careDevice = careDeviceService.getOne(queryWrapper);
+            if (careDevice == null) {
+                return false;
+            }
+            mqttPublishService.publish(careDevice, getRoomMqttData(roomVO));
+            mqttPublishService.publish(careDevice, getRoomSensorMqttData(roomSensorVO));
+            mqttPublishService.publish(careDevice, getRoomGateVOMqttData(roomGateVOList));
+            if (CollUtil.isNotEmpty(roomRegionVOList)){
+                mqttPublishService.publish(careDevice, getRoomRegionVOMqttData(roomRegionVOList));
+            }
+            //TODO 返回值
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
 
-        return true;
+    private String getRoomMqttData( RoomVO vo) throws Exception {
+        Map<String,Object> data = new HashMap<>();
+        data.put("type","RoomVO");
+        Map<String,Object> msg = new HashMap<>();
+        msg.put("roomId",vo.getRoomId());
+        msg.put("roomX",vo.getX());
+        msg.put("roomY",vo.getY());
+        msg.put("roomZ",vo.getZ());
+        data.put("msg",msg);
+        return JsonUtil.toJson(data);
+    }
+
+    private String getRoomSensorMqttData( RoomSensorVO vo) throws Exception {
+        Map<String,Object> data = new HashMap<>();
+        data.put("type","RoomDeviceVO");
+        Map<String,Object> msg = new HashMap<>();
+        msg.put("roomDeviceId",vo.getRoomId());
+        msg.put("roomId",vo.getRoomId());
+        msg.put("deviceX",vo.getX());
+        msg.put("deviceY",vo.getY());
+        msg.put("deviceZ",vo.getZ());
 
+        msg.put("deviceAtilt",0);
+        msg.put("deviceEtilt",90);
+        msg.put("deviceAtiltfov",60);
+        msg.put("deviceEtiltfov",60);
+        msg.put("deviceMount",0);
+        data.put("msg",msg);
+        return JsonUtil.toJson(data);
     }
 
+
+    private String getRoomGateVOMqttData(List<RoomGateVO> list) throws Exception {
+        Map<String,Object> data = new HashMap<>();
+        data.put("type","RoomEntrancesVO");
+        Map<String,Object> msg = new HashMap<>();
+        List<Map<String,Object>> items = new ArrayList<>();
+        list.forEach(roomGateVO ->{
+            Map<String,Object> item = new HashMap<>();
+            item.put("entranceId",roomGateVO.getGid());
+            item.put("roomId",roomGateVO.getRoomId());
+            item.put("entranceCode",roomGateVO.getGid());
+            item.put("entranceType",1);
+            item.put("direction",roomGateVO.getDirection());
+
+            item.put("entranceLength",roomGateVO.getLength());
+            item.put("width",roomGateVO.getWidth());
+            item.put("hight",roomGateVO.getHight());
+            items.add(item);
+        });
+        msg.put("roomEntranceVOS",items);
+        data.put("msg",msg);
+        return JsonUtil.toJson(data);
+    }
+
+    private String getRoomRegionVOMqttData(List<RoomRegionVO> list) throws Exception {
+        Map<String,Object> data = new HashMap<>();
+        data.put("type","RoomRegionsVO");
+        Map<String,Object> msg = new HashMap<>();
+        List<Map<String,Object>> items = new ArrayList<>();
+        list.forEach(roomRegionVO ->{
+            Map<String,Object> item = new HashMap<>();
+            item.put("regionId",roomRegionVO.getRid());
+            item.put("roomId",roomRegionVO.getRoomId());
+            item.put("regionCode",roomRegionVO.getRid());
+            item.put("regionType",roomRegionVO.getCls());
+            item.put("positionX",roomRegionVO.getPositionX());
+            item.put("positionY",roomRegionVO.getPositionY());
+            item.put("scaleX",roomRegionVO.getScaleX());
+            item.put("scaleY",roomRegionVO.getScaleY());
+            item.put("scaleZ",roomRegionVO.getScaleZ());
+            item.put("rotation",roomRegionVO.getRotation());
+            items.add(item);
+        });
+        msg.put("roomRegionVOS",items);
+        data.put("msg",msg);
+        return JsonUtil.toJson(data);
+    }
 }

+ 5 - 5
src/main/java/com/care/installation/vo/RoomRegionVO.java

@@ -38,23 +38,23 @@ public class RoomRegionVO implements Serializable {
 
 
     @ApiModelProperty("x轴位置(m)")
-    private Double positionx;
+    private Double positionX;
 
 
     @ApiModelProperty("y轴位置(m)")
-    private Double positiony;
+    private Double positionY;
 
 
     @ApiModelProperty("x轴方向长度(m)")
-    private Double scalex;
+    private Double scaleX;
 
 
     @ApiModelProperty("y轴方向长度(m)")
-    private Double scaley;
+    private Double scaleY;
 
 
     @ApiModelProperty("z轴方向长度(m)")
-    private Double scalez;
+    private Double scaleZ;
 
 
     @ApiModelProperty("旋转角度")