where('game_id', $gameId)->first(['id', 'create_time']); if (!$player) { throw new BusinessException('玩家信息不存在'); } $playerRetention = PlayerRetention::where('player_id', $player->id)->first(); $retentionDay = $this->getRetentionDay($player->create_time, $loginTime); if ($retentionDay > 0) { if (!$playerRetention) { $playerRetention = new PlayerRetention(); $playerRetention->player_id = $player->id; $playerRetention->game_id = $gameId; $playerRetention->user_id = $userId; } $playerRetention->{'day' . $retentionDay} = 1; $playerRetention->save(); } } private function getRetentionDay($createTime, $loginTime) { $dayTime = 24 * 60 * 60; $retentionDay = 0; foreach (PlayerRetention::$dayList as $day) { $date = date('Ymd', $createTime + $day * $dayTime); if ($date == date('Ymd', $loginTime)) { $retentionDay = $day; continue; } } return $retentionDay; } public function afterRegister($userId) { Log::info('[USER-REGISTER]用户['. $userId . ']注册'); $user = User::where('id', $userId)->first(['device_number', 'register_ip', 'id']); if (!$user) { throw new BusinessException('用户不存在'); } $repeatUser = User::where('device_number', $user->device_number) ->where('register_ip', $user->register_ip) ->where('id', '<', $user->id) ->first(); if ($repeatUser) { $user->is_repeat = 1; $user->save(); Log::info('[USER-REGISTER]用户['. $userId . ']为重复账号'); } } }