diff --git a/app/Endpoint/Api/Filters/OrderFilter.php b/app/Endpoint/Api/Filters/OrderFilter.php index 0978f3d8..b302e22e 100644 --- a/app/Endpoint/Api/Filters/OrderFilter.php +++ b/app/Endpoint/Api/Filters/OrderFilter.php @@ -14,6 +14,13 @@ class OrderFilter extends ModelFilter }); } + public function phone($phone) + { + return $this->whereHas('user', function ($query) use ($phone) { + return $query->where('phone', 'like', "%${phone}%"); + }); + } + public function status($status) { switch ($status) { diff --git a/app/Endpoint/Api/Http/Controllers/Order/OrderController.php b/app/Endpoint/Api/Http/Controllers/Order/OrderController.php index d77eb54b..87d9a044 100644 --- a/app/Endpoint/Api/Http/Controllers/Order/OrderController.php +++ b/app/Endpoint/Api/Http/Controllers/Order/OrderController.php @@ -11,7 +11,7 @@ use App\Enums\PayWay; use App\Events\OrderPaid; use App\Exceptions\BizException; use App\Helpers\Paginator as PaginatorHelper; -use App\Models\KuaidiLog; +use App\Models\{Order, KuaidiLog, OrderPre}; use App\Services\OrderService; use Illuminate\Database\QueryException; use Illuminate\Http\Request; diff --git a/app/Endpoint/Api/Http/Controllers/Order/UnlineController.php b/app/Endpoint/Api/Http/Controllers/Order/UnlineController.php new file mode 100644 index 00000000..7aa6c9aa --- /dev/null +++ b/app/Endpoint/Api/Http/Controllers/Order/UnlineController.php @@ -0,0 +1,90 @@ +filter($request->all())->where('source_type', OrderPre::class)->latest('id')->simplePaginate($perPage); + + return OrderResourceCollection::make($orders); + } + + /** + * 线下订单详细 + */ + public function show($id) + { + $order = Order::where('source_type', OrderPre::class)->findOrFail($id); + $order->load('products'); + + return OrderResource::make($order); + } + + /** + * 发货 + */ + public function package($id, Request $request) + { + $request->validate([ + 'products' => 'required|array', + 'products.*.id' => 'required', + 'products.*.amount' => 'required', + ], [ + 'products.required' => '发货商品必填', + ]); + $order = Order::where('source_type', OrderPre::class)->findOrFail($id); + + // 订单来源为 帮客户下单 order_pres + try { + DB::beginTransaction(); + $order_products = $order->products; + // 根据 order_pres 发货数量, 自动发货 + $service_package = new \App\Admin\Services\OrderPackageService(); + // order_product_id: 订单商品ID, quantity: 发货数量 + $package_params = []; + foreach($request->input('products') as $item) { + $order_product = $order_products->firstWhere('id', $item['id']); + if ($order_product) { + array_push($package_params, [ + 'order_product_id' => $order_product->id, + 'quantity' => $item['amount'], + ]); + } + } + // 发货 + if (count($package_params) === 0) { + throw new BizException('提货商品不存在'); + } + $service_package->createPackage($order, [ + 'shipping_company' => '自提', + 'shipping_number' => '0', + 'packages' => $package_params + ]); + DB::commit(); + return response()->noContent(); + } catch (Throwable $th) { + DB::rollBack(); + report($th); + throw new BizException($th->getMessage()); + } + } +} diff --git a/app/Endpoint/Api/Http/Resources/OrderProductResource.php b/app/Endpoint/Api/Http/Resources/OrderProductResource.php index 4b75209a..eef23419 100644 --- a/app/Endpoint/Api/Http/Resources/OrderProductResource.php +++ b/app/Endpoint/Api/Http/Resources/OrderProductResource.php @@ -24,6 +24,7 @@ class OrderProductResource extends JsonResource 'vip_price' => $this->vip_price_format, 'total_amount' => $this->total_amount, 'quantity' => $this->quantity, + 'remain_quantity' => $this->remain_quantity, 'can_after_sale' => $this->can_after_sale, 'has_after_sale' => $this->has_after_sale, //显示【查看售后】按钮判断 'is_gift' => $this->isGift(), diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index 3db3a007..2a17b27b 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -188,6 +188,9 @@ Route::group([ //OSS上传凭证 Route::post('oss-sts', [AliOssController::class, 'sts']); + // 线下订单 + Route::post('order/underline/{id}/package', [\App\Endpoint\Api\Http\Controllers\Order\UnlineController::class, 'package']); + Route::apiResource('order/underline', \App\Endpoint\Api\Http\Controllers\Order\UnlineController::class)->only(['index', 'show']); // 订单 Route::get('order/statistics', StatisticsController::class); Route::post('order/verify-order', OrderVerifyController::class); diff --git a/app/Listeners/OrderPackage.php b/app/Listeners/OrderPackage.php index bc562bb4..66215ffb 100644 --- a/app/Listeners/OrderPackage.php +++ b/app/Listeners/OrderPackage.php @@ -64,7 +64,6 @@ class OrderPackage } catch (Throwable $th) { DB::rollBack(); report($th); - logger('出错了'); logger($th->getMessage()); } }