MemLoginLogModel.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <?php
  2. /**
  3. * MemLoginLogModel.php UTF-8
  4. * 玩家登陆Log
  5. *
  6. * @date : 2018/4/24 18:11
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace huo\model\log;
  13. use huo\model\game\GameModel;
  14. use huo\model\member\MemberModel;
  15. use huo\model\user\UserModel;
  16. class MemLoginLogModel extends LogModel {
  17. protected $name = 'log_mem_login';
  18. public function agent() {
  19. return $this->hasOne(UserModel::className(), 'id', 'agent_id')
  20. ->field('id,user_login,user_nicename');
  21. }
  22. public function game() {
  23. return $this->hasOne(GameModel::className(), 'id', 'app_id')
  24. ->field(['id', 'name']);
  25. }
  26. public function mem() {
  27. return $this->hasOne(MemberModel::className(), 'id', 'mem_id')
  28. ->field(['id', 'username', 'nickname']);
  29. }
  30. /**
  31. * @param $data
  32. * @param bool $replace
  33. * @param bool $get_last_insert_id
  34. *
  35. * @return bool|int|string
  36. */
  37. public function insertLog($data, $replace = false, $get_last_insert_id = true) {
  38. $_data['mem_id'] = get_val($data, 'mem_id', 0);
  39. $_data['mg_mem_id'] = get_val($data, 'mg_mem_id', 0);
  40. $_data['agent_id'] = get_val($data, 'agent_id', 0);
  41. $_data['agent_game'] = get_val($data, 'agent_game', '');
  42. $_data['app_id'] = get_val($data, 'app_id', 0);
  43. $_data['device_id'] = get_val($data, 'device_id', '');
  44. $_data['idfv'] = get_val($data, 'idfv', '');
  45. $_data['mac'] = get_val($data, 'mac', '');
  46. $_data['ip'] = get_val($data, 'ip', '');
  47. $_data['brand'] = get_val($data, 'brand', '');
  48. $_data['model'] = urldecode(get_val($data, 'model', ''));
  49. $_data['os'] = get_val($data, 'os', '');
  50. $_data['os_version'] = urldecode(get_val($data, 'os_version', ''));
  51. $_data['screen'] = get_val($data, 'screen', '');
  52. $_data['net'] = get_val($data, 'net', '');
  53. $_data['imsi'] = get_val($data, 'imsi', '');
  54. $_data['longitude'] = get_val($data, 'longitude', '');
  55. $_data['latitude'] = get_val($data, 'latitude', '');
  56. $_data['userua'] = get_val($data, 'userua', '');
  57. $_data['from'] = get_val($data, 'from', 0);
  58. $_data['reg_time'] = get_val($data, 'reg_time', 0);
  59. $_data['create_time'] = get_val($data, 'create_time', time());
  60. $_data['open_cnt'] = get_val($data, 'from', 0);
  61. $_data['reg_app_id'] = get_val($data, 'reg_app_id', 0);
  62. $_data['date'] = date('Y-m-d', $_data['create_time']);
  63. return parent::insertLog($_data, $replace, $get_last_insert_id);
  64. }
  65. /**
  66. * @param string $date
  67. *
  68. * @return int|void
  69. * @throws \think\db\exception\BindParamException
  70. * @throws \think\exception\PDOException
  71. */
  72. function checkTable($date = '') {
  73. $this->table = $this->getPartitionTableName(
  74. $this->partition_data, $this->partition_field, $this->partition_rule
  75. );
  76. $_sql = "CREATE TABLE IF NOT EXISTS `$this->table` (";
  77. $_sql .= " `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',";
  78. $_sql .= " `date` date NOT NULL DEFAULT '2020-01-01' COMMENT '日期',";
  79. $_sql .= " `mem_id` int(11) NOT NULL DEFAULT '0' COMMENT '玩家ID',";
  80. $_sql .= " `mg_mem_id` int(11) NOT NULL DEFAULT '0' COMMENT '登陆游戏唯一标识ID 与mem_game的mg_mem_id对应',";
  81. $_sql .= " `agent_id` int(11) NOT NULL DEFAULT '0' COMMENT '玩家归属的ch_id',";
  82. $_sql .= " `agent_game` varchar(32) NOT NULL COMMENT '子渠道编号',";
  83. $_sql .= " `app_id` int(11) NOT NULL DEFAULT '0' COMMENT '游戏id',";
  84. $_sql .= " `device_id` varchar(64) NOT NULL DEFAULT '' COMMENT '手机设备码',";
  85. $_sql .= " `idfv` varchar(64) NOT NULL DEFAULT '' COMMENT 'IOS idfv',";
  86. $_sql .= " `mac` varchar(32) NOT NULL DEFAULT '' COMMENT '设备的mac',";
  87. $_sql .= " `ip` varchar(32) NOT NULL DEFAULT '' COMMENT '设备网络IP地址',";
  88. $_sql .= " `brand` varchar(16) NOT NULL DEFAULT '' COMMENT '设备品牌',";
  89. $_sql .= " `model` varchar(64) NOT NULL DEFAULT '' COMMENT '机型',";
  90. $_sql .= " `os` varchar(8) NOT NULL DEFAULT '' COMMENT '操作系统',";
  91. $_sql .= " `os_version` varchar(16) NOT NULL DEFAULT '' COMMENT '操作系统版本',";
  92. $_sql .= " `screen` varchar(16) NOT NULL DEFAULT '' COMMENT '分辨率',";
  93. $_sql .= " `net` varchar(8) NOT NULL DEFAULT '' COMMENT '3G,4G,WIFI',";
  94. $_sql .= " `imsi` varchar(16) NOT NULL DEFAULT '' COMMENT '设备的imsi',";
  95. $_sql .= " `longitude` varchar(32) NOT NULL DEFAULT '' COMMENT '经度',";
  96. $_sql .= " `latitude` varchar(32) NOT NULL DEFAULT '' COMMENT '纬度',";
  97. $_sql .= " `userua` varchar(255) NOT NULL DEFAULT '' COMMENT '用户使用的移动终端的UA信息',";
  98. $_sql .= " `from` smallint(4) NOT NULL DEFAULT '0' COMMENT '3 ANDROID、4 IOS、5 H5、 401 IOS切换',";
  99. $_sql .= " `reg_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '注册时间',";
  100. $_sql .= " `create_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '登录时间',";
  101. $_sql .= " `open_cnt` int(11) NOT NULL DEFAULT '0' COMMENT '打开此应用次数',";
  102. $_sql .= " `reg_app_id` int(11) NOT NULL DEFAULT '0' COMMENT '注册游戏ID',";
  103. $_sql .= " PRIMARY KEY (`id`),";
  104. $_sql .= " KEY `lml_time_index` (`create_time`),";
  105. $_sql .= " KEY `lml_mem_index` (`mem_id`),";
  106. $_sql .= " KEY `lml_date_index` (`date`)";
  107. $_sql .= ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='玩家登陆LOG';";
  108. return $this->execute($_sql);
  109. }
  110. /**
  111. * 玩家登录记录
  112. *
  113. * @param $param
  114. * @param int $offset
  115. *
  116. * @return bool|\think\Paginator
  117. * @throws \think\exception\DbException
  118. */
  119. public function memLoginInfo($param, $offset = 10) {
  120. if (isset($param['date']) && !empty($param['date'])) {
  121. $_date = $param['date'];
  122. } else {
  123. $_date = time();
  124. }
  125. if (isset($param['mem_id']) && !empty($param['mem_id'])) {
  126. $_map['mem_id'] = $param['mem_id'];
  127. } else {
  128. return false;
  129. }
  130. $_field = 'mem_id, app_id, create_time login_time, ip, os';
  131. $_data = $this->computeTable($_date)->with('game')->with('agent')->field($_field)
  132. ->where($_map)
  133. ->paginate($offset);
  134. return $_data;
  135. }
  136. /**
  137. * 获取设备-游戏登陆记录
  138. * @param $param
  139. * @param string $page
  140. *
  141. * @return int | array
  142. * @throws \think\db\exception\DataNotFoundException
  143. * @throws \think\db\exception\ModelNotFoundException
  144. * @throws \think\exception\DbException
  145. */
  146. public function getDeviceGameUser($param, $page = '1,10') {
  147. if (empty($param['device_id']) || empty($param['app_id'])) {
  148. $_rdata['count'] = 0;
  149. $_rdata['list'] = [];
  150. return $_rdata;
  151. }
  152. $_date = empty($param['time']) ? time() : $param['time'];
  153. $_map['app_id'] = $param['app_id'];
  154. $_map['device_id'] = $param['device_id'];
  155. $_count = $this->computeTable($param['time'])->where($_map)->group('mem_id')->count();
  156. if (empty($_count)) {
  157. $_rdata['count'] = 0;
  158. $_rdata['list'] = [];
  159. return $_rdata;
  160. }
  161. $_rdata = [];
  162. $_rdata['count'] = $_count;
  163. $_field = 'mem_id,app_id,create_time';
  164. $_log_data = $this->computeTable($_date)->with('mem')->with('game')->group('mem_id')->order('create_time desc')
  165. ->field($_field)
  166. ->where($_map)
  167. ->page($page)->select();
  168. if (is_object($_log_data)) {
  169. $_log_data = $_log_data->toArray();
  170. }
  171. $_list = [];
  172. foreach ($_log_data as $_k => $_v) {
  173. $_data = [];
  174. $_data['last_login_time'] = date('Y-m-d H:i:s', $_v['create_time']);
  175. $_data['username'] = isset($_v['mem']['username']) ? $_v['mem']['username'] : '';
  176. $_data['nickname'] = isset($_v['mem']['nickname']) ? $_v['mem']['nickname'] : '';
  177. $_data['last_login_game'] = isset($_v['game']['name']) ? $_v['game']['name'] : '';
  178. $_list[] = $_data;
  179. }
  180. $_rdata['count'] = $_count;
  181. $_rdata['list'] = $_list;
  182. return $_rdata;
  183. }
  184. }