126 lines
4.0 KiB
PHP
126 lines
4.0 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 (!$user->dealer->canWithdraw()) {
|
|
throw new BizException('每次提现需要间隔'.app_settings('dealer.withdraw_days', 7).'天');
|
|
}
|
|
|
|
// 校验提现门槛
|
|
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);
|
|
}
|
|
}
|