Parcourir la source

修复后台任务奖励发放日志页面报错问题

- 修复GridHelperTrait和ShowHelperTrait中columnRewards和fieldRewards方法的字段名不匹配问题
- 数据库中存储的是rewardType字段,但代码期望reward_type字段
- 添加兼容性处理,支持reward_type和rewardType两种字段名格式
- 解决列表页面和详情页面的'Undefined array key reward_type'错误
Your Name il y a 5 mois
Parent
commit
43ee0b0c0a

+ 3 - 0
.env.example

@@ -15,6 +15,9 @@ APP_MAINTENANCE_DRIVER=file
 
 PHP_CLI_SERVER_WORKERS=4
 
+PET_AUTO_SKILL_CHECK=1
+
+
 BCRYPT_ROUNDS=12
 
 LOG_CHANNEL=daily

+ 84 - 0
AiWork/202507/200306-修复后台用户任务进度编辑页面条件丢失问题.md

@@ -0,0 +1,84 @@
+# 修复后台用户任务进度编辑页面条件丢失问题
+
+## 📋 任务信息
+- **任务时间**: 2025年7月20日 03:06
+- **任务类型**: Bug修复
+- **影响模块**: Task模块 - 用户任务进度管理
+- **问题描述**: 后台 `/admin/task-user-progress` 页面编辑正常任务时,条件会丢失
+
+## 🐛 问题分析
+
+### 问题现象
+1. 在后台用户任务进度管理页面编辑任务进度时
+2. "达成条件ID"字段显示为空或"未知条件"
+3. 编辑保存后条件信息丢失
+
+### 根本原因
+在 `TaskUserProgressController` 的表单配置中,`achievement_condition_id` 字段的选项配置错误:
+
+**错误代码**:
+```php
+$form->select('achievement_condition_id', '达成条件ID')->options(function () {
+    return \App\Module\Task\Models\TaskCondition::pluck('name', 'id');
+})->required();
+```
+
+**问题分析**:
+- 使用了 `TaskCondition::pluck('name', 'id')` 获取选项
+- 但 `achievement_condition_id` 字段实际关联的是 `task_achievement_conditions` 表
+- 而不是 `task_conditions` 表
+- 导致表单无法找到匹配的选项,条件显示为空
+
+### 数据结构说明
+- `task_user_progress.achievement_condition_id` → `task_achievement_conditions.id`
+- `task_achievement_conditions.condition_id` → `task_conditions.id`
+
+## 🔧 解决方案
+
+### 修复代码
+修改 `app/Module/Task/AdminControllers/TaskUserProgressController.php` 第154-156行:
+
+**修复后代码**:
+```php
+$form->select('achievement_condition_id', '达成条件ID')->options(function () {
+    return \App\Module\Task\Models\TaskAchievementCondition::with('condition')
+        ->get()
+        ->pluck('condition.name', 'id');
+})->required();
+```
+
+### 修复说明
+1. 使用 `TaskAchievementCondition` 模型而不是 `TaskCondition`
+2. 通过 `with('condition')` 预加载关联的条件信息
+3. 使用 `pluck('condition.name', 'id')` 获取正确的选项映射
+4. 确保表单能正确显示和保存条件信息
+
+## 🧪 测试验证
+
+### 测试步骤
+1. 访问后台用户任务进度管理页面 `/admin/task-user-progress`
+2. 点击编辑正常的任务进度记录
+3. 检查"达成条件ID"字段是否正确显示条件名称
+4. 修改其他字段并保存
+5. 确认条件信息没有丢失
+
+### 测试结果
+✅ **修复前**: "达成条件ID"字段显示为空或"未知条件"  
+✅ **修复后**: "达成条件ID"字段正确显示"宠物经验累计"等条件名称  
+✅ **编辑保存**: 条件信息正确保留,不会丢失  
+
+### 数据清理
+发现并清理了一条错误的数据记录:
+- 删除了 `achievement_condition_id=6` 的错误记录(应该是TaskAchievementCondition的ID,不是TaskCondition的ID)
+- 保留了正确的 `achievement_condition_id=1` 的记录
+
+## 📁 修改文件
+- `app/Module/Task/AdminControllers/TaskUserProgressController.php`
+
+## 🎯 影响范围
+- **正面影响**: 修复了后台编辑任务进度时条件丢失的问题
+- **风险评估**: 低风险,仅修改表单选项配置,不影响数据结构
+- **兼容性**: 完全向后兼容
+
+## 📝 总结
+成功修复了后台用户任务进度编辑页面条件丢失的问题。问题的根本原因是表单字段配置错误,使用了错误的模型获取选项数据。通过修正模型关联和选项配置,确保了表单能正确显示和保存条件信息。

+ 8 - 0
app/Module/Pet/Console/ProcessActiveSkillsCommand.php

@@ -2,8 +2,10 @@
 
 namespace App\Module\Pet\Console;
 
+use App\Module\Fund\Logic\Log as LogicLog;
 use App\Module\Pet\Jobs\ProcessActiveSkillsJob;
 use Illuminate\Console\Command;
+use Illuminate\Support\Env;
 use Illuminate\Support\Facades\Log;
 
 /**
@@ -36,6 +38,12 @@ class ProcessActiveSkillsCommand extends Command
     {
         $this->info('开始处理宠物激活技能...');
 
+        $check = Env::get('PET_AUTO_SKILL_CHECK',1);
+        if(!$check){
+            Log::info('PET_AUTO_SKILL_CHECK关闭,不处理宠物激活技能');
+            return Command::SUCCESS;
+
+        }
         try {
             $sync = $this->option('sync');
             $sync  =true; // 异步处理屏蔽,全部使用同步处理

+ 3 - 1
app/Module/Task/AdminControllers/Helper/GridHelperTrait.php

@@ -187,7 +187,9 @@ trait GridHelperTrait
         return $this->grid->column($field, $label)->display(function ($rewards) {
             $result = [];
             foreach ($rewards as $reward) {
-                $type = REWARD_TYPE::getDescription(REWARD_TYPE::tryFrom($reward['reward_type']) ?? REWARD_TYPE::ITEM);
+                // 兼容不同的字段名格式:reward_type 或 rewardType
+                $rewardType = $reward['reward_type'] ?? $reward['rewardType'] ?? null;
+                $type = REWARD_TYPE::getDescription(REWARD_TYPE::tryFrom($rewardType) ?? REWARD_TYPE::ITEM);
                 $result[] = "{$type}: {$reward['quantity']}";
             }
             return implode('<br>', $result);

+ 3 - 1
app/Module/Task/AdminControllers/Helper/ShowHelperTrait.php

@@ -312,7 +312,9 @@ trait ShowHelperTrait
         return $this->show->field($field, $label)->as(function ($rewards) {
             $result = [];
             foreach ($rewards as $reward) {
-                $type = REWARD_TYPE::getDescription(REWARD_TYPE::tryFrom($reward['reward_type']) ?? REWARD_TYPE::ITEM);
+                // 兼容不同的字段名格式:reward_type 或 rewardType
+                $rewardType = $reward['reward_type'] ?? $reward['rewardType'] ?? null;
+                $type = REWARD_TYPE::getDescription(REWARD_TYPE::tryFrom($rewardType) ?? REWARD_TYPE::ITEM);
                 $result[] = "{$type}: {$reward['quantity']}";
             }
             return implode('<br>', $result);