From 3f5643fb726a29aaa1174d179bcf12f72b0db5cc Mon Sep 17 00:00:00 2001
From: 20300 <643145201@qq.com>
Date: Tue, 4 Jun 2024 20:26:06 +0800
Subject: [PATCH] =?UTF-8?q?feat()cpu=20=E5=86=85=E5=AD=98=20=E8=B4=9F?=
=?UTF-8?q?=E8=BD=BD=E8=AE=A1=E7=AE=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 33 +++
pom.xml | 162 +++++++++++++++
.../java/com/hyc/ParseMessageApplication.java | 13 ++
.../java/com/hyc/config/RabbitmqConfig.java | 54 +++++
.../com/hyc/config/RestTemplateConfig.java | 33 +++
.../java/com/hyc/consumer/MQTTConsumer.java | 68 +++++++
.../java/com/hyc/consumer/ReceiveHandler.java | 51 +++++
.../hyc/controller/SummarizeController.java | 101 +++++++++
.../com/hyc/domain/ConnectionParameter.java | 24 +++
.../java/com/hyc/domain/GetWayServerLoad.java | 35 ++++
.../java/com/hyc/domain/SummarizeResp.java | 45 +++++
src/main/java/com/hyc/domain/TimeSortCar.java | 49 +++++
src/main/java/com/hyc/domain/VinIp.java | 41 ++++
.../java/com/hyc/mapper/SummarizeMapper.java | 31 +++
src/main/java/com/hyc/result/HttpStatus.java | 93 +++++++++
src/main/java/com/hyc/result/Result.java | 101 +++++++++
.../com/hyc/service/SummarizeService.java | 22 ++
.../service/impl/SummarizeServiceImpl.java | 191 ++++++++++++++++++
src/main/resources/application.yml | 62 ++++++
src/main/resources/mapper/ConnectMapper.xml | 17 ++
.../ParseMessageApplicationTests.java | 13 ++
21 files changed, 1239 insertions(+)
create mode 100644 .gitignore
create mode 100644 pom.xml
create mode 100644 src/main/java/com/hyc/ParseMessageApplication.java
create mode 100644 src/main/java/com/hyc/config/RabbitmqConfig.java
create mode 100644 src/main/java/com/hyc/config/RestTemplateConfig.java
create mode 100644 src/main/java/com/hyc/consumer/MQTTConsumer.java
create mode 100644 src/main/java/com/hyc/consumer/ReceiveHandler.java
create mode 100644 src/main/java/com/hyc/controller/SummarizeController.java
create mode 100644 src/main/java/com/hyc/domain/ConnectionParameter.java
create mode 100644 src/main/java/com/hyc/domain/GetWayServerLoad.java
create mode 100644 src/main/java/com/hyc/domain/SummarizeResp.java
create mode 100644 src/main/java/com/hyc/domain/TimeSortCar.java
create mode 100644 src/main/java/com/hyc/domain/VinIp.java
create mode 100644 src/main/java/com/hyc/mapper/SummarizeMapper.java
create mode 100644 src/main/java/com/hyc/result/HttpStatus.java
create mode 100644 src/main/java/com/hyc/result/Result.java
create mode 100644 src/main/java/com/hyc/service/SummarizeService.java
create mode 100644 src/main/java/com/hyc/service/impl/SummarizeServiceImpl.java
create mode 100644 src/main/resources/application.yml
create mode 100644 src/main/resources/mapper/ConnectMapper.xml
create mode 100644 src/test/java/com/hyc/parsemessage/ParseMessageApplicationTests.java
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..855a155
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,162 @@
+
+
+ 4.0.0
+ com.example
+ parse-message
+ 0.0.1-SNAPSHOT
+ parse-message
+ parse-message
+
+ 11
+ UTF-8
+ UTF-8
+ 2.6.13
+
+
+
+ org.bouncycastle
+ bcpkix-jdk15on
+ 1.70
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.projectlombok
+ lombok
+ 1.18.30
+
+
+
+
+ commons-lang
+ commons-lang
+ 2.6
+
+
+
+ javax.servlet
+ javax.servlet-api
+ provided
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.apache.httpcomponents
+ httpcore
+ 4.4.12
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.13
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.12.0
+
+
+ org.eclipse.paho
+ org.eclipse.paho.client.mqttv3
+ 1.2.5
+
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.79
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.11
+ runtime
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 2.2.2
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ 1.4.1
+
+
+
+ com.aliyun
+ ecs20140526
+ 5.1.8
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+ com.hyc.ParseMessageApplication
+ true
+
+
+
+ repackage
+
+ repackage
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/hyc/ParseMessageApplication.java b/src/main/java/com/hyc/ParseMessageApplication.java
new file mode 100644
index 0000000..f33c70d
--- /dev/null
+++ b/src/main/java/com/hyc/ParseMessageApplication.java
@@ -0,0 +1,13 @@
+package com.hyc;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class ParseMessageApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ParseMessageApplication.class, args);
+ }
+
+}
diff --git a/src/main/java/com/hyc/config/RabbitmqConfig.java b/src/main/java/com/hyc/config/RabbitmqConfig.java
new file mode 100644
index 0000000..f6a1f5f
--- /dev/null
+++ b/src/main/java/com/hyc/config/RabbitmqConfig.java
@@ -0,0 +1,54 @@
+package com.hyc.config;
+
+import org.springframework.amqp.core.*;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * rabbitMq配置类
+ *
+ * @author YouChe·He
+ * @ClassName: RabbitmqConfig
+ * @Description: rabbitMq配置类
+ * @CreateTime: 2024/5/27 16:56
+ */
+@Configuration
+public class RabbitmqConfig {
+ public static final String INIT_CONNECT = "init_connect";
+ public static final String DISCONNECT_CONNECT = "disconnect_connect";
+ public static final String EXCHANGE_TOPICS_INFORM="exchange_topics_inform";
+ public static final String ROUTINGKEY_EMAIL="inform.#.email.#";
+ public static final String ROUTINGKEY_SMS="inform.#.sms.#";
+
+
+ @Bean(EXCHANGE_TOPICS_INFORM)
+ public Exchange EXCHANGE_TOPICS_INFORM(){
+ //durable(true) 持久化,mq重启之后交换机还在
+ return ExchangeBuilder.topicExchange(EXCHANGE_TOPICS_INFORM).durable(true).build();
+ }
+
+ //声明QUEUE_INFORM_EMAIL队列
+ @Bean(INIT_CONNECT)
+ public Queue QUEUE_INFORM_EMAIL(){
+ return new Queue(INIT_CONNECT);
+ }
+ //声明QUEUE_INFORM_SMS队列
+ @Bean(DISCONNECT_CONNECT)
+ public Queue QUEUE_INFORM_SMS(){
+ return new Queue(DISCONNECT_CONNECT);
+ }
+
+ //ROUTINGKEY_EMAIL队列绑定交换机,指定routingKey
+ @Bean
+ public Binding BINDING_QUEUE_INFORM_EMAIL(@Qualifier(INIT_CONNECT) Queue queue,
+ @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){
+ return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_EMAIL).noargs();
+ }
+ //ROUTINGKEY_SMS队列绑定交换机,指定routingKey
+ @Bean
+ public Binding BINDING_ROUTINGKEY_SMS(@Qualifier(DISCONNECT_CONNECT) Queue queue,
+ @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){
+ return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_SMS).noargs();
+ }
+}
diff --git a/src/main/java/com/hyc/config/RestTemplateConfig.java b/src/main/java/com/hyc/config/RestTemplateConfig.java
new file mode 100644
index 0000000..f75938f
--- /dev/null
+++ b/src/main/java/com/hyc/config/RestTemplateConfig.java
@@ -0,0 +1,33 @@
+package com.hyc.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * rest配置类
+ *
+ * @author YouChe·He
+ * @ClassName: RestTemplateConfig
+ * @Description: rest配置类
+ * @CreateTime: 2024/5/27 10:01
+ */
+@Configuration
+public class RestTemplateConfig {
+ @Bean
+ public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
+ return new RestTemplate(factory);
+ }
+
+ @Bean
+ public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
+ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+ //超时设置
+ factory.setReadTimeout(5000);//ms
+ factory.setConnectTimeout(15000);//ms
+ return factory;
+ }
+}
+
diff --git a/src/main/java/com/hyc/consumer/MQTTConsumer.java b/src/main/java/com/hyc/consumer/MQTTConsumer.java
new file mode 100644
index 0000000..163859c
--- /dev/null
+++ b/src/main/java/com/hyc/consumer/MQTTConsumer.java
@@ -0,0 +1,68 @@
+//package com.hyc.consumer;
+//
+//import com.hyc.domain.ConnectionParameter;
+//import lombok.extern.slf4j.Slf4j;
+//import org.eclipse.paho.client.mqttv3.*;
+//import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+//import org.springframework.stereotype.Component;
+//
+///**
+// * MQTT消费者
+// *
+// * @author YouChe·He
+// * @ClassName: MQTTConsumer
+// * @Description: MQTT消费者
+// * @CreateTime: 2024/5/30 19:12
+// */
+//@Component
+//@Slf4j
+//public class MQTTConsumer {
+//
+// public void parseMessage(ConnectionParameter connectionParameter){
+// int qos = 0;
+//
+// try {
+// MqttClient client = null;
+//
+// client = new MqttClient(connectionParameter.getBroker(), connectionParameter.getClientid(), new MemoryPersistence());
+//
+//
+// // 连接参数
+// MqttConnectOptions options = new MqttConnectOptions();
+// if (connectionParameter.getUsername() !=null && !"".equals(connectionParameter.getUsername())){
+// options.setUserName(connectionParameter.getUsername());
+// options.setPassword(connectionParameter.getPassword().toCharArray());
+// }
+//
+// options.setConnectionTimeout(60);
+// options.setKeepAliveInterval(60);
+// // 设置回调
+// client.setCallback(new MqttCallback() {
+//
+// @Override
+// public void connectionLost(Throwable cause) {
+// System.out.println("connectionLost: " + cause.getMessage());
+// }
+//
+// @Override
+// public void messageArrived(String topic, MqttMessage message) {
+// System.out.println("topic: " + topic);
+// System.out.println("Qos: " + message.getQos());
+// System.out.println("message content: " + new String(message.getPayload()));
+//
+// }
+//
+// @Override
+// public void deliveryComplete(IMqttDeliveryToken token) {
+// System.out.println("deliveryComplete---------" + token.isComplete());
+// }
+//
+// });
+// client.connect(options);
+// client.subscribe(connectionParameter.getTopic(), qos);
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// }
+//
+//}
diff --git a/src/main/java/com/hyc/consumer/ReceiveHandler.java b/src/main/java/com/hyc/consumer/ReceiveHandler.java
new file mode 100644
index 0000000..9ffa28a
--- /dev/null
+++ b/src/main/java/com/hyc/consumer/ReceiveHandler.java
@@ -0,0 +1,51 @@
+//package com.hyc.consumer;
+//
+//import com.alibaba.fastjson.JSONObject;
+//import com.hyc.config.RabbitmqConfig;
+//import com.hyc.domain.ConnectionParameter;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.amqp.core.Message;
+//import org.springframework.amqp.rabbit.annotation.RabbitListener;
+//import org.springframework.beans.factory.annotation.Autowired;
+//
+//import org.springframework.stereotype.Component;
+//
+///**
+// * 断开连接消费者
+// *
+// * @author YouChe·He
+// * @ClassName: ReceiveHandler
+// * @Description: 断开连接消费者
+// * @CreateTime: 2024/5/27 17:00
+// */
+//@Component
+//@Slf4j
+//public class ReceiveHandler {
+//
+// @Autowired
+// private MQTTConsumer mqttConsumer;
+//
+// @RabbitListener(queues = {RabbitmqConfig.INIT_CONNECT})
+// public void receive_email(Message msg){
+// String messageBody = new String(msg.getBody());
+// ConnectionParameter connectionParameter = getConnectionParameter(messageBody);
+// mqttConsumer.parseMessage(connectionParameter);
+// }
+//
+//
+// public ConnectionParameter getConnectionParameter(String messageBody){
+//
+//
+// log.error("链接事件得到的消息:{}",messageBody);
+// JSONObject jsonObject = JSONObject.parseObject(messageBody);
+// String carVin = jsonObject.getString("clientId");
+//
+// String[] split = carVin.split("-");
+// String vin = split[0];
+// String broker = split[1];
+// String topic = split[2];
+// log.warn("ConnectionParameter对象的属性 broker:{},vin:{},topic:{}",broker,vin,topic);
+// return new ConnectionParameter(broker,null,null,vin,topic);
+// }
+//
+//}
diff --git a/src/main/java/com/hyc/controller/SummarizeController.java b/src/main/java/com/hyc/controller/SummarizeController.java
new file mode 100644
index 0000000..8c3c221
--- /dev/null
+++ b/src/main/java/com/hyc/controller/SummarizeController.java
@@ -0,0 +1,101 @@
+package com.hyc.controller;
+
+import com.hyc.domain.ConnectionParameter;
+import com.hyc.domain.SummarizeResp;
+import com.hyc.result.Result;
+import com.hyc.service.SummarizeService;
+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.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 创建Mqtt客户端
+ *
+ * @author YouChe·He
+ * @ClassName: CreateMqttClient
+ * @Description: 创建Mqtt客户端
+ * @CreateTime: 2024/5/31 10:25
+ */
+@Slf4j
+@RestController
+@RequestMapping("/create")
+public class SummarizeController {
+
+ @Autowired
+ private SummarizeService summarizeService;
+
+ @PostMapping("/createMqttClient")
+ public String createMqttClient(@RequestBody List connectionParameterList){
+
+ log.error("进来了!!!");
+ for (ConnectionParameter connectionParameter : connectionParameterList) {
+ boolean oneMqttClient = createOneMqttClient(connectionParameter);
+ if (oneMqttClient==true){
+ log.warn("broker为:{}的mqtt客户端连接成功",connectionParameter.getBroker());
+ }
+ }
+
+ return "成功!";
+ }
+
+ @GetMapping("/getAllLoadInfo")
+ public Result getAllLoadInfo(){
+ return summarizeService.getAllLoadInfo();
+ }
+
+
+
+ public boolean createOneMqttClient(ConnectionParameter connectionParameter){
+
+ int qos = 0;
+ try {
+ MqttClient client = null;
+
+ client = new MqttClient(connectionParameter.getBroker(), connectionParameter.getClientid(), new MemoryPersistence());
+
+
+ // 连接参数
+ MqttConnectOptions options = new MqttConnectOptions();
+ if (connectionParameter.getUsername() !=null && !"".equals(connectionParameter.getUsername())){
+ options.setUserName(connectionParameter.getUsername());
+ options.setPassword(connectionParameter.getPassword().toCharArray());
+ }
+
+ options.setConnectionTimeout(60);
+ options.setKeepAliveInterval(60);
+ // 设置回调
+ client.setCallback(new MqttCallback() {
+
+ @Override
+ public void connectionLost(Throwable cause) {
+ System.out.println("connectionLost: " + cause.getMessage());
+ }
+
+ @Override
+ public void messageArrived(String topic, MqttMessage message) {
+ System.out.println("topic: " + topic);
+ System.out.println("Qos: " + message.getQos());
+ System.out.println("message content: " + new String(message.getPayload()));
+
+ }
+
+ @Override
+ public void deliveryComplete(IMqttDeliveryToken token) {
+ System.out.println("deliveryComplete---------" + token.isComplete());
+ }
+
+ });
+ client.connect(options);
+ client.subscribe(connectionParameter.getTopic(), qos);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/src/main/java/com/hyc/domain/ConnectionParameter.java b/src/main/java/com/hyc/domain/ConnectionParameter.java
new file mode 100644
index 0000000..5b13c5c
--- /dev/null
+++ b/src/main/java/com/hyc/domain/ConnectionParameter.java
@@ -0,0 +1,24 @@
+package com.hyc.domain;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+/**
+ * 连接MQTT参数
+ *
+ * @author YouChe·He
+ * @ClassName: ConnectionParameter
+ * @Description: 连接MQTT参数
+ * @CreateTime: 2024/5/30 18:52
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ConnectionParameter {
+ private String broker;
+ private String username;
+ private String password;
+ private String clientid;
+ private String topic;
+}
diff --git a/src/main/java/com/hyc/domain/GetWayServerLoad.java b/src/main/java/com/hyc/domain/GetWayServerLoad.java
new file mode 100644
index 0000000..36d385e
--- /dev/null
+++ b/src/main/java/com/hyc/domain/GetWayServerLoad.java
@@ -0,0 +1,35 @@
+package com.hyc.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 服务对应负载
+ *
+ * @author YouChe·He
+ * @ClassName: GetWayServerLoad
+ * @Description: 服务对应负载
+ * @CreateTime: 2024/6/2 22:05
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class GetWayServerLoad {
+ /**
+ * 服务ip
+ */
+ private String ip;
+ /**
+ * 负载率
+ */
+ private Double loadNum;
+ /**
+ * 内存使用率
+ */
+ private Double memoryNum;
+ /**
+ * CPU使用率
+ */
+ private Double cpuNum;
+}
diff --git a/src/main/java/com/hyc/domain/SummarizeResp.java b/src/main/java/com/hyc/domain/SummarizeResp.java
new file mode 100644
index 0000000..e1ebdad
--- /dev/null
+++ b/src/main/java/com/hyc/domain/SummarizeResp.java
@@ -0,0 +1,45 @@
+package com.hyc.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.util.List;
+
+/**
+ * 概述响应类
+ *
+ * @author YouChe·He
+ * @ClassName: SummarizeResp
+ * @Description: 概述响应类
+ * @CreateTime: 2024/6/2 16:39
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SummarizeResp {
+ /**
+ * 网管节点收集数量
+ */
+ private Integer gateWayServerNum;
+ /**
+ * 数据解析节点数量
+ */
+ private Integer dataAnalyze;
+
+ /**
+ * 整体负载
+ */
+ private Double allLoad;
+ /**
+ * 车辆在线数
+ */
+ private Integer catOnline;
+ private List timeSortCarList;
+
+ private List getWayServerLoadList;
+
+ private List vinIpList;
+}
diff --git a/src/main/java/com/hyc/domain/TimeSortCar.java b/src/main/java/com/hyc/domain/TimeSortCar.java
new file mode 100644
index 0000000..400ddc5
--- /dev/null
+++ b/src/main/java/com/hyc/domain/TimeSortCar.java
@@ -0,0 +1,49 @@
+package com.hyc.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 时间排序小车
+ *
+ * @author YouChe·He
+ * @ClassName: TimeSortCar
+ * @Description: 时间排序小车
+ * @CreateTime: 2024/6/2 16:34
+ */
+@Data
+@SuperBuilder
+@AllArgsConstructor
+@NoArgsConstructor
+public class TimeSortCar implements Comparable {
+ /**
+ * 车辆唯一标识 VIN
+ */
+ private String vin;
+
+ /**
+ * 连接节点ip
+ */
+ private String ip;
+ /**
+ * 连接时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date connectTime;
+ /**
+ * 连接时长 单位分钟
+ */
+ private long connectDuration;
+
+ @Override
+ public int compareTo(TimeSortCar o) {
+ return Integer.compare((int) o.connectDuration,(int) this.connectDuration);
+ }
+}
diff --git a/src/main/java/com/hyc/domain/VinIp.java b/src/main/java/com/hyc/domain/VinIp.java
new file mode 100644
index 0000000..068354c
--- /dev/null
+++ b/src/main/java/com/hyc/domain/VinIp.java
@@ -0,0 +1,41 @@
+package com.hyc.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 小车绑定服务信息
+ *
+ * @author YouChe·He
+ * @ClassName: VinIp
+ * @Description: 小车绑定服务信息
+ * @CreateTime: 2024/6/2 16:52
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class VinIp {
+
+ /**
+ * 车辆唯一标识 VIN
+ */
+ private String vin;
+
+ /**
+ * 连接节点ip
+ */
+ private String ip;
+ /**
+ * 连接时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date connectTime;
+}
diff --git a/src/main/java/com/hyc/mapper/SummarizeMapper.java b/src/main/java/com/hyc/mapper/SummarizeMapper.java
new file mode 100644
index 0000000..266147f
--- /dev/null
+++ b/src/main/java/com/hyc/mapper/SummarizeMapper.java
@@ -0,0 +1,31 @@
+package com.hyc.mapper;
+/**
+ * 持久层
+ *
+ * @author YouChe·He
+ * @ClassName: SummarizeMapper
+ * @Description: 持久层
+ * @CreateTime: 2024/6/2 16:47
+ */
+
+import com.hyc.domain.VinIp;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.web.bind.annotation.Mapping;
+
+import javax.annotation.ManagedBean;
+import java.util.List;
+
+/**
+ *@ClassName SummarizeMapper
+ *@Description 描述
+ *@Author ZHIHAO.DAI
+ *@Date 2024/6/2 16:47
+ */
+@Mapper
+public interface SummarizeMapper {
+
+ List getAllLoadInfo();
+
+ List getNewConnectVin();
+
+}
diff --git a/src/main/java/com/hyc/result/HttpStatus.java b/src/main/java/com/hyc/result/HttpStatus.java
new file mode 100644
index 0000000..7f32c7b
--- /dev/null
+++ b/src/main/java/com/hyc/result/HttpStatus.java
@@ -0,0 +1,93 @@
+package com.hyc.result;
+
+/**
+ * 返回状态码
+ *
+ * @author ruoyi
+ */
+public class HttpStatus {
+ /**
+ * 操作成功
+ */
+ public static final int SUCCESS = 200;
+
+ /**
+ * 对象创建成功
+ */
+ public static final int CREATED = 201;
+
+ /**
+ * 请求已经被接受
+ */
+ public static final int ACCEPTED = 202;
+
+ /**
+ * 操作已经执行成功,但是没有返回数据
+ */
+ public static final int NO_CONTENT = 204;
+
+ /**
+ * 资源已被移除
+ */
+ public static final int MOVED_PERM = 301;
+
+ /**
+ * 重定向
+ */
+ public static final int SEE_OTHER = 303;
+
+ /**
+ * 资源没有被修改
+ */
+ public static final int NOT_MODIFIED = 304;
+
+ /**
+ * 参数列表错误(缺少,格式不匹配)
+ */
+ public static final int BAD_REQUEST = 400;
+
+ /**
+ * 未授权
+ */
+ public static final int UNAUTHORIZED = 401;
+
+ /**
+ * 访问受限,授权过期
+ */
+ public static final int FORBIDDEN = 403;
+
+ /**
+ * 资源,服务未找到
+ */
+ public static final int NOT_FOUND = 404;
+
+ /**
+ * 不允许的http方法
+ */
+ public static final int BAD_METHOD = 405;
+
+ /**
+ * 资源冲突,或者资源被锁
+ */
+ public static final int CONFLICT = 409;
+
+ /**
+ * 不支持的数据,媒体类型
+ */
+ public static final int UNSUPPORTED_TYPE = 415;
+
+ /**
+ * 系统内部错误
+ */
+ public static final int ERROR = 500;
+
+ /**
+ * 接口未实现
+ */
+ public static final int NOT_IMPLEMENTED = 501;
+
+ /**
+ * 系统警告消息
+ */
+ public static final int WARN = 601;
+}
diff --git a/src/main/java/com/hyc/result/Result.java b/src/main/java/com/hyc/result/Result.java
new file mode 100644
index 0000000..f858c2d
--- /dev/null
+++ b/src/main/java/com/hyc/result/Result.java
@@ -0,0 +1,101 @@
+package com.hyc.result;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 响应信息主体
+ *
+ * @author ruoyi
+ */
+@Data
+public class Result implements Serializable {
+ /**
+ * 成功
+ */
+ public static final int SUCCESS = HttpStatus.SUCCESS;
+ /**
+ * 失败
+ */
+ public static final int FAIL = HttpStatus.ERROR;
+ private static final long serialVersionUID = 1L;
+ /**
+ * 系统警告消息
+ */
+ private static final int WARN = HttpStatus.WARN;
+
+ private int code;
+
+ private String msg;
+
+ private T data;
+
+ public static Result success () {
+ return restResult(null, SUCCESS, "操作成功");
+ }
+
+ public static Result success (T data) {
+ return restResult(data, SUCCESS, "操作成功");
+ }
+
+ public static Result success (T data, String msg) {
+ return restResult(data, SUCCESS, msg);
+ }
+
+ public static Result error () {
+ return restResult(null, FAIL, "操作失败");
+ }
+
+ public static Result error (String msg) {
+ return restResult(null, FAIL, msg);
+ }
+
+ public static Result error (T data) {
+ return restResult(data, FAIL, "操作失败");
+ }
+
+ public static Result error (T data, String msg) {
+ return restResult(data, FAIL, msg);
+ }
+
+ public static Result error (int code, String msg) {
+ return restResult(null, code, msg);
+ }
+
+ public static Result warn () {
+ return restResult(null, WARN, "操作失败");
+ }
+
+ public static Result warn (String msg) {
+ return restResult(null, WARN, msg);
+ }
+
+ public static Result warn (T data) {
+ return restResult(data, WARN, "操作失败");
+ }
+
+ public static Result warn (T data, String msg) {
+ return restResult(data, WARN, msg);
+ }
+
+ public static Result warn (int code, String msg) {
+ return restResult(null, code, msg);
+ }
+
+ private static Result restResult (T data, int code, String msg) {
+ Result apiResult = new Result<>();
+ apiResult.setCode(code);
+ apiResult.setData(data);
+ apiResult.setMsg(msg);
+ return apiResult;
+ }
+
+ public static Boolean isError (Result ret) {
+ return !isSuccess(ret);
+ }
+
+ public static Boolean isSuccess (Result ret) {
+ return Result.SUCCESS == ret.getCode();
+ }
+}
diff --git a/src/main/java/com/hyc/service/SummarizeService.java b/src/main/java/com/hyc/service/SummarizeService.java
new file mode 100644
index 0000000..b0d3dc5
--- /dev/null
+++ b/src/main/java/com/hyc/service/SummarizeService.java
@@ -0,0 +1,22 @@
+package com.hyc.service;
+/**
+ * 服务层
+ *
+ * @author YouChe·He
+ * @ClassName: SummarizeService
+ * @Description: 服务层
+ * @CreateTime: 2024/6/2 16:46
+ */
+
+import com.hyc.domain.SummarizeResp;
+import com.hyc.result.Result;
+
+/**
+ *@ClassName SummarizeService
+ *@Description 描述
+ *@Author ZHIHAO.DAI
+ *@Date 2024/6/2 16:46
+ */
+public interface SummarizeService {
+ Result getAllLoadInfo();
+}
diff --git a/src/main/java/com/hyc/service/impl/SummarizeServiceImpl.java b/src/main/java/com/hyc/service/impl/SummarizeServiceImpl.java
new file mode 100644
index 0000000..37bed6c
--- /dev/null
+++ b/src/main/java/com/hyc/service/impl/SummarizeServiceImpl.java
@@ -0,0 +1,191 @@
+package com.hyc.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.ecs20140526.Client;
+import com.aliyun.ecs20140526.models.DescribeInstancesRequest;
+import com.aliyun.ecs20140526.models.DescribeInstancesResponse;
+import com.aliyun.teaopenapi.models.Config;
+import com.aliyun.teautil.models.RuntimeOptions;
+import com.hyc.domain.GetWayServerLoad;
+import com.hyc.domain.SummarizeResp;
+import com.hyc.domain.TimeSortCar;
+import com.hyc.domain.VinIp;
+import com.hyc.mapper.SummarizeMapper;
+import com.hyc.result.Result;
+import com.hyc.service.SummarizeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.*;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 实现
+ *
+ * @author YouChe·He
+ * @ClassName: SummarizeServiceImpl
+ * @Description: 实现
+ * @CreateTime: 2024/6/2 16:46
+ */
+@Service
+@Slf4j
+public class SummarizeServiceImpl implements SummarizeService {
+
+ @Autowired
+ private SummarizeMapper summarizeMapper;
+ @Autowired
+ private RestTemplate restTemplate;
+ @Override
+ public Result getAllLoadInfo() {
+
+ ArrayList getWayServerLoads = new ArrayList<>();
+
+ Integer carSum = 0;
+
+ Double allLoad = 0.0;
+
+ Integer gateWayServerNum = 0;
+
+ Integer dataAnalyze = 22;
+
+
+
+ ArrayList ipList = new ArrayList<>();
+
+ List connectLongVinList = summarizeMapper.getAllLoadInfo();
+
+ List newConnectVinList = summarizeMapper.getNewConnectVin();
+
+
+ try {
+ Client client = this.createClient();
+ //填写地区参数和实例规格参数
+ DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest()
+ .setRegionId("cn-shanghai")
+ .setInstanceType("ecs.e-c1m2.xlarge");
+ RuntimeOptions runtime = new RuntimeOptions();
+
+ //获得ip并添加进入集合
+ DescribeInstancesResponse describeInstancesResponse = client.describeInstancesWithOptions(describeInstancesRequest, runtime);
+ List> ipListList = describeInstancesResponse.getBody().instances.getInstance().stream().map(instance -> instance.publicIpAddress.ipAddress).collect(Collectors.toList());
+ for (List strings : ipListList) {
+ for (String ip : strings) {
+ ipList.add(ip);
+ gateWayServerNum ++;
+ }
+ System.out.println("------------------------");
+ }
+ //遍历ip 访问URL
+ for (String ip : ipList) {
+ String url = "http://" + ip + ":8080/public/login";
+ Map request = new HashMap<>();
+ request.put("username", "fluxmq");
+ request.put("password", "fluxmq");
+ HttpHeaders httpHeaders = new HttpHeaders();
+ httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+ HttpEntity