From 50718b289ef39ef027c4959cc835679ebadd84bb Mon Sep 17 00:00:00 2001 From: aijinhui <aijinhui> Date: 星期五, 10 十一月 2023 17:32:05 +0800 Subject: [PATCH] 车辆电磁锁订阅 --- ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarRtuService.java | 3 ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarRtu.java | 4 ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java | 27 ++++++++ ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarRtuServiceImpl.java | 12 +++ ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java | 3 - ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java | 98 ++++++++++++++++++++++++++++++++ 6 files changed, 138 insertions(+), 9 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarRtu.java b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarRtu.java index b02fa9b..7487879 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarRtu.java +++ b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarRtu.java @@ -10,6 +10,6 @@ public class ArdSyCarRtu { private String id; private String carId; - private String topicSubscribe; - private String topicPublish; + private String topicSubscribe; //璁㈤槄 + private String topicPublish; //鍙戝竷 } diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarRtuService.java b/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarRtuService.java index 0fd028f..6b7f196 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarRtuService.java +++ b/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarRtuService.java @@ -9,7 +9,8 @@ */ public interface ArdSyCarRtuService { - List<ArdSyCarRtu> allCarTopic(); + String[] allCarTopic(); + List<ArdSyCarRtu> allCarTopicList(); ArdSyCarRtu one(String carId); diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarRtuServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarRtuServiceImpl.java index 8f94e14..025ca99 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarRtuServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarRtuServiceImpl.java @@ -22,7 +22,17 @@ private ArdSyCarRtuMapper ardSyCarRtuMapper; @Override - public List<ArdSyCarRtu> allCarTopic() { + public String[] allCarTopic() { + List<ArdSyCarRtu> carRtus = ardSyCarRtuMapper.selectList(null); + List<String> list = new ArrayList<>(); + for (int i = 0; i < carRtus.size(); i++) { + list.add(carRtus.get(i).getTopicPublish()); + } + return list.toArray(new String[list.size()]); + } + + @Override + public List<ArdSyCarRtu> allCarTopicList() { return ardSyCarRtuMapper.selectList(null); } diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java index f25b749..29965fa 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java +++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java @@ -91,9 +91,6 @@ ArdRadarService ardRadarService = SpringUtils.getBean(ArdRadarService.class); ardRadarService.forceGuide(new String(message.getPayload(), StandardCharsets.UTF_8)); } - if(topic.contains("/p")){ - System.out.println("杞﹁締閿佷俊鎭細"+new String(message.getPayload(), StandardCharsets.UTF_8)); - } } catch (Exception e) { log.debug("澶勭悊mqtt娑堟伅寮傚父:" + e); } diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java index b07a18b..3b88ad2 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java +++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java @@ -5,6 +5,8 @@ import com.ruoyi.sy.service.ArdSyCarRtuService; import com.ruoyi.system.service.ISysConfigService; import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.*; +import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @@ -31,10 +33,31 @@ public void init() { //鑾峰彇鐢电閿佸湴鍧� String mqttUrl = sysConfigService.selectConfigByKey("ElectromagneticLockUrl"); - List<ArdSyCarRtu> rtus = ardSyCarRtuService.allCarTopic(); + List<ArdSyCarRtu> rtus = ardSyCarRtuService.allCarTopicList(); for (int i = 0; i < rtus.size(); i++) { ArdSyCarRtu rtu = rtus.get(i); - String publish = rtu.getTopicPublish(); + String carId = rtu.getCarId(); + String subscribe = rtu.getTopicSubscribe(); + try { + MqttClient client = new MqttClient(mqttUrl,carId); +// log.debug("--鍒涘缓"+carId+"鍙疯溅杈嗙數瀛愰攣mqtt瀹㈡埛绔�"); + MqttConnectOptions options = new MqttConnectOptions(); + //璁剧疆鐢ㄦ埛鍚嶅瘑鐮� + options.setUserName("admin"); + options.setPassword("xzx12345".toCharArray()); + // 璁剧疆瓒呮椂鏃堕棿 + options.setConnectionTimeout(100); + // 璁剧疆浼氳瘽蹇冭烦鏃堕棿 + options.setKeepAliveInterval(60); + // 鏄惁娓呴櫎session + options.setCleanSession(true); +// log.debug("--鐢熸垚"+carId+"鍙疯溅杈嗙數瀛愰攣mqtt閰嶇疆瀵硅薄"); + client.setCallback(new MqttOnceCallback(client,options,subscribe,2)); +// log.debug("--娣诲姞杞﹁締鐢电閿佸洖璋冨鐞嗙被"); + client.connect(options); + }catch (Exception e) { + e.printStackTrace(); + } } // MqttConsumer mqttConsumer = new MqttConsumer(); // for (int i = 0; i < topic.length; i++) { diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java new file mode 100644 index 0000000..32dc146 --- /dev/null +++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java @@ -0,0 +1,98 @@ +package com.ruoyi.utils.mqtt; + +import com.ruoyi.alarm.global.service.impl.GlobalAlarmServiceImpl; +import com.ruoyi.alarm.radar.service.ArdRadarService; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.statistical.service.StatisticalService; +import com.ruoyi.storage.minio.service.IStorageMinioEventService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.*; + +import java.nio.charset.StandardCharsets; +import java.util.Arrays; + +/** + * @Description: mqtt鍥炶皟澶勭悊绫� + * @ClassName: MqttConsumerCallback + * @Author: 鍒樿嫃涔� + * @Date: 2023骞�05鏈�29鏃�9:55 + * @Version: 1.0 + **/ +@Slf4j(topic = "mqtt") +public class MqttOnceCallback implements MqttCallbackExtended { + + private MqttClient client; + private MqttConnectOptions options; + private String topic; + private int qos; + + public MqttOnceCallback(MqttClient client, MqttConnectOptions options, String topic, int qos) { + this.client = client; + this.options = options; + this.topic = topic; + this.qos = qos; + } + + /** + * 鏂紑閲嶈繛 + */ + @Override + public void connectionLost(Throwable cause) { +// log.info("杞﹁締鐢电閿丮QTT杩炴帴鏂紑锛屽彂璧烽噸杩�......"); + while (!client.isConnected()) { + try { + Thread.sleep(10000); + if (null != client && !client.isConnected()) { + client.reconnect(); +// log.error("杞﹁締鐢电閿佸皾璇曢噸鏂拌繛鎺�"); + } else { + client.connect(options); +// log.error("杞﹁締鐢电閿佸皾璇曞缓绔嬫柊杩炴帴"); + } + } catch (Exception e) { +// log.error("杞﹁締鐢电閿佹柇寮�閲嶈繛寮傚父:" + e.getMessage()); + } + } + } + + /** + * 鎺ユ敹鍒版秷鎭皟鐢ㄤ护鐗屼腑璋冪敤 + */ + @Override + public void deliveryComplete(IMqttDeliveryToken token) { + //log.info("deliveryComplete---------" + Arrays.toString(topic)); + } + + /** + * 娑堟伅澶勭悊 + */ + @Override + public void messageArrived(String topic, MqttMessage message) { + try { + System.out.println("銆愯溅杈嗛攣涓婚銆戯細"+topic+"銆愯溅杈嗛攣淇℃伅銆戯細"+new String(message.getPayload(), StandardCharsets.UTF_8)); + } catch (Exception e) { + log.debug("杞﹁締鐢电閿佸鐞唌qtt娑堟伅寮傚父:" + e); + } + } + + /** + * mqtt杩炴帴鍚庤闃呬富棰� + */ + @Override + public void connectComplete(boolean b, String s) { + try { + if (null != topic) { + if (client.isConnected()) { + client.subscribe(topic, qos); +// log.info("杞﹁締鐢电閿乵qtt杩炴帴鎴愬姛" ); +// log.info("--杞﹁締鐢电閿佽闃呬富棰�:锛�" + topic); + } else { + log.info("杞﹁締鐢电閿乵qtt杩炴帴澶辫触"); + } + } + } catch (Exception e) { + log.info("杞﹁締鐢电閿乵qtt璁㈤槄涓婚寮傚父:" + e); + } + } +} + -- Gitblit v1.9.3