From 681c88db286ceacd3617f7fe8a609cb42a84c17f Mon Sep 17 00:00:00 2001 From: LQS <2506203757@qq.com> Date: Sat, 28 Sep 2024 23:11:55 +0800 Subject: [PATCH] =?UTF-8?q?fate():=E6=96=B0=E5=A2=9E=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E6=A8=A1=E5=9D=97=EF=BC=9AMQTT=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=EF=BC=8C=E6=95=B0=E6=8D=AE=E8=BD=AC=E6=8D=A2JSON?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JavaSample-tcp1061513671883/.lck | 0 .../cloud-modules-enterprise-common/pom.xml | 14 +- .../cloud-modules-enterprise-server/pom.xml | 12 +- .../CloudEnterpriseApplication.java | 24 ++- .../enterprise/mapper/car/VehicleMapper.java | 3 +- .../impl/carImpl/VehicleServiceImpl.java | 23 ++- .../cloud-modules-protocol-analysis/pom.xml | 117 ++++++++++++++ .../muyu/analysis/parsing}/MQTT/DemoMQTT.java | 13 +- .../parsing/ProtocolParsingApplication.java | 24 +++ .../parsing/controller/ParsingController.java | 87 ++++++++++ .../parsing/mapper/ParsingMapper.java | 17 ++ .../parsing/remote/RemoteClientService.java | 41 +++++ .../factory/RemoteClientServiceFactory.java | 40 +++++ .../parsing/service/ParsingService.java | 24 +++ .../service/impl/ParsingServiceImpl.java | 151 ++++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../src/main/resources/banner.txt | 2 + .../src/main/resources/bootstrap.yml | 46 ++++++ .../src/main/resources/logback/dev.xml | 74 +++++++++ .../src/main/resources/logback/prod.xml | 81 ++++++++++ .../src/main/resources/logback/test.xml | 81 ++++++++++ .../cloud-modules-enterprise/pom.xml | 1 + 22 files changed, 855 insertions(+), 21 deletions(-) delete mode 100644 JavaSample-tcp1061513671883/.lck create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/pom.xml rename cloud-modules/cloud-modules-enterprise/{cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise => cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing}/MQTT/DemoMQTT.java (90%) create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/ProtocolParsingApplication.java create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/controller/ParsingController.java create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/mapper/ParsingMapper.java create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/remote/RemoteClientService.java create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/remote/factory/RemoteClientServiceFactory.java create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/service/ParsingService.java create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/service/impl/ParsingServiceImpl.java create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/banner.txt create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/bootstrap.yml create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/logback/dev.xml create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/logback/prod.xml create mode 100644 cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/logback/test.xml diff --git a/JavaSample-tcp1061513671883/.lck b/JavaSample-tcp1061513671883/.lck deleted file mode 100644 index e69de29..0000000 diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-common/pom.xml b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-common/pom.xml index ee4cfa9..a51a034 100644 --- a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-common/pom.xml +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-common/pom.xml @@ -29,5 +29,17 @@ io.swagger.core.v3 swagger-annotations-jakarta + + + org.eclipse.paho + org.eclipse.paho.client.mqttv3 + 1.2.2 + + + + org.springframework.integration + spring-integration-mqtt + 6.2.5 + - \ No newline at end of file + diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/pom.xml b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/pom.xml index 82c7085..d817bf8 100644 --- a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/pom.xml +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/pom.xml @@ -23,15 +23,9 @@ - org.eclipse.paho - org.eclipse.paho.client.mqttv3 - 1.2.2 - - - - org.springframework.integration - spring-integration-mqtt - 6.2.5 + com.github.yulichang + mybatis-plus-join-boot-starter + 1.4.11 diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/CloudEnterpriseApplication.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/CloudEnterpriseApplication.java index cd401fd..91d5fe9 100644 --- a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/CloudEnterpriseApplication.java +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/CloudEnterpriseApplication.java @@ -16,8 +16,26 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; public class CloudEnterpriseApplication { public static void main (String[] args) { SpringApplication.run(CloudEnterpriseApplication.class, args); - while (true){ - System.out.println("马叉,马叉"); + System.out.println(" _ooOoo_\n" + + " o8888888o\n" + + " 88\" . \"88\n" + + " (| -_- |)\n" + + " O\\ = /O\n" + + " ____/`---'\\____\n" + + " .' \\\\| |// `.\n" + + " / \\\\||| : |||// \\\n" + + " / _||||| -:- |||||- \\\n" + + " | | \\\\\\ - /// | |\n" + + " | \\_| ''\\---/'' | |\n" + + " \\ .-\\__ `-` ___/-. /\n" + + " ___`. .' /--.--\\ `. . __\n" + + " .\"\" '< `.___\\_<|>_/___.' >'\"\".\n" + + " | | : `- \\`.;`\\ _ /`;.`/ - ` : | |\n" + + " \\ \\ `-. \\_ __\\ /__ _/ .-` / /\n" + + " ======`-.____`-.___\\_____/___.-`____.-'======\n" + + " `=---='\n" + + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + + " // 佛祖保佑 永不宕机 永无BUG //"); } - } + } diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/mapper/car/VehicleMapper.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/mapper/car/VehicleMapper.java index 314b93d..d79f256 100644 --- a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/mapper/car/VehicleMapper.java +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/mapper/car/VehicleMapper.java @@ -2,6 +2,7 @@ package com.muyu.enterprise.mapper.car; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.github.yulichang.base.MPJBaseMapper; import com.muyu.enterprise.domain.car.Vehicle; import com.muyu.enterprise.domain.req.car.VehicleManageReq; import com.muyu.enterprise.domain.resp.car.VehicleManageResp; @@ -19,7 +20,7 @@ import java.util.List; * @Description: 车辆管理持久层 */ @Mapper -public interface VehicleMapper extends BaseMapper +public interface VehicleMapper extends MPJBaseMapper { /** * 查询车辆管理列表 diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/service/impl/carImpl/VehicleServiceImpl.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/service/impl/carImpl/VehicleServiceImpl.java index 6aa1bd8..1f9871d 100644 --- a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/service/impl/carImpl/VehicleServiceImpl.java +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/service/impl/carImpl/VehicleServiceImpl.java @@ -1,7 +1,10 @@ package com.muyu.enterprise.service.impl.carImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.muyu.common.core.utils.StringUtils; import com.muyu.enterprise.domain.car.Vehicle; +import com.muyu.enterprise.domain.car.VehicleType; import com.muyu.enterprise.domain.req.car.VehicleManageReq; import com.muyu.enterprise.domain.resp.car.VehicleManageResp; import com.muyu.enterprise.mapper.car.VehicleMapper; @@ -36,8 +39,24 @@ extends ServiceImpl getVehicleList(VehicleManageReq vehicleManageReq) { - List vehicleList = vehicleMapper.findAll(vehicleManageReq); - return vehicleList; + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.selectAll(Vehicle.class) + .selectAs(VehicleType::getVehicleTypeName, VehicleManageResp::getVehicleTypeName) + .leftJoin(VehicleType.class, VehicleType::getVehicleTypeId, Vehicle::getVehicleTypeId) + .like( + StringUtils.isNotEmpty(vehicleManageReq.getLicenceNumber()), + Vehicle::getLicenceNumber, vehicleManageReq.getLicenceNumber() + ) + .like( + StringUtils.isNotEmpty(vehicleManageReq.getVehicleVin()), + Vehicle::getVehicleVin, vehicleManageReq.getVehicleVin() + ) + .eq( + StringUtils.isNotBlank(vehicleManageReq.getVehicleStatus()), + Vehicle::getVehicleStatus, vehicleManageReq.getVehicleStatus() + ); + List list = vehicleMapper.selectJoinList(VehicleManageResp.class, wrapper); + return list; } diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/pom.xml b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/pom.xml new file mode 100644 index 0000000..8b08818 --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/pom.xml @@ -0,0 +1,117 @@ + + + 4.0.0 + + com.muyu + cloud-modules-enterprise + 3.6.3 + + + cloud-modules-protocol-analysis + + + 17 + 17 + UTF-8 + + + + cloud-modules-protocol-analysis协议解析模块 + + + + + + + + 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 + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + cloud-common-datasource + + + + + com.muyu + cloud-common-datascope + + + + + com.muyu + cloud-common-log + + + + + com.muyu + cloud-common-api-doc + + + + + com.muyu + cloud-modules-enterprise-common + + + + com.muyu + cloud-modules-enterprise-server + 3.6.3 + + + + com.github.yulichang + mybatis-plus-join-boot-starter + 1.4.11 + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + + diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/MQTT/DemoMQTT.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/MQTT/DemoMQTT.java similarity index 90% rename from cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/MQTT/DemoMQTT.java rename to cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/MQTT/DemoMQTT.java index 518139d..2ba02a7 100644 --- a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/enterprise/MQTT/DemoMQTT.java +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/MQTT/DemoMQTT.java @@ -1,18 +1,18 @@ -package com.muyu.enterprise.MQTT; +package com.muyu.analysis.parsing.MQTT; +import com.muyu.analysis.parsing.controller.ParsingController; import org.eclipse.paho.client.mqttv3.*; -import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; /** * 测试MQTT * @ClassName demo * @Description 描述 - * @Author YiBo.Liu - * @Date 2024/9/27 22:27 + * @Author 李庆帅 + * @Date 2024/9/28 */ public class DemoMQTT { - public static void main(String[] args) { + public void main(String[] args) { String topic = "vehicle"; String content = "Message from MqttPublishSample"; @@ -20,6 +20,8 @@ public class DemoMQTT { String broker = "tcp://106.15.136.7:1883"; String clientId = "JavaSample"; + + try { // 第三个参数为空,默认持久化策略 MqttClient sampleClient = new MqttClient(broker, clientId); @@ -55,4 +57,5 @@ public class DemoMQTT { } } + } diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/ProtocolParsingApplication.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/ProtocolParsingApplication.java new file mode 100644 index 0000000..25cc5d5 --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/ProtocolParsingApplication.java @@ -0,0 +1,24 @@ +package com.muyu.analysis.parsing; + +import com.muyu.common.security.annotation.EnableCustomConfig; +import com.muyu.common.security.annotation.EnableMyFeignClients; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 协议解析启动类 + * @Author: 李庆帅 + * @Package: com.muyu.cloud.protocol.parsing + * @Project: 2112-car-cloud-server + * @name: ProtocolParsingApplication + * @Date: 2024/9/28 11:54 + * @Description: 协议解析启动类 + */ +@EnableCustomConfig +@EnableMyFeignClients +@SpringBootApplication +public class ProtocolParsingApplication { + public static void main(String[] args) { + SpringApplication.run(ProtocolParsingApplication.class, args); + } +} diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/controller/ParsingController.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/controller/ParsingController.java new file mode 100644 index 0000000..6d89015 --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/controller/ParsingController.java @@ -0,0 +1,87 @@ +package com.muyu.analysis.parsing.controller; + +import cn.hutool.json.JSONObject; +import com.muyu.analysis.parsing.MQTT.DemoMQTT; +import com.muyu.analysis.parsing.service.ParsingService; +import org.eclipse.paho.client.mqttv3.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * 协议解析控制层 + * @Author:李庆帅 + * @Package:com.muyu.analysis.parsing.controller + * @Project:cloud-server + * @name:ParsingController + * @Date:2024/9/28 20:36 + */ +@RestController +@RequestMapping("/parsing") +public class ParsingController +{ + private static final String topic = "vehicle"; + private static final String content = "Message from MqttPublishSample"; + private static final int qos = 2; + private static final String broker = "tcp://106.15.136.7:1883"; + private static final String clientId = "JavaSample"; + + @Autowired + private ParsingService parsingService; + +// /** +// * 协议解析 +// * @param messageStr +// * @return +// */ +// @PostMapping("/protocolParsing") +// public JSONObject protocolParsing(@RequestParam("messageStr") String messageStr) { +// 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())); +// } +// // 接收信息 +// @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(); +// } +// JSONObject messageValue = parsingService.protocolParsing(messageStr); +// return messageValue; +// } + + /** + * 协议解析 + */ + @PostMapping("/mqttClient") + public void mqttClient() { + parsingService.mqtt(); + } + + +} diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/mapper/ParsingMapper.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/mapper/ParsingMapper.java new file mode 100644 index 0000000..913cd90 --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/mapper/ParsingMapper.java @@ -0,0 +1,17 @@ +package com.muyu.analysis.parsing.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.enterprise.domain.car.MessageValue; +import org.apache.ibatis.annotations.Mapper; + +/** + * 协议解析持久层 + * @Author:李庆帅 + * @Package:com.muyu.analysis.parsing.mapper + * @Project:cloud-server + * @name:ParsingMapper + * @Date:2024/9/28 20:54 + */ +@Mapper +public interface ParsingMapper extends BaseMapper { +} diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/remote/RemoteClientService.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/remote/RemoteClientService.java new file mode 100644 index 0000000..d7a0f39 --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/remote/RemoteClientService.java @@ -0,0 +1,41 @@ +package com.muyu.analysis.parsing.remote; + +import com.muyu.analysis.parsing.remote.factory.RemoteClientServiceFactory; +import com.muyu.common.core.domain.Result; +import com.muyu.enterprise.domain.resp.car.MessageValueListResp; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import java.util.List; + +/** + * 报文模版远程调用接口 + * @Author:李庆帅 + * @Package:com.muyu.analysis.parsing.feign + * @Project:cloud-server + * @name:RemoteServiceClient + * @Date:2024/9/28 20:38 + */ +@FeignClient(name = "remoteClientService" +,fallbackFactory= RemoteClientServiceFactory.class) +public interface RemoteClientService { + /** + * 根据报文模版id查询报文数据 + * @param vehicleVin 请求对象 + * @return 返回结果 + */ + @GetMapping("/vehicleManage/findByVehicleVin/{vehicleVin}") +// @Operation(description = "通过车辆vin码查询模板id") + public Result findByVehicleVin(@PathVariable("vehicleVin") String vehicleVin); + + /** + * 根据报文模版id查询报文数据 + * @param templateId 请求对象 + * @return 返回结果 + */ + @GetMapping("/messageValue/findByTemplateId/{templateId}") +// @Operation(summary = "根据报文模版id查询报文数据", description = "根据报文模版id查询报文数据") + public Result> findByTemplateId(@PathVariable("templateId") Long templateId); + +} diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/remote/factory/RemoteClientServiceFactory.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/remote/factory/RemoteClientServiceFactory.java new file mode 100644 index 0000000..5851bbc --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/remote/factory/RemoteClientServiceFactory.java @@ -0,0 +1,40 @@ +package com.muyu.analysis.parsing.remote.factory; + +import com.muyu.analysis.parsing.remote.RemoteClientService; +import com.muyu.common.core.domain.Result; +import com.muyu.enterprise.domain.resp.car.MessageValueListResp; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; + +import java.util.List; + +/** + * 报文模版对象服务降级处理 + * @Author:李庆帅 + * @Package:com.muyu.analysis.parsing.remote.factory + * @Project:cloud-server + * @name:RemoteServiceClientFactory + * @Date:2024/9/28 21:16 + */ +public class RemoteClientServiceFactory implements FallbackFactory +{ + private static final Logger log = LoggerFactory.getLogger(RemoteClientServiceFactory.class); + + @Override + public RemoteClientService create(Throwable throwable) { + log.error("报文模版传参调用失败:{}", throwable.getMessage()); + return new RemoteClientService(){ + + @Override + public Result findByVehicleVin(String vehicleVin) { + return Result.error("报文模版传参调用失败" + throwable.getMessage()); + } + + @Override + public Result> findByTemplateId(Long templateId) { + return Result.error("报文模版传参调用失败" + throwable.getMessage()); + } + }; + } +} diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/service/ParsingService.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/service/ParsingService.java new file mode 100644 index 0000000..9885754 --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/service/ParsingService.java @@ -0,0 +1,24 @@ +package com.muyu.analysis.parsing.service; + +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.enterprise.domain.car.MessageValue; + +/** + * 协议解析业务层 + * @Author:李庆帅 + * @Package:com.muyu.analysis.parsing.service + * @Project:cloud-server + * @name:ParsingService + * @Date:2024/9/28 20:50 + */ +public interface ParsingService extends IService +{ + + + /** + * 协议解析 + * @return + */ + void mqtt(); +} diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/service/impl/ParsingServiceImpl.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/service/impl/ParsingServiceImpl.java new file mode 100644 index 0000000..909319a --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/java/com/muyu/analysis/parsing/service/impl/ParsingServiceImpl.java @@ -0,0 +1,151 @@ +package com.muyu.analysis.parsing.service.impl; + +import cn.hutool.json.JSONObject; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.analysis.parsing.controller.ParsingController; +import com.muyu.analysis.parsing.remote.RemoteClientService; +import com.muyu.analysis.parsing.mapper.ParsingMapper; +import com.muyu.analysis.parsing.service.ParsingService; +import com.muyu.common.core.domain.Result; +import com.muyu.enterprise.domain.car.MessageValue; +import com.muyu.enterprise.domain.resp.car.MessageValueListResp; +import lombok.extern.log4j.Log4j2; +import org.eclipse.paho.client.mqttv3.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 协议解析实现层 + * @Author:李庆帅 + * @Package:com.muyu.analysis.parsing.service.impl + * @Project:cloud-server + * @name:ParsingServiceImpl + * @Date:2024/9/28 20:53 + */ +@Log4j2 +@Service +public class ParsingServiceImpl extends ServiceImpl + implements ParsingService +{ + @Resource + private RedisTemplate redisTemplate; + + @Autowired + private RemoteClientService remoteServiceClientService; + + + + @Override + public void mqtt() { + String topic = "vehicle"; + String content = "Message from MqttPublishSample"; + int qos = 2; + String broker = "tcp://106.15.136.7: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())); + String mqtt= new String(mqttMessage.getPayload()); + JSONObject jsonObject = this.protocolParsing(mqtt); + System.out.println("转换后:"+jsonObject); + } + + 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 + Result byVehicleVin = remoteServiceClientService.findByVehicleVin(vehicleVin); + Long templateId = byVehicleVin.getData(); + List templateList; + //从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 = remoteServiceClientService.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); + } + System.out.println("发发呆沙发斯蒂芬萨达:"+jsonObject.toString()); + 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(); + } + } + + +} diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..bb37cb6 --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.muyu.analysis.parsing.remote.factory.RemoteClientServiceFactory diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/banner.txt b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/banner.txt new file mode 100644 index 0000000..0dd5eee --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/banner.txt @@ -0,0 +1,2 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..fe6051b --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/bootstrap.yml @@ -0,0 +1,46 @@ +# Tomcat +server: + port: 10166 + +# nacos线上地址 +nacos: + addr: 106.15.136.7:8848 + user-name: nacos + password: nacos + namespace: lqs + +spring: + application: + # 应用名称 + name: cloud-enterprise + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: ${nacos.addr} + # nacos用户名 + username: ${nacos.user-name} + # nacos密码 + password: ${nacos.password} + # 命名空间 + namespace: ${nacos.namespace} + config: + # 服务注册地址 + server-addr: ${nacos.addr} + # nacos用户名 + username: ${nacos.user-name} + # nacos密码 + password: ${nacos.password} + # 命名空间 + namespace: ${nacos.namespace} + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + # 系统共享配置 + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # 系统环境Config共享配置 + - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/logback/dev.xml b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/logback/dev.xml new file mode 100644 index 0000000..99dd7b7 --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/logback/dev.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/logback/prod.xml b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/logback/prod.xml new file mode 100644 index 0000000..f9cfee4 --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/logback/prod.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + ${log.sky.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/logback/test.xml b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/logback/test.xml new file mode 100644 index 0000000..f9cfee4 --- /dev/null +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-protocol-analysis/src/main/resources/logback/test.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + ${log.sky.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-enterprise/pom.xml b/cloud-modules/cloud-modules-enterprise/pom.xml index c0d0b63..be3910e 100644 --- a/cloud-modules/cloud-modules-enterprise/pom.xml +++ b/cloud-modules/cloud-modules-enterprise/pom.xml @@ -15,6 +15,7 @@ cloud-modules-enterprise-server cloud-modules-enterprise-common + cloud-modules-protocol-analysis