MemCache.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. <?php
  2. /**
  3. * MemCache.php UTF-8
  4. * 玩家缓存
  5. *
  6. * @date : 2018/4/25 23:20
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace huo\controller\member;
  13. use huo\controller\common\Base;
  14. use huo\logic\member\MemberLogic;
  15. use huo\model\member\MemberExtModel;
  16. use huo\model\member\MemoauthModel;
  17. use huolib\constant\CacheConst;
  18. use huolib\constant\MemConst;
  19. use think\Cache;
  20. class MemCache extends Base {
  21. public static function ins() {
  22. return new static();
  23. }
  24. /**
  25. *获取玩家Key
  26. *
  27. * @param string $mem_id
  28. *
  29. * @return string
  30. */
  31. public function getMemIdKey($mem_id) {
  32. return 'mem_key_'.$mem_id;
  33. }
  34. /**
  35. * 获取渠道ID
  36. *
  37. * @param $mem_id
  38. *
  39. * @return mixed
  40. */
  41. public function getAgentIdByMemId($mem_id) {
  42. $_mem_data = MemCache::ins()->getInfoById($mem_id);
  43. return $_mem_data['agent_id'];
  44. }
  45. /**
  46. * 获取上级玩家ID
  47. *
  48. * @param $mem_id
  49. *
  50. * @return mixed
  51. */
  52. public function getParentIdByMemId($mem_id) {
  53. $_mem_data = MemCache::ins()->getInfoById($mem_id);
  54. return $_mem_data['parent_mem_id'];
  55. }
  56. /**
  57. * 获取账户信息
  58. *
  59. * @param string $mem_id
  60. *
  61. * @return array|bool|mixed
  62. */
  63. public function getInfoById($mem_id) {
  64. $_key = $this->getMemIdKey($mem_id);
  65. Cache::rm($_key);
  66. $_mem_data_json = Cache::get($_key);
  67. $_mem_data = json_decode($_mem_data_json, true);
  68. if (!is_array($_mem_data)) {
  69. $_mem_data = $_mem_data_json;
  70. }
  71. if (!is_array($_mem_data) || empty($_mem_data)) {
  72. $_mem_data = (new MemberLogic())->getInfoById($mem_id);
  73. if (empty($_mem_data)) {
  74. return false;
  75. }
  76. $this->saveMemCache($mem_id, $_mem_data);
  77. }
  78. return $_mem_data;
  79. }
  80. /**
  81. * 保存玩家cache 数据
  82. *
  83. * @param string $mem_id
  84. * @param array $mem_data
  85. * @param int $ttl
  86. */
  87. public function saveMemCache($mem_id, $mem_data, $ttl = 3600) {
  88. $_key = $this->getMemIdKey($mem_id);
  89. Cache::set($_key, json_encode($mem_data), $ttl);
  90. }
  91. /**
  92. * 更新帐号信息
  93. *
  94. * @param string $mem_id
  95. * @param array $mem_data
  96. *
  97. * @return bool
  98. */
  99. public function updateMem($mem_id, $mem_data) {
  100. $_key = $this->getMemIdKey($mem_id);
  101. Cache::rm($_key);
  102. return (new MemberLogic())->updateMem($mem_id, $mem_data);
  103. }
  104. /**
  105. *获取玩家Key
  106. *
  107. * @param string $type
  108. * @param string $open_id
  109. *
  110. * @return string
  111. */
  112. public function getOpenIdKey($type, $open_id) {
  113. return CacheConst::CACHE_MEM_OAUTH_OPENID_MEM_PREFIX.$type.'_'.$open_id;
  114. }
  115. /**
  116. * 通过OpenId 获取玩家ID
  117. *
  118. *
  119. * @param string $type
  120. * @param string $open_id
  121. *
  122. * @return string
  123. */
  124. public function getMemIdByOpenId($type, $open_id) {
  125. $_key = $this->getOpenIdKey($type, $open_id);
  126. $_mem_id = Cache::get($_key);
  127. if (empty($_mem_id)) {
  128. $_mem_id = (new MemoauthModel())->getMemIdByOpenId($type, $open_id);
  129. if (empty($_mem_id)) {
  130. return false;
  131. }
  132. $this->saveOpenIdCache($type, $open_id, $_mem_id);
  133. }
  134. return $_mem_id;
  135. }
  136. /**
  137. * 保存玩家cache 数据
  138. *
  139. * @param string $type
  140. * @param string $open_id
  141. * @param string $mem_id
  142. * @param int $ttl
  143. *
  144. * @return bool
  145. */
  146. public function saveOpenIdCache($type, $open_id, $mem_id, $ttl = 3600) {
  147. $_key = $this->getOpenIdKey($type, $open_id);
  148. return Cache::set($_key, $mem_id, $ttl);
  149. }
  150. /**
  151. * 获取玩家Key
  152. *
  153. * @param $mem_id
  154. *
  155. * @return string
  156. */
  157. public function getMemExtKey($mem_id) {
  158. return 'me_key_'.$mem_id;
  159. }
  160. /**
  161. * 通过OpenId 获取玩家ID
  162. *
  163. * @param $mem_id
  164. *
  165. * @return array|bool
  166. */
  167. public function getMeInfoById($mem_id) {
  168. $_key = $this->getMemExtKey($mem_id);
  169. $_me_data_json = Cache::get($_key);
  170. $_me_data = json_decode($_me_data_json, true);
  171. if (!is_array($_me_data)) {
  172. $_me_data = $_me_data_json;
  173. }
  174. if (!is_array($_me_data) || empty($_me_data)) {
  175. $_me_data = (new MemberExtModel())->getExt($mem_id);
  176. if (empty($_me_data)) {
  177. return false;
  178. }
  179. $this->saveMeCache($mem_id, $_me_data);
  180. }
  181. return $_me_data;
  182. }
  183. /**
  184. * 获取玩家积分余额
  185. *
  186. * @param int $mem_id 玩家ID
  187. *
  188. * @return int|mixed
  189. */
  190. public function getMyItg($mem_id) {
  191. $_me_data = $this->getMeInfoById($mem_id);
  192. if (empty($_me_data)) {
  193. return 0;
  194. }
  195. return $_me_data['my_integral'];
  196. }
  197. /**
  198. * 保存玩家cache 数据
  199. *
  200. * @param string $mem_id
  201. * @param array $me_data
  202. * @param int $ttl
  203. *
  204. * @return bool
  205. */
  206. public function saveMeCache($mem_id, $me_data, $ttl = 3600) {
  207. $_key = $this->getMemExtKey($mem_id);
  208. return Cache::set($_key, json_encode($me_data), $ttl);
  209. }
  210. /**
  211. * 更新玩家扩展信息
  212. *
  213. * @param string $mem_id
  214. * @param array $me_data
  215. *
  216. * @param bool $rm_cache 是否强刷缓存
  217. *
  218. * @return bool
  219. */
  220. public function updateMeCache($mem_id, $me_data, $rm_cache = false) {
  221. if (true == $rm_cache) {
  222. $_key = $this->getMemExtKey($mem_id);
  223. Cache::rm($_key);
  224. $_me_data = $me_data;
  225. } else {
  226. $_old_data = $this->getMeInfoById($mem_id);
  227. $_me_data = array_merge($_old_data, $me_data);
  228. $this->saveMeCache($mem_id, $_me_data);
  229. }
  230. $_rs = (new MemberExtModel())->updateExt($_me_data, $mem_id);
  231. return $_rs;
  232. }
  233. /**
  234. * 判断是否封禁
  235. *
  236. * @param $mem_id
  237. *
  238. * @return bool
  239. */
  240. public function isBan($mem_id) {
  241. $_mem_info = $this->getInfoById($mem_id);
  242. if ($_mem_info['status'] == MemConst::STATUS_FORBID) {
  243. return true;
  244. }
  245. return false;
  246. }
  247. }