| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -3,16 +3,22 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					namespace App\AdminGuide\Controllers; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use App\AdminGuide\Repositories\WithdrawalBank; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use App\Common\StatementType; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use App\Models\Agent; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use App\Models\Guide; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use App\Models\SystemSetting; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use App\Models\Withdrawal; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use App\Service\WithdrawalService; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use App\Traits\DemandTraits; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use App\Traits\WithdrawalTraits; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use Dcat\Admin\Admin; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use Dcat\Admin\Form; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use Dcat\Admin\Grid; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use Dcat\Admin\Repositories\EloquentRepository; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use Dcat\Admin\Show; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use Dcat\Admin\Http\Controllers\AdminController; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use Illuminate\Database\Eloquent\Model; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use Illuminate\Support\Facades\DB; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					class WithdrawalBankController extends AdminController | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -22,9 +28,10 @@ class WithdrawalBankController extends AdminController | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return Form | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    protected function form() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return Form::make(new WithdrawalBank(), function (Form $form) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						protected function form() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return Form::make(new WithdrawalBank(), function (Form $form) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								$auto = Withdrawal::query() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									->with('pay') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									->where([ | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -36,7 +43,12 @@ class WithdrawalBankController extends AdminController | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									->orderByDesc('updated_at') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									->first(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								$form->display('id'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								$form->decimal('price','提现金额')->required()->maxLength(50)->default($auto->price ?? 0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								$min = SystemSetting::val('withdrawal', WithdrawalTraits::$adminType[3]) ?? 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								$form->decimal('price','提现金额')->rules('required|numeric|min:'.$min.'|not_in:0',[ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									'*' => '提现金额为必填字段且必须大于'.$min, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								]) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									->default($auto->price ?? 0) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									->help('含手续费' . SystemSetting::val('withdrawal', WithdrawalTraits::$adminType[2]) . ' %,最小提现金额'.$min); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								$form->text('name')->required()->maxLength(50)->default($auto->pay->name ?? ''); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								$form->text('card_number')->required()->maxLength(50)->type('number')->default($auto->pay->card_number ?? ''); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								$form->text('account_name')->required()->maxLength(50)->default($auto->pay->account_name ?? ''); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -44,24 +56,52 @@ class WithdrawalBankController extends AdminController | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								$form->hidden('withdrawal_id'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								$form->saving(function (Form $form) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$user = Agent::query()->where('id', Admin::user()->id)->lockForUpdate()->first(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									if ($form->price > $user->balance) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										return $form->response()->error('余额不足,当前可用余额为'.$user->balance); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									DB::beginTransaction(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$user = Guide::query()->where('id', Admin::user()->id)->lockForUpdate()->first(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										//手续费
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$cutPrice = bcmul($form->price, SystemSetting::val('withdrawal', WithdrawalTraits::$adminType[2]), 6); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$cutPrice = $cutPrice > 0 ? bcdiv($cutPrice, 100, 6) : 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										//总花费
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$total = bcadd($form->price, $cutPrice,6); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										if ($total > $user->balance) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
											return $form->response()->error('余额不足,本次提现需花费'.bcadd($total,0,2).'(含手续费),当前可用余额为' . $user->balance); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										//提现扣钱流水
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$service = new WithdrawalService(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$service->create( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
											bcmul($form->price, -1, 6), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
											StatementType::WITHDRAWAL, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
											Admin::user()->id, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
											DemandTraits::$col[2] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										//提现手续费流水
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$service->create( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
											bcmul($cutPrice, -1, 6), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
											StatementType::WITHDRAWAL_CAT, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
											Admin::user()->id, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
											DemandTraits::$col[2] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$user->balance = bcsub($user->balance,$form->price,6); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$user->save(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$user->balance = bcsub($user->balance, $total, 6); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$user->save(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$withdrawal = new Withdrawal(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$withdrawal->user_id = Admin::user()->id; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$withdrawal->user_type = DemandTraits::$col[2]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$withdrawal->price = request('price',0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									//$withdrawal->pay_id = $form->getKey();
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$withdrawal->pay_type = WithdrawalTraits::$userType[1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$withdrawal->save(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$withdrawal = new Withdrawal(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$withdrawal->user_id = Admin::user()->id; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$withdrawal->user_type = DemandTraits::$col[2]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$withdrawal->price = request('price', 0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$withdrawal->cut_price = $cutPrice; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										//$withdrawal->pay_id = $form->getKey();
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$withdrawal->pay_type = WithdrawalTraits::$userType[1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$withdrawal->save(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$form->withdrawal_id = $withdrawal->id; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$form->deleteInput('price'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$form->withdrawal_id = $withdrawal->id; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										$form->deleteInput('price'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										DB::commit(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									} catch (\Exception $e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										DB::rollBack(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										return $form->response()->error($e->getMessage()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								$form->saved(function (Form $form) { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -69,6 +109,7 @@ class WithdrawalBankController extends AdminController | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$withdrawal->pay_id = $form->getKey(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									$withdrawal->save(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							}); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} |