* @version : HUOSDK 8.0 */ namespace huo\controller\integral; use huo\controller\common\Base; use huo\model\integral\MemItgModel; use huolib\tool\Time; use think\Cache; class MemIaCache extends Base { /** *获取玩家积分活动KEY * * @param int $ia_id * @param int $mem_id * * @return string */ public function getMemIaKey($ia_id, $mem_id) { return 'mem_ia_'.$ia_id.'_'.$mem_id; } /** * 获取玩家积分活动信息 * * @param int $ia_id * @param int $mem_id * * @return array|bool|mixed */ public function getMemIaByMemIaId($ia_id, $mem_id) { $_key = $this->getMemIaKey($ia_id, $mem_id); $_mia_data_json = Cache::get($_key); $_mia_data = json_decode($_mia_data_json, true); if (!is_array($_mia_data)) { $_mia_data = $_mia_data_json; } if (!is_array($_mia_data) || empty($_mia_data)) { $_mia_data = (new MemItgModel())->getMemIaByMemIaId($ia_id, $mem_id); if (empty($_mia_data)) { return false; } $this->saveMemIaCache($ia_id, $mem_id, $_mia_data); } return $_mia_data; } /** * 保存玩家积分活动 * * @param int $ia_id * @param int $mem_id * @param array $mia_data * @param int $ttl */ public function saveMemIaCache($ia_id, $mem_id, $mia_data, $ttl = 3600) { $_key = $this->getMemIaKey($ia_id, $mem_id); Cache::set($_key, json_encode($mia_data), $ttl); } /** * 更新玩家信息积分活动数据 * * @param int $ia_id * @param int $mem_id * @param int $integral * * @return bool */ public function updateMemIa($ia_id, $mem_id, $integral) { if ($ia_id <= 0) { return false; } /* 更新积分活动 */ $_mia_data = $this->getMemIaByMemIaId($ia_id, $mem_id); $_mi_model = new MemItgModel(); if (empty($_mia_data)) { $_mia_data['mem_id'] = $mem_id; $_mia_data['ia_id'] = $ia_id; $_mia_data['integral_total'] = $integral; $_mia_data['integral'] = $integral; $_mia_data['total_cnt'] = 1; $_mia_data['today_cnt'] = 1; $_mia_data['last_time'] = time(); $_rs = $_mi_model->addMemIa($_mia_data); } else { list($_start_time, $_end_time) = Time::today(); $_mia_data['integral_total'] += $integral; if ($integral > 0) { $_mia_data['total_cnt'] += 1; } if ($_mia_data['last_time'] < $_start_time) { $_mia_data['today_cnt'] = 1; $_mia_data['integral'] = $integral; } else { if ($integral > 0) { $_mia_data['today_cnt'] += 1; } $_mia_data['integral'] += $integral; } $_mia_data['last_time'] = time(); $_rs = $_mi_model->updateIa($_mia_data, $_mia_data['id']); } if (false == $_rs) { return false; } $_key = $this->getMemIaKey($ia_id, $mem_id); Cache::rm($_key); return true; } /** * 更新玩家信息积分活动数据--今日完成次数 * * @param int $ia_id * @param int $mem_id * @param int $today_cnt * * @return bool */ public function updateMemTodayCnt($ia_id, $mem_id, $today_cnt) { if ($ia_id <= 0) { return false; } /* 更新积分活动 */ $_mia_data = $this->getMemIaByMemIaId($ia_id, $mem_id); $_mi_model = new MemItgModel(); if (empty($_mia_data)) { $_mia_data['mem_id'] = $mem_id; $_mia_data['ia_id'] = $ia_id; $_mia_data['integral_total'] = 0; $_mia_data['integral'] = 0; $_mia_data['total_cnt'] = $today_cnt; $_mia_data['today_cnt'] = $today_cnt; $_mia_data['last_time'] = time(); $_rs = $_mi_model->addMemIa($_mia_data); } else { $_mia_data['total_cnt'] += $today_cnt; $_mia_data['today_cnt'] = $today_cnt; $_mia_data['last_time'] = time(); $_rs = $_mi_model->updateIa($_mia_data, $_mia_data['id']); } if (false == $_rs) { return false; } $_key = $this->getMemIaKey($ia_id, $mem_id); Cache::rm($_key); return true; } }