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;