From e558a97e91ae1b7768d238d6f182d2eae138ca6d Mon Sep 17 00:00:00 2001 From: augushong Date: Tue, 26 May 2026 18:28:42 +0800 Subject: [PATCH] =?UTF-8?q?fix(host):=20=E9=98=B2=E6=AD=A2=E4=B8=BB?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E9=87=8D=E5=A4=8D=E5=B9=B6=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20setMaster=20=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Clear all is_master flags before electing new master to prevent multiple master records. Fix setMaster annotation from @auth true to proper @NodeAnotation format so permission node is generated correctly. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- app/admin/controller/system/Host.php | 9 +++++++++ extend/base/common/service/HostServiceBase.php | 2 ++ 2 files changed, 11 insertions(+) diff --git a/app/admin/controller/system/Host.php b/app/admin/controller/system/Host.php index 33fcf47..22695a5 100644 --- a/app/admin/controller/system/Host.php +++ b/app/admin/controller/system/Host.php @@ -10,4 +10,13 @@ use base\admin\controller\system\HostBase; */ class Host extends HostBase { + /** + * 设置主节点. + * + * @\app\admin\service\annotation\NodeAnotation(title="设置主节点") + */ + public function setMaster() + { + return parent::setMaster(); + } } diff --git a/extend/base/common/service/HostServiceBase.php b/extend/base/common/service/HostServiceBase.php index 30f3f54..67be5ad 100644 --- a/extend/base/common/service/HostServiceBase.php +++ b/extend/base/common/service/HostServiceBase.php @@ -79,6 +79,8 @@ class HostServiceBase // 主节点自动选举:若无在线主节点,当前节点自动成为主节点 $master = SystemHost::where('is_master', 1)->where('status', 1)->find(); if (empty($master)) { + // 先清除所有旧的主节点标记(含已离线的),避免出现多个 is_master=1 + SystemHost::where('is_master', 1)->update(['is_master' => 0]); $host->is_master = 1; $host->save(); Log::info("节点 [{$nodeId}] 自动当选为主节点。");