RateCache.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <?php
  2. /**
  3. * RateCache.php UTF-8
  4. * 折扣缓存
  5. *
  6. * @date : 2018/5/14 13:31
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace huo\controller\rate;
  13. use huo\controller\common\Base;
  14. use huo\model\rate\AgentGameRateModel;
  15. use huo\model\rate\GameRateModel;
  16. use think\Cache;
  17. class RateCache extends Base {
  18. public static function ins() {
  19. return new static();
  20. }
  21. /**
  22. * 获取折扣KEY
  23. *
  24. * @param int $app_id
  25. *
  26. * @return string
  27. */
  28. private function getGameRateKey($app_id) {
  29. return 'game_rate_key_'.$app_id;
  30. }
  31. /**
  32. * 获取游戏折扣
  33. *
  34. * @param string $app_id
  35. *
  36. * @return array|bool|mixed
  37. */
  38. public function getInfoByAppId($app_id) {
  39. $_key = $this->getGameRateKey($app_id);
  40. $_game_rate_data_json = Cache::get($_key);
  41. $_game_rate_data = json_decode($_game_rate_data_json, true);
  42. if (!is_array($_game_rate_data)) {
  43. $_game_rate_data = $_game_rate_data_json;
  44. }
  45. if (!is_array($_game_rate_data) || empty($_game_rate_data)) {
  46. $_game_rate_data = (new GameRateModel())->getInfoById($app_id);
  47. if (empty($_game_rate_data)) {
  48. return false;
  49. }
  50. $this->saveGameRateCache($app_id, $_game_rate_data);
  51. }
  52. return $_game_rate_data;
  53. }
  54. /**
  55. * 保存游戏折扣数据
  56. *
  57. * @param $app_id
  58. * @param $game_rate_data
  59. * @param int $ttl
  60. */
  61. public function saveGameRateCache($app_id, $game_rate_data, $ttl = 3600) {
  62. $_key = $this->getGameRateKey($app_id);
  63. Cache::set($_key, json_encode($game_rate_data), $ttl);
  64. }
  65. /**
  66. * 更新游戏折扣信息
  67. *
  68. * @param string $app_id
  69. * @param array $game_rate_data
  70. *
  71. * @param bool $rm_cache 是否删除缓存
  72. *
  73. * @return bool
  74. */
  75. public function updateGameRate($app_id, $game_rate_data, $rm_cache = false) {
  76. if (true == $rm_cache) {
  77. $_key = $this->getGameRateKey($app_id);
  78. Cache::rm($_key);
  79. $_game_rate_data = $game_rate_data;
  80. } else {
  81. $_old_data = $this->getInfoByAppId($app_id);
  82. $_game_rate_data = array_merge($_old_data, $game_rate_data);
  83. $this->saveGameRateCache($app_id, $_game_rate_data);
  84. }
  85. return (new GameRateModel())->updateData($_game_rate_data, $_game_rate_data['app_id']);
  86. }
  87. /**
  88. * 获取游戏渠道折扣KEY
  89. *
  90. * @param int $app_id
  91. * @param int $agent_id
  92. *
  93. * @return string
  94. */
  95. private function getAgentGameRateKey($app_id, $agent_id) {
  96. return 'ag_rate_key_'.$app_id.'_'.$agent_id;
  97. }
  98. /**
  99. * 获取游戏渠道折扣
  100. *
  101. * @param int $app_id
  102. * @param int $agent_id
  103. *
  104. * @return array|bool|mixed
  105. */
  106. public function getInfoByAppIdAgentId($app_id, $agent_id) {
  107. $_key = $this->getAgentGameRateKey($app_id, $agent_id);
  108. $_ag_rate_data_json = Cache::get($_key);
  109. $_ag_rate_data = json_decode($_ag_rate_data_json, true);
  110. if (!is_array($_ag_rate_data)) {
  111. $_ag_rate_data = $_ag_rate_data_json;
  112. }
  113. if (!is_array($_ag_rate_data) || empty($_ag_rate_data)) {
  114. $_ag_rate_data = (new AgentGameRateModel())->getInfoByGameAgent($app_id, $agent_id);
  115. if (empty($_ag_rate_data)) {
  116. return false;
  117. }
  118. $this->saveAgRateCache($app_id, $agent_id, $_ag_rate_data);
  119. }
  120. return $_ag_rate_data;
  121. }
  122. /**
  123. * 保存游戏渠道折扣数据
  124. *
  125. * @param int $app_id
  126. * @param int $agent_id
  127. * @param array $ag_rate_data
  128. * @param int $ttl
  129. */
  130. public function saveAgRateCache($app_id, $agent_id, $ag_rate_data, $ttl = 3600) {
  131. $_key = $this->getAgentGameRateKey($app_id, $agent_id);
  132. Cache::set($_key, json_encode($ag_rate_data), $ttl);
  133. }
  134. /**
  135. * 更新游戏渠道折扣信息
  136. *
  137. * @param int $app_id
  138. * @param int $agent_id
  139. * @param array $ag_rate_data
  140. *
  141. * @param bool $rm_cache 是否删除缓存
  142. *
  143. * @return bool
  144. */
  145. public function updateAgRate($app_id, $agent_id, $ag_rate_data, $rm_cache = false) {
  146. if (true == $rm_cache) {
  147. $_key = $this->getAgentGameRateKey($app_id, $agent_id);
  148. Cache::rm($_key);
  149. $_ag_rate_data = $ag_rate_data;
  150. } else {
  151. $_old_data = $this->getInfoByAppIdAgentId($app_id, $agent_id);
  152. $_ag_rate_data = array_merge($_old_data, $ag_rate_data);
  153. $this->saveAgRateCache($app_id, $agent_id, $_ag_rate_data);
  154. }
  155. return (new AgentGameRateModel())->updateData($_ag_rate_data, $_ag_rate_data['ag_id']);
  156. }
  157. }