6
0
Fork 0
jiqu-library-server/app/Endpoint/Api/Http/Controllers/OfflineOrderController.php

77 lines
1.9 KiB
PHP

<?php
namespace App\Endpoint\Api\Http\Controllers;
use App\Endpoint\Api\Http\Controllers\Controller;
use App\Enums\PayWay;
use App\Models\OfflineOrder;
use App\Models\OfflineOrderPreview;
use App\Services\OfflineOrderService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Throwable;
class OfflineOrderController extends Controller
{
/**
* 确认订单
*/
public function check(Request $request, OfflineOrderService $offlineOrderService)
{
$request->validate([
'order_preview_id' => ['bail', 'required', 'int'],
]);
$preview = OfflineOrderPreview::findOrFail($request->input('order_preview_id'));
return $offlineOrderService->check($request->user(), $preview->payload['items']);
}
/**
* 创建订单
*/
public function store(Request $request, OfflineOrderService $offlineOrderService)
{
$request->validate([
'order_preview_id' => ['bail', 'required', 'int'],
'points' => ['bail', 'nullable', 'numeric', 'min:0'],
]);
try {
DB::beginTransaction();
$preview = OfflineOrderPreview::findOrFail($request->input('order_preview_id'));
$order = $offlineOrderService->create(
$request->user(),
$preview,
bcmul($request->input('points', 0), 100),
);
DB::commit();
} catch (Throwable $th) {
report($th);
throw $th;
}
return $order;
}
/**
* 订单付款
*/
public function pay($id, Request $request)
{
$user = $request->user();
return DB::transaction(function () use ($id, $user) {
$order = OfflineOrder::where('user_id', $user->id)
->where('id', $id)
->firstOrFail();
return (new OfflineOrderService())->pay($order, PayWay::WxpayMiniProgram);
});
}
}