用户反馈宠物技能开启功能异常:
在 LifeSkillUseHandler.php 第126行发现:
// 提交事务
// DB::commit();
DB::rollBack();
所有数据库操作被回滚,导致技能激活、体力扣除等操作都没有实际生效。
在 PetTemp.php 第87-89行,代码尝试访问 PetStatusTempDto 不存在的属性:
Log::info("宠物{$eventType}数据已临时存储", [
'user_id' => $userId,
'pet_id' => $petId,
'name' => $tempDto->name, // 不存在的属性
'level' => $tempDto->level, // 不存在的属性
'grade' => $tempDto->grade, // 不存在的属性
]);
错误日志:
[2025-06-06T18:43:15.109651+08:00] laravel.ERROR: 获取宠物数据失败 {"error":"Undefined property: App\\Module\\Game\\Dtos\\PetStatusTempDto::$name","user_id":10002,"pet_id":9}
[2025-06-06T18:43:15.109844+08:00] laravel.ERROR: 宠物技能使用数据临时存储失败 {"error":"Undefined property: App\\Module\\Game\\Dtos\\PetStatusTempDto::$name","user_id":10002,"pet_id":9}
文件: app/Module/AppGame/Handler/Pet/LifeSkillUseHandler.php
修改前:
// 提交事务
// DB::commit();
DB::rollBack();
修改后:
// 提交事务
DB::commit();
文件: app/Module/Game/Logics/PetTemp.php
修改前:
Log::info("宠物{$eventType}数据已临时存储", [
'user_id' => $userId,
'pet_id' => $petId,
'name' => $tempDto->name,
'level' => $tempDto->level,
'grade' => $tempDto->grade,
]);
修改后:
Log::info("宠物{$eventType}数据已临时存储", [
'user_id' => $userId,
'pet_id' => $petId,
'updated_at' => $tempDto->updatedAt,
]);
根据用户说明,PetStatusTempDto 应该继承自 BaseDto 而不是 PetDataDto,设计理念是:
id 和 updatedAt 属性这种设计避免了存储冗余数据,提高了性能。
运行验证命令 php artisan debug:reproduce-error request_1749206571089:
技能成功激活:
[2025-06-06T18:52:14.409743+08:00] laravel.INFO: 自动除草技能激活成功 {"pet_id":9,"skill_id":1,"duration":10800,"end_time":"2025-06-06 21:52:14","active_skill_id":36}
宠物体力正常减少:
[2025-06-06T18:52:14.498135+08:00] laravel.DEBUG: SQL {"sql":"update `kku_pet_users` set `stamina` = 2240, ...
体力从 2250 减少到 2240
暂存数据正常记录:
[2025-06-06T18:52:14.594014+08:00] laravel.INFO: 宠物技能使用数据已临时存储 {"user_id":10002,"pet_id":9,"updated_at":1749207134}
响应正常返回:
{
"runUnid": "6842c85d60438",
"runMs": "997",
"code": "OK",
"callpath": "Pet-LifeSkillUse",
"lastData": {
"pets": [{
"id": "9",
"name": "松狮",
"level": "22",
"power": "2240",
"maxpower": "600",
"score": "100",
"status": "1",
"lifeSkills": [{"skillId": 1}, {"skillId": 2}, {"skillId": 3}, {"skillId": 4}, {"skillId": 5}],
"fightingCapacity": "100"
}]
},
"petLifeSkillUse": []
}
SELECT * FROM kku_pet_active_skills WHERE pet_id = 9 ORDER BY created_at DESC LIMIT 1;
结果:技能ID 36 成功创建,状态为 'active',结束时间为 '2025-06-06 21:52:14'
SELECT stamina FROM kku_pet_users WHERE id = 9;
结果:体力值为 2240(从 2250 减少了 10 点)
修复宠物技能开启问题
1. 修复LifeSkillUseHandler中的事务回滚问题,将DB::rollBack()改为DB::commit()
2. 修复PetTemp.php中访问不存在属性的问题,调整日志记录内容
3. 验证修复效果:技能成功激活,宠物体力正常减少,无错误日志
通过修复事务回滚和属性访问两个问题,成功恢复了宠物技能开启功能。修复后的系统能够正常激活技能、扣除体力、记录日志,用户体验得到显著改善。