From d2462e6456cda0c5071953efdea4ed179df4bad2 Mon Sep 17 00:00:00 2001 From: sy200 <2063514638@qq.com> Date: Mon, 7 Oct 2024 14:31:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:()=E4=BF=AE=E6=94=B9=E5=AD=98=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/VehicleController.java | 13 +- .../controller/VehicleTypeController.java | 9 +- .../protocol/parsing/test/ParsingMessage.java | 320 +++++++++--------- 3 files changed, 173 insertions(+), 169 deletions(-) diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/controller/VehicleController.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/controller/VehicleController.java index 8999394..125aaed 100644 --- a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/controller/VehicleController.java +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/controller/VehicleController.java @@ -52,9 +52,6 @@ public class VehicleController extends BaseController { @Autowired private AllVehicleCacheService allVehicleCacheService; - @Autowired - private RedisTemplate redisTemplate; - /** * 查询车辆管理列表 @@ -67,9 +64,13 @@ public class VehicleController extends BaseController { startPage(); List list = vehicleService.getVehicleList(vehicleManageReq); // 将车辆信息存到Redis - for (VehicleManageResp resp : list) { - allVehicleCacheService.put(resp.getVehicleVin(), resp); - } +// for (VehicleManageResp resp : list) { +// allVehicleCacheService.put(resp.getVehicleVin(), resp); +// } + List vehicleList = vehicleService.list(); + vehicleList.forEach(vehicle -> { + vehicleCacheService.put(vehicle.getVehicleVin(), vehicle); + }); return getDataTable(list); } diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/controller/VehicleTypeController.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/controller/VehicleTypeController.java index 3518600..011604b 100644 --- a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/controller/VehicleTypeController.java +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/controller/VehicleTypeController.java @@ -52,9 +52,12 @@ public class VehicleTypeController { @Operation(summary = "车辆类型列表",description = "车辆类型列表") public Result> findAll(){ List list = vehicleTypeService.list(); - for (VehicleType vehicleType : list) { - allVehicleTypeCacheService.put(String.valueOf(vehicleType.getVehicleTypeId()),vehicleType); - } +// for (VehicleType vehicleType : list) { +// allVehicleTypeCacheService.put(String.valueOf(vehicleType.getVehicleTypeId()),vehicleType); +// } + list.forEach(vehicleType -> { + vehicleTypeCacheService.put(String.valueOf(vehicleType.getVehicleTypeId()), vehicleType); + }); return Result.success(); } diff --git a/cloud-modules/cloud-modules-protocol-parsing/src/main/java/com/muyu/cloud/protocol/parsing/test/ParsingMessage.java b/cloud-modules/cloud-modules-protocol-parsing/src/main/java/com/muyu/cloud/protocol/parsing/test/ParsingMessage.java index 16f327e..d0bbdea 100644 --- a/cloud-modules/cloud-modules-protocol-parsing/src/main/java/com/muyu/cloud/protocol/parsing/test/ParsingMessage.java +++ b/cloud-modules/cloud-modules-protocol-parsing/src/main/java/com/muyu/cloud/protocol/parsing/test/ParsingMessage.java @@ -1,161 +1,161 @@ -//package com.muyu.cloud.protocol.parsing.test; -// -//import cn.hutool.json.JSONObject; -//import com.muyu.domain.Vehicle; -//import com.muyu.domain.VehicleType; -//import com.muyu.domain.resp.MessageValueListResp; -//import com.muyu.enterprise.cache.AllMessageValueCacheService; -//import com.muyu.enterprise.cache.VehicleCacheService; -//import com.muyu.enterprise.cache.VehicleTypeCacheService; -//import lombok.extern.log4j.Log4j2; -//import org.apache.kafka.clients.producer.KafkaProducer; -//import org.apache.kafka.clients.producer.ProducerRecord; -//import org.eclipse.paho.client.mqttv3.*; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.stereotype.Component; -// -//import javax.annotation.PostConstruct; -//import javax.annotation.Resource; -//import java.util.List; -// -///** -// * @Author: LiDongJia -// * @Package: com.muyu.cloud.protocol.parsing.service.impl -// * @Project: 2112-car-cloud-server -// * @name: ParsingServiceImpl -// * @Date: 2024/9/28 14:31 -// * @Description: 协议解析实现层 -// */ -//@Log4j2 -//@Component -//public class ParsingMessage { -// -// @Resource -// private KafkaProducer kafkaProducer; -// -// @Autowired -// private VehicleCacheService vehicleCacheService; -// -// @Autowired -// private VehicleTypeCacheService vehicleTypeCacheService; -// -// @Autowired -// private AllMessageValueCacheService allMessageValueCacheService; -// -// /** -// * 协议解析 -// */ -// @PostConstruct -// public void mqttClient() { -// String topic = "vehicle"; -// String broker = "tcp://111.231.50.146:1883"; -// String clientId = "JavaSample"; -// -// try { -// // 第三个参数为空,默认持久化策略 -// MqttClient sampleClient = new MqttClient(broker, clientId); -// MqttConnectOptions connOpts = new MqttConnectOptions(); -// connOpts.setCleanSession(true); -// System.out.println("Connecting to broker: " + broker); -// sampleClient.connect(connOpts); -// sampleClient.subscribe(topic, 0); -// sampleClient.setCallback(new MqttCallback() { -// // 连接丢失 -// @Override -// public void connectionLost(Throwable throwable) { -// -// } -// -// // 连接成功 -// @Override -// public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { -// System.out.println(new String(mqttMessage.getPayload())); -// JSONObject entries = this.protocolParsing(new String(mqttMessage.getPayload())); -// -// ProducerRecord producerRecord = new ProducerRecord<>("zeshi", -// entries.toString() ); -// kafkaProducer.send(producerRecord); -// System.out.println(entries); -// } -// -// /** -// * 协议解析 -// * @param messageStr -// * @return -// */ -// public JSONObject protocolParsing(String messageStr) { -// //根据空格切割数据 -// String[] hexArray = messageStr.split(" "); -// StringBuilder result = new StringBuilder(); -// //遍历十六进制数据转换为字符 -// for (String hex : hexArray) { -// int decimal = Integer.parseInt(hex, 16); -// result.append((char) decimal); +package com.muyu.cloud.protocol.parsing.test; + +import cn.hutool.json.JSONObject; +import com.muyu.domain.Vehicle; +import com.muyu.domain.VehicleType; +import com.muyu.domain.resp.MessageValueListResp; +import com.muyu.enterprise.cache.AllMessageValueCacheService; +import com.muyu.enterprise.cache.VehicleCacheService; +import com.muyu.enterprise.cache.VehicleTypeCacheService; +import lombok.extern.log4j.Log4j2; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.eclipse.paho.client.mqttv3.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author: LiDongJia + * @Package: com.muyu.cloud.protocol.parsing.service.impl + * @Project: 2112-car-cloud-server + * @name: ParsingServiceImpl + * @Date: 2024/9/28 14:31 + * @Description: 协议解析实现层 + */ +@Log4j2 +@Component +public class ParsingMessage { + + @Resource + private KafkaProducer kafkaProducer; + + @Autowired + private VehicleCacheService vehicleCacheService; + + @Autowired + private VehicleTypeCacheService vehicleTypeCacheService; + + @Autowired + private AllMessageValueCacheService allMessageValueCacheService; + + /** + * 协议解析 + */ + @PostConstruct + public void mqttClient() { + String topic = "vehicle"; + String broker = "tcp://111.231.50.146:1883"; + String clientId = "JavaSample"; + + try { + // 第三个参数为空,默认持久化策略 + MqttClient sampleClient = new MqttClient(broker, clientId); + MqttConnectOptions connOpts = new MqttConnectOptions(); + connOpts.setCleanSession(true); + System.out.println("Connecting to broker: " + broker); + sampleClient.connect(connOpts); + sampleClient.subscribe(topic, 0); + sampleClient.setCallback(new MqttCallback() { + // 连接丢失 + @Override + public void connectionLost(Throwable throwable) { + + } + + // 连接成功 + @Override + public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { + System.out.println(new String(mqttMessage.getPayload())); + JSONObject entries = this.protocolParsing(new String(mqttMessage.getPayload())); + + ProducerRecord producerRecord = new ProducerRecord<>("zeshi", + entries.toString() ); + kafkaProducer.send(producerRecord); + System.out.println(entries); + } + + /** + * 协议解析 + * @param messageStr + * @return + */ + public JSONObject protocolParsing(String messageStr) { + //根据空格切割数据 + String[] hexArray = messageStr.split(" "); + StringBuilder result = new StringBuilder(); + //遍历十六进制数据转换为字符 + for (String hex : hexArray) { + int decimal = Integer.parseInt(hex, 16); + result.append((char) decimal); + } + //取出车辆VIN码 + String vehicleVin = result.substring(1, 18); + log.info("车辆VIN码: " + vehicleVin); + //根据车辆VIN码查询报文模板ID + Vehicle vehicle = vehicleCacheService.get(vehicleVin); + Long vehicleTypeId = vehicle.getVehicleTypeId(); + VehicleType vehicleType = vehicleTypeCacheService.get(String.valueOf(vehicleTypeId)); + Long templateId = vehicleType.getMessageTemplateId(); + List templateList = allMessageValueCacheService.get(String.valueOf(templateId)); +// //从redis缓存中获取报文模板数据 +// try { +// String redisKey = "messageTemplate" + templateId; +// if (redisTemplate.hasKey(redisKey)) { +// List list = redisTemplate.opsForList().range(redisKey, 0, -1); +// templateList = list.stream() +// .map(obj -> JSON.parseObject(obj.toString(), MessageValueListResp.class)) +// .toList(); +// log.info("Redis缓存查询成功"); +// } else { +// Result> byTemplateId = remoteServiceClient.findByTemplateId(templateId); +// templateList = byTemplateId.getData(); +// templateList.forEach( +// listResp -> +// redisTemplate.opsForList().rightPush( +// redisKey, JSON.toJSONString(listResp) +// ) +// ); +// log.info("数据库查询成功"); +// } +// } catch (Exception e) { +// throw new RuntimeException("获取报文模板失败"); // } -// //取出车辆VIN码 -// String vehicleVin = result.substring(1, 18); -// log.info("车辆VIN码: " + vehicleVin); -// //根据车辆VIN码查询报文模板ID -// Vehicle vehicle = vehicleCacheService.get(vehicleVin); -// Long vehicleTypeId = vehicle.getVehicleTypeId(); -// VehicleType vehicleType = vehicleTypeCacheService.get(String.valueOf(vehicleTypeId)); -// Long templateId = vehicleType.getMessageTemplateId(); -//// List templateList = allMessageValueCacheService.get(templateId); -//// //从redis缓存中获取报文模板数据 -//// try { -//// String redisKey = "messageTemplate" + templateId; -//// if (redisTemplate.hasKey(redisKey)) { -//// List list = redisTemplate.opsForList().range(redisKey, 0, -1); -//// templateList = list.stream() -//// .map(obj -> JSON.parseObject(obj.toString(), MessageValueListResp.class)) -//// .toList(); -//// log.info("Redis缓存查询成功"); -//// } else { -//// Result> byTemplateId = remoteServiceClient.findByTemplateId(templateId); -//// templateList = byTemplateId.getData(); -//// templateList.forEach( -//// listResp -> -//// redisTemplate.opsForList().rightPush( -//// redisKey, JSON.toJSONString(listResp) -//// ) -//// ); -//// log.info("数据库查询成功"); -//// } -//// } catch (Exception e) { -//// throw new RuntimeException("获取报文模板失败"); -//// } -// //判断报文模板列表不为空 -// if (templateList.isEmpty()) { -// throw new RuntimeException("报文模版为空"); -// } -// //存储报文模版解析后的数据 -// JSONObject jsonObject = new JSONObject(); -// for (MessageValueListResp messageValue : templateList) { -// //起始位下标 -// Integer startIndex = messageValue.getMessageStartIndex() - 1; -// //结束位下标 -// Integer endIndex = messageValue.getMessageEndIndex(); -// //根据报文模版截取数据 -// String value = result.substring(startIndex, endIndex); -// //存入数据 -// jsonObject.put(messageValue.getMessageLabel(), value); -// } -// return jsonObject; -// } -// -// // 接收信息 -// @Override -// public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { -// -// } -// }); -// } catch (MqttException me) { -// System.out.println("reason " + me.getReasonCode()); -// 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(); -// } -// } -//} + //判断报文模板列表不为空 + if (templateList.isEmpty()) { + throw new RuntimeException("报文模版为空"); + } + //存储报文模版解析后的数据 + JSONObject jsonObject = new JSONObject(); + for (MessageValueListResp messageValue : templateList) { + //起始位下标 + Integer startIndex = messageValue.getMessageStartIndex() - 1; + //结束位下标 + Integer endIndex = messageValue.getMessageEndIndex(); + //根据报文模版截取数据 + String value = result.substring(startIndex, endIndex); + //存入数据 + jsonObject.put(messageValue.getMessageLabel(), value); + } + return jsonObject; + } + + // 接收信息 + @Override + public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { + + } + }); + } catch (MqttException me) { + System.out.println("reason " + me.getReasonCode()); + 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(); + } + } +}