setLastTimes($data['generated_ts']); return $response; } /** * 根据缓存的消耗组数据构建Deduct对象 * * @param array $consumeGroupData 消耗组数据 * @return Deduct|null */ private function buildDeductFromConsumeGroupCached(array $consumeGroupData): ?Deduct { try { if (empty($consumeGroupData['consume_items'])) { return null; } $deduct = new Deduct(); $deductCoins = []; $deductItems = []; // 处理每个消耗项 foreach ($consumeGroupData['consume_items'] as $consumeItem) { switch ($consumeItem['consume_type']) { case CONSUME_TYPE::CURRENCY->value: case CONSUME_TYPE::FUND_CONFIG->value: // 货币或账户种类消耗 $deductCoin = new DeductCoin(); $deductCoin->setType($consumeItem['target_id']); $deductCoin->setQuantity($consumeItem['quantity']); $deductCoins[] = $deductCoin; break; case CONSUME_TYPE::ITEM->value: // 物品消耗 $deductItem = new DeductItem(); $deductItem->setItemId($consumeItem['target_id']); $deductItem->setInstanceId(0); // 通常为0,表示不指定特定实例 $deductItem->setQuantity($consumeItem['quantity']); $deductItems[] = $deductItem; break; } } $deduct->setCoins($deductCoins); $deduct->setItems($deductItems); return $deduct; } catch (\Exception $e) { Log::error('构建消耗组Deduct对象失败', [ 'consume_group_data' => $consumeGroupData, 'error' => $e->getMessage() ]); return null; } } /** * 根据缓存的奖励组数据构建Reward对象 * * @param array $rewardGroupData 奖励组数据 * @return Reward|null */ private function buildRewardFromRewardGroupCached(array $rewardGroupData): ?Reward { try { if (empty($rewardGroupData['reward_items'])) { return null; } $reward = new Reward(); $rewardCoins = []; $rewardItems = []; $rewardGods = []; $rewardPets = []; // 处理每个奖励项 foreach ($rewardGroupData['reward_items'] as $rewardItem) { switch ($rewardItem['reward_type']) { case REWARD_TYPE::CURRENCY->value: case REWARD_TYPE::FUND_CONFIG->value: // 货币或账户种类奖励 $rewardCoin = new RewardCoin(); $rewardCoin->setType($rewardItem['target_id']); $rewardCoin->setQuantity($rewardItem['quantity']); $rewardCoins[] = $rewardCoin; break; case REWARD_TYPE::ITEM->value: // 物品奖励 $rewardItemObj = new RewardItem(); $rewardItemObj->setItemId($rewardItem['target_id']); $rewardItemObj->setQuantity($rewardItem['quantity']); $rewardItems[] = $rewardItemObj; break; case 'GOD_TIMES': case 'GOD_STATUS': case 'GOD_LEVEL': // 神器奖励 $rewardGod = new RewardGod(); $rewardGod->setType($rewardItem['reward_type']); $rewardGod->setQuantity($rewardItem['quantity']); if (isset($rewardItem['diff'])) { $rewardGod->setDiff($rewardItem['diff']); } $rewardGods[] = $rewardGod; break; case REWARD_TYPE::PET->value: case 'PET_STAMINA': // 宠物奖励 $rewardPet = new RewardPets(); $rewardPet->setQuantity($rewardItem['quantity']); $rewardPets[] = $rewardPet; break; default: // 其他类型暂不处理 // 因为protobuf中可能没有对应的字段 } } $reward->setCoins($rewardCoins); // 金币 $reward->setItems($rewardItems); // 物品 $reward->setGods($rewardGods); //神像 $reward->setPets($rewardPets); // 宠物奖励 $reward->setLands([]); // 土地奖励,暂时为空 return $reward; } catch (\Exception $e) { Log::error('构建奖励组Reward对象失败', [ 'reward_group_data' => $rewardGroupData, 'error' => $e->getMessage() ]); return null; } } }