RepaymenController.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace app\controller;
  3. use app\business\StreamBusiness;
  4. use Illuminate\Support\Arr;
  5. use Respect\Validation\Validator;
  6. use support\Db;
  7. use support\Request;
  8. use hg\apidoc\annotation as Apidoc;
  9. use function Symfony\Component\String\s;
  10. // #[Apidoc\Title("还款")]
  11. // #[Apidoc\Group("User")]
  12. // #[Apidoc\Sort(5)]
  13. class RepaymenController
  14. {
  15. #[Apidoc\Title("还款")]
  16. #[Apidoc\Url("api/repayment.html")]
  17. #[Apidoc\Method("POST")]
  18. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  19. #[Apidoc\Param(name: "type", type: "string", require: true, desc: '账户类型 1信用卡 2=网络机构', default: '1')]
  20. #[Apidoc\Param(name: "account_holder", type: "string", require: true, desc: '姓名', default: '132')]
  21. #[Apidoc\Param(name: "money", type: "string", require: true, desc: '还款金额', default: '132')]
  22. #[Apidoc\Param(name: "card_number", type: "string", require: true, desc: '卡号', default: '132')]
  23. #[Apidoc\Param(name: "affiliated_bank", type: "string", require: true, desc: '所属银行', default: '132')]
  24. public function applyfor(Request $request)
  25. {
  26. $param = $request->param_data;
  27. $param['user_data'] = $request->user_data;
  28. Db::beginTransaction();
  29. try {
  30. Validator::input($param, [
  31. 'money' => Validator::notEmpty()->Number()->setName('还款金额'),
  32. 'type' => Validator::notEmpty()->intType()->setName('账户类型'),
  33. ]);
  34. if ($param['type'] == 1) {
  35. Validator::input($param, [
  36. 'account_holder' => Validator::notEmpty()->setName('持卡人姓名'),
  37. 'affiliated_bank' => Validator::notEmpty()->setName('所属银行'),
  38. 'card_number' => Validator::notEmpty()->setName('银行卡号'),
  39. ]);
  40. } elseif ($param['type'] == 2) {
  41. Validator::input($param, [
  42. 'card_number' => Validator::notEmpty()->setName('微信账号'),
  43. ]);
  44. } elseif ($param['type'] == 3) {
  45. Validator::input($param, [
  46. 'card_number' => Validator::notEmpty()->setName('支付宝账号'),
  47. ]);
  48. } else {
  49. throw new \Exception('非法操作');
  50. }
  51. $userlist = Db::table('wa_users')->where('id', $param['user_data']['id'])->first();
  52. if ($userlist->refund_num <= 0) {
  53. throw new \Exception('还款机会不足!');
  54. }
  55. $data = [
  56. 'user_id' => $request->user_data['id'],
  57. 'order_no' => date('YmdHis') . mt_rand(1000, 9999),
  58. 'money' => $param['money'],
  59. 'type' => $param['type'],
  60. 'affiliated_bank' => Arr::get($param, 'affiliated_bank'),
  61. 'account_holder' => Arr::get($param, 'account_holder'),
  62. 'card_number' => Arr::get($param, 'card_number'),
  63. 'created_at' => date('Y-m-d H:i:s', time()),
  64. 'updated_at' => date('Y-m-d H:i:s', time()),
  65. ];
  66. Db::table('wa_repayment')->insert($data);
  67. Db::table('wa_users')->where('id', $param['user_data']['id'])->decrement('refund_num', 1);
  68. } catch (\Throwable $exception) {
  69. Db::rollBack();
  70. return error($exception->getMessage());
  71. }
  72. Db::commit();
  73. return success($param, '还款成功');
  74. }
  75. #[Apidoc\Title("还款记录")]
  76. #[Apidoc\Url("api/repayment/stream.html")]
  77. #[Apidoc\Method("POST")]
  78. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  79. #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
  80. #[Apidoc\Param("limit", type: "int", require: true, desc: "输入条数", mock: 10)]
  81. #[Apidoc\Returned(name: "order_no", type: "string", require: true, desc: '订单号', default: '23213213213217182937291')]
  82. #[Apidoc\Returned(name: "money", type: "string", require: true, desc: '还款金额', default: '100.00')]
  83. #[Apidoc\Returned(name: "status", type: "string", require: true, desc: '提现状态 1 待审核 2打款中 3审核通过 4驳回', default: '1')]
  84. #[Apidoc\Returned(name: "type", type: "string", require: true, desc: '账户类型 1信用卡 2=网络机构', default: '1')]
  85. #[Apidoc\Returned(name: "account_holder", type: "string", require: true, desc: '开户人', default: '张三')]
  86. #[Apidoc\Returned(name: "affiliated_bank", type: "string", require: true, desc: '归属银行', default: '中国银行')]
  87. #[Apidoc\Returned(name: "card_number", type: "string", require: true, desc: '卡号|支付宝账号|微信账号', default: '12321321376763274682374681')]
  88. #[Apidoc\Returned(name: "created_at", type: "date", require: true, desc: '申请时间', default: '2023-05-20 23:49:49')]
  89. public function stream(Request $request)
  90. {
  91. $param = $request->param_data;
  92. $param['user_data'] = $request->user_data;
  93. try {
  94. Validator::input($param, [
  95. 'page' => Validator::notEmpty()->intType()->setName('页码'),
  96. 'limit' => Validator::notEmpty()->intType()->setName('输出条数'),
  97. ]);
  98. $data = Db::table('wa_repayment')
  99. ->where('user_id', $request->user_data['id'])
  100. ->where('status', '!=', 0)
  101. ->where(function ($query) use ($param) {
  102. if (Arr::get($param, 'type')) {
  103. $query->where('type', $param['type']);
  104. }
  105. })
  106. ->orderByDesc('id')
  107. ->paginate($param['limit'])->toArray();
  108. } catch (\Throwable $exception) {
  109. return error($exception->getMessage());
  110. }
  111. return success($data['data'], '成功', 200, $data['total']);
  112. }
  113. }