items as $item) { switch ($item->consumeType) { case CONSUME_TYPE::ITEM->value: $deductItem = new DeductItem(); $deductItem->setItemId($item->targetId); $deductItem->setInstanceId(0); // 默认为0,表示不指定实例 $deductItem->setQuantity($item->quantity); $items[] = $deductItem; break; case CONSUME_TYPE::CURRENCY->value: case CONSUME_TYPE::FUND_CONFIG->value: case CONSUME_TYPE::FUND_CONFIGS->value: $deductCoin = new DeductCoin(); $deductCoin->setType($item->targetId); $deductCoin->setQuantity($item->quantity); $coins[] = $deductCoin; break; } } $deduct->setCoins($coins); $deduct->setItems($items); return $deduct; } /** * 将奖励组DTO转换为Protobuf Reward对象 * * @param RewardGroupDto $rewardGroupDto 奖励组DTO * @return Reward Protobuf Reward对象 */ public static function convertRewardGroupToReward(RewardGroupDto $rewardGroupDto): Reward { $reward = new Reward(); $coins = []; $items = []; $gods = []; $pets = []; $petPowers = []; $skins = []; foreach ($rewardGroupDto->items as $item) { switch ($item->rewardType) { case REWARD_TYPE::ITEM->value: $rewardItem = new RewardItem(); $rewardItem->setItemId($item->targetId); $rewardItem->setInstanceId(0); // 默认为0 $rewardItem->setQuantity($item->quantity); // 设置随机数量范围(用于奖励预览) if ($item->minQuantity !== null && $item->maxQuantity !== null) { $rewardItem->setMinQuantity($item->minQuantity); $rewardItem->setMaxQuantity($item->maxQuantity); } else { $rewardItem->setMinQuantity($item->quantity); $rewardItem->setMaxQuantity($item->quantity); } $items[] = $rewardItem; break; case REWARD_TYPE::CURRENCY->value: case REWARD_TYPE::FUND_CONFIG->value: $rewardCoin = new RewardCoin(); $rewardCoin->setType($item->targetId); $rewardCoin->setQuantity($item->quantity); $coins[] = $rewardCoin; break; case REWARD_TYPE::FARM_SHRINE->value: $rewardGod = new RewardGod(); $rewardGod->setType($item->targetId); // 将小时转换为秒 $durationHours = $item->param2 > 0 ? $item->param2 : 24; // 默认24小时 $rewardGod->setDiff($durationHours * 3600); // 转换为秒 $rewardGod->setQuantity($item->quantity); $gods[] = $rewardGod; break; case REWARD_TYPE::PET->value: $rewardPet = new RewardPets(); $rewardPet->setPetType($item->targetId); $rewardPet->setQuantity($item->quantity); $pets[] = $rewardPet; break; case REWARD_TYPE::PET_POWER->value: $rewardPetPower = new RewardPetPowers(); $rewardPetPower->setPetId($item->targetId); $rewardPetPower->setQuantity($item->quantity); $petPowers[] = $rewardPetPower; break; case REWARD_TYPE::SKIN->value: $rewardSkin = new RewardSkin(); $rewardSkin->setId($item->targetId); $rewardSkin->setQuantity($item->quantity); $skins[] = $rewardSkin; break; } } $reward->setCoins($coins); $reward->setItems($items); $reward->setGods($gods); $reward->setPets($pets); $reward->setPetPowers($petPowers); $reward->setSkins($skins); return $reward; } /** * 将单个消耗项DTO转换为对应的Protobuf对象 * * @param ConsumeItemDto $consumeItemDto 消耗项DTO * @return DeductCoin|DeductItem|null 对应的Protobuf对象 */ public static function convertConsumeItemToProtobuf(ConsumeItemDto $consumeItemDto) { switch ($consumeItemDto->consumeType) { case CONSUME_TYPE::ITEM->value: $deductItem = new DeductItem(); $deductItem->setItemId($consumeItemDto->targetId); $deductItem->setInstanceId(0); $deductItem->setQuantity($consumeItemDto->quantity); return $deductItem; case CONSUME_TYPE::CURRENCY->value: case CONSUME_TYPE::FUND_CONFIG->value: case CONSUME_TYPE::FUND_CONFIGS->value: $deductCoin = new DeductCoin(); $deductCoin->setType($consumeItemDto->targetId); $deductCoin->setQuantity($consumeItemDto->quantity); return $deductCoin; default: return null; } } /** * 将单个奖励项DTO转换为对应的Protobuf对象 * * @param RewardItemDto $rewardItemDto 奖励项DTO * @return RewardCoin|RewardItem|RewardGod|RewardPets|RewardPetPowers|RewardSkin|null 对应的Protobuf对象 */ public static function convertRewardItemToProtobuf(RewardItemDto $rewardItemDto) { switch ($rewardItemDto->rewardType) { case REWARD_TYPE::ITEM->value: $rewardItem = new RewardItem(); $rewardItem->setItemId($rewardItemDto->targetId); $rewardItem->setInstanceId(0); $rewardItem->setQuantity($rewardItemDto->quantity); if ($rewardItemDto->minQuantity !== null && $rewardItemDto->maxQuantity !== null) { $rewardItem->setMinQuantity($rewardItemDto->minQuantity); $rewardItem->setMaxQuantity($rewardItemDto->maxQuantity); } else { $rewardItem->setMinQuantity($rewardItemDto->quantity); $rewardItem->setMaxQuantity($rewardItemDto->quantity); } return $rewardItem; case REWARD_TYPE::CURRENCY->value: case REWARD_TYPE::FUND_CONFIG->value: $rewardCoin = new RewardCoin(); $rewardCoin->setType($rewardItemDto->targetId); $rewardCoin->setQuantity($rewardItemDto->quantity); return $rewardCoin; case REWARD_TYPE::FARM_SHRINE->value: $rewardGod = new RewardGod(); $rewardGod->setType($rewardItemDto->targetId); // 将小时转换为秒 $durationHours = $rewardItemDto->param2 > 0 ? $rewardItemDto->param2 : 24; // 默认24小时 $rewardGod->setDiff($durationHours * 3600); // 转换为秒 $rewardGod->setQuantity($rewardItemDto->quantity); return $rewardGod; case REWARD_TYPE::PET->value: $rewardPet = new RewardPets(); $rewardPet->setPetType($rewardItemDto->targetId); $rewardPet->setQuantity($rewardItemDto->quantity); return $rewardPet; case REWARD_TYPE::PET_POWER->value: $rewardPetPower = new RewardPetPowers(); $rewardPetPower->setPetId($rewardItemDto->targetId); $rewardPetPower->setQuantity($rewardItemDto->quantity); return $rewardPetPower; case REWARD_TYPE::SKIN->value: $rewardSkin = new RewardSkin(); $rewardSkin->setId($rewardItemDto->targetId); $rewardSkin->setQuantity($rewardItemDto->quantity); return $rewardSkin; default: return null; } } }