想把车辆管理从 Excel、微信群、以及纸质凭证里解救出来,让企业管理变得有章可循、费用可控、问题可追溯?本文将从为什么要做车辆管理系统出发,到什么是车辆管理系统、如何搭建、关键功能与业务实现(含代码样例),最后给出可直接落地的实施建议,快速搭建一套车辆管理系统。
本文你将了解
讲这个话题,不是为了卖概念,而是为了降成本、降风险、提效率。企业里车辆相关的隐形成本很多:油卡被滥刷、保养漏记导致大修、用车审批没人跟进影响客户交付、违章记录丢失导致罚款滞纳……这些都是看不到且反复发作的成本。一个好的车辆管理系统带来的价值是直接且可量化的:
所以,开发一套 VMS,是信息化成熟度从“人找表/表找数据”进化为“数据驱动决策”的典型项目。
车辆管理系统(VMS) 是企业用于车辆与司机管理、费用管理、调度审批、车务事件记录、以及与外部系统(油卡、GPS、财务)对接的业务系统。核心目标可以用一句话概括:把车辆生命周期和与车辆相关的所有业务活动数字化、流程化、可视化、可审计。
典型模块(本方案会覆盖并演示代码):
flowchart LR
subgraph 用户层
A[PC/浏览器] -->|REST / GraphQL| GW[API Gateway]
B[移动端 / 小程序] -->|REST / GraphQL| GW
end
subgraph 网关与鉴权
GW --> Auth[AuthN / RBAC / SSO]
end
subgraph 后端服务
Backend[应用服务(Express / NestJS / Spring)] --> DB[(PostgreSQL)]
Backend --> Cache[(Redis 缓存)]
Backend --> MQ[(RabbitMQ / Kafka)]
Backend --> OBJ[(对象存储 S3 / MinIO)]
end
subgraph 第三方与集成
GPS[GPS / 车载] --> Backend
Fuel[油卡/加油站对接] --> Backend
IAM[钉钉/企业微信/AD] --> Auth
Notify[短信/邮件/企业微信通知] <-- MQ
end
Backend --> Monitoring[(Prometheus + Grafana)]
CI[CI/CD] --> Backend
目的:一页看清车辆总体健康(在用/待用/维修)、本月油耗、维修支出、车辆利用率、异常报警(违章/逾期年检/超期保养)。
数据来源:车辆表(台账) + 用车记录 + 油卡加油记录 + 车务事件。
实现要点:
示例 API:
GET /api/dashboard/summary?from=2025-08-01&to=2025-08-31&deptId=12
返回:{
totalVehicles: 120,
activeVehicles: 110,
avgUtilization: 0.62,
monthFuelCost: 52340.50,
monthRepairCost: 8320.00,
overdueInspections: 3
}
功能:车辆台账(VIN、车牌、品牌、型号、购置时间、所属部门、司机绑定、车辆状态等)、上传行驶证与保险凭证、车辆历史事件查看。
业务要点:
核心 SQL(示例):
CREATE TABLE vehicle (
id BIGSERIAL PRIMARY KEY,
vin VARCHAR(50) UNIQUE,
plate_no VARCHAR(20) UNIQUE,
brand VARCHAR(100),
model VARCHAR(100),
owner_department_id BIGINT,
current_driver_id BIGINT,
vehicle_type VARCHAR(50),
purchase_date DATE,
status VARCHAR(20),
created_at TIMESTAMP DEFAULT now(),
updated_at TIMESTAMP DEFAULT now()
);
业务流
关键实现建议:
示例 API:
POST /api/requests
PUT /api/requests/{id}/approve
PUT /api/requests/{id}/assign-vehicle
PUT /api/requests/{id}/complete
包括:油卡信息、车辆加油登记、油卡充值登记。
核心思想:把油卡作为一类“可用余额资源”管理;每笔加油都要强制关联油卡和发票图片,并做对账。
加油记录(示例 SQL):
CREATE TABLE fuel_log (
id BIGSERIAL PRIMARY KEY,
vehicle_id BIGINT,
fuel_card_id BIGINT,
station VARCHAR(200),
date TIMESTAMP,
liters NUMERIC(10,2),
amount NUMERIC(12,2),
start_mileage NUMERIC(10,2),
end_mileage NUMERIC(10,2),
receipt_url TEXT,
created_by BIGINT,
created_at TIMESTAMP DEFAULT now()
);
业务要点:
并发扣减/余额安全:
包括违章登记、事故登记、年检登记、维修登记、保养登记、保险登记。建议采用「事件链路化」设计,即把各种车务记录统一为 vehicle_event 表,并以 event_type 区分,方便检索与统计。
事件表示例 SQL:
CREATE TABLE vehicle_event (
id BIGSERIAL PRIMARY KEY,
vehicle_id BIGINT,
event_type VARCHAR(50), -- REPAIR, MAINTENANCE, ACCIDENT, VIOLATION, INSPECTION, INSURANCE
event_date DATE,
description TEXT,
cost NUMERIC(12,2),
vendor VARCHAR(200),
attachment_url TEXT,
created_by BIGINT,
created_at TIMESTAMP DEFAULT now()
);
业务要点:
-- 车辆表
CREATE TABLE vehicle (
id BIGSERIAL PRIMARY KEY,
vin VARCHAR(50) UNIQUE,
plate_no VARCHAR(20) UNIQUE,
brand VARCHAR(100),
model VARCHAR(100),
owner_department_id BIGINT,
current_driver_id BIGINT,
vehicle_type VARCHAR(50),
purchase_date DATE,
status VARCHAR(20),
created_at TIMESTAMP DEFAULT now(),
updated_at TIMESTAMP DEFAULT now()
);
-- 用车申请
CREATE TABLE vehicle_request (
id BIGSERIAL PRIMARY KEY,
applicant_id BIGINT,
vehicle_id BIGINT NULL,
start_time TIMESTAMP,
end_time TIMESTAMP,
purpose TEXT,
origin TEXT,
destination TEXT,
status VARCHAR(30),
approver_id BIGINT,
estimated_cost NUMERIC(12,2),
created_at TIMESTAMP DEFAULT now()
);
-- 油卡表
CREATE TABLE fuel_card (
id BIGSERIAL PRIMARY KEY,
card_no VARCHAR(50) UNIQUE,
provider VARCHAR(100),
balance NUMERIC(12,2) DEFAULT 0,
owner_department_id BIGINT,
status VARCHAR(20),
remark TEXT,
created_at TIMESTAMP DEFAULT now()
);
-- 加油记录
CREATE TABLE fuel_log (
id BIGSERIAL PRIMARY KEY,
vehicle_id BIGINT,
fuel_card_id BIGINT,
station VARCHAR(200),
date TIMESTAMP,
liters NUMERIC(10,2),
amount NUMERIC(12,2),
start_mileage NUMERIC(10,2),
end_mileage NUMERIC(10,2),
receipt_url TEXT,
created_by BIGINT,
created_at TIMESTAMP DEFAULT now()
);
-- 车务事件
CREATE TABLE vehicle_event (
id BIGSERIAL PRIMARY KEY,
vehicle_id BIGINT,
event_type VARCHAR(50),
event_date DATE,
description TEXT,
cost NUMERIC(12,2),
vendor VARCHAR(200),
attachment_url TEXT,
created_by BIGINT,
created_at TIMESTAMP DEFAULT now()
);
-- 审批日志
CREATE TABLE approval_log (
id BIGSERIAL PRIMARY KEY,
business_type VARCHAR(50),
business_id BIGINT,
approver_id BIGINT,
action VARCHAR(20),
comment TEXT,
created_at TIMESTAMP DEFAULT now()
);
核心路径与说明:
鉴权与权限:所有写接口均需 JWT 验证并做 RBAC 权限校验(如:只有车管/财务可充值油卡;只有司机可提交加油单;审批者需在审批流上)。
MVP 优先级(按“投入产出”排序):
性能建议:
安全建议:
运维建议:
落地后可量化的 KPI 典型项:
实施示例(行业参考):某企业上线后一季度,审批时长从 24 小时降到 3 小时,油卡异常单减少 65%,车辆闲置率下降 12%。
不必一开始就把所有外部硬件对接到位。对于多数企业,优先打通流程(用车申请→审批→派车→结算)与财务可视化(油卡登记/加油记录)已经能在短期内释放大量效率与成本节省。GPS 接入能够带来自动里程与轨迹验证、异常告警(如偏航、长时间怠速)等高价值功能,但会增加硬件采购、安装与长期维护成本。建议采用分阶段策略:先做好业务端与报表对账,选择若干高价值车辆或试点区域再逐步接入 GPS;同样油卡对接可以先人工导入账单做自动匹配,待验证规则成熟后再走 API 全自动化对账。这样既控制初期成本,也能验证功能价值。
防止滥用需要从制度和技术两方面同时发力。制度层面,明确油卡使用权限和审批流程,谁能申请充值、谁能加油、何种情形需财务复核都要有明确规则。技术层面,必须要求每笔加油记录上传发票照片、填写起止里程并做规则校验(例如:本次加油升数与里程增量是否匹配、是否超过平均油耗合理范围)。扣减油卡余额时使用数据库事务与行级锁,避免并发超扣。对账层面,定期(例如日/周)把油卡运营商账单导入系统用时间/金额/里程做自动匹配,匹配失败的自动生成异常单交由财务人工核对。结合司机签名或电子签名作为二次凭证,能进一步降低造假概率。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。