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

121 lines
3.8 KiB
PHP

<?php
namespace App\Endpoint\Api\Http\Controllers\Dealer;
use App\Endpoint\Api\Http\Controllers\Controller;
use App\Endpoint\Api\Http\Resources\Dealer\WalletLogResource;
use App\Endpoint\Api\Http\Resources\Dealer\WalletToBankLogResource;
use App\Endpoint\Api\Http\Resources\Dealer\WalletToBankLogSimpleResource;
use App\Enums\DealerWalletAction;
use App\Exceptions\BizException;
use App\Helpers\Paginator as PaginatorHelper;
use App\Models\DealerWalletToBankLog;
use App\Services\Dealer\WalletService;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Throwable;
class WalletController extends Controller
{
/**
* 余额明细
*
* @param Request $request
* @return void
*/
public function index(Request $request)
{
$perPage = PaginatorHelper::resolvePerPage('per_page', 20, 50);
return WalletLogResource::collection($request->user()->dealerWalletLogs()
->latest('id')
->simplePaginate($perPage));
}
/**
* 提现到银行
*
* @return void
*/
public function walletToBank(Request $request, WalletService $walletService)
{
$input = $request->validate([
'amount' => ['bail', 'required', 'int', 'min:1'],
]);
$user = $request->user();
$amount = Arr::get($input, 'amount', 0);
if (empty($user->dealer->pay_info)) {
throw new BizException('请先绑定设置收款信息');
}
//校验是否关闭提现
if (!$user->dealerWallet?->withdrawable) {
throw new BizException('可提账户已被限制提现');
}
// 校验提现门槛
if (bcdiv($amount, 100, 2) < app_settings('dealer.withdraw_threshold_amount', 0)) {
throw new BizException('提现金额需大于'.app_settings('dealer.withdraw_threshold_amount', 0).'元');
}
try {
DB::beginTransaction();
$rate = app_settings('dealer.withdraw_fee_rate', '0.00');//手续费率
// $rate = 0;
//计算手续费(四舍五入)
$serviceAmount = round(bcdiv($rate, 100, 4)*$amount);
//生成提现记录
$log = DealerWalletToBankLog::create([
'user_id' =>$user->id,
'amount'=> bcdiv($amount, 100, 2),
'rate' => $rate,
'service_amount' => bcdiv($serviceAmount, 100, 2),
'account_amount' => bcdiv($amount-$serviceAmount, 100, 2),
]);
//减去用户可提金额
$walletService->changeBalance($user, -bcdiv($amount, 100, 2), DealerWalletAction::WithdrawBank, '提现', $log);
DB::commit();
} catch (BizException $th) {
DB::rollBack();
throw new BizException($th->getMessage());
} catch (Throwable $th) {
DB::rollBack();
report($th);
throw new BizException('系统繁忙,请稍后再试');
}
return response()->noContent();
}
/**
* 提现记录
*
* @return void
*/
public function walletToBankLogs(Request $request)
{
$perPage = PaginatorHelper::resolvePerPage('per_page', 20, 50);
$logs = $request->user()->dealerWalletToBankLogs()
->latest('id')
->simplePaginate($perPage);
return WalletToBankLogSimpleResource::collection($logs);
}
/**
* 提现记录详情
*
* @param [type] $id
* @param Request $request
* @return void
*/
public function walletToBankLogShow($id, Request $request)
{
$log = $request->user()->dealerWalletToBankLogs()->findOrFail($id);
return WalletToBankLogResource::make($log);
}
}