本文目录导读:

在PHP项目中实现用车管理,通常需要构建一个包含车辆信息管理、司机管理、用车申请、审批流程、调度分配、费用核算、报表统计等模块的系统。
以下是一个从数据库设计到代码实现的分步指南,适用于中小企业或内部OA系统。
第一步:数据库设计(MySQL)
核心需要几张表:vehicles(车辆)、drivers(司机)、bookings(用车申请/行程)。
-- 1. 车辆表
CREATE TABLE `vehicles` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`plate_number` VARCHAR(20) NOT NULL UNIQUE COMMENT '车牌号',
`brand` VARCHAR(50) COMMENT '品牌',
`model` VARCHAR(50) COMMENT '型号',
`seats` TINYINT DEFAULT 5 COMMENT '座位数',
`mileage` DECIMAL(10,2) DEFAULT 0 COMMENT '累计里程(km)',
`status` ENUM('available','maintenance','out_of_service','on_trip') DEFAULT 'available',
`fuel_type` VARCHAR(20) COMMENT '燃油类型',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 2. 司机表
CREATE TABLE `drivers` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(50) NOT NULL,
`phone` VARCHAR(20),
`license_number` VARCHAR(50) COMMENT '驾驶证号',
`status` ENUM('free','busy','off_duty') DEFAULT 'free'
);
-- 3. 用车申请表
CREATE TABLE `bookings` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`requester_id` INT COMMENT '申请人(user表ID)',
`vehicle_id` INT,
`driver_id` INT DEFAULT NULL,
`start_time` DATETIME,
`end_time` DATETIME,
`destination` VARCHAR(255),
`purpose` TEXT,
`mileage_estimate` DECIMAL(8,2) COMMENT '预估里程',
`status` ENUM('pending','approved','rejected','in_progress','completed','cancelled') DEFAULT 'pending',
`cost` DECIMAL(10,2) DEFAULT 0 COMMENT '费用(油费/过路费等)',
`remark` TEXT,
`approved_by` INT COMMENT '审批人ID',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles`(`id`),
FOREIGN KEY (`driver_id`) REFERENCES `drivers`(`id`)
);
第二步:核心功能模块实现
车辆与司机管理(CRUD)
使用 Laravel、ThinkPHP 等框架中的 Model + Controller 实现增删改查。
示例(ThinkPHP 6):
// 控制器 - 车辆列表
class VehicleController extends BaseController
{
public function list()
{
$vehicles = Vehicle::where('status', '<>', 'out_of_service')
->paginate(10);
return view('vehicle/list', ['vehicles' => $vehicles]);
}
}
用车申请流程
前端表单: 选择目的地、预计时间、人数、用途。
后端处理:
- 检查车辆状态(是否可用)。
- 检查时间冲突(同一辆车不能同时被预订)。
- 写入
bookings表,状态为pending。
冲突检测SQL示例:
SELECT * FROM bookings
WHERE vehicle_id = :vid
AND status NOT IN ('cancelled','completed')
AND (
start_time < :end AND end_time > :start
);
审批流程
通常分两级:直属主管审批 → 行政部门调度。
实现方式:
- 使用一个
approval_records表存储审批节点(角色 + 结果)。 - 或者简单地在
bookings.status上做状态流转。
示例(审批通过):
if ($user->role_id == $approvalRoleId && $input['action'] == 'approve') {
$booking->status = 'approved';
$booking->approved_by = $user->id;
$booking->save();
// 同时通知调度员
Notification::send($dispatchers, new NewBookingApproved($booking));
}
调度与分配
当申请通过后,调度员手动或自动分配车辆和司机。
自动分配逻辑(简单版):
// 查找空闲车辆
$vehicle = Vehicle::where('status', 'available')
->where('seats', '>=', $booking->required_seats)
->orderBy('mileage', 'asc') // 优先使用里程少的
->first();
// 查找空闲司机
$driver = Driver::where('status', 'free')->first();
// 更新
$booking->vehicle_id = $vehicle->id;
$booking->driver_id = $driver->id;
$booking->status = 'in_progress';
$booking->save();
$vehicle->status = 'on_trip';
$vehicle->save();
$driver->status = 'busy';
$driver->save();
用车结束与费用核算
- 司机/管理员输入实际里程、油费、过路费、停车费等。
- 系统计算总费用。
- 状态更新为
completed,释放车辆和司机状态。
$booking->status = 'completed'; $booking->mileage_actual = $input['mileage']; $booking->cost = $input['fuel_cost'] + $input['toll']; $booking->save(); $vehicle->mileage += $input['mileage']; $vehicle->status = 'available'; $vehicle->save(); $driver->status = 'free'; $driver->save();
报表与统计(可选)
- 月度用车次数、里程统计。
- 车辆利用率、司机工作量。
- 费用汇总(按部门、项目归类)。
SQL示例:
SELECT DATE_FORMAT(start_time, '%Y-%m') AS month,
COUNT(*) AS trips,
SUM(cost) AS total_cost
FROM bookings
WHERE status = 'completed'
GROUP BY month;
第三步:开发建议与技术选型
-
框架推荐:
- Laravel(自带Eloquent ORM、事件、通知、队列)。
- ThinkPHP 8(轻量、中文文档完善)。
-
前端:
- 用 Bootstrap + jQuery 或 Vue 3(配合 Element Plus 或 Ant Design Vue)。
- 关键功能:日期范围选择器(用车时间)、实时表格刷新。
-
权限控制:
- 使用角色:员工(申请)、主管(审批)、调度员(分配)、管理员(管理车辆/司机)。
- Laravel 可用
spatie/laravel-permission。
-
消息推送/提醒:
- 申请提交后通知审批人(邮件、短信或系统内通知)。
- 分配后通知申请人和司机(如使用 WebSocket 或轮询)。
-
避免冲突的高级方案:
- 在数据库层面用 唯一组合约束 或 事务+排他锁 防止同一辆车在同一时段被重复调度。
第四步:示例完整流程时序
| 步骤 | 操作人 | 系统动作 |
|---|---|---|
| 1 | 员工 | 填写用车单,选择时间、人数、目的地 |
| 2 | 系统 | 检查冲突,状态设为 pending |
| 3 | 主管 | 登录后台,审批通过 |
| 4 | 调度员 | 收到通知,分配车辆/司机,状态改为 approved(或直接 in_progress) |
| 5 | 司机 | 收到行程,发车后标记开始 |
| 6 | 司机/管理员 | 行程结束,录入实际里程、费用,状态改为 completed |
| 7 | 系统 | 更新车辆里程、司机状态、生成费用记录 |
在PHP中实现用车管理的关键在于:
- 清晰的状态机设计(申请 → 审批 → 执行 → 完成)。
- 时间冲突检测(数据库索引 + 代码校验)。
- 角色权限分离(谁申请、谁审批、谁调度)。
- 灵活扩展(后续可对接GPS、费用报销、油卡管理)。
如果你需要更具体的代码实现(Laravel 的 Model、Controller、中间件),可以告诉我你使用的框架,我可以帮你写出对应的模块代码。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播