UserController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Filters\UserFilter;
  4. use App\Http\Requests\UserRequest;
  5. use App\Http\Resources\UserResource;
  6. use App\Http\Resources\WalletResource;
  7. use App\Models\AdminUser;
  8. use App\Models\AdminUserArea;
  9. use App\Models\Area;
  10. use App\Models\DepositOrder;
  11. use App\Models\DepositRefund;
  12. use App\Models\Order;
  13. use App\Models\OrderRent;
  14. use App\Models\User;
  15. use App\Models\WalletLog;
  16. use App\Utils\Admin;
  17. use Illuminate\Http\Request;
  18. use App\Http\Controllers\Controller;
  19. use Illuminate\Support\Facades\DB;
  20. use Illuminate\Support\Facades\Log;
  21. /**
  22. * Class UserController
  23. * @package App\Http\Controllers\Admin
  24. */
  25. class UserController extends Controller
  26. {
  27. //
  28. /**
  29. * index 用户列表
  30. *
  31. * @param UserFilter $filter
  32. * @return \Illuminate\Http\JsonResponse
  33. * @author Fx
  34. *
  35. */
  36. public function index(UserFilter $filter)
  37. {
  38. $admin_id = Admin::user()->id;
  39. $users = User::query()
  40. ->filter($filter)
  41. ->where('is_register', User::REGISTER_OK)
  42. ->orderByDesc('id');
  43. if (!Admin::isAdministrator()) {
  44. $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
  45. if (count($area_ids) !== 0) {
  46. $users = $users->whereIn('register_area_id', $area_ids);
  47. } else {
  48. $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
  49. $area_id = $area_id->area_id ?? 0;
  50. $users = $users->where('register_area_id', $area_id);
  51. }
  52. }
  53. $users = $users->paginate();
  54. return $this->ok(UserResource::collection($users));
  55. }
  56. /**
  57. * update 更新用户信息
  58. *
  59. * @param UserRequest $request
  60. * @param User $user
  61. * @return \Illuminate\Http\JsonResponse
  62. * @author Fx
  63. *
  64. */
  65. public function update(UserRequest $request, User $user)
  66. {
  67. $inputs = $request->validated();
  68. $user->update($inputs);
  69. return $this->created(UserResource::make($user));
  70. }
  71. /**
  72. * userNumber总用户数 总有效用户数
  73. *
  74. * @return \Illuminate\Http\JsonResponse
  75. * @author Fx
  76. *
  77. */
  78. public function userNumber()
  79. {
  80. $admin_id = Admin::user()->id;
  81. $data['user_total'] = User::query();
  82. $data['user_true_total'] = User::query()->where('is_card_certified', User::CARD_OK);
  83. if (!Admin::isAdministrator()) {
  84. $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
  85. if (count($area_ids) !== 0) {
  86. $data['user_total'] = $data['user_total']->whereIn('register_area_id', $area_ids);
  87. $data['user_true_total'] = $data['user_true_total']->whereIn('register_area_id', $area_ids);
  88. } else {
  89. $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
  90. $area_id = $area_id->area_id ?? 0;
  91. $data['user_total'] = $data['user_total']->where('register_area_id', $area_id);
  92. $data['user_true_total'] = $data['user_true_total']->where('register_area_id', $area_id);
  93. }
  94. }
  95. $data['user_total'] = $data['user_total']->count('id');
  96. $data['user_true_total'] = $data['user_true_total']->count('id');
  97. return $this->ok($data);
  98. }
  99. /**
  100. * moneySum 总充值数 总余额数
  101. * @return \Illuminate\Http\JsonResponse
  102. * @author Fx
  103. *
  104. */
  105. public function moneySum()
  106. {
  107. $admin_id = Admin::user()->id;
  108. $data['recharge_total'] = User::query();
  109. $data['wallet_money_total'] = User::query();
  110. if (!Admin::isAdministrator()) {
  111. $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
  112. if (count($area_ids) !== 0) {
  113. $data['recharge_total'] = $data['recharge_total']->whereIn('register_area_id', $area_ids);
  114. $data['wallet_money_total'] = $data['wallet_money_total']->whereIn('register_area_id', $area_ids);
  115. } else {
  116. $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
  117. $area_id = $area_id->area_id ?? 0;
  118. $data['recharge_total'] = $data['recharge_total']->where('register_area_id', $area_id);
  119. $data['wallet_money_total'] = $data['wallet_money_total']->where('register_area_id', $area_id);
  120. }
  121. }
  122. $data['recharge_total'] = $data['recharge_total']->sum('recharge');
  123. $data['wallet_money_total'] = $data['wallet_money_total']->sum('wallet_money');
  124. return $this->ok($data);
  125. }
  126. /**
  127. * wallet 钱包列表
  128. *
  129. * @param Request $request
  130. * @return \Illuminate\Http\JsonResponse *@author Fx
  131. *
  132. */
  133. public function wallet(Request $request)
  134. {
  135. $user_id = $request->get('user_id') ?? '';
  136. if (empty($user_id)) return $this->error('参数错误');
  137. $wallet = WalletLog::query()
  138. ->where('user_id', $user_id)
  139. ->orderByDesc('id')
  140. ->paginate();
  141. return $this->ok(WalletResource::collection($wallet));
  142. }
  143. /**
  144. * changeStatus 改变用户status
  145. *
  146. * @param Request $request
  147. * @return \Illuminate\Http\JsonResponse *@author Fx
  148. *
  149. */
  150. public function changeStatus(Request $request)
  151. {
  152. $user_id = $request->get('user_id') ?? '';
  153. $status = $request->get('status') ?? 0;
  154. $is_card_certified = $request->get('is_card_certified') ?? 0;
  155. $is_bind_mobile = $request->get('is_bind_mobile') ?? 0;
  156. $is_match_ride_age = $request->get('is_match_ride_age') ?? 0;
  157. $truename = $request->get('truename') ?? '';
  158. $card_id = $request->get('card_id') ?? '';
  159. $mobile = $request->get('mobile') ?? '';
  160. // $reason = $request->get('reason') ?? ''; //封号原因
  161. if (empty($user_id)) return $this->error('参数错误');
  162. try {
  163. $bool = User::query()->where('id', $user_id)->update([
  164. 'truename' => $truename,
  165. 'card_id' => $card_id,
  166. 'mobile' => $mobile,
  167. 'status' => $status,
  168. 'is_bind_mobile' => $is_bind_mobile,
  169. 'is_card_certified' => $is_card_certified,
  170. 'is_match_ride_age' => $is_match_ride_age,
  171. ]);
  172. } catch (\Exception $e) {
  173. Log::info($e->getMessage());
  174. return $this->error("修改失败,请联系管理员");
  175. }
  176. if ($bool) {
  177. return $this->created();
  178. } else {
  179. return $this->error("修改失败,请联系管理员");
  180. }
  181. }
  182. /**
  183. * returnDeposit 退还押金
  184. *
  185. * @param Request $request
  186. * @return \Illuminate\Http\JsonResponse
  187. * @author Fx
  188. *
  189. */
  190. public function returnDeposit(Request $request)
  191. {
  192. $user_id = $request->get('user_id') ?? '';
  193. if (empty($user_id)) return $this->error('参数错误');
  194. $user = User::find($user_id);
  195. if (empty($user)) return $this->error('找不到该用户信息');
  196. // 此验证暂时不验证 防止交两次押金无法退还
  197. // if($user->is_deposit == User::DEPOSIT_NO) return $this->error('此用户还没缴纳押金');
  198. $order = Order::query()->where('user_id', $user_id)
  199. ->whereIn('status', [Order::STATUS_RIDE_BIKE, Order::STATUS_PAUSE_BIKE, Order::STATUS_CLOSE_BIKE])
  200. ->first();
  201. if (!empty($order)) return $this->error('该用户还有未完成得订单');
  202. $orderRent = OrderRent::query()->where('user_id', $user_id)
  203. ->whereIn('status', [OrderRent::STATUS_RENT_BIKE, OrderRent::STATUS_CLOSE_RENT_BIKE])
  204. ->first();
  205. if (!empty($orderRent)) return $this->error('该用户还有未完成得日租订单');
  206. $depositOrder = DepositOrder::where('user_id', $user_id)->where('pay_status', DepositOrder::PAY_STATUS_OK)->where('is_refund', DepositOrder::REFUND_NO)->orderBy('id', 'desc')->first();
  207. if (empty($depositOrder)) return $this->error('此用户还没缴纳押金');
  208. if (DepositRefund::where('deposit_id', $depositOrder->id)->where('pay_status', DepositRefund::PAY_STATUS_NO)->exists()) {
  209. return $this->error('您已提交,请耐心等待审核');
  210. }
  211. try {
  212. DB::beginTransaction();
  213. // 1.添加记录
  214. $refund = DepositRefund::firstOrCreate([
  215. 'deposit_id' => $depositOrder->id,
  216. 'user_id' => $user_id,
  217. ], [
  218. 'no' => DepositRefund::makeNo(),
  219. 'money' => $depositOrder->pay_money,
  220. 'type' => DepositRefund::TYPE_USER,
  221. 'is_check_status' => DepositRefund::CHECK_STATUS_OK,
  222. 'area_id' => $depositOrder->area_id,
  223. 'pay_type' => $depositOrder->pay_type,
  224. 'pay_money' => $depositOrder->pay_money,
  225. 'pay_status' => DepositRefund::PAY_STATUS_NO
  226. ]);
  227. //2.修改用户押金
  228. User::where('id', $user_id)->update([
  229. 'deposit_money' => 0,
  230. 'is_deposit' => User::DEPOSIT_NO
  231. ]);
  232. //3.微信退款
  233. $payment = app('wechat.payment'); // 微信支付
  234. $result = $payment->refund->byOutTradeNumber($depositOrder->no, $refund->no, wechat_fee($depositOrder->pay_money), wechat_fee($refund->pay_money), [
  235. // 可在此处传入其他参数,详细参数见微信支付文档
  236. 'refund_desc' => '退押金',
  237. 'notify_url' => config('wechat.payment.refund_deposit_notify_url')
  238. ]);
  239. $refund->save();
  240. if ($result['return_code'] === 'SUCCESS') {
  241. DB::commit();
  242. return $this->ok('退还成功');
  243. } else {
  244. Log::error('微信退款接口失败');
  245. DB::rollBack();
  246. return $this->error('退还失败,请联系管理员');
  247. }
  248. } catch (\Exception $e) {
  249. Log::error($e->getMessage());
  250. DB::rollBack();
  251. return $this->error('退还失败,请联系管理员');
  252. }
  253. }
  254. }