You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Service;
use App\Exception\BusinessException;
use App\Model\Player;
use App\Model\PlayerRetention;
use App\Model\User;
use App\Helper\Log;
class UserService extends Service
{
public function afterLogin($gameId, $userId, $loginTime = 0)
{
if (empty($time)) {
$loginTime = time();
}
Log::info('[USER-LOGIN]用户['. $userId . ']登录游戏[' . $gameId . ']');
$player = Player::where('user_id', $userId)->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 . ']为重复账号');
}
}
}