From f12e4019cdcf40966351799d74ff910690a56486 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=BB=84=E5=A4=A7=E4=B8=BE?=
<13970129+huandgaju@user.noreply.gitee.com>
Date: Thu, 11 Apr 2024 15:08:20 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9B=B4=E6=96=B0=EF=BC=9A?=
=?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
muyu-analyze/pom.xml | 22 +-
.../muyu/analyze/MuYuAnalyzeApplication.java | 1 +
.../com/muyu/analyze/config/TutConfig.java | 26 ++
.../com/muyu/analyze/consumer/Consumer.java | 25 +-
.../analyze/consumer/RabbitMqConsumer.java | 49 ---
.../muyu/analyze/mapper/VehicleMapper.java | 3 +
.../muyu/analyze/service/VehicleService.java | 3 +-
.../analyze/service/impl/BreakdownImpl.java | 41 ++-
.../analyze/service/impl/FenceAlarmImpl.java | 133 +++++--
.../analyze/service/impl/StoredEventImpl.java | 1 +
.../com/muyu/analyze/utils/AnalyzeUtils.java | 7 +-
muyu-analyze/src/main/resources/bootstrap.yml | 11 +-
.../mapper/business/StoredEventMapper.xml | 8 +-
muyu-common/muyu-common-core/pom.xml | 7 +-
.../core/constant/MQQueueConstants.java | 23 ++
.../common/redis/service/RedisService.java | 20 +-
muyu-load-center/pom.xml | 120 +++++++
.../sample/AliyunEcsInstanceCreator.java | 73 ++++
.../loadCenter/MuYuLoadCenterApplication.java | 36 ++
.../Service/ClientRegController.java | 86 +++++
.../muyu/loadCenter/Service/NodeRegReq.java | 30 ++
.../muyu/loadCenter/kafka/KafkaConfig.java | 47 +++
.../muyu/loadCenter/mqttx/ConversionUtil.java | 65 ++++
.../muyu/loadCenter/mqttx/MqttSubscriber.java | 137 ++++++++
.../muyu/loadCenter/utils/AnalyzeUtils.java | 324 ++++++++++++++++++
.../src/main/resources/bootstrap.yml | 25 ++
.../com/muyu/business/domain/AlarmLogs.java | 28 +-
.../com/muyu/business/domain/FaultLogs.java | 1 +
.../muyu-business-server/pom.xml | 5 +
.../controller/AlarmLogsController.java | 97 ++++--
.../controller/FaultCodesController.java | 30 +-
.../controller/FaultLogsController.java | 98 ++++--
.../controller/FenceInfoController.java | 3 +-
.../controller/RecordsController.java | 18 +-
.../muyu/business/mapper/AlarmLogsMapper.java | 13 +-
.../business/mapper/FaultCodesMapper.java | 4 +-
.../muyu/business/mapper/FaultLogsMapper.java | 18 +-
.../business/service/AlarmLogsService.java | 17 +-
.../business/service/FaultCodesService.java | 8 +-
.../business/service/FaultLogsService.java | 16 +-
.../business/service/IFenceInfoService.java | 3 +-
.../business/service/IRecordsService.java | 1 -
.../business/service/VehicleDataService.java | 2 -
.../service/impl/AlarmLogsServiceImpl.java | 91 +++--
.../service/impl/FaultCodesServiceImpl.java | 23 +-
.../service/impl/FaultLogsServiceImpl.java | 39 ++-
.../service/impl/FenceInfoServiceImpl.java | 5 +-
.../service/impl/RecordsServiceImpl.java | 10 +-
.../service/impl/VehicleDataServiceImpl.java | 4 -
.../com/muyu/business/sms/SendSmsConfig.java | 34 ++
.../mapper/business/AlarmLogsMapper.xml | 1 +
.../mapper/business/FaultLogsMapper.xml | 6 +
.../com/muyu/system/common/domain/Car.java | 6 +-
.../muyu/system/common/domain/Marking.java | 34 ++
.../muyu/system/controller/CarController.java | 24 +-
.../com/muyu/system/mapper/CarMapper.java | 4 +
.../system/service/impl/CarServiceImpl.java | 66 ++--
.../resources/mapper/system/CarMapper.xml | 3 +
pom.xml | 12 +-
59 files changed, 1698 insertions(+), 349 deletions(-)
create mode 100644 muyu-analyze/src/main/java/com/muyu/analyze/config/TutConfig.java
delete mode 100644 muyu-analyze/src/main/java/com/muyu/analyze/consumer/RabbitMqConsumer.java
create mode 100644 muyu-common/muyu-common-core/src/main/java/com/muyu/common/core/constant/MQQueueConstants.java
create mode 100644 muyu-load-center/pom.xml
create mode 100644 muyu-load-center/src/main/java/com/aliyun/sample/AliyunEcsInstanceCreator.java
create mode 100644 muyu-load-center/src/main/java/com/muyu/loadCenter/MuYuLoadCenterApplication.java
create mode 100644 muyu-load-center/src/main/java/com/muyu/loadCenter/Service/ClientRegController.java
create mode 100644 muyu-load-center/src/main/java/com/muyu/loadCenter/Service/NodeRegReq.java
create mode 100644 muyu-load-center/src/main/java/com/muyu/loadCenter/kafka/KafkaConfig.java
create mode 100644 muyu-load-center/src/main/java/com/muyu/loadCenter/mqttx/ConversionUtil.java
create mode 100644 muyu-load-center/src/main/java/com/muyu/loadCenter/mqttx/MqttSubscriber.java
create mode 100644 muyu-load-center/src/main/java/com/muyu/loadCenter/utils/AnalyzeUtils.java
create mode 100644 muyu-load-center/src/main/resources/bootstrap.yml
create mode 100644 muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/sms/SendSmsConfig.java
create mode 100644 muyu-modules/muyu-system/muyu-system-common/src/main/java/com/muyu/system/common/domain/Marking.java
diff --git a/muyu-analyze/pom.xml b/muyu-analyze/pom.xml
index e2d7da9..f94e804 100644
--- a/muyu-analyze/pom.xml
+++ b/muyu-analyze/pom.xml
@@ -21,17 +21,7 @@
com.muyu
muyu-common-core
-
-
- org.springframework.kafka
- spring-kafka
- 2.8.1
-
-
-
-
-
-
+
com.alibaba.cloud
@@ -116,12 +106,12 @@
muyu-common-event
3.6.3
-
-
-
-
-
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
diff --git a/muyu-analyze/src/main/java/com/muyu/analyze/MuYuAnalyzeApplication.java b/muyu-analyze/src/main/java/com/muyu/analyze/MuYuAnalyzeApplication.java
index c33adc9..11c07c7 100644
--- a/muyu-analyze/src/main/java/com/muyu/analyze/MuYuAnalyzeApplication.java
+++ b/muyu-analyze/src/main/java/com/muyu/analyze/MuYuAnalyzeApplication.java
@@ -17,6 +17,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@EnableRyFeignClients
@SpringBootApplication
@EnableScheduling
+
public class MuYuAnalyzeApplication
{
public static void main(String[] args)
diff --git a/muyu-analyze/src/main/java/com/muyu/analyze/config/TutConfig.java b/muyu-analyze/src/main/java/com/muyu/analyze/config/TutConfig.java
new file mode 100644
index 0000000..0c9ab48
--- /dev/null
+++ b/muyu-analyze/src/main/java/com/muyu/analyze/config/TutConfig.java
@@ -0,0 +1,26 @@
+package com.muyu.analyze.config;
+
+
+import com.muyu.common.core.constant.*;
+import org.springframework.amqp.core.*;
+import org.springframework.context.annotation.*;
+
+
+/**
+ * 声明队列绑定交换机
+ *
+ * @author muyu
+ */
+@Configuration
+public class TutConfig {
+
+ @Bean
+ public Queue fault() {
+ return new Queue(MQQueueConstants.ALARM_QUEUE,true);
+ }
+
+ @Bean
+ public Queue alarm() {
+ return new Queue(MQQueueConstants.FAULT_QUEUE, true);
+ }
+}
diff --git a/muyu-analyze/src/main/java/com/muyu/analyze/consumer/Consumer.java b/muyu-analyze/src/main/java/com/muyu/analyze/consumer/Consumer.java
index 166ff08..4a8f0c6 100644
--- a/muyu-analyze/src/main/java/com/muyu/analyze/consumer/Consumer.java
+++ b/muyu-analyze/src/main/java/com/muyu/analyze/consumer/Consumer.java
@@ -1,22 +1,22 @@
package com.muyu.analyze.consumer;
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.core.JsonProcessingException;
import com.muyu.analyze.mapper.VehicleMapper;
import com.muyu.analyze.service.VehicleService;
-import com.muyu.analyze.utils.AnalyzeUtils;
import com.muyu.common.core.utils.SpringUtils;
import com.muyu.common.event.cache.VehicleEventCache;
-import com.muyu.business.domain.Fence;
import com.muyu.system.common.domain.VehicleData;
-
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Set;
+
+
+
/**
* 类说明
*
@@ -41,17 +41,21 @@ public class Consumer {
*/
// @KafkaListener(topics = "test", groupId = "group", properties = {"bootstrap.servers = 10.10.26.4:9092"})
@KafkaListener(topics = "test")
- public void getMessage(String msg) {
- VehicleData analyze = AnalyzeUtils.analyze(msg);
- log.info("。。。。。。。。。。。。非静止画面");
+ public void getMessage(String msg) throws JsonProcessingException {
- Set eventList = vehicleEventCache.getEventList(analyze.getVin());
+ //json转对象
+ VehicleData vehicleData = JSON.parseObject(msg, VehicleData.class);
+
+ log.info("。。。。。。。。。。。。非静止画面");
// List fenceVin=vehicleMapper.selectFenceList();
+ //工厂加策略模式 获取每辆车的事件集
+ Set eventList = vehicleEventCache.getEventList(vehicleData.getVin());
+
for (String s : eventList) {
VehicleService vehicleService = SpringUtils.getBean(s);
- vehicleService.eventResolution(analyze);
+ vehicleService.eventResolution(vehicleData);
}
@@ -60,6 +64,7 @@ public class Consumer {
+
// @RabbitHandler
// public void take(String msg, Channel channel, Message message) throws IOException {
//// String messageId = message.getMessageProperties().getMessageId();
diff --git a/muyu-analyze/src/main/java/com/muyu/analyze/consumer/RabbitMqConsumer.java b/muyu-analyze/src/main/java/com/muyu/analyze/consumer/RabbitMqConsumer.java
deleted file mode 100644
index f5912bd..0000000
--- a/muyu-analyze/src/main/java/com/muyu/analyze/consumer/RabbitMqConsumer.java
+++ /dev/null
@@ -1,49 +0,0 @@
-//package com.muyu.analyze.consumer;
-//
-///**
-// * @ProjectName: cloud-vehicles
-// * @PackageName: com.muyu.analyze.consumer
-// * @Description TODO
-// * @Author HuangDaJu
-// * @Date 2024/4/8 21:43
-// * @Version 1.0
-// */
-//
-//
-//
-//
-//import com.muyu.common.redis.service.RedisService;
-//import com.rabbitmq.client.Channel;
-//import lombok.extern.log4j.Log4j2;
-//import org.springframework.amqp.core.Message;
-//import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-//import org.springframework.amqp.rabbit.annotation.RabbitListener;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.data.redis.core.StringRedisTemplate;
-//import org.springframework.stereotype.Component;
-//
-//import java.io.IOException;
-//
-//
-//@Component
-//@RabbitListener(queues = "queue")
-//@Log4j2
-//public class RabbitMqConsumer {
-//
-//
-// @Autowired
-// private RedisService redisService;
-//
-// @RabbitHandler
-// public void take(String msg, Channel channel, Message message) throws IOException {
-//
-//
-// long deliveryTag = message.getMessageProperties().getDeliveryTag();
-// System.out.println("MQ消费:"+msg);
-// channel.basicAck(deliveryTag,false);
-//
-//
-// }
-//
-//}
-//
diff --git a/muyu-analyze/src/main/java/com/muyu/analyze/mapper/VehicleMapper.java b/muyu-analyze/src/main/java/com/muyu/analyze/mapper/VehicleMapper.java
index 8843487..68bfb29 100644
--- a/muyu-analyze/src/main/java/com/muyu/analyze/mapper/VehicleMapper.java
+++ b/muyu-analyze/src/main/java/com/muyu/analyze/mapper/VehicleMapper.java
@@ -28,4 +28,7 @@ public interface VehicleMapper{
Car selectCarList(String vin);
+ List selectCarMarking(Integer markingId);
+
+
}
diff --git a/muyu-analyze/src/main/java/com/muyu/analyze/service/VehicleService.java b/muyu-analyze/src/main/java/com/muyu/analyze/service/VehicleService.java
index 7267a0c..65b03ca 100644
--- a/muyu-analyze/src/main/java/com/muyu/analyze/service/VehicleService.java
+++ b/muyu-analyze/src/main/java/com/muyu/analyze/service/VehicleService.java
@@ -1,6 +1,7 @@
package com.muyu.analyze.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.fasterxml.jackson.core.JsonProcessingException;
import com.muyu.system.common.domain.VehicleData;
@@ -14,7 +15,7 @@ import com.muyu.system.common.domain.VehicleData;
*/
public interface VehicleService {
- void eventResolution(VehicleData analyze);
+ void eventResolution(VehicleData analyze) throws JsonProcessingException;
diff --git a/muyu-analyze/src/main/java/com/muyu/analyze/service/impl/BreakdownImpl.java b/muyu-analyze/src/main/java/com/muyu/analyze/service/impl/BreakdownImpl.java
index 31303f8..c7c20ce 100644
--- a/muyu-analyze/src/main/java/com/muyu/analyze/service/impl/BreakdownImpl.java
+++ b/muyu-analyze/src/main/java/com/muyu/analyze/service/impl/BreakdownImpl.java
@@ -1,20 +1,18 @@
package com.muyu.analyze.service.impl;
-import com.alibaba.fastjson.JSON;
-
import com.muyu.analyze.service.VehicleService;
import com.muyu.analyze.utils.StateConstant;
-
-
import com.muyu.business.domain.FaultLogs;
+import com.muyu.common.core.constant.MQQueueConstants;
+import com.muyu.common.core.utils.uuid.IdUtils;
import com.muyu.common.redis.service.RedisService;
import com.muyu.system.common.domain.VehicleData;
import lombok.extern.slf4j.Slf4j;
-
-
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import javax.servlet.http.HttpServletRequest;
import java.util.HashSet;
import java.util.concurrent.TimeUnit;
@@ -28,8 +26,14 @@ import java.util.concurrent.TimeUnit;
*/
@Service("breakdown")
@Slf4j
+
public class BreakdownImpl implements VehicleService{
+ @Autowired
+ private RabbitTemplate rabbitTemplate;
+
+ @Autowired
+ private HttpServletRequest request;
@Autowired
private RedisService redisService;
@@ -221,6 +225,27 @@ public class BreakdownImpl implements VehicleService{
// 设置过期时间
redisService.expire(key, 20, TimeUnit.MINUTES);
+
+
+
+// log.info("功能描述: xx,请求URI:{},请求方式: {},请求参数: {}",
+// request.getRequestURI(),request.getMethod(),user);
+// rabbitTemplate.convertAndSend(RabbitMQConfig.delExchange,RabbitMQConfig.routingKey,user,message -> {
+// message.getMessageProperties().setMessageId(UUID.randomUUID().toString());
+// return message;
+// },new CorrelationData(UUID.randomUUID().toString()));
+
+
+ rabbitTemplate.convertAndSend(MQQueueConstants.FAULT_QUEUE, faultLogsAddReq, message -> {
+ message.getMessageProperties().setMessageId(IdUtils.fastSimpleUUID());
+ return message;
+ });
+
+ log.info("车辆VIN:"+vehicleData.getVin()+"故障事件已记录");
+ log.info("故障事件结束");
+
+
+
log.info("车辆VIN:"+vehicleData.getVin()+"故障事件已记录");
log.info("故障事件结束");
}else{
@@ -230,5 +255,9 @@ public class BreakdownImpl implements VehicleService{
+
+
+
+
}
}
diff --git a/muyu-analyze/src/main/java/com/muyu/analyze/service/impl/FenceAlarmImpl.java b/muyu-analyze/src/main/java/com/muyu/analyze/service/impl/FenceAlarmImpl.java
index 2305577..ca349a2 100644
--- a/muyu-analyze/src/main/java/com/muyu/analyze/service/impl/FenceAlarmImpl.java
+++ b/muyu-analyze/src/main/java/com/muyu/analyze/service/impl/FenceAlarmImpl.java
@@ -1,14 +1,20 @@
package com.muyu.analyze.service.impl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.muyu.analyze.mapper.VehicleMapper;
import com.muyu.analyze.service.VehicleService;
-import com.muyu.business.domain.AlarmLogs;
-import com.muyu.common.redis.service.RedisService;
+import com.muyu.business.domain.FaultLogs;
import com.muyu.business.domain.Fence;
+import com.muyu.common.core.constant.MQQueueConstants;
+import com.muyu.common.core.utils.DateUtils;
+import com.muyu.common.core.utils.uuid.IdUtils;
+import com.muyu.common.redis.service.RedisService;
import com.muyu.system.common.domain.Car;
import com.muyu.system.common.domain.VehicleData;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -38,10 +44,11 @@ public class FenceAlarmImpl implements VehicleService {
@Autowired
private VehicleMapper vehicleMapper;
-
+ @Autowired
+ private RabbitTemplate rabbitTemplate;
@Override
- public void eventResolution(VehicleData analyze) {
+ public void eventResolution(VehicleData analyze) throws JsonProcessingException {
Fence fence = new Fence();
//车的vin
String vin = analyze.getVin();
@@ -52,16 +59,95 @@ public class FenceAlarmImpl implements VehicleService {
//纬度
double pointLat = parseDouble(analyze.getLatitude());
- //这里修改为1对多的 电子围栏 目前是一对一
+ //存set的围栏
+ Map fence1 = redisService.getCacheMap("fence");
+ //这里修改为1对多的 电子围栏 目前是一对一
Car car =vehicleMapper.selectCarList(vin);
- String carFenceId = car.getCarFenceId();
-
+ //车的标识
+ String carFenceId = car.getCarMarking();
String[] split1 = carFenceId.split(",");
- Map fence1 = redisService.getCacheMap("fence");
+ //车的查询对应的围栏
+ for (String markingId : split1) {
+
+ List carMarking = vehicleMapper.selectCarMarking(Integer.valueOf(markingId));
+
+ for (String markingFenceIds : carMarking) {
+
+ String[] split = markingFenceIds.split(",");
+
+
+ for (Map.Entry entry : fence1.entrySet()) {
+ for (String s : split) {
+ String key = entry.getKey();
+ if (s.equals(key)){
+ String value = (String) entry.getValue();
+
+ String[] split2 = value.split(";");
+
+ boolean withinFence = isWithinFence(pointLat, pointLng, Arrays.asList(split2));
+
+ if (withinFence){
+ log.info("车辆vin:"+vin+"------在电子围栏"+key+"---正常行驶---");
+ }else {
+ log.info("车辆vin:"+vin+"------驶出电子围栏"+key+"---报警---");
+
+ String key1 = "fenceType1";
+
+ HashSet hashSet = new HashSet<>();
+ fence.setCarVin(vin);
+ fence.setFenceType("驶出");
+ fence.setFenceId(Integer.valueOf(key));
+
+ hashSet.add(fence);
+ redisService.setCacheSet(key1,hashSet);
+ redisService.expire(key1, 20, TimeUnit.MINUTES); // 设置过期时间
+ }
+
+
+ FaultLogs faultLogs = new FaultLogs();
+ faultLogs.setCarVin(vin);
+ faultLogs.setFaultCode("WEILAN");
+ faultLogs.setStartAlarmTime(DateUtils.getNowDate());
+ faultLogs.setAlarmFlag("Y");
+ faultLogs.setDisposeStatus("1");
+
+//对象变json
+ ObjectMapper objectMapper = new ObjectMapper();
+ String faultLog = objectMapper.writeValueAsString(faultLogs);
+
+ rabbitTemplate.convertAndSend(MQQueueConstants.ALARM_QUEUE, faultLog , message -> {
+ message.getMessageProperties().setMessageId(IdUtils.fastSimpleUUID());
+ return message;
+ });
+
+
+
+
+ }
+ }
+ }
+
+
+
+
+ }
+ System.out.println(carMarking);
+
+ }
+
+
+
+
+
+
+
+
+
+
@@ -92,21 +178,22 @@ public class FenceAlarmImpl implements VehicleService {
redisService.expire(key1, 20, TimeUnit.MINUTES); // 设置过期时间
}
-// if (withinFence){
-// log.info("车辆vin:"+vin+"------驶入禁行区----报警");
-//
-// String key1 = "fenceType1";
-// HashSet hashSet = new HashSet<>();
-// fence.setCarVin(vin);
-// fence.setFenceType("驶入");
-// fence.setFenceId(Integer.valueOf(key));
-// hashSet.add(fence);
-// redisService.setCacheSet(key1,hashSet);
-// redisService.expire(key1, 20, TimeUnit.MINUTES); // 设置过期时间
-//
-// }else{
-// log.info("车辆vin:"+vin+"------在安全区");
-// }
+
+ FaultLogs faultLogs = new FaultLogs();
+ faultLogs.setCarVin(vin);
+ faultLogs.setFaultCode("GTX007");
+ faultLogs.setStartAlarmTime(DateUtils.getNowDate());
+ faultLogs.setAlarmFlag("Y");
+ faultLogs.setDisposeStatus("1");
+
+
+ rabbitTemplate.convertAndSend(MQQueueConstants.ALARM_QUEUE, faultLogs , message -> {
+ message.getMessageProperties().setMessageId(IdUtils.fastSimpleUUID());
+ return message;
+ });
+
+
+
}
}
diff --git a/muyu-analyze/src/main/java/com/muyu/analyze/service/impl/StoredEventImpl.java b/muyu-analyze/src/main/java/com/muyu/analyze/service/impl/StoredEventImpl.java
index 2423ccb..527e782 100644
--- a/muyu-analyze/src/main/java/com/muyu/analyze/service/impl/StoredEventImpl.java
+++ b/muyu-analyze/src/main/java/com/muyu/analyze/service/impl/StoredEventImpl.java
@@ -29,6 +29,7 @@ public class StoredEventImpl implements VehicleService {
@Autowired
private VehicleMapper vehicleMapper;
+
@Autowired
private RedisService redisService;
diff --git a/muyu-analyze/src/main/java/com/muyu/analyze/utils/AnalyzeUtils.java b/muyu-analyze/src/main/java/com/muyu/analyze/utils/AnalyzeUtils.java
index bd43a3a..71e18d2 100644
--- a/muyu-analyze/src/main/java/com/muyu/analyze/utils/AnalyzeUtils.java
+++ b/muyu-analyze/src/main/java/com/muyu/analyze/utils/AnalyzeUtils.java
@@ -18,9 +18,14 @@ import java.util.Stack;
public class AnalyzeUtils {
- public static VehicleData analyze(String aa) {
+ public static VehicleData analyze(String msg) {
VehicleData vehicleData = new VehicleData();
+
+
+ String aa = msg.substring(1).substring(0, msg.substring(1).length() - 2);
+
+
/**
* 车辆VIN private String vin;
*/
diff --git a/muyu-analyze/src/main/resources/bootstrap.yml b/muyu-analyze/src/main/resources/bootstrap.yml
index 611b88a..48c5bfd 100644
--- a/muyu-analyze/src/main/resources/bootstrap.yml
+++ b/muyu-analyze/src/main/resources/bootstrap.yml
@@ -3,12 +3,6 @@ server:
port: 9008
# Spring
spring:
- kafka:
- bootstrap-servers: 10.10.26.4:9092
- consumer:
- group-id: group
- auto-offset-reset: earliest
-
application:
# 应用名称
@@ -30,3 +24,8 @@ spring:
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ kafka:
+ bootstrap-servers: 10.10.26.4:9092
+ consumer:
+ group-id: group
+ auto-offset-reset: earliest
diff --git a/muyu-analyze/src/main/resources/mapper/business/StoredEventMapper.xml b/muyu-analyze/src/main/resources/mapper/business/StoredEventMapper.xml
index 7e92562..0f85052 100644
--- a/muyu-analyze/src/main/resources/mapper/business/StoredEventMapper.xml
+++ b/muyu-analyze/src/main/resources/mapper/business/StoredEventMapper.xml
@@ -17,6 +17,12 @@
select car_vin,fence_encoding,fence_id,fence_type,fence_radius from car left join fence on car.car_fence_id=fence.fence_id
+
+
+
diff --git a/muyu-common/muyu-common-core/pom.xml b/muyu-common/muyu-common-core/pom.xml
index 468f34a..7885af3 100644
--- a/muyu-common/muyu-common-core/pom.xml
+++ b/muyu-common/muyu-common-core/pom.xml
@@ -16,7 +16,12 @@
-
+
+
+ org.springframework.kafka
+ spring-kafka
+ 2.8.1
+
org.springframework.cloud
diff --git a/muyu-common/muyu-common-core/src/main/java/com/muyu/common/core/constant/MQQueueConstants.java b/muyu-common/muyu-common-core/src/main/java/com/muyu/common/core/constant/MQQueueConstants.java
new file mode 100644
index 0000000..5d3046a
--- /dev/null
+++ b/muyu-common/muyu-common-core/src/main/java/com/muyu/common/core/constant/MQQueueConstants.java
@@ -0,0 +1,23 @@
+package com.muyu.common.core.constant;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * MQ常量
+ * @author LiYongJie
+ * @date 2024/4/9
+ */
+@Slf4j
+@Component
+public class MQQueueConstants {
+ /**
+ * 报警队列
+ */
+ public static final String ALARM_QUEUE = "alarm";
+
+ /**
+ * 故障队列
+ */
+ public static final String FAULT_QUEUE = "fault";
+}
diff --git a/muyu-common/muyu-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java b/muyu-common/muyu-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java
index 4fb4f78..b96ff5f 100644
--- a/muyu-common/muyu-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java
+++ b/muyu-common/muyu-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java
@@ -2,15 +2,14 @@ package com.muyu.common.redis.service;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.BoundSetOperations;
-import org.springframework.data.redis.core.HashOperations;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.concurrent.TimeUnit;
+import static net.sf.jsqlparser.parser.feature.Feature.setOperation;
+
/**
* spring redis 工具类
*
@@ -174,6 +173,19 @@ public class RedisService
}
return setOperation;
}
+ /**
+ * 缓存zSet
+ *
+ * @param key 缓存键值
+ * @param setValue 缓存的数据
+ * @param score 缓存的数据
+ * @return 缓存数据的对象
+ */
+ public BoundZSetOperations setCacheZSet(final String key, final T setValue, double score) {
+ BoundZSetOperations boundZSetOperations = redisTemplate.boundZSetOps(key);
+ boundZSetOperations.add(setValue, score);
+ return boundZSetOperations;
+ }
/**
* 缓存Set
*
diff --git a/muyu-load-center/pom.xml b/muyu-load-center/pom.xml
new file mode 100644
index 0000000..0b41cb6
--- /dev/null
+++ b/muyu-load-center/pom.xml
@@ -0,0 +1,120 @@
+
+
+ 4.0.0
+
+ com.muyu
+ muyu
+ 3.6.3
+
+
+ muyu-load-center
+
+
+ 20
+ 20
+ UTF-8
+
+
+
+ com.muyu
+ muyu-common-core
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.fox.version}
+
+
+
+
+ com.mysql
+ mysql-connector-j
+
+
+
+
+ com.muyu
+ muyu-common-datasource
+
+
+
+
+ com.muyu
+ muyu-common-datascope
+
+
+
+
+ com.muyu
+ muyu-common-log
+
+
+
+
+ com.muyu
+ muyu-common-swagger
+
+
+ com.muyu
+ muyu-file-remote
+
+
+ com.aliyun
+ aliyun-java-sdk-ecs
+ 4.5.0
+
+
+ com.aliyun
+ aliyun-java-sdk-core
+ 4.5.10
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+
+
+
+
+
diff --git a/muyu-load-center/src/main/java/com/aliyun/sample/AliyunEcsInstanceCreator.java b/muyu-load-center/src/main/java/com/aliyun/sample/AliyunEcsInstanceCreator.java
new file mode 100644
index 0000000..6650206
--- /dev/null
+++ b/muyu-load-center/src/main/java/com/aliyun/sample/AliyunEcsInstanceCreator.java
@@ -0,0 +1,73 @@
+package com.aliyun.sample;
+
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.ecs.model.v20140526.CreateInstanceRequest;
+import com.aliyuncs.ecs.model.v20140526.CreateInstanceResponse;
+import com.aliyuncs.exceptions.ClientException;
+import com.aliyuncs.profile.DefaultProfile;
+
+/**
+ * 阿里云ECS实例创建器示例类。
+ * 本类用于演示如何通过阿里云SDK在Java中创建一个ECS实例。
+ */
+public class AliyunEcsInstanceCreator {
+
+ /**
+ * 主函数:创建一个阿里云ECS实例。
+ *
+ * @param args 命令行参数(未使用)
+ *
+ * 注意:本示例中使用的AccessKeyId、AccessKeySecret、regionId、imageId、instanceType等信息为示意,
+ * 实际使用时需要替换为有效的阿里云账号信息。
+ */
+ public static void main(String[] args) {
+ // 设置阿里云账号的认证信息
+ String accessKeyId = "LTAI5tANGefs2gi8nsu4AoSZ";
+ String accessKeySecret = "Ut5RaJvvG7dP8hgK82qjdtvyUA6x8g";
+ String regionId = "cn-zhangjiakou"; // 实例所在的地域ID
+ String instanceName = "Test"; // 实例名称
+ String imageId = "m-8vb1u2bhootky8sgg2ft"; // 镜像ID
+ String instanceType = "ecs.t6-c2m1.large"; // 实例规格
+
+ // 初始化阿里云客户端
+ DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
+ IAcsClient client = new DefaultAcsClient(profile);
+
+ // 配置创建实例的请求参数
+ CreateInstanceRequest request = new CreateInstanceRequest();
+ request.setImageId(imageId); // 设置使用的镜像ID
+ request.setInstanceName(instanceName); // 设置实例名称
+ request.setInstanceType(instanceType); // 设置实例规格
+
+ // 配置抢占式实例的属性
+ request.setInstanceChargeType("PostPaid"); // 实例付费类型,此处为按量付费
+ request.setSpotStrategy("SpotWithPriceLimit"); // 抢占式实例的出价策略,设置为有限价格
+
+
+ request.setImageId(imageId); // 设置使用的镜像ID
+ request.setInstanceName(instanceName); // 设置实例名称
+ request.setInstanceType(instanceType); // 设置实例规格
+
+
+ // 配置网络和公网带宽
+ request.setVSwitchId("vpc-8vbbw0obosvd5p5i2y5nq"); // 设置实例所在的子网ID
+ request.setInternetMaxBandwidthOut(5); // 设置公网出带宽上限,单位为Mbps
+
+
+ // 配置抢占式实例的属性
+ request.setInstanceChargeType("PostPaid"); // 实例付费类型,此处为按量付费
+ request.setSpotStrategy("SpotWithPriceLimit"); // 抢占式实例的出价策略,设置为有限价格
+
+ request.setSpotPriceLimit(1F); // 设置抢占式实例的最高每小时价格限制
+
+
+ // 发送创建实例的请求并处理响应
+ try {
+ CreateInstanceResponse response = client.getAcsResponse(request);
+ System.out.println("Instance Created: " + response.getInstanceId());
+ } catch (ClientException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/muyu-load-center/src/main/java/com/muyu/loadCenter/MuYuLoadCenterApplication.java b/muyu-load-center/src/main/java/com/muyu/loadCenter/MuYuLoadCenterApplication.java
new file mode 100644
index 0000000..7aa1542
--- /dev/null
+++ b/muyu-load-center/src/main/java/com/muyu/loadCenter/MuYuLoadCenterApplication.java
@@ -0,0 +1,36 @@
+package com.muyu.loadCenter;
+
+import com.muyu.common.security.annotation.EnableCustomConfig;
+import com.muyu.common.security.annotation.EnableRyFeignClients;
+import com.muyu.common.swagger.annotation.EnableCustomSwagger2;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * 系统模块
+ *
+ * @author muyu
+ */
+@EnableCustomConfig
+@EnableCustomSwagger2
+@EnableRyFeignClients
+@SpringBootApplication
+@EnableScheduling
+public class MuYuLoadCenterApplication
+{
+ public static void main(String[] args)
+ {
+ SpringApplication.run(MuYuLoadCenterApplication.class, args);
+ System.out.println("(♥◠‿◠)ノ゙ 负载中心模块启动成功 ლ(´ڡ`ლ)゙ \n" +
+ " .-------. ____ __ \n" +
+ " | _ _ \\ \\ \\ / / \n" +
+ " | ( ' ) | \\ _. / ' \n" +
+ " |(_ o _) / _( )_ .' \n" +
+ " | (_,_).' __ ___(_ o _)' \n" +
+ " | |\\ \\ | || |(_,_)' \n" +
+ " | | \\ `' /| `-' / \n" +
+ " | | \\ / \\ / \n" +
+ " ''-' `'-' `-..-' ");
+ }
+}
diff --git a/muyu-load-center/src/main/java/com/muyu/loadCenter/Service/ClientRegController.java b/muyu-load-center/src/main/java/com/muyu/loadCenter/Service/ClientRegController.java
new file mode 100644
index 0000000..46a629c
--- /dev/null
+++ b/muyu-load-center/src/main/java/com/muyu/loadCenter/Service/ClientRegController.java
@@ -0,0 +1,86 @@
+package com.muyu.loadCenter.Service;
+
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.utils.ip.IpUtils;
+import com.muyu.common.redis.service.RedisService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashSet;
+import java.util.UUID;
+
+/**
+ * @ProjectName: cloud-vehicles
+ * @PackageName: com.muyu
+ * @Description TODO
+ * @Author HuangDaJu
+ * @Date 2024/4/10 09:01
+ * @Version 1.0
+ */
+
+
+@RestController
+@Slf4j
+@RequestMapping("/reg")
+public class ClientRegController {
+ @Autowired
+ private HttpServletRequest request;
+ @Autowired
+ private RedisService redisService;
+ HashSet tokenSet=new HashSet<>();
+
+ /**
+ * 申请注册
+ * http://muyu。
+ * @return
+ */
+ @PostMapping("/apply-for")
+ public Result applyForRegistration(){
+ //生成令牌
+ String token = UUID.randomUUID().toString().replace("-", "");
+ tokenSet.add(token);
+ log.info("程序生成令牌:{}",token);
+ return Result.success(token);
+
+ }
+ /**
+ * 注册收集节点
+ */
+ @PostMapping
+ public Result reg(@RequestBody NodeRegReq nodeRegReq){
+ log.info("客户端-[{}] 注册:{}", IpUtils.getIpAddr(request),nodeRegReq);
+ redisService.setCacheZSet("负载key",nodeRegReq.getClientId(),0.0);
+ //基本信息存储
+ redisService.setCacheObject("客户端id","客户端基本信息:ip、端口、负载......");
+
+ return Result.success();
+ }
+
+
+ @GetMapping("/test")
+ public Result test(){
+ return Result.success();
+ }
+
+
+
+ public Result getConnectionOption(@RequestParam("token") String token){
+ //验证token
+
+// ZSetOperations.TypedTuple key = redisTemplate.opsForZSet().popMin("负载key");
+
+// String clientId = (String)key.getValue();
+
+ return Result.success();
+ }
+
+
+
+
+
+
+
+}
diff --git a/muyu-load-center/src/main/java/com/muyu/loadCenter/Service/NodeRegReq.java b/muyu-load-center/src/main/java/com/muyu/loadCenter/Service/NodeRegReq.java
new file mode 100644
index 0000000..0dbb1f3
--- /dev/null
+++ b/muyu-load-center/src/main/java/com/muyu/loadCenter/Service/NodeRegReq.java
@@ -0,0 +1,30 @@
+package com.muyu.loadCenter.Service;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @ProjectName: cloud-vehicles
+ * @PackageName: com.muyu.loadCenter.Service
+ * @Description TODO
+ * @Author HuangDaJu
+ * @Date 2024/4/10 09:16
+ * @Version 1.0
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class NodeRegReq {
+
+ /**
+ * 客户端ID
+ */
+ private String clientId;
+ /**
+ * 令牌
+ */
+ private String token;
+}
diff --git a/muyu-load-center/src/main/java/com/muyu/loadCenter/kafka/KafkaConfig.java b/muyu-load-center/src/main/java/com/muyu/loadCenter/kafka/KafkaConfig.java
new file mode 100644
index 0000000..55843a7
--- /dev/null
+++ b/muyu-load-center/src/main/java/com/muyu/loadCenter/kafka/KafkaConfig.java
@@ -0,0 +1,47 @@
+package com.muyu.loadCenter.kafka;
+
+import org.apache.kafka.clients.consumer.ConsumerConfig;
+import org.apache.kafka.clients.producer.ProducerConfig;
+import org.apache.kafka.common.serialization.StringDeserializer;
+import org.apache.kafka.common.serialization.StringSerializer;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+import java.util.Properties;
+
+@Configuration
+@Component
+public class KafkaConfig {
+
+ // Kafka Bootstrap Servers
+ public static final String BOOTSTRAP_SERVERS = "10.10.26.4:9092";
+
+ // 默认主题
+ public static final String DEFAULT_TOPIC = "test";
+
+ public static final String DEFAULT_KEY = "10001";
+
+
+ public static Properties properties1(){
+ // 1;构建 Properties 对象 存放 kafka 生产者配置信息
+ Properties properties1 = new Properties();
+ // 设置 kafka 连接地址(从配置文件/环境变量获取)
+ properties1.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, KafkaConfig.BOOTSTRAP_SERVERS);
+ // 设置 键值 序列化
+ properties1.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer .class.getName());
+ properties1.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
+ return properties1;
+ }
+
+
+ public static Properties properties2(){
+ Properties properties2 = new Properties();
+ properties2.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "10.10.26.4:9092");
+ properties2.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
+ properties2.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
+ properties2.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group");
+
+ return properties2;
+ }
+
+}
diff --git a/muyu-load-center/src/main/java/com/muyu/loadCenter/mqttx/ConversionUtil.java b/muyu-load-center/src/main/java/com/muyu/loadCenter/mqttx/ConversionUtil.java
new file mode 100644
index 0000000..71bb386
--- /dev/null
+++ b/muyu-load-center/src/main/java/com/muyu/loadCenter/mqttx/ConversionUtil.java
@@ -0,0 +1,65 @@
+package com.muyu.loadCenter.mqttx;
+
+import java.nio.charset.StandardCharsets;
+
+public class ConversionUtil {
+
+ /**
+ * 字符串转化成为16进制字符串
+ * @param s
+ * @return
+ */
+ public static String strToSixteen(String s) {
+ StringBuilder sb = new StringBuilder();
+ int length = s.length();
+ for (int i = 0; i < length; i++) {
+ int ch = s.charAt(i);
+ String s4 = Integer.toHexString(ch);
+ sb.append(s4 + " ");
+ }
+ return sb.toString();
+ }
+
+ public static void main (String[] args) {
+// String str = "\n" +
+// "Sinus
80No Change0";
+// String strToSixteen = strToSixteen(str);
+// System.out.println(str);
+// System.out.println(str.length());
+// System.out.println(strToSixteen);
+// System.out.println(strToSixteen.replace(" ", "").length());
+
+ String hexStr = "7E 76 69 6e 33 39 35 34 64 30 62 32 30 64 32 35 34 31 31 37 31 32 37 32 30 32 36 38 36 32 37 31 31 36 2e 36 37 38 38 39 30 30 33 39 2e 35 32 32 37 39 33 30 37 32 2e 30 30 30 38 2e 36 36 30 30 30 30 30 30 30 35 30 34 30 30 30 33 37 30 30 30 32 33 37 36 37 30 30 30 30 44 33 30 36 30 39 2e 36 30 30 31 30 30 30 30 30 31 34 32 39 34 37 33 32 30 31 30 36 30 30 30 32 35 34 30 30 31 31 37 35 36 30 30 30 36 38 31 39 34 2e 31 38 30 30 30 30 34 37 30 30 30 30 31 33 39 30 30 30 30 35 38 32 30 30 30 34 30 30 30 33 30 30 30 31 37 30 30 30 30 37 38 30 30 30 30 36 30 30 30 30 30 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 d4 7E";
+ String hexStringToString = hexStringToString(hexStr);
+
+
+ System.out.println(hexStringToString);
+
+ }
+
+ /**
+ * 16进制转换成为string类型字符串
+ * @param s
+ * @return
+ */
+ public static String hexStringToString(String s) {
+ if (s == null || s.equals("")) {
+ return null;
+ }
+ s = s.replace(" ", "");
+ byte[] baKeyword = new byte[s.length() / 2];
+ for (int i = 0; i < baKeyword.length; i++) {
+ try {
+ baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ try {
+ s = new String(baKeyword, StandardCharsets.UTF_8);
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ }
+ return s;
+ }
+}
diff --git a/muyu-load-center/src/main/java/com/muyu/loadCenter/mqttx/MqttSubscriber.java b/muyu-load-center/src/main/java/com/muyu/loadCenter/mqttx/MqttSubscriber.java
new file mode 100644
index 0000000..213b1d6
--- /dev/null
+++ b/muyu-load-center/src/main/java/com/muyu/loadCenter/mqttx/MqttSubscriber.java
@@ -0,0 +1,137 @@
+package com.muyu.loadCenter.mqttx;
+
+import com.alibaba.fastjson2.JSON;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.muyu.loadCenter.kafka.KafkaConfig;
+import com.muyu.loadCenter.utils.AnalyzeUtils;
+import com.muyu.system.common.domain.VehicleData;
+import org.apache.kafka.clients.producer.KafkaProducer;
+import org.apache.kafka.clients.producer.ProducerRecord;
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.eclipse.paho.client.mqttv3.*;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.Properties;
+
+import static com.muyu.loadCenter.mqttx.ConversionUtil.hexStringToString;
+
+/**
+ * @ProjectName: cloud-vehicles
+ * @PackageName: com.muyu.system.mqtt
+ * @Description TODO
+ * @Author XiaoFan
+ * @Date 2024/3/31 19:49
+ * @Version 1.0
+ */
+@Component
+public class MqttSubscriber {
+ //MQTT服务器地址
+
+ private static String broker="tcp://10.10.26.5:1883";
+ //客户端ID,可根据实际情况自定义
+ private static String clientId="mqttx_1c945161";
+ //订阅的主题
+ private static String topic="test";
+ //消息服务质量
+ private static int qos=1;
+ private static Thread daemonThread;
+
+// @PostConstruct
+// public void init() {
+// daemonThread = new Thread(() -> {
+// sendCode();
+// });
+// daemonThread.setDaemon(true);
+// daemonThread.start();
+
+
+ @Scheduled(cron = "0/1 * * * * * ")
+// @PostConstruct
+ public void sendCode(){
+
+ //消息持久化方式,这里选择内存持久化
+ MemoryPersistence persistence=new MemoryPersistence();
+
+ try {
+ //创建MQTT客户端实例
+ MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
+ //设置连接选项
+ MqttConnectOptions connOpts = new MqttConnectOptions();
+ connOpts.setCleanSession(true);
+ //打印连接信息
+ System.out.println("Connecting to broker:" +broker);
+ //连接到MQTT代理
+ sampleClient.connect(connOpts);
+ //打印连接成功信息
+ System.out.println("Connected");
+ //打印订阅信息
+ System.out.println("Subscribing to topic:" +topic);
+ //订阅指定主题
+ sampleClient.subscribe(topic,qos);
+
+ //设置消息到打的回调函数
+ sampleClient.setCallback(new MqttCallback() {
+ @Override
+ public void connectionLost(Throwable throwable) {
+ //连接丢失时的处理逻辑
+ System.out.println("Connection lost!");
+ }
+
+ @Override
+ public void messageArrived(String topic, MqttMessage message) throws Exception {
+ String hexString = new String(message.getPayload());
+
+ //数据编译
+ String msg1 = hexStringToString(hexString);
+
+ //切割成对象
+ VehicleData analyze = AnalyzeUtils.analyze(msg1);
+
+ //对象变json
+ ObjectMapper objectMapper = new ObjectMapper();
+ String msg = objectMapper.writeValueAsString(analyze);
+
+ //接收到消息时的处理逻辑
+
+ Properties properties1 = KafkaConfig.properties1();
+ KafkaProducer kafkaProducer = new KafkaProducer<>(properties1);
+ // 3: 发送消息
+ // 封装发送消息对象
+ ProducerRecord record = new ProducerRecord<>(KafkaConfig.DEFAULT_TOPIC, KafkaConfig.DEFAULT_KEY, msg);
+
+ // 异步发送并处理结果
+ kafkaProducer.send(record);
+ }
+
+ @Override
+ public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
+
+ System.out.println("我是发送成功后要注册到车辆网关的"+iMqttDeliveryToken.toString());
+ System.out.println("我是发送成功后要注册到车辆网关的"+iMqttDeliveryToken.getMessageId());
+ System.out.println("我是发送成功后要注册到车辆网关的"+iMqttDeliveryToken.getActionCallback());
+
+
+ //消息发送完成后的处理逻辑
+ //在这个示例中不做处理
+ }
+ });
+
+ //循环等待接收消息
+ while (true){
+ Thread.sleep(1000);//每隔一秒检查一次是否有新消息
+ }
+ }catch (MqttException | InterruptedException me){
+ System.out.println("msg"+me.getMessage());
+ System.out.println("loc"+me.getLocalizedMessage());
+ System.out.println("cause"+me.getCause());
+ System.out.println("excep"+me);
+ me.printStackTrace();
+ }
+ }
+
+
+
+}
diff --git a/muyu-load-center/src/main/java/com/muyu/loadCenter/utils/AnalyzeUtils.java b/muyu-load-center/src/main/java/com/muyu/loadCenter/utils/AnalyzeUtils.java
new file mode 100644
index 0000000..345cebc
--- /dev/null
+++ b/muyu-load-center/src/main/java/com/muyu/loadCenter/utils/AnalyzeUtils.java
@@ -0,0 +1,324 @@
+package com.muyu.loadCenter.utils;
+
+
+
+import com.muyu.system.common.domain.VehicleData;
+
+import java.math.BigDecimal;
+
+/**
+ * @ProjectName: cloud-vehicles
+ * @PackageName: com.muyu.analyze.config
+ * @Description TODO
+ * @Author HuangDaJu
+ * @Date 2024/4/2 21:33
+ * @Version 1.0
+ */
+
+public class AnalyzeUtils {
+
+ public static VehicleData analyze(String msg) {
+
+ VehicleData vehicleData = new VehicleData();
+
+
+ String aa = msg.substring(1).substring(0, msg.substring(1).length() - 2);
+
+
+ /**
+ * 车辆VIN private String vin;
+ */
+ String vin = aa.substring(0, 17);
+ vehicleData.setVin(vin);
+
+ /**
+ * 毫秒值 private String dateTime;
+ */
+ String time = aa.substring(17, 30);
+ vehicleData.setDateTime(time);
+
+ /**
+ * 行驶路线 private String drivingRoute;
+ */
+
+ /**
+ * 经度 private String longitude;
+ */
+
+ String longitude = aa.substring(30, 41);
+ vehicleData.setLongitude(longitude);
+
+ /**
+ * 纬度 private String latitude;
+ */
+
+ String latitude = aa.substring(41, 51);
+ vehicleData.setLatitude(latitude);
+
+ /**
+ * 速度 private String speed;
+ */
+
+ String speed = aa.substring(51, 57);
+ vehicleData.setSpeed(speed);
+
+ /**
+ * 里程 private BigDecimal mileage;
+ */
+
+ String mileage = aa.substring(57, 68);
+ vehicleData.setMileage(new BigDecimal(mileage));
+
+ /**
+ * 总电压 private String voltage;
+ */
+
+ String voltage = aa.substring(68, 74);
+ vehicleData.setVoltage(voltage);
+
+ /**
+ * 总电流 private String current;
+ */
+
+ String current = aa.substring(74, 79);
+ vehicleData.setCurrent(current);
+
+
+ /**
+ * 绝缘电阻 private String resistance;
+ */
+ String resistance = aa.substring(79, 88);
+ vehicleData.setResistance(resistance);
+
+ /**
+ * 档位 private String gear = "P";
+ */
+
+ String gear = aa.substring(88, 89);
+ vehicleData.setGear(gear);
+
+
+ /**
+ * 加速踏板行程值 private String accelerationPedal;
+ */
+
+ String accelerationPedal = aa.substring(89, 91);
+ vehicleData.setAccelerationPedal(accelerationPedal);
+
+
+ /**
+ * 制动踏板行程值 private String brakePedal;
+ */
+
+ String brakePedal =aa.substring(91,93);
+ vehicleData.setBrakePedal(brakePedal);
+
+ /**
+ * 燃料消耗率 private String fuelConsumptionRate;
+ */
+
+ String fuelConsumptionRate =aa.substring(93,98);
+ vehicleData.setFuelConsumptionRate(fuelConsumptionRate);
+
+ /**
+ * 电机控制器温度private String motorControllerTemperature;
+ */
+
+ String motorControllerTemperature =aa.substring(98,104);
+ vehicleData.setMotorControllerTemperature(motorControllerTemperature);
+
+
+
+ /**
+ * 电机转速 private String motorSpeed;
+ */
+
+ String motorSpeed =aa.substring(104,109);
+ vehicleData.setMotorSpeed(motorSpeed);
+
+
+ /**
+ * 电机转矩 private String motorTorque;
+ */
+ String motorTorque = aa.substring(109, 113);
+ vehicleData.setMotorTorque(motorTorque);
+
+ /**
+ * 电机温度 private String motorTemperature;
+ */
+ String motorTemperature = aa.substring(113, 119);
+ vehicleData.setMotorTemperature(motorTemperature);
+
+ /**
+ * 电机电压 private String motorVoltage;
+ */
+
+ String motorVoltage = aa.substring(119, 124);
+ vehicleData.setMotorVoltage(motorVoltage);
+
+ /**
+ * 电机电流private String motorCurrent;
+ */
+
+
+// 电机电流: 10446000
+ String motorCurrent = aa.substring(124, 132);
+ vehicleData.setMotorCurrent(motorCurrent);
+
+// 动力电池剩余电量 SOC: 44103.
+ /**
+ * 动力电池剩余电量SOC private BigDecimal remainingBattery;
+ */
+
+ String remainingBattery = aa.substring(132, 138);
+ vehicleData.setRemainingBattery(remainingBattery);
+
+
+// 当前状态允许的最大反馈功率: 400000
+ /**
+ * 当前状态允许的最大反馈功率private String maximumFeedbackPower;
+ */
+ String maximumFeedbackPower = aa.substring(138, 144);
+ vehicleData.setMaximumFeedbackPower(maximumFeedbackPower);
+
+
+// 当前状态允许最大放电功率: 130000
+ /**
+ * 当前状态允许最大放电功率 private String maximumDischargePower;
+ */
+
+ String maximumDischargePower = aa.substring(144, 150);
+ vehicleData.setMaximumDischargePower(maximumDischargePower);
+
+
+// BMS 自检计数器: 20
+ /**
+ * BMS自检计数器private String selfCheckCounter;
+ */
+
+ String selfCheckCounter = aa.substring(150, 152);
+ vehicleData.setSelfCheckCounter(selfCheckCounter);
+// 动力电池充放电电流: 00000
+ /**
+ * 动力电池充放电电流 private String totalBatteryCurrent;
+ */
+ String totalBatteryCurrent = aa.substring(152, 157);
+ vehicleData.setTotalBatteryCurrent(totalBatteryCurrent);
+
+
+// 动力电池负载端总电压 V3: 605000
+ /**
+ * 动力电池负载端总电压V3 private String totalBatteryVoltage;
+ */
+ String totalBatteryVoltage = aa.substring(157, 163);
+ vehicleData.setTotalBatteryVoltage(totalBatteryVoltage);
+
+// 单次最大电压: 4000
+ /**
+ * 单次最大电压 private String singleBatteryMaxVoltage;
+ */
+
+ String singleBatteryMaxVoltage = aa.substring(163, 167);
+ vehicleData.setSingleBatteryMaxVoltage(singleBatteryMaxVoltage);
+
+// 单体电池最低电压: 3000
+ /**
+ * 单体电池最低电压 private String singleBatteryMinVoltage;
+ */
+
+ String singleBatteryMinVoltage = aa.substring(167, 171);
+ vehicleData.setSingleBatteryMinVoltage(singleBatteryMinVoltage);
+
+// 单体电池最高温度: 650000
+ /**
+ * 单体电池最高温度 private String singleBatteryMaxTemperature;
+ */
+ String singleBatteryMaxTemperature = aa.substring(171, 177);
+ vehicleData.setSingleBatteryMaxTemperature(singleBatteryMaxTemperature);
+
+// 单体电池最低温度: 600000
+ /**
+ * 单体电池最低温度 private String singleBatteryMinTemperature;
+ */
+ String singleBatteryMinTemperature = aa.substring(177, 183);
+ vehicleData.setSingleBatteryMinTemperature(singleBatteryMinTemperature);
+
+// 动力电池可用容量: 530000
+ /**
+ * 动力电池可用容量 private String availableBatteryCapacity;
+ */
+ String availableBatteryCapacity = aa.substring(183, 189);
+ vehicleData.setAvailableBatteryCapacity(availableBatteryCapacity);
+
+
+
+// 车辆状态: 0
+ String vehicleStatus = aa.substring(189, 190);
+ vehicleData.setVehicleStatus(Integer.parseInt(vehicleStatus));
+
+// 充电状态: 1
+ String chargingStatus = aa.substring(190, 191);
+ vehicleData.setChargingStatus(Integer.parseInt(chargingStatus));
+// 运行状态: 1
+ String operatingStatus = aa.substring(191, 192);
+ vehicleData.setOperatingStatus(Integer.parseInt(operatingStatus));
+
+// SOC: 1
+ String socStatus = aa.substring(192, 193);
+ vehicleData.setSocStatus(Integer.parseInt(socStatus));
+
+// 可充电储能装置工作状态: 0
+ String chargingEnergyStorageStatus = aa.substring(193, 194);
+ vehicleData.setChargingEnergyStorageStatus(Integer.parseInt(chargingEnergyStorageStatus));
+
+// 驱动电机状态: 1
+ String driveMotorStatus = aa.substring(194, 195);
+ vehicleData.setDriveMotorStatus(Integer.parseInt(driveMotorStatus));
+
+// 定位是否有效: 1
+ String positionStatus = aa.substring(195, 196);
+ vehicleData.setPositionStatus(Integer.parseInt(positionStatus));
+
+// EAS: 1
+ String easStatus = aa.substring(196, 197);
+ vehicleData.setEasStatus(Integer.parseInt(easStatus));
+
+// PTC: 1
+ String ptcStatus = aa.substring(197, 198);
+ vehicleData.setPtcStatus(Integer.parseInt(ptcStatus));
+
+// EPS: 1
+ String epsStatus = aa.substring(198, 199);
+ vehicleData.setEpsStatus(Integer.parseInt(epsStatus));
+
+// ABS: 1
+ String absStatus = aa.substring(199, 200);
+ vehicleData.setAbsStatus(Integer.parseInt(absStatus));
+
+// MCU: 1
+ String mcuStatus = aa.substring(200, 201);
+ vehicleData.setMcuStatus(Integer.parseInt(mcuStatus));
+
+// 动力电池加热状态: 1
+ String heatingStatus = aa.substring(201, 202);
+ vehicleData.setHeatingStatus(Integer.parseInt(heatingStatus));
+
+// 动力电池当前状态: 1
+ String batteryStatus = aa.substring(202, 203);
+ vehicleData.setBatteryStatus(Integer.parseInt(batteryStatus));
+
+// 动力电池保温状态: 1
+ String batteryInsulationStatus = aa.substring(203, 204);
+ vehicleData.setBatteryInsulationStatus(Integer.parseInt(batteryInsulationStatus));
+
+// DCDC: 1
+ String dcdcStatus = aa.substring(204, 205);
+ vehicleData.setDcdcStatus(Integer.parseInt(dcdcStatus));
+
+// CHG: 1
+ String chgStatus = aa.substring(205, 206);
+ vehicleData.setChgStatus(Integer.parseInt(chgStatus));
+
+ return vehicleData;
+ }
+}
diff --git a/muyu-load-center/src/main/resources/bootstrap.yml b/muyu-load-center/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..af7c71c
--- /dev/null
+++ b/muyu-load-center/src/main/resources/bootstrap.yml
@@ -0,0 +1,25 @@
+# Tomcat
+server:
+ port: 9009
+# Spring
+spring:
+ application:
+ # 应用名称
+ name: muyu-load-center
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: 10.10.26.1:8848
+ config:
+ # 配置中心地址
+ server-addr: 10.10.26.1:8848
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+
diff --git a/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/muyu/business/domain/AlarmLogs.java b/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/muyu/business/domain/AlarmLogs.java
index 7a77b24..26c659e 100644
--- a/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/muyu/business/domain/AlarmLogs.java
+++ b/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/muyu/business/domain/AlarmLogs.java
@@ -1,18 +1,22 @@
package com.muyu.business.domain;
-import com.baomidou.mybatisplus.annotation.*;
-import com.fasterxml.jackson.annotation.*;
-import com.muyu.business.domain.req.*;
-import io.swagger.annotations.*;
-import lombok.*;
-import lombok.experimental.*;
-import org.springframework.context.annotation.Bean;
-import org.springframework.format.annotation.*;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
+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 com.muyu.business.domain.req.AlarmLogsAddReq;
+import com.muyu.business.domain.req.AlarmLogsUpdReq;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import org.springframework.format.annotation.DateTimeFormat;
-import java.io.*;
-import java.util.*;
+import java.io.Serializable;
+import java.util.Date;
/**
* 报警记录对象
diff --git a/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/muyu/business/domain/FaultLogs.java b/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/muyu/business/domain/FaultLogs.java
index a90b710..5fda69f 100644
--- a/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/muyu/business/domain/FaultLogs.java
+++ b/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/muyu/business/domain/FaultLogs.java
@@ -23,6 +23,7 @@ import java.util.*;
@ApiModel("故障日志对象")
@TableName("fault_logs")
public class FaultLogs implements Serializable {
+
private static final long serialVersionUID = 1L;
/** 故障日志主键*/
diff --git a/muyu-modules/muyu-business/muyu-business-server/pom.xml b/muyu-modules/muyu-business/muyu-business-server/pom.xml
index c17fd8e..8239d0c 100644
--- a/muyu-modules/muyu-business/muyu-business-server/pom.xml
+++ b/muyu-modules/muyu-business/muyu-business-server/pom.xml
@@ -85,6 +85,11 @@
com.muyu
muyu-file-remote
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/AlarmLogsController.java b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/AlarmLogsController.java
index 9190031..389a60b 100644
--- a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/AlarmLogsController.java
+++ b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/AlarmLogsController.java
@@ -1,21 +1,31 @@
package com.muyu.business.controller;
-import com.muyu.business.domain.*;
-import com.muyu.business.domain.req.*;
-import com.muyu.business.domain.res.*;
-import com.muyu.business.service.*;
-import com.muyu.common.core.domain.*;
-import com.muyu.common.core.web.controller.*;
-import com.muyu.common.core.web.page.*;
-import com.muyu.common.log.annotation.*;
-import com.muyu.common.log.enums.*;
-import com.muyu.common.security.annotation.*;
-import io.swagger.annotations.*;
-import org.springframework.beans.factory.annotation.*;
-import org.springframework.scheduling.annotation.Scheduled;
+import com.muyu.business.domain.AlarmLogs;
+import com.muyu.business.domain.req.AlarmLogsReq;
+import com.muyu.business.domain.req.AlarmLogsUpdReq;
+import com.muyu.business.domain.res.AlarmLogsResponse;
+import com.muyu.business.service.AlarmLogsService;
+import com.muyu.common.core.constant.MQQueueConstants;
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.web.controller.BaseController;
+import com.muyu.common.core.web.page.TableDataInfo;
+import com.muyu.common.log.annotation.Log;
+import com.muyu.common.log.enums.BusinessType;
+import com.muyu.common.security.annotation.RequiresPermissions;
+import com.rabbitmq.client.Channel;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;
-import java.util.*;
+import java.io.IOException;
+import java.util.List;
/**
* 报警日志Controller
@@ -25,6 +35,7 @@ import java.util.*;
@Api(tags = "报警日志")
@ApiModel(description = "报警日志Controller")
@RestController
+@Slf4j
@RequestMapping("/alarmLogs")
public class AlarmLogsController extends BaseController {
@@ -33,6 +44,9 @@ public class AlarmLogsController extends BaseController {
*/
@Autowired
private AlarmLogsService alarmLogsService;
+ @Autowired
+ private StringRedisTemplate redisTemplate;
+
/**
* 实时报警日志列表
@@ -42,20 +56,20 @@ public class AlarmLogsController extends BaseController {
@GetMapping("/list")
public Result realtime(AlarmLogsReq alarmLogsReq) {
startPage();
- List list = alarmLogsService.selectAlarmLogsList(alarmLogsReq);
+ List list = alarmLogsService.selectAlarmLogsList(alarmLogsReq);
return getDataTable(list);
}
/**
* 新增报警日志
*/
- @ApiOperation("新增报警日志")
- @RequiresPermissions("business:alarmLogs:add")
- @Log(title = "报警日志", businessType = BusinessType.INSERT)
- @PostMapping
- public Result add(@RequestBody AlarmLogsAddReq alarmLogsAddReq) {
- return toAjax(alarmLogsService.insertAlarmLogs(AlarmLogs.alarmLogsAddReq(alarmLogsAddReq)));
- }
+// @ApiOperation("新增报警日志")
+//// @RequiresPermissions("business:alarmLogs:add")
+//// @Log(title = "报警日志", businessType = BusinessType.INSERT)
+// @PostMapping
+// public Result add(@RequestBody AlarmLogsAddReq alarmLogsAddReq) {
+// return toAjax(alarmLogsService.insertAlarmLogs(AlarmLogs.alarmLogsAddReq(alarmLogsAddReq)));
+// }
/**
* 获取报警日志详细信息
@@ -88,8 +102,41 @@ public class AlarmLogsController extends BaseController {
public Result remove(@PathVariable Long[] alarmIds) {
return toAjax(alarmLogsService.deleteAlarmLogsByIds(alarmIds));
}
- @Scheduled(cron = "0/10 * * * * ?")
- public void alarmLogsService(){
- alarmLogsService.alarmLogsService();
+
+
+
+
+ @RabbitListener(queuesToDeclare = {@Queue(value = MQQueueConstants.ALARM_QUEUE, declare = "true")})
+ public void sendSms(String alarmLog, Message message, Channel channel) {
+ log.info("消息队列:【{}】,收到报警日志:【{}】",MQQueueConstants.ALARM_QUEUE,alarmLog);
+ try {
+ String messageId = message.getMessageProperties().getMessageId();
+ Long count = redisTemplate.opsForSet().add(MQQueueConstants.ALARM_QUEUE, messageId);
+ if (count.intValue() > 0){
+ alarmLogsService.alarmLogsService(alarmLog);
+ // 消息确认
+ channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+ log.info("消息队列:【{}】,收到报警日志:【{}】,消费成功...",MQQueueConstants.ALARM_QUEUE,alarmLog);
+ }else {
+ log.error("消息队列:【{}】,收到报警日志:【{}】,消费重复...",MQQueueConstants.ALARM_QUEUE,alarmLog);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ log.error("消息队列:【{}】,收到报警日志:【{}】,消费异常:【{}】",MQQueueConstants.ALARM_QUEUE,alarmLog,e.getMessage());
+ // 消息回退
+ try {
+ channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
+ } catch (IOException ex) {
+ log.error("消息队列:【{}】,收到报警日志:【{}】,消息退回异常:【{}】",MQQueueConstants.ALARM_QUEUE,alarmLog,e.getMessage());
+ }
+ }
}
+
+
+
+
+
+
+
+
}
diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/FaultCodesController.java b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/FaultCodesController.java
index e253d1a..e11b802 100644
--- a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/FaultCodesController.java
+++ b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/FaultCodesController.java
@@ -1,20 +1,24 @@
package com.muyu.business.controller;
-import com.muyu.business.domain.*;
-import com.muyu.business.domain.req.*;
-import com.muyu.business.service.*;
-import com.muyu.common.core.domain.*;
-import com.muyu.common.core.web.controller.*;
-import com.muyu.common.core.web.page.*;
-import com.muyu.common.log.annotation.*;
-import com.muyu.common.log.enums.*;
-import com.muyu.common.security.annotation.*;
-import io.swagger.annotations.*;
-import org.springframework.beans.factory.annotation.*;
-import org.springframework.validation.annotation.*;
+import com.muyu.business.domain.FaultCodeInfo;
+import com.muyu.business.domain.req.FaultCodeReq;
+import com.muyu.business.domain.req.FaultCodesAddReq;
+import com.muyu.business.domain.req.FaultCodesUpdReq;
+import com.muyu.business.service.FaultCodesService;
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.web.controller.BaseController;
+import com.muyu.common.core.web.page.TableDataInfo;
+import com.muyu.common.log.annotation.Log;
+import com.muyu.common.log.enums.BusinessType;
+import com.muyu.common.security.annotation.RequiresPermissions;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import java.util.*;
+import java.util.List;
/**
* 故障码Controller
diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/FaultLogsController.java b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/FaultLogsController.java
index d783d2c..c3b4567 100644
--- a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/FaultLogsController.java
+++ b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/FaultLogsController.java
@@ -1,22 +1,35 @@
package com.muyu.business.controller;
-import com.muyu.business.domain.*;
-import com.muyu.business.domain.req.*;
-import com.muyu.business.domain.res.*;
-import com.muyu.business.service.*;
-import com.muyu.common.core.domain.*;
-import com.muyu.common.core.web.controller.*;
-import com.muyu.common.core.web.page.*;
-import com.muyu.common.log.annotation.*;
-import com.muyu.common.log.enums.*;
-import com.muyu.common.security.annotation.*;
-import io.swagger.annotations.*;
-import org.springframework.beans.factory.annotation.*;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.validation.annotation.*;
+import com.muyu.business.domain.FaultLogs;
+import com.muyu.business.domain.req.FaultLogsAddReq;
+import com.muyu.business.domain.req.FaultLogsReq;
+import com.muyu.business.domain.req.FaultLogsUpdReq;
+import com.muyu.business.domain.res.FaultLogsResponse;
+import com.muyu.business.service.AlarmLogsService;
+import com.muyu.business.service.FaultLogsService;
+import com.muyu.common.core.constant.MQQueueConstants;
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.web.controller.BaseController;
+import com.muyu.common.core.web.page.TableDataInfo;
+import com.muyu.common.log.annotation.Log;
+import com.muyu.common.log.enums.BusinessType;
+import com.muyu.common.security.annotation.RequiresPermissions;
+import com.rabbitmq.client.Channel;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import java.util.*;
+import java.io.IOException;
+import java.util.List;
/**
* 故障码日志Controller
@@ -25,6 +38,7 @@ import java.util.*;
* @Date 2024/3/30
*/
@Api(tags = "故障日志管理")
+@Slf4j
@ApiModel(description = "故障日志Controller")
@RestController
@RequestMapping("/faultLogs")
@@ -35,6 +49,19 @@ public class FaultLogsController extends BaseController {
*/
@Autowired
private FaultLogsService faultLogsService;
+ /**
+ * 注入redis工具类
+ */
+ @Autowired
+ private StringRedisTemplate redisTemplate;
+
+ /**
+ * 注入报警日志服务
+ */
+ @Autowired
+ private AlarmLogsService alarmLogsService;
+
+
@ApiOperation("故障日志列表")
@RequiresPermissions("business:faultLogs:list")
@@ -49,7 +76,7 @@ public class FaultLogsController extends BaseController {
* 新增故障日志
*/
@ApiOperation("新增故障日志")
- @RequiresPermissions("business:faultLogs:add")
+// @RequiresPermissions("business:faultLogs:add")
@Log(title = "故障日志", businessType = BusinessType.INSERT)
@PostMapping
public Result add(@RequestBody @Validated FaultLogsAddReq faultLogsAddReq) {
@@ -59,12 +86,12 @@ public class FaultLogsController extends BaseController {
/**
* 故障日志详情
*/
- @ApiOperation(value = "故障日志详情",hidden = true)
- @RequiresPermissions("business:faultLogs:query")
- @GetMapping("/{logId}")
- public Result detail(@ApiParam(value = "故障日志主键") @PathVariable("logId") Long logId) {
- return Result.success(faultLogsService.selectFaultLogsById(logId));
- }
+// @ApiOperation(value = "故障日志详情",hidden = true)
+// @RequiresPermissions("business:faultLogs:query")
+// @GetMapping("/{logId}")
+// public Result detail(@ApiParam(value = "故障日志主键") @PathVariable("logId") Long logId) {
+// return Result.success(faultLogsService.selectFaultLogsById(logId));
+// }
/**
* 修改故障日志
@@ -88,8 +115,29 @@ public class FaultLogsController extends BaseController {
return toAjax(faultLogsService.deleteFaultLogsByIds(logIds));
}
- @Scheduled(cron = "0/10 * * * * * ")
- public void faultLogsService() {
- faultLogsService.faultLogsService();
+ @RabbitListener(queuesToDeclare = {@Queue(value = MQQueueConstants.FAULT_QUEUE, declare = "true")})
+ public void sendSms(FaultLogs faultLogs, Message message, Channel channel) {
+ log.info("消息队列:【{}】,收到故障日志:【{}】",MQQueueConstants.FAULT_QUEUE,faultLogs);
+ try {
+ String messageId = message.getMessageProperties().getMessageId();
+ Long count = redisTemplate.opsForSet().add(MQQueueConstants.FAULT_QUEUE, messageId);
+ if (count.intValue() > 0){
+ faultLogsService.insertFaultLogs(faultLogs);
+ // 消息确认
+ channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+ log.info("消息队列:【{}】,收到故障日志:【{}】,消费成功...",MQQueueConstants.FAULT_QUEUE,faultLogs);
+ }else {
+ log.error("消息队列:【{}】,收到故障日志:【{}】,消费重复...",MQQueueConstants.FAULT_QUEUE,faultLogs);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ log.error("消息队列:【{}】,收到故障日志:【{}】,消费异常:【{}】",MQQueueConstants.FAULT_QUEUE,faultLogs,e.getMessage());
+ // 消息回退
+ try {
+ channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
+ } catch (IOException ex) {
+ log.error("消息队列:【{}】,收到故障日志:【{}】,消息退回异常:【{}】",MQQueueConstants.FAULT_QUEUE,faultLogs,e.getMessage());
+ }
+ }
}
}
diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/FenceInfoController.java b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/FenceInfoController.java
index 2011298..a3e2ce5 100644
--- a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/FenceInfoController.java
+++ b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/FenceInfoController.java
@@ -1,10 +1,10 @@
package com.muyu.business.controller;
+import com.muyu.business.domain.Fence;
import com.muyu.business.domain.request.FenceAddRequest;
import com.muyu.business.domain.request.FenceListRequest;
import com.muyu.business.domain.request.FenceUpdateRequest;
import com.muyu.business.domain.request.MapRequest;
-
import com.muyu.business.service.IFenceInfoService;
import com.muyu.common.core.domain.PageResult;
import com.muyu.common.core.domain.Result;
@@ -12,7 +12,6 @@ import com.muyu.common.core.web.controller.BaseController;
import com.muyu.common.log.annotation.Log;
import com.muyu.common.log.enums.BusinessType;
import com.muyu.common.security.annotation.RequiresPermissions;
-import com.muyu.business.domain.Fence;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/RecordsController.java b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/RecordsController.java
index 3a4fe7e..5f72c79 100644
--- a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/RecordsController.java
+++ b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/business/controller/RecordsController.java
@@ -2,17 +2,19 @@ package com.muyu.business.controller;
import com.muyu.business.domain.Records;
import com.muyu.business.domain.request.RecordsListRequest;
-
import com.muyu.business.service.IRecordsService;
import com.muyu.common.core.domain.PageResult;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.controller.BaseController;
import com.muyu.common.log.annotation.Log;
import com.muyu.common.log.enums.BusinessType;
+import com.muyu.common.redis.service.RedisService;
import com.muyu.common.security.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import java.util.Set;
+
/**
* 车辆历史轨迹Controller
*
@@ -25,6 +27,9 @@ public class RecordsController extends BaseController
{
@Autowired
private IRecordsService recordsService;
+ @Autowired
+ private RedisService redisService;
+
/**
* 查询车辆历史轨迹列表
@@ -53,10 +58,15 @@ public class RecordsController extends BaseController
return Result.success(recordsService.insert(vin));
}
- @PostMapping("/update/{recordsId}")
+ @PostMapping("/update/{vin}")
@Log(title = "车辆历史轨迹", businessType = BusinessType.UPDATE)
- public Result update(@PathVariable("recordsId") Integer recordsId) {
- return toAjax(recordsService.updateRecords(recordsId));
+ public Result update(@PathVariable("vin") String vin) {
+ Set