WithdrawController.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace app\controller;
  3. use app\business\GoodsBusiness;
  4. use app\business\LoginBusiness;
  5. use app\business\PayorderBusiness;
  6. use app\business\StreamBusiness;
  7. use app\business\WithdrawBusiness;
  8. use Illuminate\Support\Arr;
  9. use Respect\Validation\Validator;
  10. use support\Db;
  11. use support\Redis;
  12. use support\Request;
  13. use hg\apidoc\annotation as Apidoc;
  14. use Webman\Captcha\CaptchaBuilder;
  15. use Webman\Captcha\PhraseBuilder;
  16. #[Apidoc\Title("提现")]
  17. #[Apidoc\Group("Stream")]
  18. #[Apidoc\Sort(5)]
  19. class WithdrawController
  20. {
  21. #[Apidoc\Title("提现申请")]
  22. #[Apidoc\Url("api/withdraw.html")]
  23. #[Apidoc\Method("POST")]
  24. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  25. #[Apidoc\Param("money", type: "int", require: true, desc: "提现金额", mock: 10)]
  26. #[Apidoc\Param("mold", type: "int", require: true, desc: "钱包类型 ", mock: 1)]
  27. #[Apidoc\Param("account_number", type: "string", require: true, desc: "收款账号:转账时候传 ", mock: 1)]
  28. #[Apidoc\Param(name: "pay_characteristic", type: "int", require: true, desc: '支付通道标识', default: '1')]
  29. public function applyfor(Request $request)
  30. {
  31. $param = $request->param_data;
  32. $param['user_data'] = $request->user_data;
  33. Db::beginTransaction();
  34. try {
  35. Validator::input($param, [
  36. 'money' => Validator::notEmpty()->Number()->setName('提现金额'),
  37. 'mold' => Validator::notEmpty()->intType()->setName('钱包类型'),
  38. ]);
  39. $name = Db::table('wa_user_identity')->where('uid', $request->user_data['id'])->value('name');
  40. if (empty($name)) {
  41. throw new \Exception('请实名后再进行提现!');
  42. }
  43. $account_holder = Db::table('wa_bank_card')->where('uid', $request->user_data['id'])->value('account_holder');
  44. if (empty($account_holder)) {
  45. throw new \Exception('请绑定银行卡!');
  46. }
  47. if ($account_holder != $name) {
  48. throw new \Exception('实名人和开户人不一致,请绑定实名人的银行卡!');
  49. }
  50. // $is_buy = Db::table('wa_payorder')
  51. // ->where('user_id', $param['user_data']['id'])
  52. // ->where('is_pay', 2)
  53. // ->where('goods_type', 1)
  54. // ->first();
  55. // if(!$is_buy){
  56. // Db::rollBack();
  57. // return error('功能暂未开放!',[],4006);
  58. // }
  59. $arr = WithdrawBusiness::applyfor($param);
  60. } catch (\Throwable $exception) {
  61. Db::rollBack();
  62. return error($exception->getMessage());
  63. }
  64. Db::commit();
  65. return success($arr, '提现成功');
  66. }
  67. #[Apidoc\Title("提现记录")]
  68. #[Apidoc\Url("api/withdraw/stream.html")]
  69. #[Apidoc\Method("POST")]
  70. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  71. #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
  72. #[Apidoc\Param("limit", type: "int", require: true, desc: "输入条数", mock: 10)]
  73. #[Apidoc\Param("mold", type: "int", require: true, desc: "钱包类型 不传查所有 ", mock: 1)]
  74. #[Apidoc\Returned(name: "order_no", type: "string", require: true, desc: '订单号', default: '23213213213217182937291')]
  75. #[Apidoc\Returned(name: "money", type: "string", require: true, desc: '提现金额', default: '100.00')]
  76. #[Apidoc\Returned(name: "status", type: "string", require: true, desc: '提现状态 1 待审核 2打款中 3审核通过 4驳回', default: '1')]
  77. #[Apidoc\Returned(name: "affiliated_bank", type: "string", require: true, desc: '归属银行', default: '中国银行')]
  78. #[Apidoc\Returned(name: "account_holder", type: "string", require: true, desc: '开户人', default: '张三')]
  79. #[Apidoc\Returned(name: "card_number", type: "string", require: true, desc: '卡号', default: '12321321376763274682374681')]
  80. #[Apidoc\Returned(name: "created_at", type: "date", require: true, desc: '申请时间', default: '2023-05-20 23:49:49')]
  81. #[Apidoc\Returned(name: "remarks", type: "date", require: true, desc: '驳回备注', default: '')]
  82. public function stream(Request $request)
  83. {
  84. $param = $request->param_data;
  85. $param = Arr::only($param, ['page', 'limit', 'mold']);
  86. $param['user_data'] = $request->user_data;
  87. try {
  88. Validator::input($param, [
  89. 'page' => Validator::notEmpty()->intType()->setName('页码'),
  90. 'limit' => Validator::notEmpty()->intType()->setName('输出条数'),
  91. ]);
  92. $data = WithdrawBusiness::stream($param);
  93. } catch (\Throwable $exception) {
  94. return error($exception->getMessage());
  95. }
  96. return success($data['data'], '成功', 200, $data['total']);
  97. }
  98. #[Apidoc\Title("一键转入")]
  99. #[Apidoc\Url("api/withdraw/changes_into.html")]
  100. #[Apidoc\Method("POST")]
  101. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  102. public function changes_into(Request $request)
  103. {
  104. $param = $request->param_data;
  105. $param['user_data'] = $request->user_data;
  106. Db::beginTransaction();
  107. try {
  108. if (!empty(Redis::get('123' . $request->user_data['id']))) {
  109. throw new \Exception('请不要连续操作');
  110. }
  111. Redis::setEx('123' . $request->user_data['id'], 5, $request->user_data['id']);
  112. $carddata = Db::table('wa_user_social_cark')
  113. ->where('user_id', $param['user_data']['id'])
  114. ->where('id', $param['id'])
  115. ->first();
  116. if (!empty($carddata) && $carddata->is_binding == 1) {
  117. $userdata = Db::table('wa_users')->where('id', $param['user_data']['id'])->first();
  118. if (!empty($userdata->money_one) && $userdata->money_one > 0) {
  119. StreamBusiness::addStream($param['user_data']['id'], $userdata->money_one, streamType4, moldType5, moldTypefild5);
  120. StreamBusiness::delStream($param['user_data']['id'], $userdata->money_one, streamType4, moldType2, moldTypefild2);
  121. }
  122. } else {
  123. throw new \Exception('请先绑定卡号!');
  124. }
  125. } catch (\Throwable $exception) {
  126. Db::rollBack();
  127. return error($exception->getMessage());
  128. }
  129. Db::commit();
  130. return success([], '转入成功');
  131. }
  132. }