| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | <?php/** * IdentifyDayDotModel.php  UTF-8 * http://doc.huosdk.com/web/#/170?page_id=10984 * 玩家设备每日在线时长统计 * * @date    : 2019/11/29 16:20 * * @license 这不是一个自由软件,未经授权不许任何使用和传播。 * @author  : chenbingling <cbl@huosdk.com> * @version : HUOSDK 8.5 */namespace huoIdentify\model;class IdentifyDayDotModel extends LogModel {    protected $name            = 'identify_day_dot';    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 $device_id 设备ID android 为imei ios 为idfa h5 为 永久cookie标识 huoh5开头标识     *     * @return array|false     */    public function getInfoByDateMemDevice($date, $mem_id, $device_id) {        $date = date('Y-m-d', strtotime($date));        $_map = [            'date'      => $date,            'mem_id'    => $mem_id,            'device_id' => $device_id        ];        $_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->getInfoByDateMemDevice($data['date'], $data['mem_id'], $data['device_id']);        if (!empty($_data)) {            $_data = array_merge($_data, $data);        }        $_id = $this->addData($_data);        return $_id;    }    /**     * 生成表     *     *     * @return bool|int     */    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 .= "  `device_id` varchar(64) DEFAULT '' COMMENT '设备ID android 为imei ios 为idfa h5 为 永久cookie标识 huoh5开头标识',";        $_sql .= "  `online_duration` int(11) unsigned NOT NULL DEFAULT '0' 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 `idd_dmd_unique` (`date`,`mem_id`,`device_id`) USING BTREE,";        $_sql .= "  KEY `idd_device_index` (`device_id`) USING BTREE";        $_sql .= " ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='玩家设备每日在线时长统计 dot:device_online_time';";        return $this->execute($_sql);    }}
 |