AgentGameLogic.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. <?php
  2. /**
  3. * AgentGameLogic.php UTF-8
  4. * 渠道游戏逻辑处理
  5. *
  6. * @date : 2018/5/17 20:43
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace huo\logic\agent;
  13. use huo\controller\agent\AgentCache;
  14. use huo\model\agent\AgentGameModel;
  15. use huo\model\common\CommonModel;
  16. use huo\model\game\GameModel;
  17. use huo\model\rate\AgentGameRateModel;
  18. use huo\model\rate\GameRateModel;
  19. use huo\model\user\UserModel;
  20. use huolib\constant\CommonConst;
  21. use huolib\constant\GameConst;
  22. use huolib\tool\Time;
  23. use huomp\controller\agent\AgentState;
  24. class AgentGameLogic extends CommonModel {
  25. /**
  26. * @param array $param
  27. *
  28. * @return array
  29. */
  30. protected function getWhere($param = []) {
  31. $_map = [];
  32. if (!empty($param['start_time']) && !empty($param['end_time'])) {
  33. $_map['agent_game_model.create_time']
  34. = [
  35. 'between',
  36. [
  37. strtotime($param['start_time']),
  38. CommonConst::CONST_DAY_SECONDS + strtotime($param['end_time'])
  39. ]
  40. ];
  41. } elseif (!empty($param['start_time'])) {
  42. $_map['agent_game_model.create_time'] = ['egt', strtotime($param['start_time'])];
  43. } elseif (!empty($param['end_time'])) {
  44. $_map['agent_game_model.create_time'] = ['elt',
  45. CommonConst::CONST_DAY_SECONDS + strtotime($param['end_time'])];
  46. }
  47. if (!empty($param['role_id']) && empty($param['parent_id'])) {
  48. $_role_ids = [$param['role_id']];
  49. if (is_array($param['role_id'])) {
  50. $_role_ids = $param['role_id'];
  51. }
  52. $_agent_ids = (new UserModel())->getIdsByRoleId($_role_ids);
  53. $_map['agent_id'] = ['in', $_agent_ids];
  54. }
  55. if (!empty($param['agent_id'])) {
  56. $_map['agent_id'] = $param['agent_id'];
  57. }
  58. if (!empty($param['parent_id'])) {
  59. // $_map['parent_id'] = $param['parent_id'];
  60. $_agent_ids = (new UserModel())->getSubAgents($param['parent_id']);
  61. if (!empty($_agent_ids)) {
  62. $_map['agent_id'] = ['in', $_agent_ids];
  63. } else {
  64. $_map['agent_id'] = -1;
  65. }
  66. }
  67. if (!empty($param['sub_agent_id'])) {
  68. $_map['agent_id'] = $param['sub_agent_id'];
  69. }
  70. if (!empty($param['agent_name'])) {
  71. $_agent_id = (new UserModel())->getIdByName($param['agent_name']);
  72. $_map['agent_id'] = $_agent_id;
  73. }
  74. if (!empty($param['classify'])) {
  75. $_map['classify'] = $param['classify'];
  76. }
  77. if (!empty($param['game_id'])) {
  78. $_map['app_id'] = $param['game_id'];
  79. }
  80. if (!empty($param['promote_switch'])) {
  81. $_map['game.promote_switch'] = $param['promote_switch'];
  82. }
  83. if (!empty($param['app_id'])) {
  84. $_map['app_id'] = $param['app_id'];
  85. }
  86. if (!empty($param['agent_benefit_type'])) {
  87. $_ag_ids = (new AgentGameRateModel())->getAgIdsByAgentBenefitType($param['agent_benefit_type']);
  88. $_map['agent_game_model.id'] = ['in', $_ag_ids];
  89. }
  90. if (!empty($param['status'])) {
  91. $_map['agent_game_model.status'] = $param['status'];
  92. }
  93. $_map['agent_game_model.is_delete'] = CommonConst::CONST_NOT_DELETE;
  94. return $_map;
  95. }
  96. /**
  97. * 获取游戏渠道列表
  98. *
  99. * @param array $where
  100. * @param string $page
  101. * @param string $order
  102. *
  103. * @return mixed
  104. */
  105. public function getAgentGames($where = [], $page = '1,10', $order = '-create_time') {
  106. $_map = $this->getWhere($where);
  107. $_map['game.status'] = GameConst::GAME_STATUS_ON;
  108. $_ag_model = new AgentGameModel();
  109. $_count = $_ag_model->with('game')->where($_map)->count();
  110. if (empty($_count)) {
  111. $_rdata['count'] = 0;
  112. $_rdata['list'] = [];
  113. return $_rdata;
  114. }
  115. $_field = 'classify as classify_label';
  116. $_order = $this->orderFilter($order);
  117. $_games = $_ag_model
  118. ->with('game')
  119. ->with('rate,gamerate,agent,gamemini,gv,agent.parent')
  120. ->field($_field)
  121. ->where($_map)
  122. ->order($_order)
  123. ->page($page)
  124. ->select();
  125. if (is_object($_games)) {
  126. $_games = $_games->toArray();
  127. }
  128. $_list = [];
  129. $_game_model = new GameModel();
  130. $_gr_model = new GameRateModel();
  131. $_agent_state = new AgentState();
  132. foreach ($_games as $_k => $_v) {
  133. $_data = [];
  134. $_share_code = $_agent_state->genAgentCode($_v['id']);
  135. $_data['ag_id'] = $_v['id'];
  136. $_data['share_code'] = $_share_code;
  137. $_data['state'] = empty($_v['gv'][0]['package_url']) ? ''
  138. : $_v['gv'][0]['package_url'].'?state='.$_share_code;
  139. $_data['agent_id'] = $_v['agent_id'];
  140. $_data['app_id'] = $_v['app_id'];
  141. $_data['game_id'] = !empty($_v['game']['id']) ? $_v['game']['id'] : 0;
  142. $_data['mini_app_id'] = !empty($_v['gamemini']['mini_app_id']) ? $_v['gamemini']['mini_app_id'] : 0;
  143. $_data['gamename'] = !empty($_v['game']['name']) ? $_v['game']['name'] : '';
  144. $_data['agent_name'] = !empty($_v['agent']['user_login']) ? $_v['agent']['user_login'].' | '
  145. .$_v['agent']['user_nicename'] : '';
  146. $_data['role_id'] = !empty($_v['agent']['role_id']) ? $_v['agent']['role_id'] : 0;
  147. $_data['icon'] = !empty($_v['game']['icon']) ? $_v['game']['icon'] : '';
  148. $_data['type'] = !empty($_v['game']['type']) ? $_v['game']['type'] : '';
  149. $_data['tags'] = !empty($_v['game']['tags']) ? $_v['game']['tags'] : '';
  150. $_data['gift_cnt'] = 0;
  151. $_data['package_name'] = !empty($_v['game']['package_name']) ? $_v['game']['package_name'] : '';
  152. $_data['oneword'] = !empty($_v['game']['oneword']) ? $_v['game']['oneword'] : '';
  153. $_data['runtime'] = !empty($_v['game']['runtime']) ? $_v['game']['runtime'] : '';
  154. $_data['classify'] = $_v['classify_label'];
  155. $_data['classify_label'] = $_game_model->getClassifyLabelAttr($_v['classify_label']);
  156. $_data['agent_benefit_type'] = !empty($_v['rate']['agent_benefit_type']) ? $_v['rate']['agent_benefit_type']
  157. : 0;
  158. $_data['agent_benefit_type_text'] = $_gr_model->getAgentBenefitTypeTextAttr($_data['agent_benefit_type']);
  159. $_data['agent_rebate'] = !empty($_v['rate']['agent_rebate']) ? $_v['rate']['agent_rebate'] : 0;
  160. $_data['sub_agent_rebate'] = !empty($_v['rate']['sub_agent_rebate']) ? $_v['rate']['sub_agent_rebate'] : 0;
  161. $_data['agent_reward'] = !empty($_v['rate']['agent_reward']) ? $_v['rate']['agent_reward'] : 0;
  162. $_data['sub_agent_reward'] = !empty($_v['rate']['sub_agent_reward']) ? $_v['rate']['sub_agent_reward'] : 0;
  163. $_data['status'] = $_v['status'];
  164. $_data['create_time'] = $_v['create_time'];
  165. if ($_data['classify'] == GameConst::GAME_MP) {
  166. $_data['package_url'] = $_v['package_url'];
  167. } else {
  168. $_data['package_url'] = $this->getPackageUrl(
  169. $_data['classify'], $_data['app_id'], $_data['agent_id'], $_data['ag_id']
  170. );
  171. }
  172. $_data['parent_name'] = ($_v['agent']['parent_id'] <= 1) ? '--' : $_v['agent']['parent']['user_nicename'];
  173. $_data['user_login'] = ($_v['agent']['parent_id'] <= 1) ? '--' : $_v['agent']['parent']['user_login'];
  174. $_data['id'] = $_v['id'];
  175. $_data['is_switch'] = $_v['is_switch'];
  176. $_data['switch_rate'] = $_v['rate']['switch_rate'];
  177. $_data['promote_switch'] = $_v['rate']['promote_switch'];
  178. $_data['promote_switch_label'] = $_game_model->getAgPsLabel($_data['status']);
  179. //$_data['agent_benefit_type'] = $_v['rate']['agent_benefit_type'];
  180. $_list[] = $_data;
  181. }
  182. if (empty($_games)) {
  183. $_list = null;
  184. }
  185. $_rdata['count'] = $_count;
  186. $_rdata['list'] = $_list;
  187. return $_rdata;
  188. }
  189. /**
  190. * @param $agent_id
  191. *
  192. * @return array
  193. * sum_game_cnt 总游戏数
  194. * today_game_cnt 今日游戏数
  195. * yesterday_game_cnt 昨日游戏数
  196. */
  197. public function getStaticGame($agent_id) {
  198. $_ag_model = new AgentGameModel();
  199. $_map['agent_id'] = $agent_id;
  200. $_rdata['sum_game_cnt'] = $_ag_model->where($_map)->count();
  201. list($today_start, $today_end) = Time::today();
  202. $_map['create_time'] = ['gt', $today_start];
  203. $_rdata['today_game_cnt'] = $_ag_model->where($_map)->count();
  204. $_map['create_time'] = ['between', [$today_start - CommonConst::CONST_DAY_SECONDS, $today_start]];
  205. $_rdata['yesterday_game_cnt'] = $_ag_model->where($_map)->count();
  206. return $_rdata;
  207. }
  208. /**
  209. * 获取游戏地址
  210. *
  211. * @param $classify
  212. * @param $game_id
  213. * @param int $agent_id
  214. * @param int $ag_id
  215. *
  216. * @return string
  217. */
  218. public function getPackageUrl($classify, $game_id, $agent_id = 0, $ag_id = 0) {
  219. if (GameConst::GAME_H5 == $classify) {//H5游戏
  220. return MOBILESITE."/sdk.php/game?game_id={$game_id}&agent_id={$agent_id}";
  221. }
  222. //其他游戏
  223. return SDKSITE.'/down/down?id='.base_convert($ag_id, 10, 36);
  224. }
  225. /**
  226. * 通过id获取渠道游戏标识
  227. *
  228. * @param $ag_id
  229. *
  230. * @return mixed
  231. */
  232. public function getAgentGameById($ag_id) {
  233. $_map['id'] = $ag_id;
  234. $_agent_game = (new AgentGameModel())->where($_map)->value('agent_game');
  235. if (empty($_agent_game)) {
  236. return '';
  237. }
  238. return $_agent_game;
  239. }
  240. /**
  241. * 通过app_id 修改渠道游戏信息
  242. *
  243. * @param $app_id
  244. * @param $_data
  245. */
  246. public function UpdateAgentGameByAppId($app_id, $_data) {
  247. /*查找所有渠道游戏的id*/
  248. $_map = ['app_id' => $app_id];
  249. $_ag_ids = (new AgentGameModel())->where($_map)->column('id');
  250. foreach ($_ag_ids as $_v) {
  251. $_data['id'] = $_v;
  252. AgentCache::ins()->updateAg($_v, $_data, true);
  253. }
  254. }
  255. /**
  256. * 获取渠道的游戏id
  257. *
  258. * @param $agent_id
  259. *
  260. * @return array
  261. */
  262. public function getAgentGameIds($agent_id) {
  263. $_map = ['agent_id' => $agent_id];
  264. return (new AgentGameModel())->where($_map)->column('app_id');
  265. }
  266. }