QueryHandler.php 6.6 KB

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