IdentifyDayIdotModel.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. /**
  3. * IdentifyDayIdotModel.php UTF-8
  4. * http://doc.huosdk.com/web/#/170?page_id=10985
  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 IdentifyDayIdotModel extends LogModel {
  15. protected $name = 'identify_day_idot';
  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 $id_card 证件号
  63. *
  64. * @return array|false
  65. */
  66. public function getInfoByDateMemIdCard($date, $mem_id, $id_card) {
  67. $date = date('Y-m-d', strtotime($date));
  68. $_map = [
  69. 'date' => $date,
  70. 'mem_id' => $mem_id,
  71. 'id_card' => $id_card
  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->getInfoByDateMemIdCard($data['date'], $data['mem_id'], $data['id_card']);
  96. if (!empty($_data)) {
  97. $_data = array_merge($_data, $data);
  98. }
  99. $_id = $this->addData($_data);
  100. return $_id;
  101. }
  102. /**
  103. * 生成表
  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 .= " `id_card` varchar(32) NOT NULL DEFAULT '' COMMENT '证件号identify_card',";
  116. $_sql .= " `online_duration` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '在线时长',";
  117. $_sql .= " `sum_money` decimal(12,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '消费金额',";
  118. $_sql .= " `create_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建时间',";
  119. $_sql .= " `update_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '更新时间',";
  120. $_sql .= " PRIMARY KEY (`id`) USING BTREE,";
  121. $_sql .= " UNIQUE KEY `idi_dmi_unique` (`date`,`mem_id`,`id_card`) USING BTREE,";
  122. $_sql .= " KEY `idi_card_index` (`id_card`) USING BTREE";
  123. $_sql .= " ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='玩家实名每日在线时长统计 idot:id_card_online_time';";
  124. return $this->execute($_sql);
  125. }
  126. }