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.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target> <maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <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> </properties>
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.15</version> <version>3.2.4</version>
</parent> </parent>
<dependencies> <dependencies>
@ -40,7 +41,7 @@
<version>1.2.5</version> <version>1.2.5</version>
</dependency> </dependency>
<!-- lombok插件 -->
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
@ -49,25 +50,17 @@
<!-- mybatis-plus 所需依赖 --> <!-- mybatis-plus 所需依赖 -->
<dependency> <dependency>
<groupId>com.baomidou</groupId> <groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatisplus.version}</version> <version>${mybatisplus.version}</version>
</dependency> </dependency>
<!-- mysql数据库驱动 -->
<dependency> <dependency>
<groupId>com.baomidou</groupId> <groupId>com.mysql</groupId>
<artifactId>mybatis-plus-generator</artifactId> <artifactId>mysql-connector-j</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<!-- 使用h2内存数据库 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency> </dependency>
<!-- json处理框架 -->
<dependency> <dependency>
<groupId>com.alibaba.fastjson2</groupId> <groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId> <artifactId>fastjson2</artifactId>
@ -77,14 +70,8 @@
<!-- http调用框架 --> <!-- http调用框架 -->
<dependency> <dependency>
<groupId>com.dtflys.forest</groupId> <groupId>com.dtflys.forest</groupId>
<artifactId>forest-spring-boot-starter</artifactId> <artifactId>forest-spring-boot3-starter</artifactId>
<version>1.5.33</version> <version>${forest.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency> </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.alibaba.fastjson2.JSONObject;
import com.muyu.web.common.SystemConstant; import com.muyu.web.common.SystemConstant;
import com.muyu.web.common.pool.ScheduledThreadPool; 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.domain.model.PositionModel;
import com.muyu.web.utils.CalculateCheckDigit; import com.muyu.web.utils.CalculateCheckDigit;
import com.muyu.web.utils.ConversionUtil; 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 * @return VIN
*/ */
public String getVin() { public String getVin() {
return this.vehicle.getVin(); return this.vehicleInfo.getVin();
} }
/** /**

View File

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

View File

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

View File

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

View File

@ -1,10 +1,7 @@
package com.muyu.web.config; package com.muyu.web.config;
import com.dtflys.forest.annotation.BindingVar; import com.dtflys.forest.annotation.BindingVar;
import com.dtflys.forest.reflection.ForestMethod; import com.muyu.system.handle.SystemHandler;
import com.muyu.web.config.properties.ServiceConfigProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
@ -16,9 +13,6 @@ import org.springframework.stereotype.Service;
@Service("forsetConfig") @Service("forsetConfig")
public class ForsetConfig { public class ForsetConfig {
@Autowired
private ServiceConfigProperties serviceConfigProperties;
/** /**
* 使 @BindingVar * 使 @BindingVar
* baseUrl * baseUrl
@ -26,7 +20,7 @@ public class ForsetConfig {
*/ */
@BindingVar("vehicleLoadUrl") @BindingVar("vehicleLoadUrl")
public String getBaseUrl() { 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; package com.muyu.web.controller;
import com.muyu.web.common.Result; 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.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.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -20,11 +20,11 @@ import java.util.List;
public class VehicleController { public class VehicleController {
@Autowired @Autowired
private VehicleService vehicleService; private VehicleInfoService vehicleInfoService;
@GetMapping("/list") @GetMapping("/list")
public Result<List<Vehicle>> list(){ public Result<List<VehicleInfo>> list(){
return Result.success(vehicleService.list()); return Result.success(vehicleInfoService.list());
} }
/** /**
@ -34,7 +34,7 @@ public class VehicleController {
*/ */
@GetMapping("/gen/{sum}") @GetMapping("/gen/{sum}")
public Result<String> generate(@PathVariable(value = "sum") Integer sum){ public Result<String> generate(@PathVariable(value = "sum") Integer sum){
vehicleService.generate(sum); vehicleInfoService.generate(sum);
return Result.success(); return Result.success();
} }
/** /**
@ -44,7 +44,7 @@ public class VehicleController {
*/ */
@PostMapping("/create") @PostMapping("/create")
public Result<String> create(@RequestBody VehicleCreateAddReq vehicleCreateAddReq){ public Result<String> create(@RequestBody VehicleCreateAddReq vehicleCreateAddReq){
vehicleService.create(vehicleCreateAddReq.getVinStr()); vehicleInfoService.create(vehicleCreateAddReq.getVinStr());
return Result.success(); return Result.success();
} }
@ -56,7 +56,7 @@ public class VehicleController {
*/ */
@DeleteMapping("/{vin}") @DeleteMapping("/{vin}")
public Result<String> delete(@PathVariable("vin") String vin){ public Result<String> delete(@PathVariable("vin") String vin){
this.vehicleService.delete(vin); this.vehicleInfoService.delete(vin);
return Result.success(null,"删除成功"); return Result.success(null,"删除成功");
} }
} }

View File

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

View File

@ -1,5 +1,7 @@
package com.muyu.web.domain; 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.baomidou.mybatisplus.annotation.TableName;
import com.muyu.web.domain.model.ServerConfigModel; import com.muyu.web.domain.model.ServerConfigModel;
import lombok.AllArgsConstructor; 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 * MQTT
*/ */
@ -51,12 +63,12 @@ public class ServerConfig {
*/ */
private Integer defaultMqttQos; private Integer defaultMqttQos;
public static ServerConfig modeBuild (ServerConfigModel serverConfigModel, Supplier<Integer> idKey) { public static ServerConfig modeBuild (ServerConfigModel serverConfigModel, Supplier<Long> idKey) {
return builder() return builder()
.id(idKey.get()) .id(idKey.get())
.host(serverConfigModel.getHost()) .host(serverConfigModel.getHost())
.port(serverConfigModel.getPort()) .port(serverConfigModel.getPort())
.loadUrl(serverConfigModel.getLoadUrl()) .uri(serverConfigModel.getUri())
.defaultMqttAddr(serverConfigModel.getDefaultMqttAddr()) .defaultMqttAddr(serverConfigModel.getDefaultMqttAddr())
.defaultMqttTopic(serverConfigModel.getDefaultMqttTopic()) .defaultMqttTopic(serverConfigModel.getDefaultMqttTopic())
.defaultMqttQos(serverConfigModel.getDefaultMqttQos()) .defaultMqttQos(serverConfigModel.getDefaultMqttQos())

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
package com.muyu.web.service; package com.muyu.web.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.web.domain.Vehicle; import com.muyu.web.domain.VehicleInfo;
/** /**
* <p> * <p>
@ -11,7 +11,7 @@ import com.muyu.web.domain.Vehicle;
* @author DongZeLiang * @author DongZeLiang
* @since 2022-07-05 * @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; package com.muyu.web.service;
import com.muyu.web.common.PageList; 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.CheckPositionReq;
import com.muyu.web.domain.req.GearReq; import com.muyu.web.domain.req.GearReq;
import com.muyu.web.domain.req.MsgReq; 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.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.web.config.LoadServerConfig; import com.muyu.system.handle.SystemHandler;
import com.muyu.web.config.properties.ServiceConfigProperties; import com.muyu.system.properties.ServerConfigProperties;
import com.muyu.web.domain.ServerConfig; import com.muyu.web.domain.ServerConfig;
import com.muyu.web.domain.model.ServerConfigModel; import com.muyu.web.domain.model.ServerConfigModel;
import com.muyu.web.service.ServerConfigService; import com.muyu.web.service.ServerConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
@ -31,7 +30,7 @@ public class ServerConfigServiceImpl extends ServiceImpl<BaseMapper<ServerConfig
*/ */
@Override @Override
public ServerConfigModel get () { public ServerConfigModel get () {
ServerConfig serverConfig = getById(key); ServerConfig serverConfig = getById(SystemHandler.getUserId());
return ServerConfigModel.serverConfigBuild(serverConfig); return ServerConfigModel.serverConfigBuild(serverConfig);
} }
@ -42,8 +41,10 @@ public class ServerConfigServiceImpl extends ServiceImpl<BaseMapper<ServerConfig
*/ */
@Override @Override
public void edit (ServerConfigModel serverConfigModel) { public void edit (ServerConfigModel serverConfigModel) {
ServerConfig serverConfig = ServerConfig.modeBuild(serverConfigModel, () -> key); ServerConfig serverConfig = ServerConfig.modeBuild(serverConfigModel, () -> SystemHandler.getUserId());
updateById(serverConfig); 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.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.web.domain.Vehicle; import com.muyu.web.domain.VehicleInfo;
import com.muyu.web.mapper.VehicleMapper; import com.muyu.web.mapper.VehicleInfoMapper;
import com.muyu.web.service.VehicleInstanceService; 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.VehicleInstance;
import com.muyu.vehicle.core.LocalContainer; import com.muyu.vehicle.core.LocalContainer;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
@ -30,7 +30,7 @@ import java.util.stream.Stream;
*/ */
@Log4j2 @Log4j2
@Service @Service
public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> implements VehicleService { public class VechileInfoServiceImpl extends ServiceImpl<VehicleInfoMapper, VehicleInfo> implements VehicleInfoService {
@Autowired @Autowired
@ -44,9 +44,9 @@ public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> impl
@Override @Override
@Transactional @Transactional
public void generate (Integer sum) { public void generate (Integer sum) {
List<Vehicle> vehicleList = Stream.generate(Vehicle::gen).limit(sum).toList(); List<VehicleInfo> vehicleInfoList = Stream.generate(VehicleInfo::gen).limit(sum).toList();
this.saveBatch(vehicleList); this.saveBatch(vehicleInfoList);
vehicleList.forEach(vehicleInstanceService::init); vehicleInfoList.forEach(vehicleInstanceService::init);
} }
/** /**
@ -63,8 +63,8 @@ public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> impl
if (vin.length() != 17) { if (vin.length() != 17) {
errorMsg.append("vin[").append(vin).append("]").append("不为17位\n"); errorMsg.append("vin[").append(vin).append("]").append("不为17位\n");
} else { } else {
LambdaQueryWrapper<Vehicle> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<VehicleInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Vehicle::getVin, vin); queryWrapper.eq(VehicleInfo::getVin, vin);
long count = this.count(queryWrapper); long count = this.count(queryWrapper);
if (count == 1) { if (count == 1) {
errorMsg.append("vin[").append(vin).append("]").append("已经存在\n"); errorMsg.append("vin[").append(vin).append("]").append("已经存在\n");
@ -74,9 +74,9 @@ public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> impl
if (!errorMsg.isEmpty()) { if (!errorMsg.isEmpty()) {
throw new RuntimeException(errorMsg.toString()); throw new RuntimeException(errorMsg.toString());
} }
List<Vehicle> vehicleList = Arrays.stream(vinList).map(Vehicle::create).toList(); List<VehicleInfo> vehicleInfoList = Arrays.stream(vinList).map(VehicleInfo::create).toList();
this.saveBatch(vehicleList); this.saveBatch(vehicleInfoList);
vehicleList.forEach(vehicleInstanceService::init); vehicleInfoList.forEach(vehicleInstanceService::init);
} }
/** /**
@ -91,15 +91,15 @@ public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> impl
Collection<VehicleInstance> vehicleInstanceList = LocalContainer.getOnlineVehicleInstance(); Collection<VehicleInstance> vehicleInstanceList = LocalContainer.getOnlineVehicleInstance();
// 成功数量 // 成功数量
AtomicInteger syncSuccessSum = new AtomicInteger(); AtomicInteger syncSuccessSum = new AtomicInteger();
List<Vehicle> vehicleList = vehicleInstanceList.stream() List<VehicleInfo> vehicleInfoList = vehicleInstanceList.stream()
.filter(VehicleInstance::isOnline) .filter(VehicleInstance::isOnline)
.map(Vehicle::instanceBuild) .map(VehicleInfo::instanceBuild)
.toList(); .toList();
vehicleList.forEach(vehicle -> { vehicleInfoList.forEach(vehicle -> {
LambdaUpdateWrapper<Vehicle> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<VehicleInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(Vehicle::getRemainingBattery, vehicle.getRemainingBattery()); updateWrapper.set(VehicleInfo::getRemainingBattery, vehicle.getRemainingBattery());
updateWrapper.set(Vehicle::getTotalMileage, vehicle.getTotalMileage()); updateWrapper.set(VehicleInfo::getTotalMileage, vehicle.getTotalMileage());
updateWrapper.eq(Vehicle::getVin, vehicle.getVin()); updateWrapper.eq(VehicleInfo::getVin, vehicle.getVin());
try { try {
this.update(updateWrapper); this.update(updateWrapper);
syncSuccessSum.incrementAndGet(); syncSuccessSum.incrementAndGet();
@ -109,7 +109,7 @@ public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> impl
} }
}); });
log.info("同步数据库结束 - 耗时:[{}MS],同步量:[{}辆],成功:[{}辆],失败:[{}辆]", 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){ }catch (Exception exception){
log.error("数据同步异常:{}", exception.getMessage(), 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.vehicle.model.properties.MqttProperties;
import com.muyu.web.common.PageList; import com.muyu.web.common.PageList;
import com.muyu.web.common.Result; 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.MqttServerModel;
import com.muyu.web.domain.model.PositionModel; import com.muyu.web.domain.model.PositionModel;
import com.muyu.web.domain.req.CheckPositionReq; import com.muyu.web.domain.req.CheckPositionReq;
@ -50,15 +50,15 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService {
/** /**
* *
* *
* @param vehicle * @param vehicleInfo
*/ */
@Override @Override
public void init(Vehicle vehicle) { public void init(VehicleInfo vehicleInfo) {
VehicleInstance vehicleInstance = new VehicleInstance(); VehicleInstance vehicleInstance = new VehicleInstance();
vehicleInstance.setVehicle(vehicle); vehicleInstance.setVehicleInfo(vehicleInfo);
vehicleInstance.setVehicleData(VehicleData.vehicleBuild(vehicle)); vehicleInstance.setVehicleData(VehicleData.vehicleBuild(vehicleInfo));
LocalContainer.setVehicleInstance(vehicleInstance); LocalContainer.setVehicleInstance(vehicleInstance);
log.debug("构建车辆对象: [{}]", vehicle.getVin()); log.debug("构建车辆对象: [{}]", vehicleInfo.getVin());
} }
/** /**

View File

@ -7,30 +7,14 @@ spring:
static-path-pattern: /static/** static-path-pattern: /static/**
datasource: datasource:
username: muyu driver-class-name: com.mysql.cj.jdbc.Driver
password: 123456 url: jdbc:mysql://47.92.86.60:23658/muyu-vehicle?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
# 如果需要数据本地化,则改成 file 方式 username: root
# jdbc:h2:mem:testDB;DB_CLOSE_DELAY=-1 password: Vehicle@666
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
# mybatis-plus 配置 # mybatis-plus 配置
mybatis-plus: mybatis-plus:
mapper-locations: classpath*:/com.muyu.mapper/**/*.xml
#实体扫描多个package用逗号或者分号分隔
typeAliasesPackage: com.dmo.entity
global-config: global-config:
#数据库相关配置 #数据库相关配置
db-config: db-config: