WithdrawController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  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(name: "pay_characteristic", type: "int", require: true, desc: '支付通道标识', default: '1')]
  28. public function applyfor(Request $request)
  29. {
  30. $param = $request->param_data;
  31. $param['user_data'] = $request->user_data;
  32. Db::beginTransaction();
  33. try {
  34. Validator::input($param, [
  35. 'money' => Validator::notEmpty()->Number()->setName('提现金额'),
  36. 'mold' => Validator::notEmpty()->intType()->setName('钱包类型'),
  37. ]);
  38. if (!empty(Redis::get($param['mold'] . $request->user_data['id']))) {
  39. throw new \Exception('请不要连续操作');
  40. }
  41. Redis::setEx($param['mold'] . $request->user_data['id'], 10, $request->user_data['id']);
  42. $name = Db::table('wa_user_identity')->where('uid', $request->user_data['id'])->value('name');
  43. if (empty($name)) {
  44. throw new \Exception('请实名后再进行提现!');
  45. }
  46. // $is_buy_jiaona = Db::table('wa_payorder')
  47. // ->where('user_id', $request->user_data['id'])
  48. // ->where('is_pay', 2)
  49. // ->where('goods_type', 6)
  50. // ->exists();
  51. // if (!$is_buy_jiaona) {
  52. // Db::rollBack();
  53. // return error('请先完成全球通金卡激活后即可免费提现!', [], 4006);
  54. // }
  55. //
  56. // $is_buy_jnbaozj = Db::table('wa_payorder')
  57. // ->where('user_id', $request->user_data['id'])
  58. // ->where('is_pay', 2)
  59. // ->where('goods_type', 7)
  60. // ->exists();
  61. // if (!$is_buy_jnbaozj) {
  62. // Db::rollBack();
  63. // return error('请缴纳保证金,缴纳成功立即返还保证金!', [], 4006);
  64. // }
  65. if ($param['mold'] == 2) {
  66. $carkdatalist = Db::table('wa_user_social_cark')
  67. ->where('user_id', $request->user_data['id'])->where('type', 1)->first();
  68. if (empty($carkdatalist)) {
  69. throw new \Exception('先领取WB.U卡在兑换!');
  70. }
  71. $msg = '兑换成功';
  72. } elseif ($param['mold'] == 5) {
  73. $carkdatalist = Db::table('wa_user_social_cark')
  74. ->where('user_id', $request->user_data['id'])->where('type', 1)->first();
  75. if (empty($carkdatalist)) {
  76. throw new \Exception('先领取WB.U卡在兑换!');
  77. }
  78. $msg = '兑换成功';
  79. } elseif ($param['mold'] == 6) {
  80. $carkdatalist = Db::table('wa_user_social_cark')
  81. ->where('user_id', $request->user_data['id'])->where('type', 1)->first();
  82. if (empty($carkdatalist)) {
  83. throw new \Exception('先领取WB.U卡在来提现!');
  84. }
  85. $msg = '提现成功';
  86. } elseif ($param['mold'] == 10) {
  87. $msg = '提现成功';
  88. } elseif ($param['mold'] == 1) {
  89. $msg = '提现成功';
  90. } elseif ($param['mold'] == 55) {
  91. $msg = '提现成功';
  92. } else {
  93. $account_holder = Db::table('wa_bank_card')->where('uid', $request->user_data['id'])->value('account_holder');
  94. if (empty($account_holder)) {
  95. throw new \Exception('请绑定银行卡!');
  96. }
  97. if ($account_holder != $name) {
  98. throw new \Exception('实名人和开户人不一致,请绑定实名人的银行卡!');
  99. }
  100. $msg = '提现成功';
  101. }
  102. $arr = WithdrawBusiness::applyfor($param);
  103. } catch (\Throwable $exception) {
  104. Db::rollBack();
  105. return error($exception->getMessage());
  106. }
  107. Db::commit();
  108. return success($arr, $msg);
  109. }
  110. #[Apidoc\Title("提现记录")]
  111. #[Apidoc\Url("api/withdraw/stream.html")]
  112. #[Apidoc\Method("POST")]
  113. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  114. #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
  115. #[Apidoc\Param("limit", type: "int", require: true, desc: "输入条数", mock: 10)]
  116. #[Apidoc\Param("mold", type: "int", require: true, desc: "钱包类型 不传查所有 ", mock: 1)]
  117. #[Apidoc\Returned(name: "order_no", type: "string", require: true, desc: '订单号', default: '23213213213217182937291')]
  118. #[Apidoc\Returned(name: "money", type: "string", require: true, desc: '提现金额', default: '100.00')]
  119. #[Apidoc\Returned(name: "status", type: "string", require: true, desc: '提现状态 1 待审核 2打款中 3审核通过 4驳回', default: '1')]
  120. #[Apidoc\Returned(name: "affiliated_bank", type: "string", require: true, desc: '归属银行', default: '中国银行')]
  121. #[Apidoc\Returned(name: "account_holder", type: "string", require: true, desc: '开户人', default: '张三')]
  122. #[Apidoc\Returned(name: "card_number", type: "string", require: true, desc: '卡号', default: '12321321376763274682374681')]
  123. #[Apidoc\Returned(name: "created_at", type: "date", require: true, desc: '申请时间', default: '2023-05-20 23:49:49')]
  124. #[Apidoc\Returned(name: "remarks", type: "date", require: true, desc: '驳回备注', default: '')]
  125. public function stream(Request $request)
  126. {
  127. $param = $request->param_data;
  128. $param = Arr::only($param, ['page', 'limit', 'mold']);
  129. $param['user_data'] = $request->user_data;
  130. try {
  131. Validator::input($param, [
  132. 'page' => Validator::notEmpty()->intType()->setName('页码'),
  133. 'limit' => Validator::notEmpty()->intType()->setName('输出条数'),
  134. ]);
  135. $data = WithdrawBusiness::stream($param);
  136. } catch (\Throwable $exception) {
  137. return error($exception->getMessage());
  138. }
  139. return success($data['data'], '成功', 200, $data['total']);
  140. }
  141. #[Apidoc\Title("转账")]
  142. #[Apidoc\Url("api/withdraw/transfer.html")]
  143. #[Apidoc\Method("POST")]
  144. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  145. #[Apidoc\Param("money", type: "int", require: true, desc: "提现金额", mock: 10)]
  146. #[Apidoc\Param("account_number", type: "string", require: true, desc: "收款账号:转账时候传 ", mock: 1)]
  147. #[Apidoc\Param(name: "pay_characteristic", type: "int", require: true, desc: '支付通道标识', default: '1')]
  148. public function transfer(Request $request)
  149. {
  150. $param = $request->param_data;
  151. $param['user_data'] = $request->user_data;
  152. Db::beginTransaction();
  153. try {
  154. Validator::input($param, [
  155. 'money' => Validator::notEmpty()->Number()->setName('提现金额'),
  156. 'account_number' => Validator::notEmpty()->setName('转账账号'),
  157. ]);
  158. if (!empty(Redis::get('1212' . $request->user_data['id']))) {
  159. throw new \Exception('请不要连续操作');
  160. }
  161. Redis::setEx('1212' . $request->user_data['id'], 10, $request->user_data['id']);
  162. $name = Db::table('wa_user_identity')->where('uid', $request->user_data['id'])->value('name');
  163. if (empty($name)) {
  164. throw new \Exception('请实名后再进行转账!');
  165. }
  166. $accountUser = Db::table('wa_users')->where('mobile', $param['account_number'])->first();
  167. if (empty($accountUser)) {
  168. throw new \Exception('转账账号不存在!');
  169. }
  170. $userdata = Db::table('wa_users')->where('id', $param['user_data']['id'])->first();
  171. if (!empty($userdata) && $userdata->money_five >= $param['money']) {
  172. StreamBusiness::delStream($param['user_data']['id'], $param['money'], streamType17, moldType5, moldTypefild5, $param['user_data']['id']);
  173. StreamBusiness::addStream($accountUser->id, $param['money'], streamType17, moldType5, moldTypefild5, $param['user_data']['id']);
  174. } else {
  175. throw new \Exception('世界币不足!');
  176. }
  177. } catch (\Throwable $exception) {
  178. Db::rollBack();
  179. return error($exception->getMessage());
  180. }
  181. Db::commit();
  182. return success([], '转账成功');
  183. }
  184. #[Apidoc\Title("银行转账")]
  185. #[Apidoc\Url("api/withdraw/cardtransfer.html")]
  186. #[Apidoc\Method("POST")]
  187. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  188. #[Apidoc\Param("affiliated_bank", type: "string", require: true, desc: "所属银行 ", mock: 1)]
  189. #[Apidoc\Param("name", type: "int", require: true, desc: '姓名', default: '')]
  190. #[Apidoc\Param("card_number", type: "int", require: true, desc: '卡号', default: '')]
  191. #[Apidoc\Param("remarks", type: "int", require: true, desc: '附言', default: '')]
  192. public function cardtransfer(Request $request)
  193. {
  194. $param = $request->param_data;
  195. $param['user_data'] = $request->user_data;
  196. Db::beginTransaction();
  197. try {
  198. Validator::input($param, [
  199. 'name' => Validator::notEmpty()->setName('姓名'),
  200. 'goods_id' => Validator::notEmpty()->setName('id'),
  201. ]);
  202. $mygoodslist = Db::table('wa_my_goods')
  203. ->where('id', $param['goods_id'])
  204. ->first();
  205. if (!empty($mygoodslist)) {
  206. if ($mygoodslist->balance < 2000000) {
  207. throw new \Exception('转账额度不足,认证获取额度');
  208. }
  209. } else {
  210. throw new \Exception('转账额度不足,认证获取额度');
  211. }
  212. if (!empty(Redis::get('1212' . $request->user_data['id']))) {
  213. throw new \Exception('请不要连续操作');
  214. }
  215. Redis::setEx('1212' . $request->user_data['id'], 10, $request->user_data['id']);
  216. $userdata = Db::table('wa_users')->where('id', $param['user_data']['id'])->first();
  217. if (!empty($userdata) && 2000000 <= $param['user_data']['money_eighteen']) {
  218. $withdrawId = Db::table('wa_withdraw')->insertGetId([
  219. 'order_no' => date('YmdHis') . mt_rand(10000, 99999),
  220. 'user_id' => $param['user_data']['id'],
  221. 'money' => 2000000,
  222. 'type' => 18,
  223. 'affiliated_bank' => $param['affiliated_bank'],
  224. 'account_holder' => $param['name'],
  225. 'card_number' => $param['card_number'],
  226. 'name' => Arr::get($param, 'name', ''),
  227. 'identity' => Arr::get($param, 'identity', ''),
  228. 'img' => !empty(Arr::get($param, 'img', '')) ? implode(',', Arr::get($param, 'img', '')) : '',
  229. 'created_at' => date('Y-m-d H:i:s'),
  230. 'updated_at' => date('Y-m-d H:i:s'),
  231. 'status' => 1,
  232. 'remarks' => Arr::get($param, 'remarks', ''),
  233. ]);
  234. StreamBusiness::delStream($param['user_data']['id'], 2000000, streamType48, moldType18, moldTypefild18, $param['user_data']['id']);
  235. Db::table('wa_my_goods')
  236. ->where('id', $param['goods_id'])
  237. ->decrement('balance', 2000000);
  238. } else {
  239. throw new \Exception('卡内余额不足!');
  240. }
  241. } catch (\Throwable $exception) {
  242. Db::rollBack();
  243. return error($exception->getMessage());
  244. }
  245. Db::commit();
  246. return success([], '转账成功');
  247. }
  248. }