feat(): 基础逻辑重构

master
DongZeLiang 2024-09-11 10:40:52 +08:00
parent 3280455a24
commit 1856fcee91
28 changed files with 337 additions and 1757 deletions

File diff suppressed because it is too large Load Diff

37
pom.xml
View File

@ -12,13 +12,14 @@
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mybatisplus.version>3.5.1</mybatisplus.version>
<mybatisplus.version>3.5.7</mybatisplus.version>
<forest.version>1.5.36</forest.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.15</version>
<version>3.2.4</version>
</parent>
<dependencies>
@ -40,7 +41,7 @@
<version>1.2.5</version>
</dependency>
<!-- lombok插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
@ -49,25 +50,17 @@
<!-- mybatis-plus 所需依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<!-- mysql数据库驱动 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<!-- 使用h2内存数据库 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- json处理框架 -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
@ -77,14 +70,8 @@
<!-- http调用框架 -->
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-spring-boot-starter</artifactId>
<version>1.5.33</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
<artifactId>forest-spring-boot3-starter</artifactId>
<version>${forest.version}</version>
</dependency>
<!--常用工具类 -->

View File

@ -0,0 +1,29 @@
package com.muyu.system.context;
import com.muyu.system.domain.LoginUserInfo;
/**
* @Description:
* @author: MuYu
* @date: 2024/9/10-5:52
*/
public class SystemUserContext {
/**
* 线
*/
private static final ThreadLocal<LoginUserInfo> basicContextLocal = new ThreadLocal<>();
public static LoginUserInfo get() {
return basicContextLocal.get();
}
public static void set(LoginUserInfo value) {
basicContextLocal.set(value);
}
public static void remove() {
basicContextLocal.remove();
}
}

View File

@ -0,0 +1,41 @@
package com.muyu.system.domain;
import com.muyu.system.properties.ServerConfigProperties;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Description:
* @author: MuYu
* @date: 2024/9/11-10:15
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LoginUserInfo {
/**
* ID
*/
private Long id;
/**
*
*/
private String userName;
/**
* ID
*/
private String tenantId;
/**
*
*/
private ServerConfigProperties serverConfig;
}

View File

@ -0,0 +1,53 @@
package com.muyu.system.handle;
import com.muyu.system.context.SystemUserContext;
import com.muyu.system.domain.LoginUserInfo;
import com.muyu.system.properties.ServerConfigProperties;
/**
* @Description:
* @author: MuYu
* @date: 2024/9/11-10:23
*/
public class SystemHandler {
/**
*
* @return
*/
public static LoginUserInfo getUserInfo(){
return SystemUserContext.get();
}
/**
* ID
* @return ID
*/
public static Long getUserId(){
return getUserInfo().getId();
}
/**
*
* @return
*/
public static ServerConfigProperties getServerConfig(){
return SystemUserContext.get().getServerConfig();
}
/**
*
*/
public static void setServerConfig(ServerConfigProperties serverConfig){
SystemUserContext.get().setServerConfig(serverConfig);
}
/**
*
* @return
*/
public static String getLoadReqUrl(){
return getServerConfig().getLoadReqUrl();
}
}

View File

@ -0,0 +1,75 @@
package com.muyu.system.properties;
import com.muyu.web.domain.model.ServerConfigModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author: DongZeLiang
* @date: 2024/6/10
* @Description:
* @Version: 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ServerConfigProperties {
/**
*
*/
private String host;
/**
*
*/
private String port;
/**
*
*/
private String uri;
/**
*
*/
private String loadReqUrl;
/**
* MQTT
*/
private String mqttAddr;
/**
* MQTT
*/
private String mqttTopic;
/**
* MQTT
*/
private Integer mqttQos;
/**
*
* @param serverConfigModel
* @return
*/
public static ServerConfigProperties modelToProperties(ServerConfigModel serverConfigModel) {
return ServerConfigProperties.builder()
.host(serverConfigModel.getHost())
.port(serverConfigModel.getPort())
.uri(serverConfigModel.getUri())
.mqttAddr(serverConfigModel.getDefaultMqttAddr())
.mqttTopic(serverConfigModel.getDefaultMqttTopic())
.mqttQos(serverConfigModel.getDefaultMqttQos())
.loadReqUrl(
String.format(
"http://%s:%s%s",
serverConfigModel.getHost(),
serverConfigModel.getPort(),
serverConfigModel.getUri().startsWith("/") ? serverConfigModel.getUri() : "/" + serverConfigModel.getUri()
)
)
.build();
}
}

View File

@ -3,7 +3,7 @@ package com.muyu.vehicle;
import com.alibaba.fastjson2.JSONObject;
import com.muyu.web.common.SystemConstant;
import com.muyu.web.common.pool.ScheduledThreadPool;
import com.muyu.web.domain.Vehicle;
import com.muyu.web.domain.VehicleInfo;
import com.muyu.web.domain.model.PositionModel;
import com.muyu.web.utils.CalculateCheckDigit;
import com.muyu.web.utils.ConversionUtil;
@ -56,7 +56,7 @@ public class VehicleInstance {
/**
*
*/
private Vehicle vehicle;
private VehicleInfo vehicleInfo;
/**
*
*/
@ -95,7 +95,7 @@ public class VehicleInstance {
* @return VIN
*/
public String getVin() {
return this.vehicle.getVin();
return this.vehicleInfo.getVin();
}
/**

View File

@ -1,6 +1,6 @@
package com.muyu.vehicle.api.req;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

View File

@ -27,7 +27,7 @@ public class LocalContainer {
vehicleInstance.forEach(LocalContainer::setVehicleInstance);
}
public static void setVehicleInstance(VehicleInstance vehicleInstance){
String vin = vehicleInstance.getVehicle().getVin();
String vin = vehicleInstance.getVehicleInfo().getVin();
if (!vehicleDataMap.containsKey(vin)) {
vehicleDataMap.put(vin, vehicleInstance);
}

View File

@ -3,17 +3,17 @@ package com.muyu.vehicle.core;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.muyu.web.common.pool.FixedThreadPool;
import com.muyu.web.common.pool.ScheduledThreadPool;
import com.muyu.web.domain.Vehicle;
import com.muyu.web.domain.VehicleInfo;
import com.muyu.web.service.VehicleInfoService;
import com.muyu.web.service.VehicleInstanceService;
import com.muyu.web.service.VehicleService;
import com.muyu.vehicle.VehicleInstance;
import jakarta.annotation.PreDestroy;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PreDestroy;
import java.util.List;
/**
@ -27,7 +27,7 @@ import java.util.List;
@AllArgsConstructor
public class VehicleConfiguration implements ApplicationRunner {
private final VehicleService vehicleService;
private final VehicleInfoService vehicleInfoService;
private final VehicleInstanceService vehicleInstanceService;
@ -39,11 +39,11 @@ public class VehicleConfiguration implements ApplicationRunner {
int page = 0, pageSize = 10;
log.info("初始开始,批量从数据库当中加载数据到内存当中,每次[{}]条", pageSize);
while (true){
Page<Vehicle> vehiclePage = vehicleService.page(new Page<>(page++, pageSize));
List<Vehicle> vehicleList = vehiclePage.getRecords();
vehicleList.forEach(vehicleInstanceService::init);
log.debug("第[{}]页,[{}]条", page, vehicleList.size());
if (vehicleList.size() < pageSize){
Page<VehicleInfo> vehiclePage = vehicleInfoService.page(new Page<>(page++, pageSize));
List<VehicleInfo> vehicleInfoList = vehiclePage.getRecords();
vehicleInfoList.forEach(vehicleInstanceService::init);
log.debug("第[{}]页,[{}]条", page, vehicleInfoList.size());
if (vehicleInfoList.size() < pageSize){
break;
}
}
@ -65,7 +65,7 @@ public class VehicleConfiguration implements ApplicationRunner {
log.info("数据库同步");
vehicleService.syncDb();
vehicleInfoService.syncDb();
log.info("下线所有车辆");
List<VehicleInstance> onlineVehicleInstanceList = LocalContainer.getOnlineVehicleInstance();

View File

@ -1,7 +1,7 @@
package com.muyu.vehicle.model;
import com.muyu.web.domain.Vehicle;
import com.muyu.web.domain.VehicleInfo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -69,6 +69,7 @@ public class VehicleData {
/**
*
*/
@Builder.Default
private String gear = "P";
/**
@ -179,86 +180,103 @@ public class VehicleData {
/**
*
*/
@Builder.Default
private int vehicleStatus = 1;
/**
*
*/
@Builder.Default
private int chargingStatus = 1;
/**
*
*/
@Builder.Default
private int operatingStatus = 1;
/**
* SOC
*/
@Builder.Default
private int socStatus = 1;
/**
*
*/
@Builder.Default
private int chargingEnergyStorageStatus = 1;
/**
*
*/
@Builder.Default
private int driveMotorStatus = 1;
/**
*
*/
@Builder.Default
private int positionStatus = 1;
/**
* EAS()
*/
@Builder.Default
private int easStatus = 1;
/**
* PTC()
*/
@Builder.Default
private int ptcStatus = 1;
/**
* EPS()
*/
@Builder.Default
private int epsStatus = 1;
/**
* ABS()
*/
@Builder.Default
private int absStatus = 1;
/**
* MCU(/)
*/
@Builder.Default
private int mcuStatus = 1;
/**
*
*/
@Builder.Default
private int heatingStatus = 1;
/**
*
*/
@Builder.Default
private int batteryStatus = 1;
/**
*
*/
@Builder.Default
private int batteryInsulationStatus = 1;
/**
* DCDC()
*/
@Builder.Default
private int dcdcStatus = 1;
/**
* CHG()
*/
@Builder.Default
private int chgStatus = 1;
/**
@ -385,16 +403,16 @@ public class VehicleData {
/**
* VIN
* @param vehicle
* @param vehicleInfo
* @return
*/
public static VehicleData vehicleBuild (Vehicle vehicle) {
public static VehicleData vehicleBuild (VehicleInfo vehicleInfo) {
return VehicleData.builder()
.vin(vehicle.getVin())
.vin(vehicleInfo.getVin())
.gear("P")
.remainingBattery(vehicle.getRemainingBattery())
.batteryLevel(vehicle.getBatteryLevel())
.mileage(vehicle.getTotalMileage())
.remainingBattery(vehicleInfo.getRemainingBattery())
.batteryLevel(vehicleInfo.getBatteryLevel())
.mileage(vehicleInfo.getTotalMileage())
.vehicleStatus(1)
.chargingStatus(1)
.operatingStatus(1)

View File

@ -1,10 +1,7 @@
package com.muyu.web.config;
import com.dtflys.forest.annotation.BindingVar;
import com.dtflys.forest.reflection.ForestMethod;
import com.muyu.web.config.properties.ServiceConfigProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import com.muyu.system.handle.SystemHandler;
import org.springframework.stereotype.Service;
/**
@ -16,9 +13,6 @@ import org.springframework.stereotype.Service;
@Service("forsetConfig")
public class ForsetConfig {
@Autowired
private ServiceConfigProperties serviceConfigProperties;
/**
* 使 @BindingVar
* baseUrl
@ -26,7 +20,7 @@ public class ForsetConfig {
*/
@BindingVar("vehicleLoadUrl")
public String getBaseUrl() {
return serviceConfigProperties.getLoadReqUrl();
return SystemHandler.getLoadReqUrl();
}
}

View File

@ -1,31 +0,0 @@
package com.muyu.web.config;
import com.muyu.web.config.properties.ServiceConfigProperties;
import com.muyu.web.domain.model.ServerConfigModel;
import com.muyu.web.service.ServerConfigService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Author: DongZeLiang
* @date: 2024/6/10
* @Description:
* @Version: 1.0
*/
@Configuration
public class LoadServerConfig {
/**
*
*/
private static final ServiceConfigProperties serviceConfigProperties = new ServiceConfigProperties();
@Bean
public ServiceConfigProperties serverConfig(ServerConfigService serverConfigService) {
return serviceConfigProperties.modelToProperties(serverConfigService.get());
}
public static void modelToProperties(ServerConfigModel serverConfigModel){
serviceConfigProperties.modelToProperties(serverConfigModel);
}
}

View File

@ -1,66 +0,0 @@
package com.muyu.web.config.properties;
import com.muyu.web.domain.model.ServerConfigModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author: DongZeLiang
* @date: 2024/6/10
* @Description:
* @Version: 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ServiceConfigProperties {
/**
*
*/
private String host;
/**
*
*/
private String port;
/**
*
*/
private String loadUrl;
/**
*
*/
private String loadReqUrl;
/**
* MQTT
*/
private String mqttAddr;
/**
* MQTT
*/
private String mqttTopic;
/**
* MQTT
*/
private Integer mqttQos;
/**
*
* @param serverConfigModel
* @return
*/
public ServiceConfigProperties modelToProperties(ServerConfigModel serverConfigModel) {
this.host = serverConfigModel.getHost();
this.port = serverConfigModel.getPort();
this.loadUrl = serverConfigModel.getLoadUrl();
this.mqttAddr = serverConfigModel.getDefaultMqttAddr();
this.mqttTopic = serverConfigModel.getDefaultMqttTopic();
this.mqttQos = serverConfigModel.getDefaultMqttQos();
this.loadReqUrl = String.format("http://%s:%s%s", host, port, loadUrl.startsWith("/") ? loadUrl : "/" + loadUrl);
return this;
}
}

View File

@ -1,9 +1,9 @@
package com.muyu.web.controller;
import com.muyu.web.common.Result;
import com.muyu.web.domain.Vehicle;
import com.muyu.web.domain.VehicleInfo;
import com.muyu.web.domain.req.VehicleCreateAddReq;
import com.muyu.web.service.VehicleService;
import com.muyu.web.service.VehicleInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -20,11 +20,11 @@ import java.util.List;
public class VehicleController {
@Autowired
private VehicleService vehicleService;
private VehicleInfoService vehicleInfoService;
@GetMapping("/list")
public Result<List<Vehicle>> list(){
return Result.success(vehicleService.list());
public Result<List<VehicleInfo>> list(){
return Result.success(vehicleInfoService.list());
}
/**
@ -34,7 +34,7 @@ public class VehicleController {
*/
@GetMapping("/gen/{sum}")
public Result<String> generate(@PathVariable(value = "sum") Integer sum){
vehicleService.generate(sum);
vehicleInfoService.generate(sum);
return Result.success();
}
/**
@ -44,7 +44,7 @@ public class VehicleController {
*/
@PostMapping("/create")
public Result<String> create(@RequestBody VehicleCreateAddReq vehicleCreateAddReq){
vehicleService.create(vehicleCreateAddReq.getVinStr());
vehicleInfoService.create(vehicleCreateAddReq.getVinStr());
return Result.success();
}
@ -56,7 +56,7 @@ public class VehicleController {
*/
@DeleteMapping("/{vin}")
public Result<String> delete(@PathVariable("vin") String vin){
this.vehicleService.delete(vin);
this.vehicleInfoService.delete(vin);
return Result.success(null,"删除成功");
}
}

View File

@ -1,7 +1,8 @@
package com.muyu.web.controller;
import com.muyu.system.handle.SystemHandler;
import com.muyu.web.common.Result;
import com.muyu.web.config.properties.ServiceConfigProperties;
import com.muyu.system.properties.ServerConfigProperties;
import com.muyu.web.domain.model.MqttServerModel;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
@ -18,8 +19,6 @@ import org.springframework.web.bind.annotation.RestController;
@AllArgsConstructor
public class VerifyController {
private final ServiceConfigProperties serviceConfigProperties;
/**
* 线
@ -27,10 +26,11 @@ public class VerifyController {
*/
@PostMapping("/vehicleConnection")
public Result<MqttServerModel> vehicleConnection(){
ServerConfigProperties serverConfig = SystemHandler.getServerConfig();
return Result.success(
MqttServerModel.builder()
.broker(serviceConfigProperties.getMqttAddr())
.topic(serviceConfigProperties.getMqttTopic())
.broker(serverConfig.getMqttAddr())
.topic(serverConfig.getMqttTopic())
.build()
);
}

View File

@ -1,5 +1,7 @@
package com.muyu.web.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.muyu.web.domain.model.ServerConfigModel;
import lombok.AllArgsConstructor;
@ -25,7 +27,17 @@ public class ServerConfig {
/**
*
*/
private Integer id;
@TableId(
value = "id",
type = IdType.AUTO
)
private Long id;
/**
* ID
*/
private String tenantId;
/**
*
*/
@ -37,7 +49,7 @@ public class ServerConfig {
/**
*
*/
private String loadUrl;
private String uri;
/**
* MQTT
*/
@ -51,12 +63,12 @@ public class ServerConfig {
*/
private Integer defaultMqttQos;
public static ServerConfig modeBuild (ServerConfigModel serverConfigModel, Supplier<Integer> idKey) {
public static ServerConfig modeBuild (ServerConfigModel serverConfigModel, Supplier<Long> idKey) {
return builder()
.id(idKey.get())
.host(serverConfigModel.getHost())
.port(serverConfigModel.getPort())
.loadUrl(serverConfigModel.getLoadUrl())
.uri(serverConfigModel.getUri())
.defaultMqttAddr(serverConfigModel.getDefaultMqttAddr())
.defaultMqttTopic(serverConfigModel.getDefaultMqttTopic())
.defaultMqttQos(serverConfigModel.getDefaultMqttQos())

View File

@ -24,8 +24,8 @@ import java.util.Date;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("vehicle")
public class Vehicle {
@TableName("vehicle_info")
public class VehicleInfo {
/**
* VIN
@ -61,17 +61,17 @@ public class Vehicle {
*
* @return
*/
public static Vehicle gen() {
return Vehicle.create(VehicleUtils.genVin());
public static VehicleInfo gen() {
return VehicleInfo.create(VehicleUtils.genVin());
}
/**
*
* @return
*/
public static Vehicle create(String vin) {
public static VehicleInfo create(String vin) {
BigDecimal battery = VehicleUtils.genBattery();
return Vehicle.builder()
return VehicleInfo.builder()
.vin(vin)
.createTime(new Date())
.batteryLevel(battery)
@ -81,9 +81,9 @@ public class Vehicle {
}
public static Vehicle instanceBuild (VehicleInstance vehicleInstance) {
public static VehicleInfo instanceBuild (VehicleInstance vehicleInstance) {
VehicleData vehicle = vehicleInstance.getVehicleData();
return Vehicle.builder()
return VehicleInfo.builder()
.vin(vehicleInstance.getVin())
.remainingBattery(vehicle.getRemainingBattery())
.totalMileage(vehicle.getMileage())

View File

@ -1,6 +1,5 @@
package com.muyu.web.domain.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.muyu.web.domain.ServerConfig;
import com.muyu.web.domain.req.ServerConfigEditReq;
import lombok.AllArgsConstructor;
@ -31,7 +30,7 @@ public class ServerConfigModel {
/**
*
*/
private String loadUrl;
private String uri;
/**
* MQTT
*/
@ -49,7 +48,7 @@ public class ServerConfigModel {
return builder()
.host(serverConfig.getHost().trim())
.port(serverConfig.getPort())
.loadUrl(serverConfig.getLoadUrl().trim())
.uri(serverConfig.getUri().trim())
.defaultMqttAddr(serverConfig.getDefaultMqttAddr().trim())
.defaultMqttTopic(serverConfig.getDefaultMqttTopic().trim())
.defaultMqttQos(serverConfig.getDefaultMqttQos())
@ -60,7 +59,7 @@ public class ServerConfigModel {
return builder()
.host(serverConfigReq.getHost().trim())
.port(serverConfigReq.getPort())
.loadUrl(serverConfigReq.getLoadUrl().trim())
.uri(serverConfigReq.getLoadUrl().trim())
.defaultMqttAddr(serverConfigReq.getDefaultMqttAddr().trim())
.defaultMqttTopic(serverConfigReq.getDefaultMqttTopic().trim())
.defaultMqttQos(serverConfigReq.getDefaultMqttQos())

View File

@ -1,6 +1,5 @@
package com.muyu.web.domain.resp;
import com.baomidou.mybatisplus.annotation.TableName;
import com.muyu.web.domain.model.ServerConfigModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -49,7 +48,7 @@ public class ServerConfigResp {
return builder()
.host(serverConfigModel.getHost())
.port(serverConfigModel.getPort())
.loadUrl(serverConfigModel.getLoadUrl())
.loadUrl(serverConfigModel.getUri())
.defaultMqttAddr(serverConfigModel.getDefaultMqttAddr())
.defaultMqttTopic(serverConfigModel.getDefaultMqttTopic())
.defaultMqttQos(serverConfigModel.getDefaultMqttQos())

View File

@ -1,7 +1,7 @@
package com.muyu.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.web.domain.Vehicle;
import com.muyu.web.domain.VehicleInfo;
import org.apache.ibatis.annotations.Mapper;
/**
@ -13,6 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2022-07-05
*/
@Mapper
public interface VehicleMapper extends BaseMapper<Vehicle> {
public interface VehicleInfoMapper extends BaseMapper<VehicleInfo> {
}

View File

@ -1,7 +1,7 @@
package com.muyu.web.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.web.domain.Vehicle;
import com.muyu.web.domain.VehicleInfo;
/**
* <p>
@ -11,7 +11,7 @@ import com.muyu.web.domain.Vehicle;
* @author DongZeLiang
* @since 2022-07-05
*/
public interface VehicleService extends IService<Vehicle> {
public interface VehicleInfoService extends IService<VehicleInfo> {
/**
*

View File

@ -1,7 +1,7 @@
package com.muyu.web.service;
import com.muyu.web.common.PageList;
import com.muyu.web.domain.Vehicle;
import com.muyu.web.domain.VehicleInfo;
import com.muyu.web.domain.req.CheckPositionReq;
import com.muyu.web.domain.req.GearReq;
import com.muyu.web.domain.req.MsgReq;
@ -18,9 +18,9 @@ public interface VehicleInstanceService {
/**
*
* @param vehicle
* @param vehicleInfo
*/
public void init(Vehicle vehicle);
public void init(VehicleInfo vehicleInfo);
/**

View File

@ -2,12 +2,11 @@ package com.muyu.web.service.impl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.web.config.LoadServerConfig;
import com.muyu.web.config.properties.ServiceConfigProperties;
import com.muyu.system.handle.SystemHandler;
import com.muyu.system.properties.ServerConfigProperties;
import com.muyu.web.domain.ServerConfig;
import com.muyu.web.domain.model.ServerConfigModel;
import com.muyu.web.service.ServerConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
@ -31,7 +30,7 @@ public class ServerConfigServiceImpl extends ServiceImpl<BaseMapper<ServerConfig
*/
@Override
public ServerConfigModel get () {
ServerConfig serverConfig = getById(key);
ServerConfig serverConfig = getById(SystemHandler.getUserId());
return ServerConfigModel.serverConfigBuild(serverConfig);
}
@ -42,8 +41,10 @@ public class ServerConfigServiceImpl extends ServiceImpl<BaseMapper<ServerConfig
*/
@Override
public void edit (ServerConfigModel serverConfigModel) {
ServerConfig serverConfig = ServerConfig.modeBuild(serverConfigModel, () -> key);
ServerConfig serverConfig = ServerConfig.modeBuild(serverConfigModel, () -> SystemHandler.getUserId());
updateById(serverConfig);
LoadServerConfig.modelToProperties(serverConfigModel);
SystemHandler.setServerConfig(
ServerConfigProperties.modelToProperties(serverConfigModel)
);
}
}

View File

@ -3,10 +3,10 @@ package com.muyu.web.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.web.domain.Vehicle;
import com.muyu.web.mapper.VehicleMapper;
import com.muyu.web.domain.VehicleInfo;
import com.muyu.web.mapper.VehicleInfoMapper;
import com.muyu.web.service.VehicleInstanceService;
import com.muyu.web.service.VehicleService;
import com.muyu.web.service.VehicleInfoService;
import com.muyu.vehicle.VehicleInstance;
import com.muyu.vehicle.core.LocalContainer;
import lombok.extern.log4j.Log4j2;
@ -30,7 +30,7 @@ import java.util.stream.Stream;
*/
@Log4j2
@Service
public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> implements VehicleService {
public class VechileInfoServiceImpl extends ServiceImpl<VehicleInfoMapper, VehicleInfo> implements VehicleInfoService {
@Autowired
@ -44,9 +44,9 @@ public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> impl
@Override
@Transactional
public void generate (Integer sum) {
List<Vehicle> vehicleList = Stream.generate(Vehicle::gen).limit(sum).toList();
this.saveBatch(vehicleList);
vehicleList.forEach(vehicleInstanceService::init);
List<VehicleInfo> vehicleInfoList = Stream.generate(VehicleInfo::gen).limit(sum).toList();
this.saveBatch(vehicleInfoList);
vehicleInfoList.forEach(vehicleInstanceService::init);
}
/**
@ -63,8 +63,8 @@ public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> impl
if (vin.length() != 17) {
errorMsg.append("vin[").append(vin).append("]").append("不为17位\n");
} else {
LambdaQueryWrapper<Vehicle> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Vehicle::getVin, vin);
LambdaQueryWrapper<VehicleInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(VehicleInfo::getVin, vin);
long count = this.count(queryWrapper);
if (count == 1) {
errorMsg.append("vin[").append(vin).append("]").append("已经存在\n");
@ -74,9 +74,9 @@ public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> impl
if (!errorMsg.isEmpty()) {
throw new RuntimeException(errorMsg.toString());
}
List<Vehicle> vehicleList = Arrays.stream(vinList).map(Vehicle::create).toList();
this.saveBatch(vehicleList);
vehicleList.forEach(vehicleInstanceService::init);
List<VehicleInfo> vehicleInfoList = Arrays.stream(vinList).map(VehicleInfo::create).toList();
this.saveBatch(vehicleInfoList);
vehicleInfoList.forEach(vehicleInstanceService::init);
}
/**
@ -91,15 +91,15 @@ public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> impl
Collection<VehicleInstance> vehicleInstanceList = LocalContainer.getOnlineVehicleInstance();
// 成功数量
AtomicInteger syncSuccessSum = new AtomicInteger();
List<Vehicle> vehicleList = vehicleInstanceList.stream()
List<VehicleInfo> vehicleInfoList = vehicleInstanceList.stream()
.filter(VehicleInstance::isOnline)
.map(Vehicle::instanceBuild)
.map(VehicleInfo::instanceBuild)
.toList();
vehicleList.forEach(vehicle -> {
LambdaUpdateWrapper<Vehicle> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(Vehicle::getRemainingBattery, vehicle.getRemainingBattery());
updateWrapper.set(Vehicle::getTotalMileage, vehicle.getTotalMileage());
updateWrapper.eq(Vehicle::getVin, vehicle.getVin());
vehicleInfoList.forEach(vehicle -> {
LambdaUpdateWrapper<VehicleInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(VehicleInfo::getRemainingBattery, vehicle.getRemainingBattery());
updateWrapper.set(VehicleInfo::getTotalMileage, vehicle.getTotalMileage());
updateWrapper.eq(VehicleInfo::getVin, vehicle.getVin());
try {
this.update(updateWrapper);
syncSuccessSum.incrementAndGet();
@ -109,7 +109,7 @@ public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> impl
}
});
log.info("同步数据库结束 - 耗时:[{}MS],同步量:[{}辆],成功:[{}辆],失败:[{}辆]",
System.currentTimeMillis() - startTime, vehicleList.size(),syncSuccessSum.get(), vehicleList.size() - syncSuccessSum.get());
System.currentTimeMillis() - startTime, vehicleInfoList.size(),syncSuccessSum.get(), vehicleInfoList.size() - syncSuccessSum.get());
}catch (Exception exception){
log.error("数据同步异常:{}", exception.getMessage(), exception);
}

View File

@ -8,7 +8,7 @@ import com.muyu.vehicle.model.VehicleData;
import com.muyu.vehicle.model.properties.MqttProperties;
import com.muyu.web.common.PageList;
import com.muyu.web.common.Result;
import com.muyu.web.domain.Vehicle;
import com.muyu.web.domain.VehicleInfo;
import com.muyu.web.domain.model.MqttServerModel;
import com.muyu.web.domain.model.PositionModel;
import com.muyu.web.domain.req.CheckPositionReq;
@ -50,15 +50,15 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService {
/**
*
*
* @param vehicle
* @param vehicleInfo
*/
@Override
public void init(Vehicle vehicle) {
public void init(VehicleInfo vehicleInfo) {
VehicleInstance vehicleInstance = new VehicleInstance();
vehicleInstance.setVehicle(vehicle);
vehicleInstance.setVehicleData(VehicleData.vehicleBuild(vehicle));
vehicleInstance.setVehicleInfo(vehicleInfo);
vehicleInstance.setVehicleData(VehicleData.vehicleBuild(vehicleInfo));
LocalContainer.setVehicleInstance(vehicleInstance);
log.debug("构建车辆对象: [{}]", vehicle.getVin());
log.debug("构建车辆对象: [{}]", vehicleInfo.getVin());
}
/**

View File

@ -7,30 +7,14 @@ spring:
static-path-pattern: /static/**
datasource:
username: muyu
password: 123456
# 如果需要数据本地化,则改成 file 方式
# jdbc:h2:mem:testDB;DB_CLOSE_DELAY=-1
url: jdbc:h2:file:./db/vehicleSimulationDataBaseFile;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1
driver-class-name: org.h2.Driver
h2:
# 开启这个配置就可以通过 web 页面访问了例如http://localhost:8080/springboot-h2/h2-console
console:
enabled: true
settings:
# 开启h2 console 跟踪 方便调试 默认 false
trace: false
# 允许console 远程访问 默认false
web-allow-others: true
# h2 访问路径上下文
path: /h2-console
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://47.92.86.60:23658/muyu-vehicle?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: Vehicle@666
# mybatis-plus 配置
mybatis-plus:
mapper-locations: classpath*:/com.muyu.mapper/**/*.xml
#实体扫描多个package用逗号或者分号分隔
typeAliasesPackage: com.dmo.entity
global-config:
#数据库相关配置
db-config: