From 7e0594185b8f2e7805be876d9599a0d14f55973a Mon Sep 17 00:00:00 2001 From: yuan <1363654894@qq.com> Date: Wed, 9 Oct 2024 14:05:18 +0800 Subject: [PATCH] =?UTF-8?q?feat():=E8=BD=A6=E8=BE=86=E7=BD=91=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloud-modules-car-gateway/pom.xml | 130 ++++++++++++++++++ .../muyu/car/CloudCarGatewayApplication.java | 20 +++ .../java/com/muyu/car/MqttPublishSample.java | 50 +++++++ .../domain/api/req/VehicleConnectionReq.java | 55 ++++++++ .../domain/example/ExampleInformation.java | 35 +++++ .../car/domain/model/MqttServerModel.java | 30 ++++ .../car/domain/model/VehicleInformation.java | 86 ++++++++++++ .../model/properties/MqttProperties.java | 51 +++++++ .../model/properties/MqttServerModel.java | 39 ++++++ .../VehicleInformationController.java | 35 +++++ .../controller/VehicleInstanceController.java | 25 ++++ .../muyu/car/gateway/mq/CreateExchange.java | 53 +++++++ .../service/VehicleInformationService.java | 17 +++ .../service/VehicleInstanceService.java | 13 ++ .../impl/VehicleInformationServiceImpl.java | 79 +++++++++++ .../impl/VehicleInstanceServiceImpl.java | 18 +++ .../com/muyu/car/instance/CreateClient.java | 36 +++++ .../com/muyu/car/instance/DelInstance.java | 102 ++++++++++++++ .../muyu/car/instance/GenerateInstance.java | 120 ++++++++++++++++ .../com/muyu/car/instance/QueryInstance.java | 69 ++++++++++ .../car/mapper/VehicleInformationMapper.java | 21 +++ .../main/java/com/muyu/car/util/MD5Util.java | 71 ++++++++++ .../src/main/resources/banner.txt | 2 + .../src/main/resources/logback/dev.xml | 74 ++++++++++ .../src/main/resources/logback/prod.xml | 81 +++++++++++ .../src/main/resources/logback/test.xml | 81 +++++++++++ .../mapper/VehicleInformationMapper.xml | 16 +++ cloud-modules/pom.xml | 1 + 28 files changed, 1410 insertions(+) create mode 100644 cloud-modules/cloud-modules-car-gateway/pom.xml create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/CloudCarGatewayApplication.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/MqttPublishSample.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/api/req/VehicleConnectionReq.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/example/ExampleInformation.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/MqttServerModel.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/VehicleInformation.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/properties/MqttProperties.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/properties/MqttServerModel.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/controller/VehicleInformationController.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/controller/VehicleInstanceController.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/mq/CreateExchange.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/VehicleInformationService.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/VehicleInstanceService.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/impl/VehicleInformationServiceImpl.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/impl/VehicleInstanceServiceImpl.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/CreateClient.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/DelInstance.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/GenerateInstance.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/QueryInstance.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/mapper/VehicleInformationMapper.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/util/MD5Util.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/banner.txt create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/dev.xml create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/prod.xml create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/test.xml create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/VehicleInformationMapper.xml diff --git a/cloud-modules/cloud-modules-car-gateway/pom.xml b/cloud-modules/cloud-modules-car-gateway/pom.xml new file mode 100644 index 0000000..c602346 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/pom.xml @@ -0,0 +1,130 @@ + + 4.0.0 + + com.muyu + cloud-modules + 3.6.3 + + + + cloud-modules-car-gateway车辆网关模块 + + cloud-modules-car-gateway + jar + + cloud-modules-car-gateway + http://maven.apache.org + + + UTF-8 + + + + + + + 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-common-rabbit + + + + com.muyu + cloud-common-core + + + + com.muyu + cloud-modules-car + 3.6.3 + + + + com.aliyun + ecs20140526 + 5.4.0 + + + + org.eclipse.paho + org.eclipse.paho.client.mqttv3 + 1.2.5 + + + + redis.clients + jedis + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/CloudCarGatewayApplication.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/CloudCarGatewayApplication.java new file mode 100644 index 0000000..7aac0e4 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/CloudCarGatewayApplication.java @@ -0,0 +1,20 @@ +package com.muyu.car; + +import com.muyu.common.security.annotation.EnableMyFeignClients; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @Author:蓬叁 + * @Package:com.muyu.car + * @Project:cloud-server-8 + * @name:CloudCarGatewayApplication + * @Date:2024/9/29 上午10:50 + */ +@EnableMyFeignClients +@SpringBootApplication +public class CloudCarGatewayApplication { + public static void main(String[] args) { + SpringApplication.run(CloudCarGatewayApplication.class, args); + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/MqttPublishSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/MqttPublishSample.java new file mode 100644 index 0000000..8653fc0 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/MqttPublishSample.java @@ -0,0 +1,50 @@ +package com.muyu.car; + +import org.eclipse.paho.client.mqttv3.*; +import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; + +public class MqttPublishSample { + + public static void main(String[] args) { + + String topic = "vehicle"; + String content = "Message from MqttPublishSample"; + int qos = 2; + String broker = "tcp://120.55.62.0: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())); + } + // 接收信息 + @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-car-gateway/src/main/java/com/muyu/car/domain/api/req/VehicleConnectionReq.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/api/req/VehicleConnectionReq.java new file mode 100644 index 0000000..296c035 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/api/req/VehicleConnectionReq.java @@ -0,0 +1,55 @@ +package com.muyu.car.domain.api.req; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 车辆连接请求参数 + * @Author:蓬叁 + * @Package:com.muyu.car.domain.api.req + * @Project:cloud-server-8 + * @name:VehicleConnectionReq + * @Date:2024/10/2 下午4:12 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class VehicleConnectionReq { + + /** + * { + * "vehicleVin": "VIN1234567894", + * "timestamp": "11111", + * "username": "你好", + * "nonce": "33" + * } + */ + + /** + * vin + */ + @JSONField(name = "vehicleVin") + private String vehicleVin; + /** + * 时间戳 + */ + private String timestamp; + /** + * 用户名 + */ + @JSONField(name = "username") + private String username; + /** + * 随机字符串 + */ + private String nonce; + /** + * 密码 + */ + private String password; + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/example/ExampleInformation.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/example/ExampleInformation.java new file mode 100644 index 0000000..8387717 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/example/ExampleInformation.java @@ -0,0 +1,35 @@ +package com.muyu.car.domain.example; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 实例基础信息 + * @Author:蓬叁 + * @Package:com.muyu.car.domain + * @Project:cloud-server-8 + * @name:ExampleInformation + * @Date:2024/9/29 下午10:01 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ExampleInformation { + + /** + * 实例ID + */ + private String InstanceId; + /** + * 实例IP + */ + private String IpAddress; + /** + * 实例状态 + */ + private String status; + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/MqttServerModel.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/MqttServerModel.java new file mode 100644 index 0000000..511d8bc --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/MqttServerModel.java @@ -0,0 +1,30 @@ +package com.muyu.car.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author:蓬叁 + * @Package:com.muyu.car.domain.model + * @Project:cloud-server-8 + * @name:MqttServerModel + * @Date:2024/10/7 下午6:40 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MqttServerModel { + + /** + * MQTT服务节点 + */ + private String broker; + /** + * MQTT订阅主题 + */ + private String topic; + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/VehicleInformation.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/VehicleInformation.java new file mode 100644 index 0000000..244ffd3 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/VehicleInformation.java @@ -0,0 +1,86 @@ +package com.muyu.car.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author:蓬叁 + * @Package:com.muyu.car.domain.model + * @Project:cloud-server-8 + * @name:Vehicle + * @Date:2024/10/6 上午10:33 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class VehicleInformation { + + /** + * 车辆ID + */ + private String carInformationId ; + /** + * 车辆唯一VIN + */ + private String carInformationVIN ; + /** + * 车牌号 + */ + private String carInformationLicensePlate ; + /** + * 车辆品牌 + */ + private String carInformationBrand ; + /** + * 车辆颜色 + */ + private String carInformationColor ; + /** + * 车辆驾驶员 + */ + private String carInformationDriver ; + /** + * 车检到期日期 + */ + private String carInformationExamineEnddata ; + /** + * 车辆电机厂商 + */ + private String carInformationMotorManufacturer ; + /** + * 车辆电机型号 + */ + private String carInformationMotorModel ; + /** + * 车辆电池厂商 + */ + private String carInformationBatteryManufacturer ; + /** + * 车辆电池型号 + */ + private String carInformationBatteryModel ; + /** + * 车辆电子围栏外键ID + */ + private String carInformationFence ; + /** + * 车辆类型外键ID + */ + private String carInformationType ; + /** + * 是否重点车辆 (0否默认 1是 ) + */ + private String carInformationFocus ; + /** + * 车辆策略id + */ + private String carStrategyId ; + /** + * 启用状态(1.在线 2.离线 3.已断开 4.待连接 5.维修中) + */ + private String carInformationState ; + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/properties/MqttProperties.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/properties/MqttProperties.java new file mode 100644 index 0000000..0e42383 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/properties/MqttProperties.java @@ -0,0 +1,51 @@ +package com.muyu.car.domain.model.properties; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author:蓬叁 + * @Package:com.muyu.car.domain.model.properties + * @Project:cloud-server-8 + * @name:MqttProperties + * @Date:2024/10/6 下午8:24 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MqttProperties { + + /** + * 节点 + */ + private String broker; + + /** + * 主题 + */ + private String topic; + + /** + * 用户名 + */ + private String username; + + /** + * 密码 + */ + private String password; + + /** + * 节点ID + */ + private String clientId; + + /** + * 上报级别 + */ + private int qos = 0; + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/properties/MqttServerModel.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/properties/MqttServerModel.java new file mode 100644 index 0000000..9354b7d --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/domain/model/properties/MqttServerModel.java @@ -0,0 +1,39 @@ +package com.muyu.car.domain.model.properties; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @Author:蓬叁 + * @Package:com.muyu.car.domain.model.properties + * @Project:cloud-server-8 + * @name:MqttServerModel + * @Date:2024/10/6 下午8:25 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MqttServerModel { + + private static final Logger log = LoggerFactory.getLogger(MqttServerModel.class); + /** + * MQTT服务节点 + */ + private String broker; + + /** + * MQTT订阅主题 + */ + private String topic; + + public String getBroker () { + log.info("broker: {}", broker); + return broker.contains("tcp://") ? broker : "tcp://" + broker + ":1883"; + } + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/controller/VehicleInformationController.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/controller/VehicleInformationController.java new file mode 100644 index 0000000..ac4282a --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/controller/VehicleInformationController.java @@ -0,0 +1,35 @@ +package com.muyu.car.gateway.controller; + +import com.muyu.car.domain.api.req.VehicleConnectionReq; +import com.muyu.car.domain.model.MqttServerModel; +import com.muyu.car.domain.model.VehicleInformation; +import com.muyu.car.gateway.service.VehicleInformationService; +import com.muyu.common.core.domain.Result; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 车辆获取信息 + * @Author:蓬叁 + * @Package:com.muyu.car.gateway.controller + * @Project:cloud-server-8 + * @name:VehicleInformationController + * @Date:2024/10/6 下午2:39 + */ +@RestController +@RequestMapping("/verify") +public class VehicleInformationController { + + @Autowired + private VehicleInformationService vehicleInformationService; + + @PostMapping("/vehicleConnection") + public Result getVehicleData( + @Validated @RequestBody VehicleConnectionReq vehicleConnectionReq + ) { + + return Result.success(vehicleInformationService.getVehicleData(vehicleConnectionReq)); + } + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/controller/VehicleInstanceController.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/controller/VehicleInstanceController.java new file mode 100644 index 0000000..39b1ea5 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/controller/VehicleInstanceController.java @@ -0,0 +1,25 @@ +package com.muyu.car.gateway.controller; + +import com.muyu.car.domain.model.VehicleInformation; +import com.muyu.car.gateway.service.VehicleInstanceService; +import com.muyu.common.core.domain.Result; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * 车辆实例控制层 + * @Author:蓬叁 + * @Package:com.muyu.car.gateway.controller + * @Project:cloud-server-8 + * @name:VehicleInformation + * @Date:2024/10/4 上午9:40 + */ +@RestController +@RequestMapping("/vehicle") +public class VehicleInstanceController { + + @Autowired private VehicleInstanceService vehicleInstanceService; + + + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/mq/CreateExchange.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/mq/CreateExchange.java new file mode 100644 index 0000000..827ccde --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/mq/CreateExchange.java @@ -0,0 +1,53 @@ +package com.muyu.car.gateway.mq; + +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.*; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + + +/** + * @Author:蓬叁 + * @Package:com.muyu.car.gateway.mq + * @Project:cloud-server-8 + * @name:CreateExchange + * @Date:2024/10/7 下午8:53 + */ +@Log4j2 +@Component +public class CreateExchange implements ApplicationRunner { + + @Autowired + private ConnectionFactory connectionFactory; + + @Override + public void run(ApplicationArguments args) { + log.info("=====>开始创建交换机"); + + try { + RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); + + // 创建Fanout类型的交换机 + FanoutExchange exchange = new FanoutExchange("ONLINE_EXCHANGE", true, false); + + rabbitAdmin.declareExchange(exchange); + + // 创建队列 + Queue queue = new Queue("GO_ONLINE", true, false, false); + + rabbitAdmin.declareQueue(queue); + + // Fanout交换机绑定 + rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange)); + + log.info("=====>交换机创建成功"); + log.info("=====>队列创建成功并绑定到交换机"); + }catch (Exception e) { + log.info(e.getMessage()); + } + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/VehicleInformationService.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/VehicleInformationService.java new file mode 100644 index 0000000..f742a74 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/VehicleInformationService.java @@ -0,0 +1,17 @@ +package com.muyu.car.gateway.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.car.domain.api.req.VehicleConnectionReq; +import com.muyu.car.domain.model.MqttServerModel; +import com.muyu.car.domain.model.VehicleInformation; + +/** + * @Author:蓬叁 + * @Package:com.muyu.car.gateway.service + * @Project:cloud-server-8 + * @name:VehicleInformationService + * @Date:2024/10/6 下午2:40 + */ +public interface VehicleInformationService{ + MqttServerModel getVehicleData(VehicleConnectionReq vehicleConnectionReq); +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/VehicleInstanceService.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/VehicleInstanceService.java new file mode 100644 index 0000000..8929287 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/VehicleInstanceService.java @@ -0,0 +1,13 @@ +package com.muyu.car.gateway.service; + +import com.muyu.car.domain.model.VehicleInformation; + +/** + * @Author:蓬叁 + * @Package:com.muyu.car.gateway.service + * @Project:cloud-server-8 + * @name:VehicleInstanceService + * @Date:2024/10/6 上午10:05 + */ +public interface VehicleInstanceService { +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/impl/VehicleInformationServiceImpl.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/impl/VehicleInformationServiceImpl.java new file mode 100644 index 0000000..2719b75 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/impl/VehicleInformationServiceImpl.java @@ -0,0 +1,79 @@ +package com.muyu.car.gateway.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.car.domain.api.req.VehicleConnectionReq; +import com.muyu.car.domain.model.MqttServerModel; +import com.muyu.car.domain.model.VehicleInformation; +import com.muyu.car.gateway.service.VehicleInformationService; +import com.muyu.car.mapper.VehicleInformationMapper; +import com.muyu.common.redis.service.RedisService; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * @Author:蓬叁 + * @Package:com.muyu.car.gateway.service.impl + * @Project:cloud-server-8 + * @name:VehicleInformationServiceImpl + * @Date:2024/10/6 下午2:41 + */ +@Log4j2 +@Service +public class VehicleInformationServiceImpl implements VehicleInformationService{ + + @Autowired private VehicleInformationMapper vehicleInformationMapper; + + @Autowired private RedisService redisService; + + @Override + public MqttServerModel getVehicleData(VehicleConnectionReq vehicleConnectionReq) { + log.info("车辆连接请求:[{}]",vehicleConnectionReq); + vehicleConnectionReq.setPassword(vehicleConnectionReq.getVehicleVin()+vehicleConnectionReq.getTimestamp()+vehicleConnectionReq.getNonce()); + + List selectVehicle =vehicleInformationMapper.selectVehicleVin(vehicleConnectionReq.getVehicleVin()); + if(selectVehicle.isEmpty()) { + vehicleInformationMapper.addVehicleConnection(vehicleConnectionReq); + log.info("车辆预上线成功"); + }else { + log.info("车辆无法重复预上线"); + } + + // 获取名为 "ipList" 的列表 + List ipList = redisService.getCacheList("ipList"); + if (ipList.isEmpty()) { + return null; + } + // 获取当前使用的索引位置 + String indexStr = redisService.getCacheObject("currentIndex"); + int index = indexStr!= null? Integer.parseInt(indexStr) : 0; + String selectedIp = ipList.get(index); + // 获取该 IP 的使用次数 + String countStr = redisService.getCacheMapValue("ipCounts", selectedIp); + log.info("IP:[{}]车辆连接数:[{}]",selectedIp,countStr); + int count = countStr!= null? Integer.parseInt(countStr) : 0; + if (count < 12) { + // 使用次数加一 + count++; + redisService.setCacheMapValue("ipCounts", selectedIp, String.valueOf(count)); + // 更新索引 + index = (index + 1) % ipList.size(); + redisService.setCacheObject("currentIndex", String.valueOf(index)); + return new MqttServerModel("tcp://"+selectedIp.substring(1,selectedIp.length()-1)+":1883","vehicle"); + } else { + // 如果使用次数达到 12 次,跳过该 IP 并更新索引 + index = (index + 1) % ipList.size(); + redisService.setCacheObject("currentIndex", String.valueOf(index)); + return getVehicleData(vehicleConnectionReq); + } + } + + + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/impl/VehicleInstanceServiceImpl.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/impl/VehicleInstanceServiceImpl.java new file mode 100644 index 0000000..5c6496c --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/gateway/service/impl/VehicleInstanceServiceImpl.java @@ -0,0 +1,18 @@ +package com.muyu.car.gateway.service.impl; + +import com.muyu.car.domain.model.VehicleInformation; +import com.muyu.car.gateway.service.VehicleInstanceService; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Service; + +/** + * @Author:蓬叁 + * @Package:com.muyu.car.gateway.service.impl + * @Project:cloud-server-8 + * @name:VehicleInstanceServceImpl + * @Date:2024/10/6 上午10:06 + */ +@Log4j2 +@Service +public class VehicleInstanceServiceImpl implements VehicleInstanceService { +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/CreateClient.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/CreateClient.java new file mode 100644 index 0000000..7378035 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/CreateClient.java @@ -0,0 +1,36 @@ +package com.muyu.car.instance; + +import org.springframework.stereotype.Component; +/** + * 阿里云AccessKey ID Secret + * @Author:蓬叁 + * @Package:com.muyu.car.domain + * @Project:cloud-server-8 + * @name:CreateClient + * @Date:2024/9/29 上午10:41 + */ +@Component +public class CreateClient { + + /** + * description : + *

使用AK&SK初始化账号Client

+ * @return Client + * + * @throws Exception + */ + public static com.aliyun.ecs20140526.Client createClient() throws Exception { + // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 + // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。 + com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 + .setAccessKeyId("LTAI5tFtQk1KbwRBXM5pHVWw") + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 + .setAccessKeySecret("GLByUZqUqgR600eTpGmfb52ZT93mu9"); + // Endpoint 请参考 https://api.aliyun.com/product/Ecs + config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; + return new com.aliyun.ecs20140526.Client(config); + } + +} + diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/DelInstance.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/DelInstance.java new file mode 100644 index 0000000..e8aafe4 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/DelInstance.java @@ -0,0 +1,102 @@ +package com.muyu.car.instance; + +import com.aliyun.ecs20140526.models.DescribeInstancesRequest; +import com.aliyun.ecs20140526.models.DescribeInstancesResponse; +import com.aliyun.ecs20140526.models.DescribeInstancesResponseBody; +import com.aliyun.ecs20140526.models.RunInstancesResponseBody; +import com.aliyun.tea.*; +import com.aliyun.teautil.models.RuntimeOptions; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.stereotype.Component; +import redis.clients.jedis.Jedis; + +import java.util.ArrayList; +import java.util.Set; + +/** + * 项目关闭清除实例 + * @Author:蓬叁 + * @Package:com.muyu.car.domain + * @Project:cloud-server-8 + * @name:DelInstance + * @Date:2024/9/29 上午10:42 + */ +@Log4j2 +@Component +@Tag(name = "程序停止删除实例") +public class DelInstance implements DisposableBean { + + public static void delInstance() throws Exception { + // 创建ECS客户端对象,用于后续调用ECS相关API + com.aliyun.ecs20140526.Client client = CreateClient.createClient(); + DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest() + .setRegionId("cn-hangzhou"); + //创建运行时选择对象,用于配置运行时的选项参数 + RuntimeOptions runtimeOptions = new RuntimeOptions(); + + //获取实例列表 + DescribeInstancesResponse describeInstancesResponse = client.describeInstancesWithOptions(describeInstancesRequest, runtimeOptions); + + //提取实例ID集合 + ArrayList list = new ArrayList<>(); + DescribeInstancesResponseBody body = describeInstancesResponse.getBody(); + for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.getInstances().getInstance()) { + list.add(instance.getInstanceId()); + } + log.info("Instance IDs: " + list); + // 创建删除实例请求对象,并设置请求参数 + com.aliyun.ecs20140526.models.DeleteInstancesRequest deleteInstancesRequest = new com.aliyun.ecs20140526.models.DeleteInstancesRequest() + //设置地域ID,指定删除实例的地域 + .setRegionId("cn-hangzhou") + // 设置DryRun为true,用于验证请求是否可以成功,但不实际执行删除操作 + .setDryRun(false) + // 设置Force为true,表示即使实例有正在运行的任务,也强制删除实例 + .setForce(true) + // 设置TerminateSubscription为true,表示删除按订阅付费的实例时终止订阅 + .setTerminateSubscription(true) + .setInstanceId(list); + + //创建运行时选项对象,用于配置运行时的选项参数 + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + try { + // 复制代码运行请自行打印 API 的返回值 + client.deleteInstancesWithOptions(deleteInstancesRequest, runtime); + } catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + log.info(error.getMessage()); + // 诊断地址 + log.info(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + log.info(error.getMessage()); + // 诊断地址 + log.info(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } + + } + + @Override + public void destroy() throws Exception { + log.info("===============>开始执行删除实例方法"); + delInstance(); + // 连接到Redis服务器 + Jedis jedis = new Jedis("159.75.188.178", 6379); + // 指定要删除的文件夹(命名空间) + String namespace = "InstanceIdKey:"; + // 获取所有以namespace为前缀的键 + Set keys = jedis.keys(namespace + "*"); + // 如果存在键,则删除它们 + if (keys.size() > 0) { + jedis.del(keys.toArray(new String[0])); + } + // 关闭连接 + jedis.close(); + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/GenerateInstance.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/GenerateInstance.java new file mode 100644 index 0000000..7ce87c7 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/GenerateInstance.java @@ -0,0 +1,120 @@ +package com.muyu.car.instance; + +import com.aliyun.ecs20140526.models.*; +import com.aliyun.tea.TeaException; +import com.muyu.car.domain.example.ExampleInformation; +import com.muyu.common.redis.service.RedisService; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * 项目启动创建实例 + * @Author:蓬叁 + * @Package:com.muyu.car.domain + * @Project:cloud-server-8 + * @name:GenerateInstance + * @Date:2024/9/29 上午10:42 + */ +@Component +@Log4j2 +@Tag(name = "启动时创建实例") +public class GenerateInstance implements ApplicationRunner { + + @Autowired private RedisService redisService; + + /** + * 启动自动创建实例 + * @throws Exception + */ + public static List generateInstance() throws Exception { + + // 创建ECS客户端对象,用于后续调用ECS相关API + com.aliyun.ecs20140526.Client client = CreateClient.createClient(); + + com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk() + .setSize("40") + .setCategory("cloud_essd"); + com.aliyun.ecs20140526.models.RunInstancesRequest runInstancesRequest = new com.aliyun.ecs20140526.models.RunInstancesRequest() + // 设置地域ID + .setRegionId("cn-hangzhou") + // 设置镜像ID + .setImageId("m-bp1hkxfctk751s62jqhq") + // 设置实例类型 + .setInstanceType("ecs.t6-c1m1.large") + // 设置安全组ID + .setSecurityGroupId("sg-bp1a7fk8js5pn3fw9p2m") + // 设置虚拟交换机ID + .setVSwitchId("vsw-bp193np7r01vssqxhh24e") + // 设置实例名称 + .setInstanceName("server-mqtt") + // 设置实例付费类型为后付费按量付费 + .setInstanceChargeType("PostPaid") + // 设置互联网最大出带宽为1 Mbps + .setInternetMaxBandwidthOut(1) + // 设置系统盘配置 + .setSystemDisk(systemDisk) + // 设置主机名 + .setHostName("root") + // 设置实例密码 + .setPassword("EightGroup123.") + // 设置创建实例的数量 + .setAmount(2); + + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + try { + // 复制代码运行请自行打印 API 的返回值 + RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runtime); + // 获取body返回值对象 + RunInstancesResponseBody body = runInstancesResponse.getBody(); + ArrayList list = new ArrayList<>(); + // 得到实例ID数组 + for (String instance : body.getInstanceIdSets().getInstanceIdSet()) { + list.add(instance); + } + log.info("实例ID:{}",list); + return list; + } catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + log.info(error.getMessage()); + // 诊断地址 + log.info(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + log.info(error.getMessage()); + // 诊断地址 + log.info(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } + return null; + } + + @Override + public void run(ApplicationArguments args) throws Exception { + List InstanceIds = generateInstance(); + log.info("创建实例成功"); + log.info("正在加载实例"); + Thread.sleep(30000); + List exampleInformations = QueryInstance.queryInstance(InstanceIds); + log.info("加载成功"); + ArrayList list = new ArrayList<>(); + for (ExampleInformation exampleInformation : exampleInformations) { + redisService.setCacheObject("InstanceIdKey:"+exampleInformation.getInstanceId(),exampleInformation); + list.add(exampleInformation.getIpAddress()); + } + redisService.setCacheList("ipList",list); + log.info("实例信息:{}",exampleInformations); + } + +} + diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/QueryInstance.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/QueryInstance.java new file mode 100644 index 0000000..21d562a --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/instance/QueryInstance.java @@ -0,0 +1,69 @@ +package com.muyu.car.instance; + +import com.alibaba.fastjson.JSON; +import com.aliyun.ecs20140526.models.DescribeInstancesResponse; +import com.aliyun.ecs20140526.models.DescribeInstancesResponseBody; +import com.aliyun.tea.TeaException; +import com.muyu.car.domain.example.ExampleInformation; +import lombok.extern.log4j.Log4j2; + +import java.util.ArrayList; +import java.util.List; + +/** + * 启动后查询实例信息 + * @Author:蓬叁 + * @Package:com.muyu.car.instance + * @Project:cloud-server-8 + * @name:QueryInstance + * @Date:2024/9/29 下午8:58 + */ +@Log4j2 +public class QueryInstance { + + public static List queryInstance(List instanceIds) throws Exception { + com.aliyun.ecs20140526.Client client = CreateClient.createClient(); + + com.aliyun.ecs20140526.models.DescribeInstancesRequest describeInstancesRequest = new com.aliyun.ecs20140526.models.DescribeInstancesRequest() + .setInstanceIds(JSON.toJSONString(instanceIds)) + .setRegionId("cn-hangzhou"); + + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + + try { + // 复制代码运行请自行打印 API 的返回值 + DescribeInstancesResponse describeInstancesResponse = client.describeInstancesWithOptions(describeInstancesRequest, runtime); + DescribeInstancesResponseBody body = describeInstancesResponse.getBody(); + ArrayList exampleInformations = new ArrayList<>(); + for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.getInstances().getInstance()){ + ExampleInformation exampleInformation = new ExampleInformation(); + exampleInformation.setInstanceId(instance.getInstanceId()); + log.info("实例ID:{}",exampleInformation.getInstanceId()); + exampleInformation.setStatus(instance.getStatus()); + log.info("实例状态:{}",exampleInformation.getStatus()); + exampleInformation.setIpAddress(String.valueOf(instance.getPublicIpAddress().getIpAddress())); + log.info("实例IP:{}",exampleInformation.getIpAddress()); + exampleInformations.add(exampleInformation); + } + log.info("实例信息:{}",exampleInformations); + return exampleInformations; + } catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } + return null; + } + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/mapper/VehicleInformationMapper.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/mapper/VehicleInformationMapper.java new file mode 100644 index 0000000..2060e33 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/mapper/VehicleInformationMapper.java @@ -0,0 +1,21 @@ +package com.muyu.car.mapper; + +import com.muyu.car.domain.api.req.VehicleConnectionReq; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Author:蓬叁 + * @Package:com.muyu.car.mapper + * @Project:cloud-server-8 + * @name:VehicleInformationMapper + * @Date:2024/10/6 下午2:19 + */ +@Mapper +public interface VehicleInformationMapper { + void addVehicleConnection(VehicleConnectionReq vehicleConnectionReq); + + List selectVehicleVin(@Param("vehicleVin") String vehicleVin); +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/util/MD5Util.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/util/MD5Util.java new file mode 100644 index 0000000..186f3a4 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/car/util/MD5Util.java @@ -0,0 +1,71 @@ +package com.muyu.car.util; + +import lombok.extern.log4j.Log4j2; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.SecureRandom; + +@Log4j2 +public class MD5Util { + + private static final Integer SALT_LENGTH = 12; + + /** + * 将指定byte数组转换成16进制字符串 + * @param b 字节数组 + * @return 返回结果字符串 + */ + public static String byteToHexString(byte[] b) { + StringBuilder hexString = new StringBuilder(); + for (byte value : b) { + String hex = Integer.toHexString(value & 0xFF); + if (hex.length() == 1) { + hex = '0' + hex; + } + hexString.append(hex.toUpperCase()); + } + return hexString.toString(); + } + + /** + * 获得加密后的口令 + * @param str 需要加密的字符串 + * @return 加密后的字符串 + */ + public static String encrypted (String str) { + try { + // 声明加密后的口令数组变量 + byte[] pwd = null; + // 随机数生成器 + SecureRandom random = new SecureRandom(); + // 声明盐数组变量 + byte[] salt = new byte[SALT_LENGTH]; + // 将随机数放入盐变量中 + random.nextBytes(salt); + + // 声明消息摘要对象 + MessageDigest md = null; + // 创建消息摘要 + md = MessageDigest.getInstance("MD5"); + // 将盐数据传入消息摘要对象 + md.update(salt); + // 将口令的数据传给消息摘要对象 + md.update(str.getBytes(StandardCharsets.UTF_8)); + // 获得消息摘要的字节数组 + byte[] digest = md.digest(); + + // 因为要在口令的字节数组中存放盐,所以加上盐的字节长度 + pwd = new byte[digest.length + SALT_LENGTH]; + // 将盐的字节拷贝到生成的加密口令字节数组的前12个字节,以便在验证口令时取出盐 + System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH); + // 将消息摘要拷贝到加密口令字节数组从第13个字节开始的字节 + System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length); + // 将字节数组格式加密后的口令转化为16进制字符串格式的口令 + return byteToHexString(pwd); + }catch (Exception exception){ + log.info("md5加密失败:[{}]", str, exception); + return str; + } + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/banner.txt b/cloud-modules/cloud-modules-car-gateway/src/main/resources/banner.txt new file mode 100644 index 0000000..0dd5eee --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/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-car-gateway/src/main/resources/logback/dev.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/dev.xml new file mode 100644 index 0000000..3126c46 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/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-car-gateway/src/main/resources/logback/prod.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/prod.xml new file mode 100644 index 0000000..8f5aff5 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/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-car-gateway/src/main/resources/logback/test.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/test.xml new file mode 100644 index 0000000..8f5aff5 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/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-car-gateway/src/main/resources/mapper/VehicleInformationMapper.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/VehicleInformationMapper.xml new file mode 100644 index 0000000..3781cc2 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/VehicleInformationMapper.xml @@ -0,0 +1,16 @@ + + + + + INSERT INTO `vehicle_connection` (`vin`, `timestamp`, `username`, `nonce`,`password`) VALUES (#{vehicleVin}, #{timestamp}, #{username}, #{nonce},#{password}); + + + diff --git a/cloud-modules/pom.xml b/cloud-modules/pom.xml index 61c92c9..92e0faf 100644 --- a/cloud-modules/pom.xml +++ b/cloud-modules/pom.xml @@ -14,6 +14,7 @@ cloud-modules-gen cloud-modules-file cloud-modules-carData + cloud-modules-car-gateway cloud-modules-protocolparsing