private function _cal_invest_remain_time() { $fund_issue_time = Cache_Const::getInstance()->get_const('fund_issue_time'); $server_start_time = strtotime(SERVER_FIRST_START_TIME); if (empty($fund_issue_time)) { # 无法获取功能发布时间,无法区分新服老服,只能使用开服时间 $deadline = Com_Util::get_date_end($server_start_time) + ($this->fund_valid_deposit_day - 1) * 86400; } else { if ($server_start_time > $fund_issue_time) { # 新服 $deadline = Com_Util::get_date_end($server_start_time) + ($this->fund_valid_deposit_day - 1) * 86400; } else { # 老服,使用功能发布时间 $deadline = Com_Util::get_date_end($fund_issue_time) + ($this->fund_valid_deposit_day - 1) * 86400; } } $remain_time = max(0, $deadline - $this->current_time); return $remain_time; }
public function do_async_deal_event_log($event_log_info) { if (empty($event_log_info)) { return false; } $event_log_info = json_decode($event_log_info, true); $date = date('Y-m-d H:i:s'); try { echo "=========[AsyncDealEventLog:date={$date}|" . json_encode($event_log_info) . "=========\n"; switch ($event_log_info['log_type']) { case 'login': $re = $this->get_data('Event')->record_player_event_log_login($event_log_info); break; case 'pub': $re = $this->get_data('Event')->record_player_event_log_pub($event_log_info); break; case 'shop': $re = $this->get_data('Event')->record_player_event_log_shop($event_log_info); break; case 'sign': $re = $this->get_data('Event')->record_player_event_log_sign($event_log_info); break; case 'item_consume': #$re = $this->get_data('Event')->record_player_event_log_item_consume($event_log_info); $re = $this->get_data('Event')->record_player_event_log_item_consume_other($event_log_info); break; case 'coin_exchange': $re = $this->get_data('Event')->record_player_event_log_coin_exchange($event_log_info); break; case 'daily_active': $event_log_info['reg_time'] = Com_Util::get_date_end($event_log_info['reg_time']); # 替换记录时间为当前结束时间戳 $re = $this->get_data('Event')->record_player_event_log_daily_active($event_log_info); break; case 'grabmine': $re = $this->get_data('Event')->record_player_event_log_grabmine($event_log_info); break; case 'world_boss': $re = $this->get_data('Event')->record_player_event_log_world_boss($event_log_info); break; case 'world_boss_treasure': $re = $this->get_data('Event')->record_player_event_log_world_boss_treasure($event_log_info); break; case 'athena': $re = $this->get_data('Event')->record_player_event_log_athena($event_log_info); break; } } catch (Exception $e) { echo $e->getMessage(); } }
public function _cal_login_refer($player_id, $event_date_head = 0, $event_date_tail = 0) { $login_series_max = $login_acc = 0; if (empty($player_id) || empty($event_date_head) || empty($event_date_tail)) { return array($login_series_max, $login_acc); } # 没有定义活动周期 # 出于效率考虑,日志查询仅执行1次 $event_logs = $this->get_data('Event')->get_player_event_log_login($player_id, $event_date_head, $event_date_tail); if (empty($event_logs)) { return array($login_series_max, $login_acc); } $login_status = array(); # 轮询活动所跨日期区间 $event_date_end = Com_Util::get_date_end($event_date_tail); $loop_time = $event_date_head; while ($loop_time < $event_date_end) { $day_stt = Com_Util::get_date_start($loop_time); # 当前起始时间戳 $day_end = Com_Util::get_date_end($loop_time); # 当前结束时间戳 #$day_stt_correct = max($day_stt, $event_date_head); # 修正,由于日志记录严格按照活动时间获取,故没必要修正 #$day_end_corrent = min($day_end, $event_date_tail); # 修正,由于日志记录严格按照活动时间获取,故没必要修正 foreach ($event_logs as $event_log) { if ($event_log['login_time'] >= $day_stt && $event_log['login_time'] <= $day_end) { # 当天有登录,结束循环 $login_status[$day_stt] = 1; break; } elseif ($event_log['logout_time'] >= $day_stt && $event_log['logout_time'] <= $day_end) { # 当天有登出,则也算有登录 $login_status[$day_stt] = 1; break; } } $loop_time += 86400; } $login_acc = count($login_status); $login_series = 0; # 当前计数连续登录天数 $pre_day_time = 0; # 前一天当前时间戳 if (!empty($login_status)) { foreach ($login_status as $day_time => $status) { if (empty($login_series)) { $login_series = 1; } else { if ($day_time - $pre_day_time == 86400) { $login_series += 1; } else { $login_series_max = max($login_series_max, $login_series); $login_series = 0; } } $pre_day_time = $day_time; } } return array($login_series_max, $login_acc); }