| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | <?php/** * IdentifyDotLogic.php  UTF-8 * 设备在线时长统计逻辑处理 * * @date    : 2019/11/29 17:43 * * @license 这不是一个自由软件,未经授权不许任何使用和传播。 * @author  : chenbingling <cbl@huosdk.com> * @version : HUOSDK 8.5 */namespace huoIdentify\logic;use huo\model\common\CommonModel;use huoIdentify\model\IdentifyDotModel;use huolib\constant\CacheConst;use huolib\constant\CommonConst;use think\Cache;class IdentifyDotLogic extends CommonModel {    protected $update_time      = CommonConst::MINUTE_SECONDS_10; //写入数据库间隔时间 10分钟 60s    protected $cache_key_prefix = CacheConst::CACHE_IDENTIFY_DOT_PREFIX; //缓存前缀    /***     * 根据device_id和日期获取缓存key     *     * @param string $device_id 设备ID android 为imei ios 为idfa h5 为 永久cookie标识 huoh5开头标识     * @param string $date      日期 年月日 空者获取今日日期     *     * @return string     */    public function getCacheKeyByDeviceDate($device_id, $date = '') {        $_date = date('Ymd');        if (!empty($date)) {            $_date = date('Ymd', strtotime($date));        }        $_cache_key = $this->cache_key_prefix.$device_id.$_date;        return $_cache_key;    }    /**     * 保存缓存数据     *     * @param $key     * @param $data     */    public function saveCacheData($key, $data) {        $_expire = CommonConst::CONST_7_DAY_SECONDS;  //缓存7天        Cache::set($key, $data, $_expire);    }    /***     * 根据id_card获取统计数据     *     * @param string $device_id 设备ID android 为imei ios 为idfa h5 为 永久cookie标识 huoh5开头标识     *     * @return mixed     */    public function getInfoByDevice($device_id) {        if (empty($device_id)) {            return [];        }        $_cache_key = $this->getCacheKeyByDeviceDate($device_id);        $_data = Cache::get($_cache_key);        if (!empty($_data)) {            return $_data;        }        $_model = new IdentifyDotModel();        $_info = $_model->getInfoByDevice($device_id);        if (empty($_info)) {            $_data = [                'device_id' => $device_id            ];            $_model->addData($_data);            $_info = $_model->getInfoByDevice($device_id);        }        $_next_update_time = time() + $this->update_time;        $_info['next_update_time'] = $_next_update_time;        $this->saveCacheData($_cache_key, $_info);        return $_info;    }    /**     * 根据id_card更新统计数据     *     * @param array  $data      更新数据     * @param string $device_id 设备ID android 为imei ios 为idfa h5 为 永久cookie标识 huoh5开头标识     *     * @return bool     */    public function updateByDevice($data, $device_id) {        $_cache_key = $this->getCacheKeyByDeviceDate($device_id);        $_old_data = $this->getInfoByDevice($device_id);        $_data = array_merge($_old_data, $data);        $_time = time();        $_update_time = $_data['next_update_time'];   //获取当前缓存的更新时间 入库失败则回退        $_data['update_time'] = $_time;        $this->saveCacheData($_cache_key, $_data);  //先更新缓存        if ($_update_time <= $_time) {            $_data['next_update_time'] = $_time + $this->update_time;            $_rs = (new IdentifyDotModel())->updateByDevice($_data, $device_id);            if (false === $_rs) {                /* 入库失败 */                $_data['next_update_time'] = $_update_time; //还原更新时间            }            $this->saveCacheData($_cache_key, $_data);  //更新缓存        }        return true;    }    /**     * 更新时长     *     * @param int    $time      时长     * @param string $device_id 设备ID android 为imei ios 为idfa h5 为 永久cookie标识 huoh5开头标识     *     * @return bool     */    public function updateOnlineTimeByDevice($time, $device_id) {        $_data = $this->getInfoByDevice($device_id);        $_data['online_duration'] += $time;        $_rs = $this->updateByDevice($_data, $device_id);        return $_rs;    }}
 |