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.
137 lines
4.7 KiB
PHP
137 lines
4.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Service;
|
|
|
|
use App\Exception\BusinessException;
|
|
use App\Helper\Client\Lanhuo;
|
|
use App\Model\Player;
|
|
use App\Model\PlayerRetention;
|
|
use App\Model\User;
|
|
use App\Helper\Log;
|
|
use Hyperf\Di\Annotation\Inject;
|
|
use App\Repository\PromoteRepository;
|
|
|
|
class UserService extends Service
|
|
{
|
|
|
|
/**
|
|
* @Inject
|
|
* @var PromoteRepository
|
|
*/
|
|
private $promoteRepository;
|
|
|
|
public function afterLogin($params)
|
|
{
|
|
$gameId = $params['game_id'];
|
|
$userId = $params['user_id'];
|
|
$loginTime = $params['login_time'];
|
|
$sdkVersion = $params['sdk_version'];
|
|
$deviceNumber = $params['device_number'];
|
|
$clientIp = $params['client_ip'];
|
|
|
|
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();
|
|
}
|
|
|
|
if (in_array($gameId, [335, 336])) {
|
|
$user = User::where('id', $userId)->first(['id', 'account', 'phone']);
|
|
Lanhuo::addLoginLog([
|
|
'user_id' => $userId,
|
|
'account' => $user->account,
|
|
'phone' => $user->phone,
|
|
'device_type' => $sdkVersion ?? 1, // 设备类型(1-andriod 2-ios)
|
|
'device_number' => $deviceNumber,
|
|
]);
|
|
}
|
|
}
|
|
|
|
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([
|
|
'id',
|
|
'device_number',
|
|
'register_ip',
|
|
'fgame_id',
|
|
'device_type',
|
|
'account',
|
|
'phone',
|
|
'real_name',
|
|
'idcard',
|
|
'age_status',
|
|
'promote_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 . ']为重复账号');
|
|
}
|
|
|
|
if (in_array($user->fgame_id, [335, 336])) {
|
|
$levelPromotes = $this->promoteRepository->getLevelPromotesById($user->promote_id, ['id', 'level', 'account']);
|
|
$levelPromotes = $levelPromotes->indexBy('level');
|
|
Lanhuo::addUser([
|
|
'user_id' => $user->id,
|
|
'account' => $user->account,
|
|
'phone' => $user->phone,
|
|
'device_type' => $user->device_type ?? 1, // 设备类型(1-andriod 2-ios)
|
|
'device_number' => $user->device_number,
|
|
'name' => $user->real_name,
|
|
'id_card' => $user->idcard,
|
|
'is_real' => $user->age_status == 2 ? 1 : 0, // 是否实名(1-实名 0-未实名)
|
|
'minister_id' => isset($levelPromotes[2]) ? $levelPromotes[2]->id : 0,
|
|
'minister_name' => isset($levelPromotes[2]) ? $levelPromotes[2]->account : '',
|
|
'headman_id' => isset($levelPromotes[3]) ? $levelPromotes[3]->id : 0,
|
|
'headman_name' => isset($levelPromotes[3]) ? $levelPromotes[3]->account : '',
|
|
'promoter_id' => isset($levelPromotes[4]) ? $levelPromotes[4]->id : 0,
|
|
'promoter_name' => isset($levelPromotes[4]) ? $levelPromotes[4]->account : '',
|
|
]);
|
|
}
|
|
}
|
|
} |