| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- <?php
- namespace App\Module\AppGame\Handler\Pet;
- use App\Module\AppGame\Handler\BaseHandler;
- use App\Module\AppGame\Validations\PetVegetealValidation;
- use App\Module\Pet\Services\PetStealService;
- use Google\Protobuf\Internal\Message;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- use Uraus\Kku\Request\RequestPetVegeteal;
- use Uraus\Kku\Response\ResponsePetVegeteal;
- use UCore\Exception\LogicException;
- /**
- * 处理宠物偷菜请求
- *
- * 处理宠物偷菜功能,包括验证请求参数、执行偷菜逻辑、返回偷菜结果
- */
- class VegetealHandler extends BaseHandler
- {
- /**
- * 是否需要登录
- *
- * @var bool
- */
- protected bool $need_login = true;
- /**
- * 处理宠物偷菜请求
- *
- * @param RequestPetVegeteal $data 宠物偷菜请求数据
- * @return ResponsePetVegeteal 宠物偷菜响应
- */
- public function handle(Message $data): Message
- {
- // 创建验证对象
- $validation = PetVegetealValidation::makeByProrobufUser($data);
- // 验证请求数据
- $validation->validated();
- // 验证完成
- // 获取请求参数
- $targetUserId = $validation->getSafe('user_id'); // 被偷的玩家ID
- $petId = $validation->getSafe('pet_id'); // 宠物ID
- $plantId = $validation->getSafe('plant_id'); // 作物ID
- $stealerId = $this->user_id; // 偷菜者用户ID
- // 创建响应对象
- $response = new ResponsePetVegeteal();
- try {
- // 开启事务执行偷菜操作
- $stealResult = DB::transaction(function () use ($stealerId, $targetUserId, $plantId, $petId) {
- return PetStealService::stealCrop($stealerId, $targetUserId, $plantId, $petId);
- });
- // 记录偷菜操作日志
- Log::info('宠物偷菜操作', [
- 'stealer_id' => $stealerId,
- 'target_user_id' => $targetUserId,
- 'pet_id' => $petId,
- 'plant_id' => $plantId,
- 'success' => $stealResult->success,
- 'defended' => $stealResult->defended,
- 'steal_amount' => $stealResult->stealAmount,
- 'item_id' => $stealResult->itemId,
- 'steal_log_id' => $stealResult->stealLogId,
- 'pick_log_id' => $stealResult->pickLogId,
- ]);
- // 根据偷菜结果设置响应
- if ($stealResult->success) {
- // 偷菜成功
- Log::info('偷菜成功', [
- 'stealer_id' => $stealerId,
- 'target_user_id' => $targetUserId,
- 'steal_amount' => $stealResult->stealAmount,
- 'item_id' => $stealResult->itemId,
- ]);
- } elseif ($stealResult->defended) {
- // 被防御 - 抛出异常返回失败状态
- Log::info('偷菜被防御', [
- 'stealer_id' => $stealerId,
- 'target_user_id' => $targetUserId,
- 'stealer_pet_id' => $stealResult->stealerPetId,
- 'target_pet_id' => $stealResult->targetPetId,
- ]);
- throw new LogicException('偷菜被防御,偷菜失败');
- } else {
- // 偷菜失败
- Log::warning('偷菜失败', [
- 'stealer_id' => $stealerId,
- 'target_user_id' => $targetUserId,
- 'fail_reason' => $stealResult->failReason,
- ]);
- throw new LogicException($stealResult->failReason ?? '偷菜失败');
- }
- } catch (LogicException $e) {
- // 业务逻辑异常,记录日志并重新抛出
- Log::warning('偷菜业务逻辑异常', [
- 'stealer_id' => $stealerId,
- 'target_user_id' => $targetUserId,
- 'pet_id' => $petId,
- 'plant_id' => $plantId,
- 'error' => $e->getMessage(),
- 'trace' => $e->getTraceAsString(),
- ]);
- throw $e;
- } catch (\Exception $e) {
- // 其他异常,记录日志并重新抛出
- Log::error('偷菜操作异常', [
- 'stealer_id' => $stealerId,
- 'target_user_id' => $targetUserId,
- 'pet_id' => $petId,
- 'plant_id' => $plantId,
- 'error' => $e->getMessage(),
- 'trace' => $e->getTraceAsString(),
- ]);
- throw $e;
- }
- return $response;
- }
- }
|