IdentifyDayMotModel.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. /**
  3. * IdentifyDayMotModel.php UTF-8
  4. * http://doc.huosdk.com/web/#/170?page_id=10986
  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 IdentifyDayMotModel extends LogModel {
  15. protected $name = 'identify_day_mot';
  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. *
  63. * @return array|false
  64. */
  65. public function getInfoByDateMem($date, $mem_id) {
  66. $date = date('Y-m-d', strtotime($date));
  67. $_map = [
  68. 'date' => $date,
  69. 'mem_id' => $mem_id
  70. ];
  71. $_data = $this->computeTable($_map['date'])->where($_map)->find();
  72. if (is_object($_data)) {
  73. $_data = $_data->toArray();
  74. }
  75. if (empty($_data)) {
  76. return [];
  77. }
  78. return $_data;
  79. }
  80. /**
  81. * 更新单条数据
  82. *
  83. * @param array $data 数据
  84. * @param int $id ID
  85. *
  86. * @return bool
  87. */
  88. public function updateData($data, $id) {
  89. if (empty($data['date'])) {
  90. return false;
  91. }
  92. $data['date'] = date('Y-m-d', strtotime($data['date']));
  93. $_data = $this->getInfoByDateMem($data['date'], $data['mem_id']);
  94. if (!empty($_data)) {
  95. $_data = array_merge($_data, $data);
  96. }
  97. $_id = $this->addData($_data);
  98. return $_id;
  99. }
  100. /**
  101. * 生成表
  102. *
  103. * @param int $create_time
  104. *
  105. * @return bool|int
  106. * @throws \think\db\exception\BindParamException
  107. * @throws \think\exception\PDOException
  108. */
  109. function checkTable($create_time = 0) {
  110. parent::checkTable($create_time);
  111. $_sql = "CREATE TABLE IF NOT EXISTS `$this->table` (";
  112. $_sql .= " `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',";
  113. $_sql .= " `date` date NOT NULL DEFAULT '".$this->partition_data[$this->partition_field]."' COMMENT '日期',";
  114. $_sql .= " `mem_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '玩家ID',";
  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 `idm_dm_unique` (`date`,`mem_id`) USING BTREE";
  120. $_sql .= ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='玩家每日在线时长统计 mot:mem_online_time';";
  121. return $this->execute($_sql);
  122. }
  123. }