123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?php
- /**
- * IdentifyDayIdotModel.php UTF-8
- * http://doc.huosdk.com/web/#/170?page_id=10985
- * 玩家实名每日在线时长统计
- *
- * @date : 2019/11/29 16:20
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : chenbingling <cbl@huosdk.com>
- * @version : HUOSDK 8.5
- */
- namespace huoIdentify\model;
- class IdentifyDayIdotModel extends LogModel {
- protected $name = 'identify_day_idot';
- protected $pk = 'id';
- protected $table_date = '';
- protected $table_prefix = '';
- protected $partition_data = [];
- protected $partition_field = 'date';
- protected $partition_rule = ['type' => 'month', 'expr' => 1];
- /* 开启自动写入时间戳字段 */
- protected $autoWriteTimestamp = true;
- /**
- * 添加数据
- *
- * @param array $data 需要添加的数据
- *
- * @return false|int 添加失败返回 false 添加成功 返回添加的ID
- */
- public function addData($data) {
- if (empty($data['date'])) {
- return false;
- }
- if (empty($data['create_time'])) {
- $data['create_time'] = time();
- }
- if (empty($data['update_time'])) {
- $data['update_time'] = time();
- }
- $data['date'] = date('Y-m-d', strtotime($data['date']));
- /* 字段校验 */
- $_fields = $this->computeTable($data['date'])->getTableFields();
- $_data = [];
- foreach ($_fields as $_v) {
- if (isset($data[$_v])) {
- $_data[$_v] = $data[$_v];
- }
- }
- $_id = $this->computeTable($_data['date'])->insert($_data, true, true);
- if (false === $_id) {
- return false;
- }
- /* TAG缓存操作 */
- return $_id;
- }
- /**
- * 获取信息
- *
- * @param string $date 日期
- * @param int $mem_id 玩家ID
- * @param string $id_card 证件号
- *
- * @return array|false
- */
- public function getInfoByDateMemIdCard($date, $mem_id, $id_card) {
- $date = date('Y-m-d', strtotime($date));
- $_map = [
- 'date' => $date,
- 'mem_id' => $mem_id,
- 'id_card' => $id_card
- ];
- $_data = $this->computeTable($_map['date'])->where($_map)->find();
- if (is_object($_data)) {
- $_data = $_data->toArray();
- }
- if (empty($_data)) {
- return [];
- }
- return $_data;
- }
- /**
- * 更新单条数据
- *
- * @param array $data 数据
- * @param int $id ID
- *
- * @return bool
- */
- public function updateData($data, $id) {
- if (empty($data['date'])) {
- return false;
- }
- $data['date'] = date('Y-m-d', strtotime($data['date']));
- $_data = $this->getInfoByDateMemIdCard($data['date'], $data['mem_id'], $data['id_card']);
- if (!empty($_data)) {
- $_data = array_merge($_data, $data);
- }
- $_id = $this->addData($_data);
- return $_id;
- }
- /**
- * 生成表
- *
- * @return bool|int
- * @throws \think\db\exception\BindParamException
- * @throws \think\exception\PDOException
- */
- function checkTable($create_time = 0) {
- parent::checkTable($create_time);
- $_sql = "CREATE TABLE IF NOT EXISTS `$this->table` (";
- $_sql .= " `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',";
- $_sql .= " `date` date NOT NULL DEFAULT '".$this->partition_data[$this->partition_field]."' COMMENT '日期',";
- $_sql .= " `mem_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '玩家ID',";
- $_sql .= " `id_card` varchar(32) NOT NULL DEFAULT '' COMMENT '证件号identify_card',";
- $_sql .= " `online_duration` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '在线时长',";
- $_sql .= " `sum_money` decimal(12,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '消费金额',";
- $_sql .= " `create_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建时间',";
- $_sql .= " `update_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '更新时间',";
- $_sql .= " PRIMARY KEY (`id`) USING BTREE,";
- $_sql .= " UNIQUE KEY `idi_dmi_unique` (`date`,`mem_id`,`id_card`) USING BTREE,";
- $_sql .= " KEY `idi_card_index` (`id_card`) USING BTREE";
- $_sql .= " ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='玩家实名每日在线时长统计 idot:id_card_online_time';";
- return $this->execute($_sql);
- }
- }
|