php实现订单批量发货
实现订单批量发货的步骤
获取待发货订单列表 通过数据库查询获取所有待发货的订单,可以使用SQL语句筛选状态为"待发货"的订单。查询结果应包含订单ID、收货人信息、商品明细等必要字段。
$pendingOrders = $db->query("SELECT * FROM orders WHERE status = 'pending_shipment'");
构建发货表单页面 创建一个包含批量操作复选框的表单页面,每行显示一个订单的基本信息。表单提交的目标地址设置为处理批量发货的PHP脚本。
<form action="batch_ship.php" method="post">
<table>
<tr>
<th>选择</th>
<th>订单号</th>
<th>收货人</th>
<th>商品</th>
</tr>
<?php foreach($pendingOrders as $order): ?>
<tr>
<td><input type="checkbox" name="order_ids[]" value="<?= $order['id'] ?>"></td>
<td><?= $order['order_number'] ?></td>
<td><?= $order['recipient'] ?></td>
<td><?= $order['items'] ?></td>
</tr>
<?php endforeach; ?>
</table>
<button type="submit">批量发货</button>
</form>
处理批量发货请求 创建处理批量发货的PHP脚本(batch_ship.php),接收表单提交的订单ID数组,遍历处理每个订单的发货逻辑。

if(isset($_POST['order_ids']) && is_array($_POST['order_ids'])) {
foreach($_POST['order_ids'] as $orderId) {
// 验证订单是否存在且状态正确
$order = $db->query("SELECT * FROM orders WHERE id = ? AND status = 'pending_shipment'", [$orderId]);
if($order) {
// 执行发货逻辑
$trackingNumber = generateTrackingNumber(); // 生成物流单号
$db->update("orders", [
'status' => 'shipped',
'tracking_number' => $trackingNumber,
'shipped_at' => date('Y-m-d H:i:s')
], ['id' => $orderId]);
// 记录发货日志
logShipping($orderId, $trackingNumber);
}
}
// 返回处理结果
header('Location: orders.php?message=批量发货成功');
exit;
}
添加事务处理 为确保数据一致性,应在数据库操作中使用事务处理,当某个订单发货失败时回滚所有更改。
$db->beginTransaction();
try {
foreach($_POST['order_ids'] as $orderId) {
// 发货逻辑
}
$db->commit();
} catch(Exception $e) {
$db->rollBack();
// 错误处理
}
生成物流单号和发货通知 实现物流单号生成逻辑,可调用第三方物流API或使用自定义规则生成。发货后应发送通知给客户。

function generateTrackingNumber() {
return 'TN' . date('Ymd') . strtoupper(uniqid());
}
function sendShippingNotification($orderId, $trackingNumber) {
$order = getOrderById($orderId);
$message = "您的订单{$order['number']}已发货,物流单号:{$trackingNumber}";
sendEmail($order['customer_email'], '订单发货通知', $message);
}
注意事项
性能优化 处理大批量订单时,应考虑分批次处理,避免一次性操作过多数据导致内存溢出或超时。
错误处理 完善的错误处理机制应包括:订单不存在处理、重复发货检查、物流API调用失败处理等。
权限验证 确保只有有权限的管理员才能执行批量发货操作,在脚本开始处添加权限验证代码。
if(!hasPermission('batch_shipping')) {
die('无权访问');
}
日志记录 详细记录每次批量发货的操作日志,包括操作人、时间、影响的订单数等信息,便于后续审计和问题追踪。






