|
|
@@ -10,15 +10,16 @@ use Illuminate\Foundation\Bus\Dispatchable;
|
|
|
use Illuminate\Queue\InteractsWithQueue;
|
|
|
use Illuminate\Queue\SerializesModels;
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
+use UCore\Queue\QueueJob;
|
|
|
|
|
|
/**
|
|
|
* 处理宠物激活技能的定时任务
|
|
|
*
|
|
|
* 每分钟执行一次,检查所有激活中的宠物技能并执行相应操作
|
|
|
*/
|
|
|
-class ProcessActiveSkillsJob implements ShouldQueue
|
|
|
+class ProcessActiveSkillsJob extends QueueJob
|
|
|
{
|
|
|
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 任务超时时间(秒)
|
|
|
@@ -34,33 +35,65 @@ class ProcessActiveSkillsJob implements ShouldQueue
|
|
|
*/
|
|
|
public $tries = 3;
|
|
|
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
- * 创建新的任务实例
|
|
|
+ * 处理技能效果
|
|
|
*
|
|
|
+ * @param PetActiveSkill $activeSkill 激活的技能
|
|
|
* @return void
|
|
|
*/
|
|
|
- public function __construct()
|
|
|
+ protected function processSkillEffect(PetActiveSkill $activeSkill): void
|
|
|
{
|
|
|
- //
|
|
|
+ $autoSkillLogic = new PetAutoSkillLogic();
|
|
|
+
|
|
|
+ switch ($activeSkill->skill_name) {
|
|
|
+ case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_HARVESTING->value:
|
|
|
+ $autoSkillLogic->processAutoHarvest($activeSkill);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_PLANTING->value:
|
|
|
+ $autoSkillLogic->processAutoPlant($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();
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 执行任务
|
|
|
- *
|
|
|
- * @return void
|
|
|
- */
|
|
|
- public function handle($check = false)
|
|
|
+
|
|
|
+ public function run(): bool
|
|
|
{
|
|
|
+
|
|
|
Log::info('开始处理宠物激活技能定时任务');
|
|
|
|
|
|
try {
|
|
|
// 获取所有生效中的技能
|
|
|
$activeSkills = PetActiveSkill::active()->get();
|
|
|
|
|
|
- Log::info('找到激活技能数量', ['count' => $activeSkills->count()]);
|
|
|
+ Log::info('找到激活技能数量', [ 'count' => $activeSkills->count() ]);
|
|
|
|
|
|
$processedCount = 0;
|
|
|
- $expiredCount = 0;
|
|
|
+ $expiredCount = 0;
|
|
|
|
|
|
/**
|
|
|
* @var PetActiveSkill $activeSkill
|
|
|
@@ -73,8 +106,8 @@ class ProcessActiveSkillsJob implements ShouldQueue
|
|
|
$expiredCount++;
|
|
|
Log::info('技能已过期', [
|
|
|
'active_skill_id' => $activeSkill->id,
|
|
|
- 'pet_id' => $activeSkill->pet_id,
|
|
|
- 'skill_name' => $activeSkill->skill_name
|
|
|
+ 'pet_id' => $activeSkill->pet_id,
|
|
|
+ 'skill_name' => $activeSkill->skill_name
|
|
|
]);
|
|
|
continue;
|
|
|
}
|
|
|
@@ -84,16 +117,16 @@ class ProcessActiveSkillsJob implements ShouldQueue
|
|
|
Log::debug('shouldCheck false', [
|
|
|
|
|
|
'active_skill_id' => $activeSkill->id,
|
|
|
- 'pet_id' => $activeSkill->pet_id,
|
|
|
- 'skill_name' => $activeSkill->skill_name
|
|
|
+ 'pet_id' => $activeSkill->pet_id,
|
|
|
+ 'skill_name' => $activeSkill->skill_name
|
|
|
]);
|
|
|
continue;
|
|
|
}
|
|
|
Log::debug('shouldCheck false', [
|
|
|
|
|
|
'active_skill_id' => $activeSkill->id,
|
|
|
- 'pet_id' => $activeSkill->pet_id,
|
|
|
- 'skill_name' => $activeSkill->skill_name
|
|
|
+ 'pet_id' => $activeSkill->pet_id,
|
|
|
+ 'skill_name' => $activeSkill->skill_name
|
|
|
]);
|
|
|
|
|
|
// 处理技能效果
|
|
|
@@ -103,18 +136,18 @@ class ProcessActiveSkillsJob implements ShouldQueue
|
|
|
} catch (\Exception $e) {
|
|
|
Log::error('处理单个激活技能失败', [
|
|
|
'active_skill_id' => $activeSkill->id,
|
|
|
- 'pet_id' => $activeSkill->pet_id,
|
|
|
- 'skill_name' => $activeSkill->skill_name,
|
|
|
- 'error' => $e->getMessage(),
|
|
|
- 'trace' => $e->getTraceAsString()
|
|
|
+ 'pet_id' => $activeSkill->pet_id,
|
|
|
+ 'skill_name' => $activeSkill->skill_name,
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ 'trace' => $e->getTraceAsString()
|
|
|
]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
Log::info('宠物激活技能定时任务完成', [
|
|
|
- 'total_skills' => $activeSkills->count(),
|
|
|
+ 'total_skills' => $activeSkills->count(),
|
|
|
'processed_count' => $processedCount,
|
|
|
- 'expired_count' => $expiredCount
|
|
|
+ 'expired_count' => $expiredCount
|
|
|
]);
|
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
@@ -125,62 +158,12 @@ class ProcessActiveSkillsJob implements ShouldQueue
|
|
|
|
|
|
throw $e;
|
|
|
}
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 处理技能效果
|
|
|
- *
|
|
|
- * @param PetActiveSkill $activeSkill 激活的技能
|
|
|
- * @return void
|
|
|
- */
|
|
|
- protected function processSkillEffect(PetActiveSkill $activeSkill): void
|
|
|
+ public function payload()
|
|
|
{
|
|
|
- $autoSkillLogic = new PetAutoSkillLogic();
|
|
|
-
|
|
|
- switch ($activeSkill->skill_name) {
|
|
|
- case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_HARVESTING->value:
|
|
|
- $autoSkillLogic->processAutoHarvest($activeSkill);
|
|
|
- break;
|
|
|
-
|
|
|
- case \App\Module\Pet\Enums\PET_SKILL_NAME::AUTO_PLANTING->value:
|
|
|
- $autoSkillLogic->processAutoPlant($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();
|
|
|
+ return [];
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 任务失败时的处理
|
|
|
- *
|
|
|
- * @param \Throwable $exception
|
|
|
- * @return void
|
|
|
- */
|
|
|
- public function failed(\Throwable $exception)
|
|
|
- {
|
|
|
- Log::error('宠物激活技能定时任务失败', [
|
|
|
- 'error' => $exception->getMessage(),
|
|
|
- 'trace' => $exception->getTraceAsString()
|
|
|
- ]);
|
|
|
- }
|
|
|
}
|