From ddeee8e9c2d9c8535212df7748fe90c270f981de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=94=E5=A7=AC=E6=A1=91?= Date: Fri, 30 Oct 2020 08:02:51 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Vnet=20edit=20new=20user=20Logic=20&=20?= =?UTF-8?q?=E9=87=8D=E7=BD=AE=E6=B5=81=E9=87=8F=20=E4=BD=99=E9=A2=9D?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/UserController.php | 2 +- app/Jobs/VNet/editUser.php | 25 ++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 99b6eb4a..f3c42a1a 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -245,7 +245,7 @@ class UserController extends Controller (new UserService($user))->updateCredit(-$renewCost); // 记录余额操作日志 - Helpers::addUserCreditLog($user->id, '', $user->credit, $user->credit - $renewCost, -1 * $renewCost, '用户自行重置流量'); + Helpers::addUserCreditLog($user->id, 0, $user->credit, $user->credit - $renewCost, -1 * $renewCost, '用户自行重置流量'); return Response::json(['status' => 'success', 'message' => '重置成功']); } diff --git a/app/Jobs/VNet/editUser.php b/app/Jobs/VNet/editUser.php index ae689227..a50f31ad 100644 --- a/app/Jobs/VNet/editUser.php +++ b/app/Jobs/VNet/editUser.php @@ -38,10 +38,33 @@ class editUser implements ShouldQueue public function handle(): void { foreach ($this->nodes as $node) { - $this->send(($node->server ?: $node->ip).':'.$node->push_port, $node->auth->secret); + $host = ($node->server ?: $node->ip).':'.$node->push_port; + $secret = $node->auth->secret; + + // 如果用户已存在节点内,则执行修改;否者为添加 + $list = $this->list($host, $secret); + if ($list && in_array($this->data['uid'], $list)) { + $this->send($host, $secret); + } else { + addUser::dispatchNow($this->data['uid'], $node); + } } } + private function list($host, $secret) + { + $request = Http::baseUrl($host)->timeout(15)->withHeaders(['secret' => $secret]); + + $response = $request->get('api/user/list'); + $message = $response->json(); + if ($message && $response->ok()) { + return Arr::pluck($message, 'uid'); + } + + Log::warning('【用户列表】获取失败(推送地址:'.$host.')'); + return false; + } + private function send($host, $secret): void { $request = Http::baseUrl($host)->timeout(15)->withHeaders(['secret' => $secret]);