perf: 优化会话成员列表查询

This commit is contained in:
kuaifan 2024-11-23 00:11:24 +08:00
parent fb24c63e7f
commit bab37530e4
2 changed files with 24 additions and 14 deletions

View File

@ -280,21 +280,15 @@ class DialogController extends AbstractController
$dialog = WebSocketDialog::checkDialog($dialog_id); $dialog = WebSocketDialog::checkDialog($dialog_id);
// //
if ($getuser === 1) { if ($getuser === 1) {
$data = $dialog->dialogUser->toArray(); $data = $dialog->dialogUserBuilder()->get();
$array = []; $array = array_filter($data->toArray(), function ($item) {
foreach ($data as $item) {
$res = User::userid2basic($item['userid']);
if ($res) {
$array[] = array_merge($item, $res->toArray());
}
}
$array = array_filter($array, function ($item) {
return $item['userid'] > 0; return $item['userid'] > 0;
}); });
} else { } else {
$data = WebSocketDialogUser::select(['web_socket_dialog_users.*', 'users.bot']) $data = WebSocketDialogUser::select(['web_socket_dialog_users.*', 'users.bot'])
->join('users', 'web_socket_dialog_users.userid', '=', 'users.userid') ->join('users', 'web_socket_dialog_users.userid', '=', 'users.userid')
->where('web_socket_dialog_users.dialog_id', $dialog_id) ->where('web_socket_dialog_users.dialog_id', $dialog_id)
->whereNull('users.disable_at')
->orderBy('web_socket_dialog_users.id') ->orderBy('web_socket_dialog_users.id')
->get(); ->get();
$array = $data->toArray(); $array = $data->toArray();
@ -421,12 +415,11 @@ class DialogController extends AbstractController
if ($dialog->type !== 'user') { if ($dialog->type !== 'user') {
return Base::retError("会话类型错误"); return Base::retError("会话类型错误");
} }
$dialogUser = $dialog->dialogUser->where('userid', '!=', $user->userid)->first(); $dialogUser = $dialog->dialogUserBuilder(['tel'])->where('users.userid', '!=', $user->userid)->first();
if (empty($dialogUser)) { if (empty($dialogUser)) {
return Base::retError("会话对象不存在"); return Base::retError("会话对象不存在");
} }
$callUser = User::find($dialogUser->userid); if (empty($dialogUser->tel)) {
if (empty($callUser) || empty($callUser->tel)) {
return Base::retError("对方未设置联系电话"); return Base::retError("对方未设置联系电话");
} }
if ($user->isTemp()) { if ($user->isTemp()) {
@ -435,14 +428,14 @@ class DialogController extends AbstractController
// //
$add = null; $add = null;
$res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'notice', [ $res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'notice', [
'notice' => $user->nickname . " 查看了 " . $callUser->nickname . " 的联系电话" 'notice' => $user->nickname . " 查看了 " . $dialogUser->nickname . " 的联系电话"
]); ]);
if (Base::isSuccess($res)) { if (Base::isSuccess($res)) {
$add = $res['data']; $add = $res['data'];
} }
// //
return Base::retSuccess("success", [ return Base::retSuccess("success", [
'tel' => $callUser->tel, 'tel' => $dialogUser->tel,
'add' => $add ?: null 'add' => $add ?: null
]); ]);
} }

View File

@ -78,6 +78,23 @@ class WebSocketDialog extends AbstractModel
return $this->hasMany(WebSocketDialogUser::class, 'dialog_id', 'id'); return $this->hasMany(WebSocketDialogUser::class, 'dialog_id', 'id');
} }
/**
* 获取对话成员(剔除离职)
* @param $addField
* @return User|\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Query\Builder
*/
public function dialogUserBuilder($addField = [])
{
$columns = array_map(function ($column) {
return "users." . $column;
}, array_merge(User::$basicField, $addField));
$columns[] = "du.*";
return User::select($columns)
->join('web_socket_dialog_users as du', 'users.userid', '=', 'du.userid')
->where('du.dialog_id', $this->id)
->whereNull('users.disable_at');
}
/** /**
* 获取对话列表 * 获取对话列表