From 8fd9aea58a251280dd5a05d3797380966328f311 Mon Sep 17 00:00:00 2001 From: DongZeLiang <2746733890@qq.com> Date: Mon, 27 Nov 2023 10:12:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=A6=E8=BE=86=E4=B8=8A=E4=B8=8B=E7=BA=BF?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5mqtt=E5=AE=A2=E6=88=B7=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/VehicleInstanceController.java | 27 ++++++++-- .../muyu/domain/resp/VehicleInstanceResp.java | 6 +++ .../muyu/service/VehicleInstanceService.java | 12 +++++ .../impl/VehicleInstanceServiceImpl.java | 34 +++++++++++- src/main/java/com/muyu/vehicle/Test.java | 16 +++--- .../com/muyu/vehicle/VehicleInstance.java | 54 ++++++++++--------- 6 files changed, 110 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/muyu/controller/VehicleInstanceController.java b/src/main/java/com/muyu/controller/VehicleInstanceController.java index 77833ff..fa0389b 100644 --- a/src/main/java/com/muyu/controller/VehicleInstanceController.java +++ b/src/main/java/com/muyu/controller/VehicleInstanceController.java @@ -6,10 +6,7 @@ import com.muyu.domain.resp.VehicleInstanceResp; import com.muyu.service.VehicleInstanceService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -36,4 +33,26 @@ public class VehicleInstanceController { List list = vehicleInstanceService.queryList(vehicleInstanceListReq); return Result.success(list); } + + /** + * 车辆连接初始化 + * @param vin vin + * @return 初始化 + */ + @PostMapping("/client/init/{vin}") + public Result vehicleClientInit(@PathVariable("vin") String vin){ + this.vehicleInstanceService.vehicleClientInit(vin); + return Result.success(); + } + + /** + * 车辆连接初始化 + * @param vin vin + * @return 初始化 + */ + @PostMapping("/client/close/{vin}") + public Result vehicleClientClose(@PathVariable("vin") String vin){ + this.vehicleInstanceService.vehicleClientClose(vin); + return Result.success(); + } } diff --git a/src/main/java/com/muyu/domain/resp/VehicleInstanceResp.java b/src/main/java/com/muyu/domain/resp/VehicleInstanceResp.java index 437bf27..996a1b7 100644 --- a/src/main/java/com/muyu/domain/resp/VehicleInstanceResp.java +++ b/src/main/java/com/muyu/domain/resp/VehicleInstanceResp.java @@ -22,9 +22,15 @@ public class VehicleInstanceResp { */ private String vin; + /** + * 是否在线 + */ + public boolean isOnline; + public static VehicleInstanceResp instanceBuild (VehicleInstance vehicleInstance) { return VehicleInstanceResp.builder() .vin(vehicleInstance.getVin()) + .isOnline(vehicleInstance.isOnline()) .build(); } } diff --git a/src/main/java/com/muyu/service/VehicleInstanceService.java b/src/main/java/com/muyu/service/VehicleInstanceService.java index b574278..e2ef91d 100644 --- a/src/main/java/com/muyu/service/VehicleInstanceService.java +++ b/src/main/java/com/muyu/service/VehicleInstanceService.java @@ -32,4 +32,16 @@ public interface VehicleInstanceService { * @return 车辆对象 */ List queryList (VehicleInstanceListReq vehicleInstanceListReq); + + /** + * 车辆客户端初始化 + * @param vin vin + */ + void vehicleClientInit (String vin); + + /** + * 车辆客户端关闭 + * @param vin vin + */ + void vehicleClientClose (String vin); } diff --git a/src/main/java/com/muyu/service/impl/VehicleInstanceServiceImpl.java b/src/main/java/com/muyu/service/impl/VehicleInstanceServiceImpl.java index 24138b6..09b47e1 100644 --- a/src/main/java/com/muyu/service/impl/VehicleInstanceServiceImpl.java +++ b/src/main/java/com/muyu/service/impl/VehicleInstanceServiceImpl.java @@ -50,7 +50,7 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService { .clientId(vin) .build(); vehicleInstance.setMqttProperties(mqttProperties); - vehicleInstance.initCline(); + vehicleInstance.initClient(); } /** @@ -68,4 +68,36 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService { .toList(); } + /** + * 车辆客户端初始化 + * + * @param vin vin + */ + @Override + public void vehicleClientInit (String vin) { + VehicleInstance vehicleInstance = LocalContainer.getVehicleInstance(vin); + if (vehicleInstance == null){ + throw new RuntimeException("没有【"+vin+"】车辆"); + } + vehicleInstance.setMqttProperties( + MqttProperties.builder() + .broker("tcp://fluxmq.muyu.icu:1883") + .topic("test") + .clientId(vin) + .build() + ); + vehicleInstance.initClient(); + } + + /** + * 车辆客户端关闭 + * + * @param vin vin + */ + @Override + public void vehicleClientClose (String vin) { + VehicleInstance vehicleInstance = LocalContainer.getVehicleInstance(vin); + vehicleInstance.closeClient(); + } + } diff --git a/src/main/java/com/muyu/vehicle/Test.java b/src/main/java/com/muyu/vehicle/Test.java index 6166042..b7e7ad2 100644 --- a/src/main/java/com/muyu/vehicle/Test.java +++ b/src/main/java/com/muyu/vehicle/Test.java @@ -1,21 +1,17 @@ package com.muyu.vehicle; import com.alibaba.fastjson2.JSONArray; -import com.muyu.common.ThreadPool; import com.muyu.domain.Vehicle; import com.muyu.domain.model.PositionModel; -import com.muyu.utils.VehicleUtils; import com.muyu.vehicle.core.LocalContainer; import com.muyu.vehicle.model.VehicleData; import com.muyu.vehicle.model.properties.MqttProperties; import lombok.extern.log4j.Log4j2; -import java.lang.reflect.Array; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.concurrent.CountDownLatch; import static java.lang.Thread.sleep; @@ -32,16 +28,18 @@ public class Test { private static MqttProperties mqttProperties = MqttProperties.builder() .broker("tcp://fluxmq.muyu.icu:1883") .topic("test") + .username("123456") + .password("AJLJWIEJLASDJOWQES") .build(); public static void main(String[] args) { log.info("开始生成VIN"); long genVinStartTime = System.currentTimeMillis(); List list = new ArrayList<>(); -// list.add("VIN12345678912345"); - for (int i = 0; i < 10; i++) { - list.add(VehicleUtils.genVin()); - } + list.add("VIN12345678912345"); +// for (int i = 0; i < 10; i++) { +// list.add(VehicleUtils.genVin()); +// } log.info("生成VIN结束:[{}MS]", System.currentTimeMillis()-genVinStartTime); log.info("开始创建车辆"); long initVehicleStartTime = System.currentTimeMillis(); @@ -94,7 +92,7 @@ public class Test { log.info("构建车辆实例"); vehicleInstance.setVehicle(vehicle); vehicleInstance.setVehicleData(VehicleData.vehicleBuild(vehicle)); - vehicleInstance.initCline(); + vehicleInstance.initClient(); log.info("构建车辆客户端"); LocalContainer.setVehicleInstance(vehicleInstance); } diff --git a/src/main/java/com/muyu/vehicle/VehicleInstance.java b/src/main/java/com/muyu/vehicle/VehicleInstance.java index cd83ca7..0e1812c 100644 --- a/src/main/java/com/muyu/vehicle/VehicleInstance.java +++ b/src/main/java/com/muyu/vehicle/VehicleInstance.java @@ -116,7 +116,7 @@ public class VehicleInstance { /** * 初始化客户端 */ - public void initCline() { + public void initClient () { try { client = new MqttClient(mqttProperties.getBroker(), mqttProperties.getClientId(), new MemoryPersistence()); // 连接参数 @@ -137,6 +137,34 @@ public class VehicleInstance { } } + /** + * 是否连接在线 + * @return 在线返回true,不在线为false + */ + public boolean isOnline () { + if (this.client == null){ + return false; + } + return this.client.isConnected(); + } + + /** + * 关闭连接 + */ + public void closeClient(){ + if (this.client != null){ + try { + // 断开连接 + this.client.disconnect(); + // 关闭连接 + this.client.close(); + log.info("车辆:[{}] 客户端下线成功", getVin()); + } catch (MqttException e) { + log.error("车辆:[{}] 客户端关闭异常:[{}]",getVin(), e.getMessage(), e); + } + } + } + /** * 初始化车辆路线 * @param positionModelList 路线集合 @@ -247,28 +275,4 @@ public class VehicleInstance { this.vehicleData.setGear(gear); } - /*public static void main (String[] args) { - PositionModel lastPositionModel = PositionModel.builder() - .longitude("116.664053") - .latitude("39.531791") - .build(); - PositionModel currentPositionModel = PositionModel.builder() - .longitude("116.655091") - .latitude("39.52091") - .build(); - // 两点之间的距离 - BigDecimal distance = VehicleUtils.distance(lastPositionModel, currentPositionModel); - - // 当前电量减少 - // 电池浮动 - BigDecimal batteryFloat = VehicleUtils.batteryFloat(); - BigDecimal divide = distance.divide(SystemConstant.hundredKilometers).setScale(4, RoundingMode.HALF_UP); - BigDecimal multiply = SystemConstant.powerConsumption.multiply(divide) - .multiply(batteryFloat) - .setScale(2, RoundingMode.HALF_UP); - System.out.println("移动距离:" + distance); - System.out.println("浮动量:" + batteryFloat); - System.out.println("百公里占比:" + divide); - System.out.println("当前减少电池量:" + multiply); - }*/ }