From c769c41184a000a34fbaae72572c2cd809427d54 Mon Sep 17 00:00:00 2001 From: weidong Date: Wed, 24 Jan 2024 12:20:47 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96UI=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=AE=A1=E7=90=86=202=E3=80=81=E5=A2=9E=E5=8A=A0MQTT?= =?UTF-8?q?=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sec-beidou-fwd/pom.xml | 38 ++------ .../beidou_fwd/entity/GZYMQTTData.java | 21 +++++ .../beidou_fwd/service/MQTTClient.java | 62 +++++++++++++ .../beidou_fwd/task/GZYMQTTForwarder.java | 92 +++++++++++++++++++ .../src/main/resources/application.properties | 6 ++ .../templates/page/gnss_data_calc.html | 5 +- .../templates/page/gnss_dev_cfg.html | 5 +- .../resources/templates/page/gnss_status.html | 2 +- 8 files changed, 194 insertions(+), 37 deletions(-) create mode 100644 sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/entity/GZYMQTTData.java create mode 100644 sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/service/MQTTClient.java create mode 100644 sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYMQTTForwarder.java diff --git a/sec-beidou-fwd/pom.xml b/sec-beidou-fwd/pom.xml index 346565cb..7d3f889c 100644 --- a/sec-beidou-fwd/pom.xml +++ b/sec-beidou-fwd/pom.xml @@ -35,15 +35,6 @@ spring-boot-devtools true - - org.springframework.boot - spring-boot-starter-data-jpa - - - - org.springframework.boot - spring-boot-starter-amqp - mysql @@ -73,29 +64,6 @@ httpclient 4.5.13 - - com.google.guava - guava - 31.1-jre - - - - junit - junit - 4.12 - test - - - cn.hutool - hutool-all - 5.5.8 - - - - com.github.yulichang - mybatis-plus-join-boot-starter - 1.4.3 - com.baomidou @@ -124,6 +92,12 @@ fastjson 1.2.76 + + + org.eclipse.paho + org.eclipse.paho.client.mqttv3 + 1.2.5 + diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/entity/GZYMQTTData.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/entity/GZYMQTTData.java new file mode 100644 index 00000000..6325ec56 --- /dev/null +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/entity/GZYMQTTData.java @@ -0,0 +1,21 @@ +package com.imdroid.beidou_fwd.entity; + + +import lombok.Data; + + +/** + * MQTT数据推送 api + * + * @author LiGang + */ +@Data +public class GZYMQTTData { + private String deviceSn; + private String collectTime; + private int deviceType; + // gnss数据 + private double x; + private double y; + private double z; +} diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/service/MQTTClient.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/service/MQTTClient.java new file mode 100644 index 00000000..6e99920b --- /dev/null +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/service/MQTTClient.java @@ -0,0 +1,62 @@ +package com.imdroid.beidou_fwd.service; + +import org.eclipse.paho.client.mqttv3.*; +import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class MQTTClient { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private MqttClient client; + private String brokerUrl; + private String username; + private String password; + private String clientid; + private String topic; + int qos = 1;//0、1、2 + + public MQTTClient(String brokerUrl, String username, String password, + String clientid, String topic){ + this.brokerUrl = brokerUrl; + this.username = username; + this.password = password; + this.clientid = clientid; + this.topic = topic; + } + + public void connect() throws MqttException { + // Create a new MQTT client. + client = new MqttClient(brokerUrl, clientid, new MemoryPersistence()); + // Create a new MQTT connection options object. + MqttConnectOptions options = new MqttConnectOptions(); + // Set the MQTT connection options. + options.setCleanSession(true); + options.setUserName(username); + options.setPassword(password.toCharArray()); + // Connect to the MQTT broker. + client.connect(options); + } + + public void publish(String message) throws MqttException { + try { // Create a new MQTT message. + MqttMessage mqttMessage = new MqttMessage(message.getBytes()); + mqttMessage.setQos(qos); + // Publish the MQTT message to the topic. + client.publish(topic, mqttMessage); + System.out.println("Message published"); + System.out.println("topic: " + topic); + System.out.println("message content: " + mqttMessage); + } catch (Exception e) { + logger.error("mqtt推送gnss数据异常:", e); + } + } + + public void disconnect() throws MqttException { + // Disconnect from the MQTT broker. + client.disconnect(); + } + +} diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYMQTTForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYMQTTForwarder.java new file mode 100644 index 00000000..6e7de209 --- /dev/null +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYMQTTForwarder.java @@ -0,0 +1,92 @@ +package com.imdroid.beidou_fwd.task; + + +import com.imdroid.beidou_fwd.entity.GZYMQTTData; +import com.imdroid.beidou_fwd.service.MQTTClient; +import com.imdroid.common.util.GsonUtil; +import com.imdroid.common.util.NumberUtils; +import com.imdroid.secapi.dto.GnssCalcData; +import org.eclipse.paho.client.mqttv3.MqttException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.List; + +@Component +@Configuration +@EnableScheduling +public class GZYMQTTForwarder extends Forwarder { + private final Logger logger = LoggerFactory.getLogger(GZYMQTTForwarder.class); + + static final String FORWARDER_NAME = "贵州交勘院"; + @Value("${mqtt.server.brokerUrl}") + private String brokerUrl; + @Value("${mqtt.server.username}") + private String username; + @Value("${mqtt.server.password}") + private String password; + @Value("${mqtt.server.clientid}") + private String clientid; + @Value("${mqtt.server.topic}") + private String topic; + + + MQTTClient mqttClient; + + @PostConstruct + void registerMe() throws MqttException { + init(FORWARDER_NAME, "MQTT "+brokerUrl,2,true); + mqttClient = new MQTTClient(brokerUrl, username, password,clientid,topic); + mqttClient.connect(); + } + + /** + * 每半小时转发GNSS解算结果 + */ + @Scheduled(cron = "0 0/30 * * * ?") // 每30分钟执行一次 + private void forwardGnss() { + forwardCurrentGnss(FORWARDER_NAME); + } + + @Scheduled(cron = "0 40 * * * ?") // 每小时的40分钟执行一次 + //@Scheduled(cron = "0 0/20 * * * ?") // 每20分钟执行一次 + private void forwardHistoryGnss() { + forwardHistoryGnss(FORWARDER_NAME); + } + + @Override + int send(String projectId, List records) { + int sendNum = 0; + + for (GnssCalcData locationRecord : records) { + GZYMQTTData tranData = new GZYMQTTData(); + tranData.setCollectTime(locationRecord.getCreatetime().format(formatter)); + double n = NumberUtils.scale(locationRecord.getRposn(), 2); + double e = NumberUtils.scale(locationRecord.getRpose(), 2); + double d = NumberUtils.scale(locationRecord.getRposd(), 2); + tranData.setX(n); + tranData.setY(e); + tranData.setZ(d); + String json = GsonUtil.toJson(tranData); + String msg = "JGKJ" + json + "#!"; + logger.info("forward to GZY mqtt"); + logger.info(msg); + try { + mqttClient.publish(msg); + Thread.sleep(200); + } catch (Exception e1) { + e1.printStackTrace(); + } + sendNum++; + } + + return sendNum; + } + +} diff --git a/sec-beidou-fwd/src/main/resources/application.properties b/sec-beidou-fwd/src/main/resources/application.properties index e111e1a1..c4b4cbf7 100644 --- a/sec-beidou-fwd/src/main/resources/application.properties +++ b/sec-beidou-fwd/src/main/resources/application.properties @@ -31,6 +31,12 @@ xfz.server.port = 31035 gzy.server.host = 127.0.0.1 gzy.server.port = 18088 +mqtt.server.brokerUrl = tcp://8.134.58.55:1883 +mqtt.server.username = mqtt_test +mqtt.server.password = test1234 +mqtt.server.clientid = GZY_client +mqtt.server.topic = GXJY-01 + kingma.server.login_user = ceshi kingma.server.login_pwd = ceshi!123 kingma.server.login_host = https://www.everiaction.com/IOT-ADAPTER-CUSTOM/auth/anon/login diff --git a/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html b/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html index 8e00609e..eb70b4ea 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html @@ -24,7 +24,7 @@ -
+
-
+
-
+