|
@@ -3086,4 +3086,60 @@ readonly class OrderService
|
|
|
// 组合退款单号:前缀 + 时间戳 + 订单ID后缀 + 随机数
|
|
|
return "RF{$timestamp}{$orderIdSuffix}{$random}";
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 用户删除订单
|
|
|
+ *
|
|
|
+ * 业务逻辑:
|
|
|
+ * 1. 验证订单是否存在且属于当前用户
|
|
|
+ * 2. 验证订单状态是否允许删除(已完成、已取消等)
|
|
|
+ * 3. 更新订单的user_deleted_at字段
|
|
|
+ * 4. 记录删除操作
|
|
|
+ *
|
|
|
+ * @param int $userId 用户ID
|
|
|
+ * @param int $orderId 订单ID
|
|
|
+ * @return array
|
|
|
+ * @throws \Exception
|
|
|
+ */
|
|
|
+ public function deleteOrder(int $userId, int $orderId): array
|
|
|
+ {
|
|
|
+ return DB::transaction(function () use ($userId, $orderId) {
|
|
|
+ // 验证订单是否存在且属于当前用户
|
|
|
+ $order = Order::where('id', $orderId)
|
|
|
+ ->where('user_id', $userId)
|
|
|
+ ->whereNull('user_deleted_at') // 确保订单未被用户删除
|
|
|
+ ->first();
|
|
|
+
|
|
|
+ abort_if(!$order, 404, '订单不存在');
|
|
|
+
|
|
|
+ // 验证订单状态是否允许删除
|
|
|
+ // 允许删除未支付、已完成、已取消、已退款等状态的订单
|
|
|
+ $allowedStates = [
|
|
|
+ OrderStatus::CREATED->value, // 未支付
|
|
|
+ OrderStatus::COMPLETED->value, // 已完成
|
|
|
+ OrderStatus::CANCELLED->value, // 已取消
|
|
|
+ OrderStatus::REFUNDED->value, // 已退款
|
|
|
+ ];
|
|
|
+
|
|
|
+ abort_if(!in_array($order->state, $allowedStates), 422, '当前订单状态不允许删除');
|
|
|
+
|
|
|
+ // 标记订单为用户已删除
|
|
|
+ $order->update([
|
|
|
+ 'user_deleted_at' => now()
|
|
|
+ ]);
|
|
|
+
|
|
|
+ // 创建订单记录
|
|
|
+ $this->createOrderRecord(
|
|
|
+ $order,
|
|
|
+ $userId,
|
|
|
+ 'user',
|
|
|
+ OrderRecordStatus::DELETED,
|
|
|
+ '用户删除订单'
|
|
|
+ );
|
|
|
+
|
|
|
+ return [
|
|
|
+ 'message' => '订单删除成功'
|
|
|
+ ];
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|