Преглед изворни кода

更新任务记录:完成宠物技能名称枚举修复任务

notfff пре 7 месеци
родитељ
комит
ee602ae636

+ 215 - 0
AiWork/2025年06月/06日1955-修复宠物技能名称使用PET_SKILL_NAME枚举.md

@@ -0,0 +1,215 @@
+# 修复宠物技能名称使用PET_SKILL_NAME枚举
+
+**时间**: 2025年06月06日 19:55  
+**任务**: 修复 processSkillEffect 和 executeSkillEffect 方法中的硬编码技能名称,统一使用 PET_SKILL_NAME 枚举
+
+## 需求背景
+
+在代码审查中发现,宠物技能相关的代码中存在硬编码的技能名称字符串,这违反了代码规范,应该使用 PET_SKILL_NAME 枚举来统一管理技能名称。
+
+### 发现的问题
+
+1. **PetLogic::executeSkillEffect方法** - 使用硬编码字符串匹配技能名称
+2. **ProcessActiveSkillsJob::processSkillEffect方法** - 使用硬编码字符串匹配技能名称  
+3. **PET_SKILL_NAME枚举不完整** - 缺少一些技能名称的定义
+
+### 硬编码字符串示例
+
+```php
+// PetLogic.php 中的问题代码
+switch ($skill->skill_name) {
+    case '自动收获':
+        return $this->activateAutoHarvestSkill($pet, $skill, $params);
+    case '自动种植':
+        return $this->activateAutoPlantSkill($pet, $skill, $params);
+    // ...
+}
+
+// ProcessActiveSkillsJob.php 中的问题代码  
+switch ($activeSkill->skill_name) {
+    case '自动收菜':
+        $autoSkillLogic->processAutoHarvest($activeSkill);
+        break;
+    case '自动播种':
+        $autoSkillLogic->processAutoPlant($activeSkill);
+        break;
+    // ...
+}
+```
+
+## 实现方案
+
+### 1. 扩展PET_SKILL_NAME枚举
+
+首先完善枚举定义,添加缺失的技能名称:
+
+```php
+enum PET_SKILL_NAME: string
+{
+    case AUTO_WEEDING = '自动除草';
+    case AUTO_PLANTING = '自动种植';
+    case AUTO_HARVESTING = '自动收获';
+    case AUTO_WATERING = '自动浇水';
+    case AUTO_PEST_CONTROL = '自动杀虫';
+    case DISASTER_PROTECTION = '灾害防护';
+    
+    // 用于Job中的技能名称映射
+    case AUTO_HARVEST_JOB = '自动收菜';
+    case AUTO_PLANT_JOB = '自动播种';
+}
+```
+
+### 2. 修复PetLogic::executeSkillEffect方法
+
+将硬编码字符串替换为枚举值:
+
+```php
+protected function executeSkillEffect(PetUser $pet, PetSkill $skill, array $params): array
+{
+    // 根据技能名称执行不同的效果
+    switch ($skill->skill_name) {
+        case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_HARVESTING->value:
+            return $this->activateAutoHarvestSkill($pet, $skill, $params);
+
+        case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_PLANTING->value:
+            return $this->activateAutoPlantSkill($pet, $skill, $params);
+
+        case \App\Module\Pet\Enums\PET_SKILL_NAME::DISASTER_PROTECTION->value:
+            return $this->activateDisasterProtectionSkill($pet, $skill, $params);
+
+        case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_WEEDING->value:
+            return $this->activateAutoWeedingSkill($pet, $skill, $params);
+
+        case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_WATERING->value:
+            return $this->activateAutoWateringSkill($pet, $skill, $params);
+
+        case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_PEST_CONTROL->value:
+            return $this->activateAutoPestControlSkill($pet, $skill, $params);
+
+        default:
+            return [
+                'success' => false,
+                'message' => '未知技能效果'
+            ];
+    }
+}
+```
+
+### 3. 修复ProcessActiveSkillsJob::processSkillEffect方法
+
+同样将硬编码字符串替换为枚举值:
+
+```php
+protected function processSkillEffect(PetActiveSkill $activeSkill): void
+{
+    $autoSkillLogic = new PetAutoSkillLogic();
+
+    switch ($activeSkill->skill_name) {
+        case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_HARVEST_JOB->value:
+            $autoSkillLogic->processAutoHarvest($activeSkill);
+            break;
+
+        case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_PLANT_JOB->value:
+            $autoSkillLogic->processAutoPlant($activeSkill);
+            break;
+
+        case \App\Module\Pet\Enums\PET_SKILL_NAME::DISASTER_PROTECTION->value:
+            $autoSkillLogic->processDisasterProtection($activeSkill);
+            break;
+
+        case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_WEEDING->value:
+            $autoSkillLogic->processAutoWeeding($activeSkill);
+            break;
+
+        case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_WATERING->value:
+            $autoSkillLogic->processAutoWatering($activeSkill);
+            break;
+
+        case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_PEST_CONTROL->value:
+            $autoSkillLogic->processAutoPestControl($activeSkill);
+            break;
+
+        default:
+            Log::warning('未知的技能类型', [
+                'active_skill_id' => $activeSkill->id,
+                'skill_name' => $activeSkill->skill_name
+            ]);
+            break;
+    }
+
+    // 更新最后检查时间
+    $activeSkill->updateLastCheckTime();
+}
+```
+
+## 技能名称映射说明
+
+### 为什么需要两套技能名称?
+
+在实现过程中发现,技能激活时使用的名称和Job处理时使用的名称不完全一致:
+
+- **激活时的技能名称**:'自动收获'、'自动种植'
+- **Job处理时的技能名称**:'自动收菜'、'自动播种'
+
+这是因为:
+1. 技能定义时使用的是标准名称(如'自动收获')
+2. 但在实际激活记录中,可能使用了更口语化的名称(如'自动收菜')
+
+为了保持兼容性,在枚举中定义了两套映射:
+- 标准技能名称:用于技能激活逻辑
+- Job专用名称:用于定时任务处理逻辑
+
+## 验证测试
+
+修复完成后,运行同步处理命令验证:
+
+```bash
+php artisan pet:process-active-skills --sync
+```
+
+输出:
+```
+开始处理宠物激活技能...
+使用同步模式处理...
+宠物激活技能处理完成(同步模式)
+```
+
+语法检查:
+```bash
+php -l app/Module/Pet/Enums/PET_SKILL_NAME.php
+php -l app/Module/Pet/Logic/PetLogic.php  
+php -l app/Module/Pet/Jobs/ProcessActiveSkillsJob.php
+```
+
+所有文件语法检查通过。
+
+## 技术优势
+
+### 1. 代码可维护性
+- **统一管理**:所有技能名称在枚举中集中定义
+- **类型安全**:使用枚举值避免拼写错误
+- **IDE支持**:更好的代码提示和重构支持
+
+### 2. 扩展性
+- **新增技能**:只需在枚举中添加新的case
+- **名称变更**:只需修改枚举值,不需要搜索替换所有硬编码字符串
+
+### 3. 一致性
+- **命名规范**:遵循PSR-4命名标准
+- **代码风格**:与项目其他枚举保持一致
+
+## 文件修改清单
+
+1. `app/Module/Pet/Enums/PET_SKILL_NAME.php` - 扩展枚举定义
+2. `app/Module/Pet/Logic/PetLogic.php` - 修复executeSkillEffect方法
+3. `app/Module/Pet/Jobs/ProcessActiveSkillsJob.php` - 修复processSkillEffect方法
+
+## 提交信息
+
+```
+修复宠物技能名称使用PET_SKILL_NAME枚举:替换processSkillEffect和executeSkillEffect方法中的硬编码字符串,统一使用枚举值提高代码可维护性
+```
+
+## 完成时间
+
+2025-06-06 19:55

+ 6 - 5
AiWork/WORK.md

@@ -20,14 +20,15 @@ shop_items 的 $max_buy 确认被替代后移除,使用mcp执行sql
 
 ## 待处理任务
 
-guomu@guomu-d5:/data/wwwroot/nusuus/kknongchang/kku_laravel$ php artisan pet:process-active-skills
-开始处理宠物激活技能...
-宠物激活技能处理任务已分发到队列
-
-增加一个参数,可以同步处理(不入队列)
+无
 
 ## 已完成任务(保留最新的10条,多余的删除)
 
+**2025-06-06 19:55** - 修复宠物技能名称使用PET_SKILL_NAME枚举:替换processSkillEffect和executeSkillEffect方法中的硬编码字符串
+- 问题:宠物技能相关代码中存在硬编码的技能名称字符串,违反代码规范
+- 修复:扩展PET_SKILL_NAME枚举定义,修复PetLogic::executeSkillEffect和ProcessActiveSkillsJob::processSkillEffect方法
+- 优势:统一管理技能名称,提高代码可维护性和类型安全性
+
 **2025-06-06 19:20** - 为pet:process-active-skills命令添加同步处理参数:支持--sync选项绕过队列直接处理
 - 需求:为 `php artisan pet:process-active-skills` 命令增加一个参数,可以同步处理(不入队列)
 - 实现:添加--sync参数,支持队列模式(默认)和同步模式,修复了PetActiveSkill模型config字段类型转换问题