feat: 新增 yudao-module-asset 车辆管理模块(独立微服务)
- 10张数据表 DDL(vehicle/licence/insurance/equipment/ext/driver/device/type/model) - 75个Java文件:DO/VO/Mapper/Service/Controller 完整实现 - AssetServerApplication 独立微服务启动类(端口48084) - 车辆状态机、VIN/车牌唯一性校验、合同占用校验 - 导入/导出 Excel 功能 - 编译通过
This commit is contained in:
33
yudao-module-asset/yudao-module-asset-api/pom.xml
Normal file
33
yudao-module-asset/yudao-module-asset-api/pom.xml
Normal file
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>cn.iocoder.cloud</groupId>
|
||||
<artifactId>yudao-module-asset</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>yudao-module-asset-api</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>${project.artifactId}</name>
|
||||
<description>
|
||||
asset 模块 API,暴露给其它模块调用
|
||||
</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>cn.iocoder.cloud</groupId>
|
||||
<artifactId>yudao-common</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 参数校验 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-validation</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,50 @@
|
||||
package cn.iocoder.yudao.module.asset.enums;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
|
||||
|
||||
/**
|
||||
* Asset 错误码枚举类
|
||||
* asset 系统,使用 1-030-000-000 段
|
||||
*/
|
||||
public interface ErrorCodeConstants {
|
||||
|
||||
// ========== 车辆管理 1-030-001-000 ==========
|
||||
ErrorCode VEHICLE_NOT_EXISTS = new ErrorCode(1_030_001_000, "车辆不存在");
|
||||
ErrorCode VEHICLE_VIN_DUPLICATE = new ErrorCode(1_030_001_001, "车架号VIN已存在");
|
||||
ErrorCode VEHICLE_PLATE_NUMBER_DUPLICATE = new ErrorCode(1_030_001_002, "车牌号已存在");
|
||||
ErrorCode VEHICLE_STATUS_TRANSITION_INVALID = new ErrorCode(1_030_001_003, "车辆状态流转不合法");
|
||||
ErrorCode VEHICLE_NOT_AVAILABLE = new ErrorCode(1_030_001_004, "车辆不是空闲状态,无法锁定");
|
||||
ErrorCode VEHICLE_CONTRACT_BINDIED = new ErrorCode(1_030_001_005, "车辆正在合同中使用,无法删除");
|
||||
ErrorCode VEHICLE_DEVICE_BINDIED = new ErrorCode(1_030_001_006, "车辆有绑定设备,请先解绑");
|
||||
|
||||
// ========== 司机管理 1-030-002-000 ==========
|
||||
ErrorCode DRIVER_NOT_EXISTS = new ErrorCode(1_030_002_000, "司机不存在");
|
||||
|
||||
// ========== 设备管理 1-030-003-000 ==========
|
||||
ErrorCode DEVICE_NOT_EXISTS = new ErrorCode(1_030_003_000, "设备不存在");
|
||||
ErrorCode DEVICE_IMEI_DUPLICATE = new ErrorCode(1_030_003_001, "设备IMEI已存在");
|
||||
ErrorCode DEVICE_BINDIED = new ErrorCode(1_030_003_002, "设备已绑定");
|
||||
ErrorCode DEVICE_NOT_BINDIED = new ErrorCode(1_030_003_003, "设备未绑定");
|
||||
|
||||
// ========== 车辆证照 1-030-025-000 ==========
|
||||
ErrorCode VEHICLE_LICENCE_NOT_EXISTS = new ErrorCode(1_030_025_000, "车辆证照不存在");
|
||||
|
||||
// ========== 车辆保险 1-030-026-000 ==========
|
||||
ErrorCode VEHICLE_INSURANCE_NOT_EXISTS = new ErrorCode(1_030_026_000, "车辆保险不存在");
|
||||
|
||||
// ========== 车辆后装设备 1-030-027-000 ==========
|
||||
ErrorCode VEHICLE_EQUIPMENT_NOT_EXISTS = new ErrorCode(1_030_027_000, "车辆后装设备不存在");
|
||||
|
||||
// ========== 车辆扩展 1-030-028-000 ==========
|
||||
ErrorCode VEHICLE_EXT_NOT_EXISTS = new ErrorCode(1_030_028_000, "车辆扩展信息不存在");
|
||||
|
||||
// ========== 司机车辆绑定 1-030-029-000 ==========
|
||||
ErrorCode DRIVER_VEHICLE_NOT_EXISTS = new ErrorCode(1_030_029_000, "司机车辆绑定不存在");
|
||||
|
||||
// ========== 车辆型号 1-030-030-000 ==========
|
||||
ErrorCode VEHICLE_MODEL_NOT_EXISTS = new ErrorCode(1_030_030_000, "车辆型号不存在");
|
||||
|
||||
// ========== 车辆类型 1-030-031-000 ==========
|
||||
ErrorCode VEHICLE_TYPE_NOT_EXISTS = new ErrorCode(1_030_031_000, "车辆类型不存在");
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package cn.iocoder.yudao.module.asset.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 车辆租赁状态枚举
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum VehicleRentStatusEnum {
|
||||
|
||||
IDLE(0, "空闲"),
|
||||
RENTED(1, "在租"),
|
||||
RETURNING(2, "还车中"),
|
||||
REPAIRING(3, "维修中"),
|
||||
STANDBY(4, "备车"),
|
||||
SCRAPPED(5, "已报废");
|
||||
|
||||
private final Integer status;
|
||||
private final String name;
|
||||
|
||||
/**
|
||||
* 合法流转矩阵
|
||||
* key: 当前状态, value: 允许流转到的目标状态集合
|
||||
*/
|
||||
private static final Map<Integer, Set<Integer>> TRANSITIONS = new HashMap<>();
|
||||
static {
|
||||
TRANSITIONS.put(0, Set.of(1, 3, 4, 5)); // 空闲 → 在租/维修/备车/报废
|
||||
TRANSITIONS.put(1, Set.of(2, 3)); // 在租 → 还车中/维修中
|
||||
TRANSITIONS.put(2, Set.of(0)); // 还车中 → 空闲
|
||||
TRANSITIONS.put(3, Set.of(0, 1)); // 维修中 → 空闲/在租
|
||||
TRANSITIONS.put(4, Set.of(0, 1)); // 备车 → 空闲/在租
|
||||
TRANSITIONS.put(5, Collections.emptySet()); // 报废=终态
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断状态流转是否合法
|
||||
*
|
||||
* @param from 当前状态
|
||||
* @param to 目标状态
|
||||
* @return 是否合法
|
||||
*/
|
||||
public static boolean isValidTransition(Integer from, Integer to) {
|
||||
Set<Integer> allowed = TRANSITIONS.get(from);
|
||||
return allowed != null && allowed.contains(to);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user