LogDayMemFakerModel.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. /**
  3. * LogDayMemFakerModel.php UTF-8
  4. * 玩家每日
  5. *
  6. * @date : 2018/6/27 17:57
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : luowei <lwl@huosdk.com>
  10. * @version : HuoMp 1.0
  11. */
  12. namespace huomp\model\fill;
  13. use huo\model\log\LogModel;
  14. use huolib\constant\CommonConst;
  15. class LogDayMemFakerModel extends LogModel {
  16. protected $table = 'mp_log_day_mem_faker';
  17. public function mem() {
  18. return $this->belongsTo(MemFakerModel::className(), 'faker_id', 'id')
  19. ->where('is_delete', '=', CommonConst::CONST_NOT_DELETE)
  20. ->field(['id', 'nickname', 'avatar']);
  21. }
  22. /**
  23. * @param $data
  24. * @param bool $replace
  25. * @param bool $get_last_insert_id
  26. *
  27. * @return bool|int|string
  28. */
  29. public function insertLog($data, $replace = false, $get_last_insert_id = true) {
  30. $_data['faker_id'] = get_val($data, 'faker_id', 0);
  31. $_data['sub_mem_cnt'] = get_val($data, 'sub_mem_cnt', 0);
  32. $_data['sub_amount'] = get_val($data, 'sub_amount', 0);
  33. $_data['sum_amount'] = get_val($data, 'sum_amount', 0);
  34. $_data['date'] = date('Y-m-d', $data['create_time']);
  35. $_mem_data = $this->memDayInfo($_data, 10, true);
  36. $_mem_data = $_mem_data->toArray();
  37. if (!empty($_mem_data['data'])) {
  38. $_data['sub_mem_cnt'] += $_mem_data['data'][0]['sub_mem_cnt'];
  39. $_data['sub_amount'] += $_mem_data['data'][0]['sub_amount'];
  40. $_data['sum_amount'] += $_mem_data['data'][0]['sum_amount'];
  41. return $this->updateData($_data);
  42. }
  43. return parent::insertLog($_data, $replace, $get_last_insert_id);
  44. }
  45. /**
  46. * @param string $date
  47. *
  48. * @return int|void
  49. * @throws \think\db\exception\BindParamException
  50. * @throws \think\exception\PDOException
  51. */
  52. function checkTable($date = '') {
  53. $this->table = $this->getPartitionTableName(
  54. $this->partition_data, $this->partition_field, $this->partition_rule
  55. );
  56. $_sql = "CREATE TABLE IF NOT EXISTS `$this->table` (";
  57. $_sql .= "`id` int(11) NOT NULL AUTO_INCREMENT,";
  58. $_sql .= "`date` date NOT NULL COMMENT '日期',";
  59. $_sql .= "`faker_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'mem_faker表ID',";
  60. $_sql .= "`sub_mem_cnt` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '邀请人数',";
  61. $_sql .= "`sub_amount` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '邀请奖励',";
  62. $_sql .= "`sum_amount` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '当日收入',";
  63. $_sql .= " PRIMARY KEY (`id`),";
  64. $_sql .= "UNIQUE KEY `ldm_date_faker_unique` (`date`,`faker_id`),";
  65. $_sql .= "KEY `ldm_faker_index` (`faker_id`)";
  66. $_sql .= ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='玩家假数据每日';";
  67. return $this->execute($_sql);
  68. }
  69. /**
  70. * 玩家每日记录
  71. *
  72. * @param $param
  73. * @param int $offset
  74. * @param bool $the_day true 表示获取当日记录
  75. *
  76. * @return bool|\think\Paginator
  77. */
  78. public function memDayInfo($param, $offset = 10, $the_day = false) {
  79. if (isset($param['date']) && !empty($param['date'])) {
  80. $_date = $param['date'];
  81. } else {
  82. $_date = date('Y-m-d', time());
  83. }
  84. if (isset($param['faker_id']) && !empty($param['faker_id'])) {
  85. $_map['faker_id'] = $param['faker_id'];
  86. } else {
  87. return false;
  88. }
  89. if (true == $the_day) {
  90. $_map['date'] = $_date;
  91. }
  92. $_field = 'faker_id, sub_mem_cnt, sub_amount, sum_amount';
  93. $_data = $this->computeTable($_date)->field($_field)
  94. ->where($_map)
  95. ->paginate($offset);
  96. return $_data;
  97. }
  98. /**
  99. * 根据日期获取
  100. *
  101. * @param string $field 字段,包括别名
  102. * @param string $start_date 开始日期
  103. * @param string $end_date 结束日期
  104. * @param null $alias
  105. *
  106. * @return array
  107. * @throws \think\db\exception\DataNotFoundException
  108. * @throws \think\db\exception\ModelNotFoundException
  109. * @throws \think\exception\DbException
  110. */
  111. public function getByDate($field, $start_date, $end_date, $alias = null) {
  112. $alias or $alias = $field;
  113. $_rows = $this->computeTable($start_date)
  114. ->field("date, $field")
  115. ->group('date')
  116. ->select()->toArray();
  117. $_data = [];
  118. foreach ($_rows as $_row) {
  119. $_data[$_row['date']] = $_row[$alias];
  120. }
  121. $result = [];
  122. for ($_i = strtotime($start_date); $_i <= strtotime($end_date); $_i += 24 * 3600) {
  123. $_key = date('Y-m-d', $_i);
  124. $result[date('m-d', $_i)] = isset($_data[$_key]) ? doubleval($_data[$_key]) : 0;
  125. }
  126. return $result;
  127. }
  128. public function getLastDataByFakerId($faker_id) {
  129. $_map['faker_id'] = $faker_id;
  130. $_date = date('Y-m-d');
  131. $_info = $this->computeTable($_date)->where($_map)->find();
  132. if (false === $_info) {
  133. return false;
  134. }
  135. if (is_object($_info)) {
  136. return $_info->toArray();
  137. } else {
  138. return $_info;
  139. }
  140. }
  141. public function updateData($data) {
  142. if (empty($data['date'])) {
  143. return false;
  144. }
  145. if (empty($data['faker_id'])) {
  146. return false;
  147. }
  148. $_map = [
  149. 'faker_id' => $data['faker_id'],
  150. 'date' => $data['date'],
  151. ];
  152. $_rs = $this->computeTable($data['date'])->where($_map)->update($data);
  153. return $_rs;
  154. }
  155. }