6
0
Fork 0

Order/UnlineController

release
panliang 2022-05-11 10:08:04 +08:00
parent 22b80d067f
commit 5528a867f3
6 changed files with 102 additions and 2 deletions

View File

@ -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) {

View File

@ -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;

View File

@ -0,0 +1,90 @@
<?php
namespace App\Endpoint\Api\Http\Controllers\Order;
use App\Endpoint\Api\Http\Controllers\Controller;
use App\Helpers\Paginator;
use App\Models\{Order, OrderPre};
use App\Endpoint\Api\Http\Resources\{OrderResource, OrderResourceCollection};
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Throwable;
use App\Exceptions\BizException;
class UnlineController extends Controller
{
/**
* 线下订单列表
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function index(Request $request)
{
$perPage = Paginator::resolvePerPage('per_page', 20, 50);
$orders = Order::with('products')->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());
}
}
}

View File

@ -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(),

View File

@ -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);

View File

@ -64,7 +64,6 @@ class OrderPackage
} catch (Throwable $th) {
DB::rollBack();
report($th);
logger('出错了');
logger($th->getMessage());
}
}