车辆录入,生成vin码,可以用于模拟车辆和验证车辆上线

server_five_liuyunhu
liuyunhu 2024-03-27 16:58:14 +08:00
parent 9df04a6af2
commit 39c764922c
10 changed files with 325 additions and 11 deletions

View File

@ -5,6 +5,8 @@ import com.couplet.common.core.web.controller.BaseController;
import com.couplet.common.log.annotation.Log;
import com.couplet.common.log.enums.BusinessType;
import com.couplet.vehicle.domain.LyhVehicle;
import com.couplet.vehicle.domain.req.LyhVehicleEditParams;
import com.couplet.vehicle.domain.req.LyhVehicleInsertParams;
import com.couplet.vehicle.domain.req.LyhVehicleListParams;
import com.couplet.vehicle.service.LyhVehicleService;
import org.springframework.beans.factory.annotation.Autowired;
@ -56,4 +58,35 @@ public class LyhVehicleController extends BaseController {
}
/*
* @Author: LiuYunHu
* @Date: 2024/3/27 16:09
* @Description:
* @Param: [editParams]
* @Return: com.couplet.common.core.domain.Result
**/
@PostMapping("/editById")
@Log(title = "编辑车辆", businessType = BusinessType.UPDATE)
public Result editById(@RequestBody LyhVehicleEditParams editParams) {
String result = lyhVehicleService.editById(editParams);
return Result.success(result);
}
/*
* @Author: LiuYunHu
* @Date: 2024/3/27 16:21
* @Description:
* @Param: [insertParams]
* @Return: com.couplet.common.core.domain.Result
**/
@PostMapping("/insert")
@Log(title = "新增车辆", businessType = BusinessType.INSERT)
public Result insert(@RequestBody LyhVehicleInsertParams insertParams) {
String result = lyhVehicleService.insert(insertParams);
return Result.success(result);
}
}

View File

@ -4,10 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.couplet.common.core.web.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

View File

@ -0,0 +1,51 @@
package com.couplet.vehicle.domain.req;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @ProjectName: five-groups-couplet
* @Author: LiuYunHu
* @CreateTime: 2024/3/27
* @Description:
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class LyhVehicleEditParams {
/*
*id
* */
private Long vehicleId;
/*
*
* */
private Integer vehicleType;
/*
*
* */
private String motorManufacturer;
/*
*
* */
private String batteryManufacturer;
/*
*
* */
private String motorNumber;
/*
*
* */
private String batteryNumber;
}

View File

@ -0,0 +1,55 @@
package com.couplet.vehicle.domain.req;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @ProjectName: five-groups-couplet
* @Author: LiuYunHu
* @CreateTime: 2024/3/27
* @Description:
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class LyhVehicleInsertParams {
/*
*
* */
@NotNull(message = "车辆类型不能为空")
private Integer vehicleType;
/*
*
* */
@NotBlank(message = "电机厂商不能为空")
private String motorManufacturer;
/*
*
* */
@NotBlank(message = "电池厂商不能为空")
private String batteryManufacturer;
/*
*
* */
@NotBlank(message = "电机编号不能为空")
private String motorNumber;
/*
*
* */
@NotBlank(message = "电池编号不能为空")
private String batteryNumber;
}

View File

@ -1,11 +1,7 @@
package com.couplet.vehicle.domain.req;
import com.baomidou.mybatisplus.annotation.TableField;
import com.couplet.common.core.web.domain.BaseEntity;
import io.swagger.models.auth.In;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

View File

@ -2,6 +2,8 @@ package com.couplet.vehicle.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.couplet.vehicle.domain.LyhVehicle;
import com.couplet.vehicle.domain.req.LyhVehicleEditParams;
import com.couplet.vehicle.domain.req.LyhVehicleInsertParams;
import com.couplet.vehicle.domain.req.LyhVehicleListParams;
import java.util.List;
@ -17,4 +19,8 @@ public interface LyhVehicleService extends IService<LyhVehicle> {
List<LyhVehicle> list(LyhVehicleListParams listParams);
String deleteById(Long vehicleId);
String editById(LyhVehicleEditParams editParams);
String insert(LyhVehicleInsertParams insertParams);
}

View File

@ -5,9 +5,12 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.couplet.common.core.utils.StringUtils;
import com.couplet.vehicle.domain.LyhVehicle;
import com.couplet.vehicle.domain.req.LyhVehicleEditParams;
import com.couplet.vehicle.domain.req.LyhVehicleInsertParams;
import com.couplet.vehicle.domain.req.LyhVehicleListParams;
import com.couplet.vehicle.mapper.LyhVehicleMapper;
import com.couplet.vehicle.service.LyhVehicleService;
import com.couplet.vehicle.utils.SnowflakeIdGenerator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -83,4 +86,77 @@ public class LyhVehicleServiceImpl extends ServiceImpl<LyhVehicleMapper, LyhVehi
return result;
}
/*
* @Author: LiuYunHu
* @Date: 2024/3/27 15:21
* @Description: id
* @Param: [editParams]
* @Return: java.lang.String
**/
@Override
public String editById(LyhVehicleEditParams editParams) {
String result = "";
UpdateWrapper<LyhVehicle> updateWrapper = new UpdateWrapper<>();
//编辑车辆类型
updateWrapper.set("vehicle_type", editParams.getVehicleType())
//编辑电机厂商
.set("motor_manufacturer", editParams.getMotorManufacturer())
//编辑电池厂商
.set("battery_manufacturer", editParams.getBatteryManufacturer())
//编辑电机编号
.set("motor_number", editParams.getMotorNumber())
//编辑电池编号
.set("battery_number", editParams.getBatteryNumber())
//匹配车辆id
.eq("vehicle_id", editParams.getVehicleId());
boolean update = update(updateWrapper);
if (!update) {
result = "编辑失败";
throw new RuntimeException(result);
}
result = "编辑成功!";
return result;
}
/*
* @Author: LiuYunHu
* @Date: 2024/3/27 16:34
* @Description:
* @Param: [insertParams]
* @Return: java.lang.String
**/
@Override
public String insert(LyhVehicleInsertParams insertParams) {
String result = "";
SnowflakeIdGenerator idGenerator = new SnowflakeIdGenerator(1, 1);
long randomId = idGenerator.nextId();
String vin = "VIN" + randomId;
int insert = lyhVehicleMapper.insert(new LyhVehicle(null, insertParams.getVehicleType(), insertParams.getMotorManufacturer(), insertParams.getBatteryManufacturer(), insertParams.getMotorNumber(), insertParams.getBatteryNumber(), vin, 0, 0));
if (insert == 0) {
result = "新增失败";
throw new RuntimeException(result);
}
result = "新增成功!";
return result;
}
}

View File

@ -0,0 +1,79 @@
package com.couplet.vehicle.utils;
/**
* @ProjectName: five-groups-couplet
* @Author: LiuYunHu
* @CreateTime: 2024/3/27
* @Description: ID
* 使
* SnowflakeIdGenerator idGenerator = new SnowflakeIdGenerator(1, 1); // 创建一个 ID 生成器,传入机器 ID 和数据中心 ID
* long id = idGenerator.nextId(); // 生成 ID
*/
public class SnowflakeIdGenerator {
private final long epoch = 1420041600000L; // 起始时间戳,用于缩小时间戳范围,可根据实际情况调整
private final long workerIdBits = 5L; // 机器 ID 所占位数
private final long dataCenterIdBits = 5L; // 数据中心 ID 所占位数
private final long sequenceBits = 12L; // 序列号所占位数
private final long maxWorkerId = -1L ^ (-1L << workerIdBits); // 机器 ID 最大值
private final long maxDataCenterId = -1L ^ (-1L << dataCenterIdBits); // 数据中心 ID 最大值
private final long maxSequence = -1L ^ (-1L << sequenceBits); // 序列号最大值
private final long workerIdShift = sequenceBits; // 机器 ID 向左移动位数
private final long dataCenterIdShift = sequenceBits + workerIdBits; // 数据中心 ID 向左移动位数
private final long timestampShift = sequenceBits + workerIdBits + dataCenterIdBits; // 时间戳向左移动位数
private long workerId; // 机器 ID
private long dataCenterId; // 数据中心 ID
private long sequence = 0L; // 序列号
private long lastTimestamp = -1L; // 上次生成的时间戳
public SnowflakeIdGenerator(long workerId, long dataCenterId) {
if (workerId > maxWorkerId || workerId < 0) {
throw new IllegalArgumentException("Worker ID can't be greater than " + maxWorkerId + " or less than 0");
}
if (dataCenterId > maxDataCenterId || dataCenterId < 0) {
throw new IllegalArgumentException("Data center ID can't be greater than " + maxDataCenterId + " or less than 0");
}
this.workerId = workerId;
this.dataCenterId = dataCenterId;
}
public synchronized long nextId() {
long timestamp = timeGen();
if (timestamp < lastTimestamp) {
throw new RuntimeException("Clock moved backwards, refusing to generate ID");
}
if (timestamp == lastTimestamp) {
sequence = (sequence + 1) & maxSequence;
if (sequence == 0) {
timestamp = tilNextMillis(lastTimestamp);
}
} else {
sequence = 0L;
}
lastTimestamp = timestamp;
return ((timestamp - epoch) << timestampShift) |
(dataCenterId << dataCenterIdShift) |
(workerId << workerIdShift) |
sequence;
}
private long tilNextMillis(long lastTimestamp) {
long timestamp = timeGen();
while (timestamp <= lastTimestamp) {
timestamp = timeGen();
}
return timestamp;
}
private long timeGen() {
return System.currentTimeMillis();
}
}

View File

@ -0,0 +1,20 @@
import com.couplet.vehicle.utils.SnowflakeIdGenerator;
/**
* @ProjectName: five-groups-couplet
* @Author: LiuYunHu
* @CreateTime: 2024/3/27
* @Description:
*/
public class IdTest {
public static void main(String[] args) {
SnowflakeIdGenerator idGenerator = new SnowflakeIdGenerator(1, 1);
long l = idGenerator.nextId();
System.out.println(l);
}
}