'task-achievement-conditions', 'task-category' => 'task-categories', 'task-completion-log' => 'task-completion-logs', 'task-condition' => 'task-conditions', 'task' => 'tasks', 'task-cost' => 'task-costs', 'task-cost-log' => 'task-cost-logs', 'task-reset-log' => 'task-reset-logs', 'task-reward' => 'task-rewards', 'task-reward-log' => 'task-reward-logs', 'task-user-progress' => 'task-user-progresses', 'task-user-task' => 'task-user-tasks' ]; /** * Execute the console command. * * @return int */ public function handle() { $this->info("开始修复任务相关的菜单项..."); $deletedCount = 0; // 获取所有任务相关的菜单项 $taskMenus = AdminMenu::where('uri', 'like', 'task%') ->orWhere('uri', 'like', 'tasks%') ->get(); $this->info("找到 {$taskMenus->count()} 个任务相关的菜单项"); // 按URI分组 $menusByUri = []; foreach ($taskMenus as $menu) { $uri = $menu->uri; // 标准化URI foreach ($this->taskUriMap as $singular => $plural) { if ($uri === $singular) { $uri = $plural; break; } } if (!isset($menusByUri[$uri])) { $menusByUri[$uri] = []; } $menusByUri[$uri][] = $menu; } // 处理每组菜单项 foreach ($menusByUri as $uri => $menus) { if (count($menus) > 1) { $this->info("发现重复的菜单项: URI = {$uri}"); // 显示所有重复项 foreach ($menus as $index => $menu) { $this->info(" [{$index}] ID = {$menu->id}, 标题 = {$menu->title}, URI = {$menu->uri}, 父ID = {$menu->parent_id}"); } // 查找中文菜单项 $chineseMenu = null; $englishMenus = []; foreach ($menus as $menu) { // 检查标题是否包含中文字符 if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $menu->title)) { $chineseMenu = $menu; } else { $englishMenus[] = $menu; } } if ($chineseMenu) { $this->info(" - 保留中文菜单项: ID = {$chineseMenu->id}, 标题 = {$chineseMenu->title}"); // 标准化URI $standardUri = $uri; foreach ($this->taskUriMap as $singular => $plural) { if ($chineseMenu->uri === $singular) { $standardUri = $plural; $chineseMenu->uri = $standardUri; $chineseMenu->save(); $this->info(" - 更新URI: {$singular} -> {$standardUri}"); break; } } foreach ($englishMenus as $menu) { // 获取子菜单 $childMenus = AdminMenu::where('parent_id', $menu->id)->get(); // 更新子菜单的父ID foreach ($childMenus as $childMenu) { $childMenu->parent_id = $chineseMenu->id; $childMenu->save(); $this->info(" - 更新子菜单: ID = {$childMenu->id}, 标题 = {$childMenu->title}, 新父ID = {$chineseMenu->id}"); } // 删除菜单项 $menu->delete(); $this->info(" - 删除英文菜单项: ID = {$menu->id}, 标题 = {$menu->title}"); $deletedCount++; } } else { $this->info(" - 未找到中文菜单项,保留第一个菜单项: ID = {$menus[0]->id}, 标题 = {$menus[0]->title}"); // 标准化URI $standardUri = $uri; foreach ($this->taskUriMap as $singular => $plural) { if ($menus[0]->uri === $singular) { $standardUri = $plural; $menus[0]->uri = $standardUri; $menus[0]->save(); $this->info(" - 更新URI: {$singular} -> {$standardUri}"); break; } } for ($i = 1; $i < count($menus); $i++) { // 获取子菜单 $childMenus = AdminMenu::where('parent_id', $menus[$i]->id)->get(); // 更新子菜单的父ID foreach ($childMenus as $childMenu) { $childMenu->parent_id = $menus[0]->id; $childMenu->save(); $this->info(" - 更新子菜单: ID = {$childMenu->id}, 标题 = {$childMenu->title}, 新父ID = {$menus[0]->id}"); } // 删除菜单项 $menus[$i]->delete(); $this->info(" - 删除重复菜单项: ID = {$menus[$i]->id}, 标题 = {$menus[$i]->title}"); $deletedCount++; } } } else { // 标准化URI $menu = $menus[0]; $standardUri = $uri; foreach ($this->taskUriMap as $singular => $plural) { if ($menu->uri === $singular) { $standardUri = $plural; $menu->uri = $standardUri; $menu->save(); $this->info(" - 更新URI: {$singular} -> {$standardUri}"); break; } } } } $this->info("\n已删除 {$deletedCount} 个重复的菜单项"); return 0; } }