Browse Source

Fix Vnet edit new user Logic & 重置流量 余额操作日志错误

兔姬桑 4 years ago
parent
commit
ddeee8e9c2
2 changed files with 25 additions and 2 deletions
  1. 1 1
      app/Http/Controllers/UserController.php
  2. 24 1
      app/Jobs/VNet/editUser.php

+ 1 - 1
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' => '重置成功']);
     }

+ 24 - 1
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]);