$value) { if (is_string($value)) { $query->where($key, 'like', "%{$value}%"); } else { $query->where($key, $value); } } // 排序 ! empty($sortParams) && $query->orderBy($sortParams['orderBy'], $sortParams['orderDir']); $result = $query->paginate($pageParams['perPage'], ['*'], 'page', $pageParams['page']); return response()->json([ 'code' => 200, 'message' => 'success', 'data' => $result, ]); } catch (\Exception $e) { Log::error('获取用户列表失败:'.$e->getMessage()); return response()->json([ 'code' => 500, 'message' => '获取用户列表失败', ]); } } /** * 拉黑用户 * * @param array $data 包含 user_id 和 reason */ public function blockUser(array $data): array { try { DB::beginTransaction(); // 获取用户信息 $user = MemberUser::findOrFail($data['user_id']); // 验证用户当前状态 abort_if($user->state === UserStatus::CLOSE->value, 422, '用户已经被拉黑'); // 更新用户状态为拉黑 $user->state = UserStatus::CLOSE->value; $user->save(); DB::commit(); return [ 'code' => 200, 'message' => '拉黑成功', 'data' => null, ]; } catch (\Exception $e) { DB::rollBack(); Log::error('拉黑用户失败', [ 'user_id' => $data['user_id'], 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), ]); throw $e; } } /** * 冻结用户余额 * * @param array $data 包含 user_id, amount 和 reason */ public function freezeUserBalance(array $data): array { try { DB::beginTransaction(); // 获取用户及其钱包信息 $user = MemberUser::with('wallet')->findOrFail($data['user_id']); $wallet = $user->wallet()->lockForUpdate()->firstOrFail(); // 验证可用余额是否足够 abort_if($wallet->available_amount < $data['amount'], 422, '用户可用余额不足'); // 更新钱包余额 $wallet->available_amount -= $data['amount']; $wallet->frozen_amount += $data['amount']; $wallet->save(); // 记录冻结流水 WalletTransRecord::create([ 'user_id' => $data['user_id'], 'type' => TransactionType::FREEZE->value, 'amount' => $data['amount'], 'before_amount' => $wallet->available_amount + $data['amount'], 'after_amount' => $wallet->available_amount, 'operator_id' => Auth::user()->id, 'operator_type' => 'admin', 'remark' => $data['reason'], 'state' => TransactionStatus::SUCCESS->value, ]); DB::commit(); return [ 'code' => 200, 'message' => '冻结成功', 'data' => null, ]; } catch (\Exception $e) { DB::rollBack(); Log::error('冻结用户余额失败', [ 'user_id' => $data['user_id'], 'amount' => $data['amount'], 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), ]); throw $e; } } /** * 记录用户不良行为 * * @param array $data 包含 user_id, type, title, description, evidence(可选), related_order_id(可选) */ public function recordBadBehavior(array $data): array { try { DB::beginTransaction(); // 验证用户是否存在 $user = MemberUser::findOrFail($data['user_id']); // 创建不良行为记录 MemberBadBehavior::create([ 'user_id' => $data['user_id'], 'type' => $data['type'], 'title' => $data['title'], 'description' => $data['description'], 'evidence' => $data['evidence'] ?? null, 'related_order_id' => $data['related_order_id'] ?? null, 'operator_id' => Auth::user()->id, 'operator_type' => 'admin', 'occurred_at' => $data['occurred_at'] ?? now(), ]); DB::commit(); return [ 'code' => 200, 'message' => '记录成功', 'data' => null, ]; } catch (\Exception $e) { DB::rollBack(); Log::error('记录用户不良行为失败', [ 'user_id' => $data['user_id'], 'type' => $data['type'], 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), ]); throw $e; } } }