QueryHandler.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php
  2. namespace App\Module\AppGame\Handler\Shop;
  3. use App\Module\AppGame\Handler\BaseHandler;
  4. use App\Module\Game\DCache\ShopItemsJsonConfig;
  5. use App\Module\Shop\Services\ShopService;
  6. use App\Module\Game\Services\ConsumeGroupService;
  7. use App\Module\Game\Services\RewardGroupService;
  8. use App\Module\Game\Enums\CONSUME_TYPE;
  9. use App\Module\Game\Enums\REWARD_TYPE;
  10. use Google\Protobuf\Internal\Message;
  11. use Illuminate\Support\Facades\Log;
  12. use Uraus\Kku\Common\RewardGod;
  13. use Uraus\Kku\Common\RewardPets;
  14. use Uraus\Kku\Response\ShopGoodItem;
  15. use Uraus\Kku\Common\Deduct;
  16. use Uraus\Kku\Common\DeductCoin;
  17. use Uraus\Kku\Common\DeductItem;
  18. use Uraus\Kku\Common\Reward;
  19. use Uraus\Kku\Common\RewardItem;
  20. use Uraus\Kku\Common\RewardCoin;
  21. use Uraus\Kku\Request\RequestShopQuery;
  22. use Uraus\Kku\Response\ResponseShopQuery;
  23. /**
  24. * 处理商店查询请求
  25. */
  26. class QueryHandler extends BaseHandler
  27. {
  28. /**
  29. * 是否需要登录
  30. *
  31. * @var bool
  32. */
  33. protected bool $need_login = true;
  34. /**
  35. * 处理商店查询请求
  36. *
  37. * @param RequestShopQuery $data 商店查询请求数据
  38. * @return ResponseShopQuery 商店查询响应
  39. */
  40. public function handle(Message $data): Message
  41. {
  42. // 创建响应对象
  43. $response = new ResponseShopQuery();
  44. $data = ShopItemsJsonConfig::getData();
  45. $response->setLastTimes($data['generated_ts']);
  46. return $response;
  47. }
  48. /**
  49. * 根据缓存的消耗组数据构建Deduct对象
  50. *
  51. * @param array $consumeGroupData 消耗组数据
  52. * @return Deduct|null
  53. */
  54. private function buildDeductFromConsumeGroupCached(array $consumeGroupData): ?Deduct
  55. {
  56. try {
  57. if (empty($consumeGroupData['consume_items'])) {
  58. return null;
  59. }
  60. $deduct = new Deduct();
  61. $deductCoins = [];
  62. $deductItems = [];
  63. // 处理每个消耗项
  64. foreach ($consumeGroupData['consume_items'] as $consumeItem) {
  65. switch ($consumeItem['consume_type']) {
  66. case CONSUME_TYPE::CURRENCY->value:
  67. case CONSUME_TYPE::FUND_CONFIG->value:
  68. // 货币或账户种类消耗
  69. $deductCoin = new DeductCoin();
  70. $deductCoin->setType($consumeItem['target_id']);
  71. $deductCoin->setQuantity($consumeItem['quantity']);
  72. $deductCoins[] = $deductCoin;
  73. break;
  74. case CONSUME_TYPE::ITEM->value:
  75. // 物品消耗
  76. $deductItem = new DeductItem();
  77. $deductItem->setItemId($consumeItem['target_id']);
  78. $deductItem->setInstanceId(0); // 通常为0,表示不指定特定实例
  79. $deductItem->setQuantity($consumeItem['quantity']);
  80. $deductItems[] = $deductItem;
  81. break;
  82. }
  83. }
  84. $deduct->setCoins($deductCoins);
  85. $deduct->setItems($deductItems);
  86. return $deduct;
  87. } catch (\Exception $e) {
  88. Log::error('构建消耗组Deduct对象失败', [
  89. 'consume_group_data' => $consumeGroupData,
  90. 'error' => $e->getMessage()
  91. ]);
  92. return null;
  93. }
  94. }
  95. /**
  96. * 根据缓存的奖励组数据构建Reward对象
  97. *
  98. * @param array $rewardGroupData 奖励组数据
  99. * @return Reward|null
  100. */
  101. private function buildRewardFromRewardGroupCached(array $rewardGroupData): ?Reward
  102. {
  103. try {
  104. if (empty($rewardGroupData['reward_items'])) {
  105. return null;
  106. }
  107. $reward = new Reward();
  108. $rewardCoins = [];
  109. $rewardItems = [];
  110. $rewardGods = [];
  111. $rewardPets = [];
  112. // 处理每个奖励项
  113. foreach ($rewardGroupData['reward_items'] as $rewardItem) {
  114. switch ($rewardItem['reward_type']) {
  115. case REWARD_TYPE::CURRENCY->value:
  116. case REWARD_TYPE::FUND_CONFIG->value:
  117. // 货币或账户种类奖励
  118. $rewardCoin = new RewardCoin();
  119. $rewardCoin->setType($rewardItem['target_id']);
  120. $rewardCoin->setQuantity($rewardItem['quantity']);
  121. $rewardCoins[] = $rewardCoin;
  122. break;
  123. case REWARD_TYPE::ITEM->value:
  124. // 物品奖励
  125. $rewardItemObj = new RewardItem();
  126. $rewardItemObj->setItemId($rewardItem['target_id']);
  127. $rewardItemObj->setQuantity($rewardItem['quantity']);
  128. $rewardItems[] = $rewardItemObj;
  129. break;
  130. case 'GOD_TIMES':
  131. case 'GOD_STATUS':
  132. case 'GOD_LEVEL':
  133. // 神器奖励
  134. $rewardGod = new RewardGod();
  135. $rewardGod->setType($rewardItem['reward_type']);
  136. $rewardGod->setQuantity($rewardItem['quantity']);
  137. if (isset($rewardItem['diff'])) {
  138. $rewardGod->setDiff($rewardItem['diff']);
  139. }
  140. $rewardGods[] = $rewardGod;
  141. break;
  142. case REWARD_TYPE::PET->value:
  143. case 'PET_STAMINA':
  144. // 宠物奖励
  145. $rewardPet = new RewardPets();
  146. $rewardPet->setQuantity($rewardItem['quantity']);
  147. $rewardPets[] = $rewardPet;
  148. break;
  149. default:
  150. // 其他类型暂不处理
  151. // 因为protobuf中可能没有对应的字段
  152. }
  153. }
  154. $reward->setCoins($rewardCoins); // 金币
  155. $reward->setItems($rewardItems); // 物品
  156. $reward->setGods($rewardGods); //神像
  157. $reward->setPets($rewardPets); // 宠物奖励
  158. $reward->setLands([]); // 土地奖励,暂时为空
  159. return $reward;
  160. } catch (\Exception $e) {
  161. Log::error('构建奖励组Reward对象失败', [
  162. 'reward_group_data' => $rewardGroupData,
  163. 'error' => $e->getMessage()
  164. ]);
  165. return null;
  166. }
  167. }
  168. }