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

106 lines
2.9 KiB
PHP

<?php
namespace App\Endpoint\Api\Http\Controllers;
use App\Endpoint\Api\Http\Controllers\Controller;
use App\Endpoint\Api\Http\Resources\OfflineOrderResource;
use App\Enums\PayWay;
use App\Exceptions\BizException;
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 index(Request $request)
{
$user = $request->user();
$query = OfflineOrder::query()->with(['store'])->filter($request->all())->orderBy('created_at', 'desc');
// 员工身份, 查询我创建的订单
if ($request->input('use_staff')) {
$query->where('staff_id', $user->id);
}
// 用户身份, 查询我支付的订单
if ($request->input('use_user')) {
$query->where('user_id', $user->id);
}
$list = $query->paginate($request->input('per_page'));
return OfflineOrderResource::collection($list);
}
public function show(string $id)
{
$info = OfflineOrder::find($id);
if (!$info) {
throw new BizException("记录不存在");
}
return OfflineOrderResource::make($info);
}
/**
* 确认订单
*/
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);
}
/**
* 创建订单
*/
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),
['user_remark' => $request->input('user_remark'), 'coupon_id' => $preview->coupon_id]
);
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);
});
}
}