Files
oneos-backend/sql/create-vehicle-tables.sql
k kfluous c9ad20f942 feat: 车辆管理模块 - 分页查询和精简列表接口
- 创建5张车辆表(垂直分表设计)
- 实现分页查询接口(支持9个筛选条件)
- 实现精简列表接口(返回id、vin、plateNo)
- 创建16个文件(DO、Mapper、VO、Service、Controller)
2026-03-12 12:19:17 +08:00

211 lines
11 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ==================== 车辆管理表 - 数据库脚本 ====================
-- 作者DBA
-- 日期2026-03-12
-- 说明车辆管理垂直分表设计5张表
-- ==================== 1. 修改车型参数表(添加公告型号) ====================
ALTER TABLE `asset_vehicle_model`
ADD COLUMN `notice_model` varchar(100) DEFAULT NULL COMMENT '车辆公告型号' AFTER `model_name`,
ADD UNIQUE KEY `uk_notice_model` (`notice_model`, `tenant_id`) COMMENT '公告型号唯一性约束';
-- ==================== 2. 创建车辆基础信息表 ====================
CREATE TABLE `asset_vehicle_base` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
-- 基础标识信息
`vin` varchar(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '车辆识别代号车架号17位区分大小写',
`plate_no` varchar(20) DEFAULT NULL COMMENT '车牌号粤A12345',
`vehicle_no` varchar(50) DEFAULT NULL COMMENT '车辆编号(内部编号)',
-- 车型关联
`notice_model` varchar(100) DEFAULT NULL COMMENT '车辆公告型号(关联 asset_vehicle_model.notice_model',
-- 车辆个体属性
`color` varchar(50) DEFAULT NULL COMMENT '车身颜色',
`year` char(4) DEFAULT NULL COMMENT '出厂年份YYYY格式',
-- 运营城市
`region_province` varchar(50) DEFAULT NULL COMMENT '运营城市-省',
`region_city` varchar(50) DEFAULT NULL COMMENT '运营城市-市',
-- 停车场
`parking_id` bigint DEFAULT NULL COMMENT '归属停车场ID关联 asset_parking.id',
-- 采购和登记信息
`purchase_date` date DEFAULT NULL COMMENT '采购入库时间',
`reg_date` date DEFAULT NULL COMMENT '行驶证注册日期',
`inspect_expire` char(7) DEFAULT NULL COMMENT '行驶证检验有效期YYYY-MM格式',
-- 报废期
`scrap_date` date DEFAULT NULL COMMENT '强制报废期',
-- 系统字段
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除0=未删除 1=已删除)',
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号(多租户隔离)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_vin_tenant` (`vin`, `tenant_id`) USING BTREE COMMENT 'VIN唯一性约束',
KEY `idx_plate_no` (`plate_no`) USING BTREE COMMENT '车牌号查询',
KEY `idx_vehicle_no` (`vehicle_no`) USING BTREE COMMENT '车辆编号查询',
KEY `idx_notice_model` (`notice_model`) USING BTREE COMMENT '公告型号关联查询',
KEY `idx_parking_id` (`parking_id`) USING BTREE COMMENT '停车场查询',
KEY `idx_region` (`region_province`, `region_city`) USING BTREE COMMENT '运营城市组合查询',
KEY `idx_tenant_deleted` (`tenant_id`, `deleted`) USING BTREE COMMENT '租户隔离 + 逻辑删除'
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='车辆基础信息表';
-- ==================== 3. 创建车辆位置和里程表 ====================
CREATE TABLE `asset_vehicle_location` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
-- 车辆标识
`vin` varchar(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '车辆识别代号',
-- GPS位置信息
`location` varchar(500) DEFAULT NULL COMMENT 'GPS位置详细地址',
`gps_time` datetime DEFAULT NULL COMMENT 'GPS最后上传时间',
-- 里程信息
`mileage` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '行驶公里数KM保留2位小数',
-- 系统字段
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_vin_tenant` (`vin`, `tenant_id`) USING BTREE COMMENT 'VIN唯一性约束',
KEY `idx_mileage` (`mileage`) USING BTREE COMMENT '里程查询',
KEY `idx_gps_time` (`gps_time`) USING BTREE COMMENT 'GPS时间查询',
KEY `idx_tenant_deleted` (`tenant_id`, `deleted`) USING BTREE COMMENT '租户隔离 + 逻辑删除'
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='车辆位置和里程表(高频更新)';
-- ==================== 4. 创建车辆业务关联表 ====================
CREATE TABLE `asset_vehicle_business` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
-- 车辆标识
`vin` varchar(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '车辆识别代号',
-- 业务关联信息
`customer_id` bigint DEFAULT NULL COMMENT '客户ID关联 asset_customer.id',
`department_id` bigint DEFAULT NULL COMMENT '业务部门ID关联 system_dept.id',
`manager_id` bigint DEFAULT NULL COMMENT '业务负责人ID关联 system_user.id',
`contract_id` bigint DEFAULT NULL COMMENT '合同ID关联 asset_contract.id',
`ownership` varchar(100) DEFAULT NULL COMMENT '登记所有权(如:某某租赁公司)',
-- 系统字段
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_vin_tenant` (`vin`, `tenant_id`) USING BTREE COMMENT 'VIN唯一性约束',
KEY `idx_customer_id` (`customer_id`) USING BTREE COMMENT '客户查询',
KEY `idx_department_id` (`department_id`) USING BTREE COMMENT '部门查询',
KEY `idx_manager_id` (`manager_id`) USING BTREE COMMENT '负责人查询',
KEY `idx_contract_id` (`contract_id`) USING BTREE COMMENT '合同查询',
KEY `idx_tenant_deleted` (`tenant_id`, `deleted`) USING BTREE COMMENT '租户隔离 + 逻辑删除'
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='车辆业务关联表';
-- ==================== 5. 创建车辆状态表 ====================
CREATE TABLE `asset_vehicle_status` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
-- 车辆标识
`vin` varchar(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '车辆识别代号',
-- 状态信息10个状态字段
`operate_status` tinyint NOT NULL DEFAULT 1 COMMENT '运营状态1=待运营 2=库存 3=租赁 4=自营 5=退出运营)',
`storage_status` tinyint DEFAULT NULL COMMENT '库位状态1=新车入库-待验车 2=新车入库-证照办理 3=库存车-可交付车 4=库存车-不可交付车 5=库存车-呆滞车 6=已交付车-租赁交车 7=已交付车-自营交车 8=已交付车-替换交车 9=退出运营-报废车 10=退出运营-三方退租车 11=退出运营-过户售车)',
`out_status` tinyint DEFAULT NULL COMMENT '出库状态1=异动出库 2=调拨出库 3=展示出库 4=租赁交车 5=自营交车 6=替换交车 7=过户售车 8=外租退车 9=报废出库 10=无)',
`preempt_status` tinyint NOT NULL DEFAULT 1 COMMENT '预占状态1=未预占 2=已预占)',
`prepare_status` tinyint DEFAULT NULL COMMENT '整备状态1=待整备 2=整备中 3=正常 4=无)',
`transfer_status` tinyint DEFAULT NULL COMMENT '过户状态1=过户中 2=内部过户完成 3=销售过户完成 4=无)',
`repair_status` tinyint NOT NULL DEFAULT 3 COMMENT '维修状态1=待服务站接单 2=维修中 3=正常)',
`license_status` tinyint NOT NULL DEFAULT 1 COMMENT '证照状态1=正常 2=异常)',
`scrap_status` tinyint NOT NULL DEFAULT 3 COMMENT '报废状态1=报废中 2=已报废 3=无)',
`online_status` tinyint NOT NULL DEFAULT 2 COMMENT '在线状态1=在线 2=离线)',
-- 系统字段
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_vin_tenant` (`vin`, `tenant_id`) USING BTREE COMMENT 'VIN唯一性约束',
KEY `idx_operate_status` (`operate_status`) USING BTREE COMMENT '运营状态查询',
KEY `idx_storage_status` (`storage_status`) USING BTREE COMMENT '库位状态查询',
KEY `idx_repair_status` (`repair_status`) USING BTREE COMMENT '维修状态查询',
KEY `idx_status_composite` (`operate_status`, `storage_status`, `deleted`) USING BTREE COMMENT '状态组合查询',
KEY `idx_tenant_deleted` (`tenant_id`, `deleted`) USING BTREE COMMENT '租户隔离 + 逻辑删除'
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='车辆状态表(高频查询)';
-- ==================== 6. 创建统一查询视图 ====================
CREATE OR REPLACE VIEW `v_asset_vehicle_full` AS
SELECT
-- 基础信息
b.id,
b.vin,
b.plate_no,
b.vehicle_no,
b.notice_model,
b.color,
b.year,
b.region_province,
b.region_city,
b.parking_id,
b.purchase_date,
b.reg_date,
b.inspect_expire,
b.scrap_date,
-- 位置和里程
l.location,
l.gps_time,
l.mileage,
-- 业务关联
biz.customer_id,
biz.department_id,
biz.manager_id,
biz.contract_id,
biz.ownership,
-- 状态信息
s.operate_status,
s.storage_status,
s.out_status,
s.preempt_status,
s.prepare_status,
s.transfer_status,
s.repair_status,
s.license_status,
s.scrap_status,
s.online_status,
-- 系统字段
b.creator,
b.create_time,
b.updater,
b.update_time,
b.deleted,
b.tenant_id
FROM asset_vehicle_base b
LEFT JOIN asset_vehicle_location l ON b.vin = l.vin AND b.tenant_id = l.tenant_id AND l.deleted = 0
LEFT JOIN asset_vehicle_business biz ON b.vin = biz.vin AND b.tenant_id = biz.tenant_id AND biz.deleted = 0
LEFT JOIN asset_vehicle_status s ON b.vin = s.vin AND b.tenant_id = s.tenant_id AND s.deleted = 0
WHERE b.deleted = 0;