111 lines
3.2 KiB
PHP
111 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace App\Endpoint\Api\Http\Controllers\Dealer;
|
|
|
|
use App\Endpoint\Api\Http\Controllers\Controller;
|
|
use App\Endpoint\Api\Http\Resources\Dealer\DealerEarningResource;
|
|
use App\Endpoint\Api\Http\Resources\Dealer\DealerEarningSimpleResource;
|
|
use App\Enums\DealerEarningStatus;
|
|
use App\Exceptions\BizException;
|
|
use App\Helpers\Paginator;
|
|
use App\Models\DealerEarning;
|
|
use Illuminate\Http\Request;
|
|
|
|
class EarningController extends Controller
|
|
{
|
|
/**
|
|
* 列表
|
|
*
|
|
* @param Request $request
|
|
* @return void
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$cate = $request->input('cate', '');//获取订单类别
|
|
$user = $request->user();
|
|
switch ($cate) {
|
|
case 'pending'://
|
|
$query = $user->dealerPayEarnings()->onlyPending()->whereNotNull('settle_at');
|
|
break;
|
|
case 'paid':
|
|
$query = $user->dealerEarnings()->onlyPaid()->whereNotNull('settle_at');
|
|
break;
|
|
default://全部
|
|
$query = DealerEarning::where(function ($q) use ($user) {
|
|
return $q->where('user_id', $user->id)->orWhere('payer_id', $user->id);
|
|
});
|
|
break;
|
|
}
|
|
|
|
$earnings = $query->latest('id')->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
|
|
return DealerEarningSimpleResource::collection($earnings);
|
|
}
|
|
|
|
/**
|
|
* 详情
|
|
*
|
|
* @param [type] $id
|
|
* @param Request $request
|
|
* @return void
|
|
*/
|
|
public function show($id, Request $request)
|
|
{
|
|
$user = $request->user();
|
|
$earning = DealerEarning::where(function ($q) use ($user) {
|
|
return $q->where('user_id', $user->id)->orWhere('payer_id', $user->id);
|
|
})->with('earningable')->findOrFail($id);
|
|
return DealerEarningResource::make($earning);
|
|
}
|
|
|
|
/**
|
|
* 确认打款
|
|
*
|
|
* @param [type] $id
|
|
* @param Request $request
|
|
* @return void
|
|
*/
|
|
public function payEarning($id, Request $request)
|
|
{
|
|
$earning = DealerEarning::findOrFail($id);
|
|
|
|
if (!$earning->isPayer($request->user()->id)) {
|
|
throw new BizException('无法操作该订单');
|
|
}
|
|
|
|
$input = $request->validate([
|
|
'pay_image' => ['bail', 'required', 'string'],
|
|
]);
|
|
if ($earning->isPending()) {
|
|
$earning->update([
|
|
'status' => DealerEarningStatus::Paid,
|
|
'pay_info' => $earning->getPayInfo(),
|
|
'pay_image'=> $input['pay_image'],
|
|
'pay_at' => now(),
|
|
]);
|
|
}
|
|
return response()->noContent();
|
|
}
|
|
|
|
/**
|
|
* 确认收款
|
|
*
|
|
* @param [type] $id
|
|
* @param Request $request
|
|
*/
|
|
public function confirmEarning($id, Request $request)
|
|
{
|
|
$earning = DealerEarning::findOrFail($id);
|
|
|
|
if (!$earning->isUser($request->user()->id)) {
|
|
throw new BizException('无法操作该订单');
|
|
}
|
|
|
|
if ($earning->isPaid()) {
|
|
$earning->update([
|
|
'status' => DealerEarningStatus::Completed,
|
|
]);
|
|
}
|
|
return response()->noContent();
|
|
}
|
|
}
|