From 954a078d63c99210cbcb3c3db4097b5240579831 Mon Sep 17 00:00:00 2001 From: lkddi Date: Sun, 1 Mar 2026 16:00:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=AD=98=E7=82=B9=E4=B8=8D=E5=86=8D=E8=A6=86=E7=9B=96=E6=9C=89?= =?UTF-8?q?=E8=81=8C=E5=8A=A1=E7=94=A8=E6=88=B7=E7=9A=84=E7=AD=89=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AutoSaveExp::processUser() 第3步升降级逻辑重构: - 有在职职务的用户:等级强制锁定为 position.level (防止自动存点按经验值降低/覆盖职务对应等级) - 管理员(>= superLevel):不变动 - 普通用户:照旧按经验自动升降级 同时在 refresh() 后加 load('activePosition.position') 确保职务关联数据已就绪。 --- app/Console/Commands/AutoSaveExp.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/AutoSaveExp.php b/app/Console/Commands/AutoSaveExp.php index 983bd4f..c2fd03d 100644 --- a/app/Console/Commands/AutoSaveExp.php +++ b/app/Console/Commands/AutoSaveExp.php @@ -164,12 +164,25 @@ class AutoSaveExp extends Command ); } $user->refresh(); // 刷新获取最新属性(service 已原子更新) + $user->load('activePosition.position'); // 确保职务及职位关联已加载 - // 3. 自动升降级(管理员不参与) + // 3. 自动升降级逻辑 + // - 有在职职务的用户:等级固定为职务对应等级,不随经验变化 + // - 管理员(>= superLevel):不变动 + // - 普通用户:按经验计算等级,支持升降级 $oldLevel = $user->user_level; $leveledUp = false; - if ($oldLevel < $superLevel) { + $activeUP = $user->activePosition; // 已在 refresh 后加载 + + if ($activeUP?->position) { + // 有在职职务:等级锁定为职务设定值,确保不被经验系统覆盖 + $requiredLevel = (int) $activeUP->position->level; + if ($requiredLevel > 0 && $user->user_level !== $requiredLevel) { + $user->user_level = $requiredLevel; + } + } elseif ($oldLevel < $superLevel) { + // 普通用户:按经验计算并更新等级 $newLevel = Sysparam::calculateLevel($user->exp_num); if ($newLevel !== $oldLevel && $newLevel < $superLevel) { $user->user_level = $newLevel;