package com.muyu.service.impl; import com.muyu.domain.Vehicle; import com.muyu.domain.req.VehicleInstanceListReq; import com.muyu.domain.resp.VehicleInstanceResp; import com.muyu.service.VehicleInstanceService; import com.muyu.vehicle.VehicleInstance; 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 org.springframework.stereotype.Service; import java.util.List; /** * @author DongZeLiang * @version 1.0 * @description 车辆实例业务实现层 * @date 2023/11/22 */ @Log4j2 @Service public class VehicleInstanceServiceImpl implements VehicleInstanceService { /** * 根据车辆生成车辆实例 * * @param vehicle 车辆信息 */ @Override public void init(Vehicle vehicle) { VehicleInstance vehicleInstance = new VehicleInstance(); vehicleInstance.setVehicle(vehicle); vehicleInstance.setVehicleData(VehicleData.vehicleBuild(vehicle)); LocalContainer.setVehicleInstance(vehicleInstance); log.info("构建车辆对象: [{}]", vehicle.getVin()); } /** * 初始化链接客户端 * * @param vin 车辆VIN */ @Override public void initClient(String vin) { VehicleInstance vehicleInstance = LocalContainer.getVehicleInstance(vin); MqttProperties mqttProperties = MqttProperties.builder() .broker("tcp://fluxmq.muyu.icu:1883") .topic("test") .clientId(vin) .build(); vehicleInstance.setMqttProperties(mqttProperties); vehicleInstance.initClient(); } /** * 车辆结果对象 * * @param vehicleInstanceListReq 车辆查询 * * @return 车辆对象 */ @Override public List queryList (VehicleInstanceListReq vehicleInstanceListReq) { return LocalContainer.vehicleDataMap.values() .stream() .map(VehicleInstanceResp::instanceBuild) .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(); } }