时间: 2025-06-06 21:52
任务类型: Bug修复
紧急程度: 急需
用户反馈自动杀虫技能处理有问题,实际用户有很多虫害,但是系统显示"自动杀虫成功 - 没有虫害"。
通过测试命令 php artisan pet:process-active-skills --sync 和查看用户信息页面 http://kku_laravel.local.gd/admin/farm-user-summary/10002,发现了以下问题:
修改 app/Module/Pet/Logic/PetAutoSkillLogic.php 中的 getDisasterClearItem 方法:
$clearItemMap = [
\App\Module\Farm\Enums\DISASTER_TYPE::DROUGHT->value => 24, // 干旱清除道具ID(洒水壶)
\App\Module\Farm\Enums\DISASTER_TYPE::PEST->value => 23, // 虫害清除道具ID(杀虫剂)
\App\Module\Farm\Enums\DISASTER_TYPE::WEED->value => 22, // 杂草清除道具ID(除草剂)
];
修改 autoClearSpecificDisaster 方法,确保道具消耗和灾害清除在同一事务中:
// 开启事务
DB::beginTransaction();
// 先消耗道具
\App\Module\GameItems\Services\ItemService::consumeItem(
$userId,
$clearItem['item_id'],
null,
1,
['source' => 'pet_auto_specific_disaster_clear']
);
// 调用农场服务清除灾害
$result = \App\Module\Farm\Services\CropService::clearDisaster($userId, $land->id, $disasterType);
if ($result) {
DB::commit();
return true;
} else {
DB::rollback();
return false;
}
清理了临时添加的调试日志,保持代码整洁。
修复后测试结果:
app/Module/Pet/Logic/PetAutoSkillLogic.php
php artisan pet:process-active-skills --synchttp://kku_laravel.local.gd/admin/farm-user-summary/10002修复自动杀虫技能问题
- 修复杀虫剂道具ID错误(从1002改为23)
- 修复自动浇水道具ID错误(从1001改为24)
- 修复自动除草道具ID错误(从1003改为22)
- 修复事务处理问题,确保道具消耗和灾害清除在同一事务中
- 移除调试日志,优化代码结构
现在自动杀虫技能可以正常工作,成功清除虫害并消耗杀虫剂