123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- <?php
- namespace App\Http\Controllers\Admin;
- use App\Filters\UserFilter;
- use App\Http\Requests\UserRequest;
- use App\Http\Resources\UserResource;
- use App\Http\Resources\WalletResource;
- use App\Models\AdminUser;
- use App\Models\AdminUserArea;
- use App\Models\Area;
- use App\Models\DepositOrder;
- use App\Models\DepositRefund;
- use App\Models\Order;
- use App\Models\OrderRent;
- use App\Models\User;
- use App\Models\WalletLog;
- use App\Utils\Admin;
- use Illuminate\Http\Request;
- use App\Http\Controllers\Controller;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- /**
- * Class UserController
- * @package App\Http\Controllers\Admin
- */
- class UserController extends Controller
- {
- //
- /**
- * index 用户列表
- *
- * @param UserFilter $filter
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function index(UserFilter $filter)
- {
- $admin_id = Admin::user()->id;
- $users = User::query()
- ->filter($filter)
- ->where('is_register', User::REGISTER_OK)
- ->orderByDesc('id');
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $users = $users->whereIn('register_area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id->area_id ?? 0;
- $users = $users->where('register_area_id', $area_id);
- }
- }
- $users = $users->paginate();
- return $this->ok(UserResource::collection($users));
- }
- /**
- * update 更新用户信息
- *
- * @param UserRequest $request
- * @param User $user
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function update(UserRequest $request, User $user)
- {
- $inputs = $request->validated();
- $user->update($inputs);
- return $this->created(UserResource::make($user));
- }
- /**
- * userNumber总用户数 总有效用户数
- *
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function userNumber()
- {
- $admin_id = Admin::user()->id;
- $data['user_total'] = User::query();
- $data['user_true_total'] = User::query()->where('is_card_certified', User::CARD_OK);
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $data['user_total'] = $data['user_total']->whereIn('register_area_id', $area_ids);
- $data['user_true_total'] = $data['user_true_total']->whereIn('register_area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id->area_id ?? 0;
- $data['user_total'] = $data['user_total']->where('register_area_id', $area_id);
- $data['user_true_total'] = $data['user_true_total']->where('register_area_id', $area_id);
- }
- }
- $data['user_total'] = $data['user_total']->count('id');
- $data['user_true_total'] = $data['user_true_total']->count('id');
- return $this->ok($data);
- }
- /**
- * moneySum 总充值数 总余额数
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function moneySum()
- {
- $admin_id = Admin::user()->id;
- $data['recharge_total'] = User::query();
- $data['wallet_money_total'] = User::query();
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $data['recharge_total'] = $data['recharge_total']->whereIn('register_area_id', $area_ids);
- $data['wallet_money_total'] = $data['wallet_money_total']->whereIn('register_area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id->area_id ?? 0;
- $data['recharge_total'] = $data['recharge_total']->where('register_area_id', $area_id);
- $data['wallet_money_total'] = $data['wallet_money_total']->where('register_area_id', $area_id);
- }
- }
- $data['recharge_total'] = $data['recharge_total']->sum('recharge');
- $data['wallet_money_total'] = $data['wallet_money_total']->sum('wallet_money');
- return $this->ok($data);
- }
- /**
- * wallet 钱包列表
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse *@author Fx
- *
- */
- public function wallet(Request $request)
- {
- $user_id = $request->get('user_id') ?? '';
- if (empty($user_id)) return $this->error('参数错误');
- $wallet = WalletLog::query()
- ->where('user_id', $user_id)
- ->orderByDesc('id')
- ->paginate();
- return $this->ok(WalletResource::collection($wallet));
- }
- /**
- * changeStatus 改变用户status
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse *@author Fx
- *
- */
- public function changeStatus(Request $request)
- {
- $user_id = $request->get('user_id') ?? '';
- $status = $request->get('status') ?? 0;
- $is_card_certified = $request->get('is_card_certified') ?? 0;
- $is_bind_mobile = $request->get('is_bind_mobile') ?? 0;
- $is_match_ride_age = $request->get('is_match_ride_age') ?? 0;
- $truename = $request->get('truename') ?? '';
- $card_id = $request->get('card_id') ?? '';
- $mobile = $request->get('mobile') ?? '';
- // $reason = $request->get('reason') ?? ''; //封号原因
- if (empty($user_id)) return $this->error('参数错误');
- try {
- $bool = User::query()->where('id', $user_id)->update([
- 'truename' => $truename,
- 'card_id' => $card_id,
- 'mobile' => $mobile,
- 'status' => $status,
- 'is_bind_mobile' => $is_bind_mobile,
- 'is_card_certified' => $is_card_certified,
- 'is_match_ride_age' => $is_match_ride_age,
- ]);
- } catch (\Exception $e) {
- Log::info($e->getMessage());
- return $this->error("修改失败,请联系管理员");
- }
- if ($bool) {
- return $this->created();
- } else {
- return $this->error("修改失败,请联系管理员");
- }
- }
- /**
- * returnDeposit 退还押金
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function returnDeposit(Request $request)
- {
- $user_id = $request->get('user_id') ?? '';
- if (empty($user_id)) return $this->error('参数错误');
- $user = User::find($user_id);
- if (empty($user)) return $this->error('找不到该用户信息');
- // 此验证暂时不验证 防止交两次押金无法退还
- // if($user->is_deposit == User::DEPOSIT_NO) return $this->error('此用户还没缴纳押金');
- $order = Order::query()->where('user_id', $user_id)
- ->whereIn('status', [Order::STATUS_RIDE_BIKE, Order::STATUS_PAUSE_BIKE, Order::STATUS_CLOSE_BIKE])
- ->first();
- if (!empty($order)) return $this->error('该用户还有未完成得订单');
- $orderRent = OrderRent::query()->where('user_id', $user_id)
- ->whereIn('status', [OrderRent::STATUS_RENT_BIKE, OrderRent::STATUS_CLOSE_RENT_BIKE])
- ->first();
- if (!empty($orderRent)) return $this->error('该用户还有未完成得日租订单');
- $depositOrder = DepositOrder::where('user_id', $user_id)->where('pay_status', DepositOrder::PAY_STATUS_OK)->where('is_refund', DepositOrder::REFUND_NO)->orderBy('id', 'desc')->first();
- if (empty($depositOrder)) return $this->error('此用户还没缴纳押金');
- if (DepositRefund::where('deposit_id', $depositOrder->id)->where('pay_status', DepositRefund::PAY_STATUS_NO)->exists()) {
- return $this->error('您已提交,请耐心等待审核');
- }
- try {
- DB::beginTransaction();
- // 1.添加记录
- $refund = DepositRefund::firstOrCreate([
- 'deposit_id' => $depositOrder->id,
- 'user_id' => $user_id,
- ], [
- 'no' => DepositRefund::makeNo(),
- 'money' => $depositOrder->pay_money,
- 'type' => DepositRefund::TYPE_USER,
- 'is_check_status' => DepositRefund::CHECK_STATUS_OK,
- 'area_id' => $depositOrder->area_id,
- 'pay_type' => $depositOrder->pay_type,
- 'pay_money' => $depositOrder->pay_money,
- 'pay_status' => DepositRefund::PAY_STATUS_NO
- ]);
- //2.修改用户押金
- User::where('id', $user_id)->update([
- 'deposit_money' => 0,
- 'is_deposit' => User::DEPOSIT_NO
- ]);
- //3.微信退款
- $payment = app('wechat.payment'); // 微信支付
- $result = $payment->refund->byOutTradeNumber($depositOrder->no, $refund->no, wechat_fee($depositOrder->pay_money), wechat_fee($refund->pay_money), [
- // 可在此处传入其他参数,详细参数见微信支付文档
- 'refund_desc' => '退押金',
- 'notify_url' => config('wechat.payment.refund_deposit_notify_url')
- ]);
- $refund->save();
- if ($result['return_code'] === 'SUCCESS') {
- DB::commit();
- return $this->ok('退还成功');
- } else {
- Log::error('微信退款接口失败');
- DB::rollBack();
- return $this->error('退还失败,请联系管理员');
- }
- } catch (\Exception $e) {
- Log::error($e->getMessage());
- DB::rollBack();
- return $this->error('退还失败,请联系管理员');
- }
- }
- }
|