IdentifyDayDotModel.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. /**
  3. * IdentifyDayDotModel.php UTF-8
  4. * http://doc.huosdk.com/web/#/170?page_id=10984
  5. * 玩家设备每日在线时长统计
  6. *
  7. * @date : 2019/11/29 16:20
  8. *
  9. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  10. * @author : chenbingling <cbl@huosdk.com>
  11. * @version : HUOSDK 8.5
  12. */
  13. namespace huoIdentify\model;
  14. class IdentifyDayDotModel extends LogModel {
  15. protected $name = 'identify_day_dot';
  16. protected $pk = 'id';
  17. protected $table_date = '';
  18. protected $table_prefix = '';
  19. protected $partition_data = [];
  20. protected $partition_field = 'date';
  21. protected $partition_rule = ['type' => 'month', 'expr' => 1];
  22. /* 开启自动写入时间戳字段 */
  23. protected $autoWriteTimestamp = true;
  24. /**
  25. * 添加数据
  26. *
  27. * @param array $data 需要添加的数据
  28. *
  29. * @return false|int 添加失败返回 false 添加成功 返回添加的ID
  30. */
  31. public function addData($data) {
  32. if (empty($data['date'])) {
  33. return false;
  34. }
  35. if (empty($data['create_time'])) {
  36. $data['create_time'] = time();
  37. }
  38. if (empty($data['update_time'])) {
  39. $data['update_time'] = time();
  40. }
  41. $data['date'] = date('Y-m-d', strtotime($data['date']));
  42. /* 字段校验 */
  43. $_fields = $this->computeTable($data['date'])->getTableFields();
  44. $_data = [];
  45. foreach ($_fields as $_v) {
  46. if (isset($data[$_v])) {
  47. $_data[$_v] = $data[$_v];
  48. }
  49. }
  50. $_id = $this->computeTable($_data['date'])->insert($_data, true, true);
  51. if (false === $_id) {
  52. return false;
  53. }
  54. /* TAG缓存操作 */
  55. return $_id;
  56. }
  57. /**
  58. * 获取信息
  59. *
  60. * @param string $date 日期
  61. * @param int $mem_id 玩家ID
  62. * @param string $device_id 设备ID android 为imei ios 为idfa h5 为 永久cookie标识 huoh5开头标识
  63. *
  64. * @return array|false
  65. */
  66. public function getInfoByDateMemDevice($date, $mem_id, $device_id) {
  67. $date = date('Y-m-d', strtotime($date));
  68. $_map = [
  69. 'date' => $date,
  70. 'mem_id' => $mem_id,
  71. 'device_id' => $device_id
  72. ];
  73. $_data = $this->computeTable($_map['date'])->where($_map)->find();
  74. if (is_object($_data)) {
  75. $_data = $_data->toArray();
  76. }
  77. if (empty($_data)) {
  78. return [];
  79. }
  80. return $_data;
  81. }
  82. /**
  83. * 更新单条数据
  84. *
  85. * @param array $data 数据
  86. * @param int $id ID
  87. *
  88. * @return bool
  89. */
  90. public function updateData($data, $id) {
  91. if (empty($data['date'])) {
  92. return false;
  93. }
  94. $data['date'] = date('Y-m-d', strtotime($data['date']));
  95. $_data = $this->getInfoByDateMemDevice($data['date'], $data['mem_id'], $data['device_id']);
  96. if (!empty($_data)) {
  97. $_data = array_merge($_data, $data);
  98. }
  99. $_id = $this->addData($_data);
  100. return $_id;
  101. }
  102. /**
  103. * 生成表
  104. *
  105. *
  106. * @return bool|int
  107. */
  108. function checkTable($create_time = 0) {
  109. parent::checkTable($create_time);
  110. $_sql = "CREATE TABLE IF NOT EXISTS `$this->table` (";
  111. $_sql .= " `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',";
  112. $_sql .= " `date` date NOT NULL DEFAULT '".$this->partition_data[$this->partition_field]."' COMMENT '日期',";
  113. $_sql .= " `mem_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '玩家ID',";
  114. $_sql .= " `device_id` varchar(64) DEFAULT '' COMMENT '设备ID android 为imei ios 为idfa h5 为 永久cookie标识 huoh5开头标识',";
  115. $_sql .= " `online_duration` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '在线时长',";
  116. $_sql .= " `create_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建时间',";
  117. $_sql .= " `update_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '更新时间',";
  118. $_sql .= " PRIMARY KEY (`id`) USING BTREE,";
  119. $_sql .= " UNIQUE KEY `idd_dmd_unique` (`date`,`mem_id`,`device_id`) USING BTREE,";
  120. $_sql .= " KEY `idd_device_index` (`device_id`) USING BTREE";
  121. $_sql .= " ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='玩家设备每日在线时长统计 dot:device_online_time';";
  122. return $this->execute($_sql);
  123. }
  124. }