* @version : HUOSDK 8.5 */ namespace huoIdentify\logic; use huo\model\common\CommonModel; use huoIdentify\model\IdentifyDayDotModel; use huolib\constant\CacheConst; use huolib\constant\CommonConst; use think\Cache; class IdentifyDayDotLogic extends CommonModel { protected $update_time = CommonConst::MINUTE_SECONDS_10; //写入数据库间隔时间 10分钟 60s protected $cache_key_prefix = CacheConst::CACHE_IDENTIFY_DAY_DOT_PREFIX; //缓存前缀 /** * 获取缓存key * * @param string $date 日期 * @param int $mem_id 玩家ID * @param string $device_id 设备ID android 为imei ios 为idfa h5 为 永久cookie标识 huoh5开头标识 * * @return string */ protected function getCacheKeyByDateMemDevice($date, $mem_id, $device_id) { $date = date('Ymd', strtotime($date)); return $this->cache_key_prefix.$date.$mem_id.$device_id; } /** * 保存缓存数据 * * @param $key * @param $data */ public function saveCacheData($key, $data) { $_expire = CommonConst::CONST_7_DAY_SECONDS; //缓存7天 Cache::set($key, $data, $_expire); } /** * 获取信息 * * @param string $date 日期 * @param int $mem_id 玩家ID * @param string $device_id 设备ID android 为imei ios 为idfa h5 为 永久cookie标识 huoh5开头标识 * * @return array|false|mixed */ public function getInfoByDateMemDevice($date, $mem_id, $device_id) { $date = date('Y-m-d', strtotime($date)); /* 缓存操作 */ $_cache_key = $this->getCacheKeyByDateMemDevice($date, $mem_id, $device_id); $_data = Cache::get($_cache_key); if (!empty($_data)) { return $_data; } $_idd_model = new IdentifyDayDotModel(); $_data = $_idd_model->getInfoByDateMemDevice($date, $mem_id, $device_id); if (empty($_data)) { $_data = [ 'date' => $date, 'device_id' => $device_id, 'mem_id' => $mem_id ]; $_idd_model->addData($_data); $_data = $_idd_model->getInfoByDateMemDevice($date, $mem_id, $device_id); } $_next_update_time = time() + $this->update_time; $_data['next_update_time'] = $_next_update_time; $this->saveCacheData($_cache_key, $_data); return $_data; } /** * 更新信息 * * @param array $data 更新数据 * @param string $date 日期 * @param int $mem_id 玩家ID * @param string $device_id 设备ID android 为imei ios 为idfa h5 为 永久cookie标识 huoh5开头标识 * * @return bool */ public function updateDataByDateMemDevice($data, $date, $mem_id, $device_id) { $_cache_key = $this->getCacheKeyByDateMemDevice($date, $mem_id, $device_id); $_old_data = $this->getInfoByDateMemDevice($date, $mem_id, $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 IdentifyDayDotModel())->updateData($_data, $_data['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开头标识 * @param int $mem_id 玩家id * * @return bool */ public function updateOnlineTimeByDevice($time, $device_id, $mem_id) { $_date = date('Y-m-d'); $_data = $this->getInfoByDateMemDevice($_date, $mem_id, $device_id); $_data['online_duration'] += $time; $_rs = $this->updateDataByDateMemDevice($_data, $_date, $mem_id, $device_id); return $_rs; } }