新增聊天室状态与功能快捷菜单
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* 文件功能:聊天室在线用户展示数据服务
|
||||
* 负责统一拼装聊天室在线名单、Presence 频道与 Redis 在线状态使用的用户载荷。
|
||||
*/
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Models\Sysparam;
|
||||
use App\Models\User;
|
||||
use App\Support\ChatDailyStatusCatalog;
|
||||
|
||||
class ChatUserPresenceService
|
||||
{
|
||||
/**
|
||||
* 构建聊天室在线用户载荷。
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function build(User $user): array
|
||||
{
|
||||
$superLevel = (int) Sysparam::getValue('superlevel', '100');
|
||||
$activePosition = $user->activePosition;
|
||||
$position = $activePosition?->position;
|
||||
$payload = [
|
||||
'id' => $user->id,
|
||||
'user_id' => $user->id,
|
||||
'username' => $user->username,
|
||||
'level' => $user->user_level,
|
||||
'user_level' => $user->user_level,
|
||||
'sex' => $user->sex,
|
||||
'headface' => $user->headface,
|
||||
'headface_url' => $user->headfaceUrl,
|
||||
'headfaceUrl' => $user->headfaceUrl,
|
||||
'vip_icon' => $user->vipIcon(),
|
||||
'vip_name' => $user->vipName(),
|
||||
'vip_color' => $user->isVip() ? ($user->vipLevel?->color ?? '') : '',
|
||||
'is_admin' => $user->user_level >= $superLevel,
|
||||
'position_icon' => $position?->icon ?? '',
|
||||
'position_name' => $position?->name ?? '',
|
||||
'department_name' => $position?->department?->name ?? '',
|
||||
];
|
||||
|
||||
$activeStatus = $this->currentDailyStatus($user);
|
||||
if ($activeStatus !== null) {
|
||||
$payload['daily_status_key'] = $activeStatus['key'];
|
||||
$payload['daily_status_label'] = $activeStatus['label'];
|
||||
$payload['daily_status_icon'] = $activeStatus['icon'];
|
||||
$payload['daily_status_group'] = $activeStatus['group'];
|
||||
$payload['daily_status_expires_at'] = $activeStatus['expires_at'];
|
||||
}
|
||||
|
||||
return $payload;
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取用户当前仍然有效的当日状态。
|
||||
*
|
||||
* @return array{key: string, label: string, icon: string, group: string, expires_at: string}|null
|
||||
*/
|
||||
public function currentDailyStatus(User $user): ?array
|
||||
{
|
||||
return ChatDailyStatusCatalog::resolveActiveStatus(
|
||||
$user->daily_status_key,
|
||||
$user->daily_status_expires_at,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user