海南旅游SAAS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
3.9 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. <?php
  2. namespace App\AdminSupplier\Controllers;
  3. use App\AdminSupplier\Repositories\WithdrawalBank;
  4. use App\Common\StatementType;
  5. use App\Models\Agent;
  6. use App\Models\Supplier;
  7. use App\Models\SystemSetting;
  8. use App\Models\Withdrawal;
  9. use App\Service\WithdrawalService;
  10. use App\Traits\DemandTraits;
  11. use App\Traits\StatementTraits;
  12. use App\Traits\WithdrawalTraits;
  13. use Dcat\Admin\Admin;
  14. use Dcat\Admin\Form;
  15. use Dcat\Admin\Grid;
  16. use Dcat\Admin\Repositories\EloquentRepository;
  17. use Dcat\Admin\Show;
  18. use Dcat\Admin\Http\Controllers\AdminController;
  19. use Illuminate\Database\Eloquent\Model;
  20. use Illuminate\Support\Facades\DB;
  21. class WithdrawalBankController extends AdminController
  22. {
  23. /**
  24. * Make a form builder.
  25. *
  26. * @return Form
  27. */
  28. protected function form()
  29. {
  30. return Form::make(new WithdrawalBank(), function (Form $form) {
  31. $auto = Withdrawal::query()
  32. ->with('pay')
  33. ->where([
  34. 'user_id' => Admin::user()->id,
  35. 'user_type' => DemandTraits::$col[1],
  36. 'status' => WithdrawalTraits::$state[3],
  37. 'pay_type' => WithdrawalTraits::$userType[1],
  38. ])
  39. ->orderByDesc('updated_at')
  40. ->first();
  41. $form->display('id');
  42. $min = SystemSetting::val('withdrawal', WithdrawalTraits::$adminType[3]) ?? 0;
  43. $form->decimal('price','提现金额')->rules('required|numeric|min:'.$min.'|not_in:0',[
  44. '*' => '提现金额为必填字段且必须大于'.$min,
  45. ])
  46. ->default($auto->price ?? 0)
  47. ->help('含手续费' . SystemSetting::val('withdrawal', WithdrawalTraits::$adminType[1]) . ' %,最小提现金额'.$min);
  48. $form->text('name')->required()->maxLength(50)->default($auto->pay->name ?? '');
  49. $form->text('card_number')->required()->maxLength(50)->type('number')->default($auto->pay->card_number ?? '');
  50. $form->text('account_name')->required()->maxLength(50)->default($auto->pay->account_name ?? '');
  51. $form->text('branch')->required()->maxLength(100)->default($auto->pay->branch ?? '');
  52. $form->hidden('withdrawal_id');
  53. $form->saving(function (Form $form) {
  54. DB::beginTransaction();
  55. try {
  56. $user = Supplier::query()->where('id', Admin::user()->id)->lockForUpdate()->first();
  57. //手续费
  58. $cutPrice = bcmul($form->price, SystemSetting::val('withdrawal', WithdrawalTraits::$adminType[1]), 6);
  59. $cutPrice = $cutPrice > 0 ? bcdiv($cutPrice, 100, 6) : 0;
  60. //总花费
  61. $total = bcadd($form->price, $cutPrice,6);
  62. if ($total > $user->balance) {
  63. return $form->response()->error('余额不足,本次提现需花费'.bcadd($total,0,2).'(含手续费),当前可用余额为' . $user->balance);
  64. }
  65. $user->balance = bcsub($user->balance, $total, 6);
  66. $user->save();
  67. $withdrawal = new Withdrawal();
  68. $withdrawal->user_id = Admin::user()->id;
  69. $withdrawal->user_type = DemandTraits::$col[1];
  70. $withdrawal->price = request('price', 0);
  71. $withdrawal->cut_price = $cutPrice;
  72. //$withdrawal->pay_id = $form->getKey();
  73. $withdrawal->pay_type = WithdrawalTraits::$userType[1];
  74. $withdrawal->save();
  75. //提现扣钱流水
  76. $service = new WithdrawalService();
  77. $service->create(
  78. bcmul($form->price, -1, 6),
  79. StatementType::WITHDRAWAL,
  80. Admin::user()->id,
  81. DemandTraits::$col[0],
  82. $withdrawal->id,
  83. StatementTraits::$type[1]
  84. );
  85. //提现手续费流水
  86. $service->create(
  87. bcmul($cutPrice, -1, 6),
  88. StatementType::WITHDRAWAL_CAT,
  89. Admin::user()->id,
  90. DemandTraits::$col[0],
  91. $withdrawal->id,
  92. StatementTraits::$type[1]
  93. );
  94. $form->withdrawal_id = $withdrawal->id;
  95. $form->deleteInput('price');
  96. DB::commit();
  97. } catch (\Exception $e) {
  98. DB::rollBack();
  99. return $form->response()->error($e->getMessage());
  100. }
  101. });
  102. $form->saved(function (Form $form) {
  103. $withdrawal = Withdrawal::find($form->withdrawal_id);
  104. $withdrawal->pay_id = $form->getKey();
  105. $withdrawal->save();
  106. });
  107. });
  108. }
  109. }