1、支持手动添加车辆

2、支持使用vin检索车辆
master
DongZeLiang 2023-12-02 09:20:17 +08:00
parent 2fc7c7788c
commit 95098cfd87
9 changed files with 103 additions and 9 deletions

View File

@ -2,12 +2,10 @@ package com.muyu.controller;
import com.muyu.common.Result; import com.muyu.common.Result;
import com.muyu.domain.Vehicle; import com.muyu.domain.Vehicle;
import com.muyu.domain.req.VehicleCreateAddReq;
import com.muyu.service.VehicleService; import com.muyu.service.VehicleService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
@ -39,6 +37,16 @@ public class VehicleController {
vehicleService.generate(sum); vehicleService.generate(sum);
return Result.success(); return Result.success();
} }
/**
*
* @param sum
* @return
*/
@PostMapping("/create")
public Result<String> create(@RequestBody VehicleCreateAddReq vehicleCreateAddReq){
vehicleService.create(vehicleCreateAddReq.getVinStr());
return Result.success();
}
} }

View File

@ -60,9 +60,17 @@ public class Vehicle {
* @return * @return
*/ */
public static Vehicle gen() { public static Vehicle gen() {
return Vehicle.create(VehicleUtils.genVin());
}
/**
*
* @return
*/
public static Vehicle create(String vin) {
BigDecimal battery = VehicleUtils.genBattery(); BigDecimal battery = VehicleUtils.genBattery();
return Vehicle.builder() return Vehicle.builder()
.vin(VehicleUtils.genVin()) .vin(vin)
.createTime(new Date()) .createTime(new Date())
.batteryLevel(battery) .batteryLevel(battery)
.remainingBattery(battery) .remainingBattery(battery)

View File

@ -0,0 +1,23 @@
package com.muyu.domain.req;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author DongZl
* @description:
* @Date 2023-12-2 08:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class VehicleCreateAddReq {
/**
* VIN
*/
private String vinStr;
}

View File

@ -18,4 +18,10 @@ public interface VehicleService extends IService<Vehicle> {
* @param sum * @param sum
*/ */
void generate(Integer sum); void generate(Integer sum);
/**
* IVN
* @param vinStr VIN
*/
void create (String vinStr);
} }

View File

@ -1,13 +1,18 @@
package com.muyu.service.impl; package com.muyu.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.domain.Vehicle; import com.muyu.domain.Vehicle;
import com.muyu.mapper.VehicleMapper; import com.muyu.mapper.VehicleMapper;
import com.muyu.service.VehicleInstanceService;
import com.muyu.service.VehicleService; import com.muyu.service.VehicleService;
import com.muyu.utils.VehicleUtils; import com.muyu.utils.VehicleUtils;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -19,9 +24,14 @@ import java.util.stream.Stream;
* @author DongZeLiang * @author DongZeLiang
* @since 2022-07-05 * @since 2022-07-05
*/ */
@Log4j2
@Service @Service
public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> implements VehicleService { public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> implements VehicleService {
@Autowired
private VehicleInstanceService vehicleInstanceService;
/** /**
* *
* *
@ -32,6 +42,37 @@ public class VechileServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> impl
public void generate(Integer sum) { public void generate(Integer sum) {
List<Vehicle> vehicleList = Stream.generate(Vehicle::gen).limit(sum).toList(); List<Vehicle> vehicleList = Stream.generate(Vehicle::gen).limit(sum).toList();
this.saveBatch(vehicleList); this.saveBatch(vehicleList);
vehicleList.forEach(vehicleInstanceService::init);
}
/**
* IVN
*
* @param vinStr VIN
*/
@Override
@Transactional
public void create (String vinStr) {
String[] vinList = vinStr.split("\n");
StringBuilder errorMsg = new StringBuilder();
for (String vin : vinList) {
if (vin.length() != 17){
errorMsg.append("vin[").append(vin).append("]").append("不为17位\n");
}else {
LambdaQueryWrapper<Vehicle> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Vehicle::getVin, vin);
long count = this.count(queryWrapper);
if (count == 1){
errorMsg.append("vin[").append(vin).append("]").append("已经存在\n");
}
}
}
if (errorMsg.length() != 0){
throw new RuntimeException(errorMsg.toString());
}
List<Vehicle> vehicleList = Arrays.stream(vinList).map(Vehicle::create).toList();
this.saveBatch(vehicleList);
vehicleList.forEach(vehicleInstanceService::init);
} }

View File

@ -26,6 +26,7 @@ import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Stream;
/** /**
* @author DongZeLiang * @author DongZeLiang
@ -69,8 +70,13 @@ public class VehicleInstanceServiceImpl implements VehicleInstanceService {
*/ */
@Override @Override
public List<VehicleInstanceResp> queryList (VehicleInstanceListReq vehicleInstanceListReq) { public List<VehicleInstanceResp> queryList (VehicleInstanceListReq vehicleInstanceListReq) {
return LocalContainer.vehicleDataMap.values() Stream<VehicleInstance> stream = LocalContainer.vehicleDataMap.values()
.stream() .stream();
if (StringUtils.isNotBlank(vehicleInstanceListReq.getVin())){
stream = stream.filter(vehicleInstance ->
vehicleInstance.getVin().contains(vehicleInstanceListReq.getVin()));
}
return stream
.map(VehicleInstanceResp::instanceBuild) .map(VehicleInstanceResp::instanceBuild)
.toList(); .toList();
} }

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,6 @@
package com.muyu.vehicle.thread; package com.muyu.vehicle.thread;
import com.alibaba.fastjson2.JSONObject;
import com.muyu.vehicle.VehicleInstance; import com.muyu.vehicle.VehicleInstance;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
@ -32,6 +33,7 @@ public class VehicleThread implements Runnable {
this.vehicleInstance.sendMsg( this.vehicleInstance.sendMsg(
this.vehicleInstance.getVehicleData().getMsg() this.vehicleInstance.getVehicleData().getMsg()
); );
log.info(JSONObject.toJSONString(this.vehicleInstance.getVehicleData()));
}else { }else {
log.warn("车辆[{}]数据模拟:{}", this.vehicleInstance.getVin(), imitateResult); log.warn("车辆[{}]数据模拟:{}", this.vehicleInstance.getVin(), imitateResult);
} }

View File

@ -2,7 +2,7 @@ server:
port: 81 port: 81
spring: spring:
mvc: mvc:
static-path-pattern: /static/** static-path-pattern: /static
datasource: datasource:
username: muyu username: muyu