php实现车辆排队

PHP实现车辆排队系统
车辆排队系统可以通过PHP结合数据库实现,以下是一个基本实现方案:
数据库设计
创建车辆排队表vehicle_queue:
CREATE TABLE vehicle_queue (
id INT AUTO_INCREMENT PRIMARY KEY,
vehicle_number VARCHAR(20) NOT NULL,
queue_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status ENUM('waiting', 'processing', 'completed') DEFAULT 'waiting',
position INT NOT NULL
);
添加车辆到队列
function addVehicleToQueue($vehicleNumber) {
$conn = new mysqli("localhost", "username", "password", "database");
// 获取当前最大位置
$result = $conn->query("SELECT MAX(position) as max_pos FROM vehicle_queue");
$row = $result->fetch_assoc();
$newPosition = $row['max_pos'] ? $row['max_pos'] + 1 : 1;
$stmt = $conn->prepare("INSERT INTO vehicle_queue (vehicle_number, position) VALUES (?, ?)");
$stmt->bind_param("si", $vehicleNumber, $newPosition);
$stmt->execute();
return $newPosition;
}
获取当前队列
function getCurrentQueue() {
$conn = new mysqli("localhost", "username", "password", "database");
$result = $conn->query("SELECT * FROM vehicle_queue WHERE status != 'completed' ORDER BY position ASC");
$queue = [];
while ($row = $result->fetch_assoc()) {
$queue[] = $row;
}
return $queue;
}
处理下一辆车
function processNextVehicle() {
$conn = new mysqli("localhost", "username", "password", "database");
// 获取等待中的第一辆车
$result = $conn->query("SELECT id FROM vehicle_queue WHERE status = 'waiting' ORDER BY position ASC LIMIT 1");
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
$conn->query("UPDATE vehicle_queue SET status = 'processing' WHERE id = " . $row['id']);
return $row['id'];
}
return false;
}
完成车辆处理
function completeVehicle($vehicleId) {
$conn = new mysqli("localhost", "username", "password", "database");
$conn->query("UPDATE vehicle_queue SET status = 'completed' WHERE id = $vehicleId");
// 重新排序剩余车辆
$conn->query("SET @pos = 0");
$conn->query("UPDATE vehicle_queue SET position = (@pos := @pos + 1) WHERE status != 'completed' ORDER BY position ASC");
}
前端显示队列
function displayQueue() {
$queue = getCurrentQueue();
echo "<h3>当前车辆队列</h3>";
echo "<table border='1'>";
echo "<tr><th>位置</th><th>车牌号</th><th>状态</th></tr>";
foreach ($queue as $vehicle) {
echo "<tr>";
echo "<td>{$vehicle['position']}</td>";
echo "<td>{$vehicle['vehicle_number']}</td>";
echo "<td>{$vehicle['status']}</td>";
echo "</tr>";
}
echo "</table>";
}
高级功能扩展
- 优先队列实现:添加priority字段,修改排序逻辑
- 预计等待时间计算:基于历史处理时间估算
- 多通道处理:添加channel_id字段区分不同处理通道
- 实时更新:使用WebSocket或AJAX轮询实现队列实时显示
安全注意事项
- 对所有输入数据进行验证和过滤
- 使用预处理语句防止SQL注入
- 实现适当的用户认证和授权
- 考虑添加防重放机制防止重复提交
这个基础实现可以根据具体需求进行扩展,如添加车辆类型、司机信息、处理原因等额外字段。







