'group', 'name' => $name, 'group_type' => $group_type, ]); $dialog->save(); foreach (is_array($userid) ? $userid : [$userid] as $value) { if ($value > 0) { WebSocketDialogUser::createInstance([ 'dialog_id' => $dialog->id, 'userid' => $value, ])->save(); } } return Base::retSuccess('success', $dialog); }); return Base::isSuccess($result) ? $result['data'] : null; } /** * 加入聊天室 * @param int $dialog_id 会话ID(即 聊天室ID) * @param int|array $userid 加入的会员ID或会员ID组 * @return bool */ public static function joinGroup($dialog_id, $userid) { $dialog = self::whereId($dialog_id)->whereType('group')->first(); if (empty($dialog)) { return false; } $result = AbstractModel::transaction(function () use ($dialog, $userid) { foreach (is_array($userid) ? $userid : [$userid] as $value) { if ($value > 0) { WebSocketDialogUser::createInstance([ 'dialog_id' => $dialog->id, 'userid' => $value, ])->save(); } } }); return Base::isSuccess($result); } /** * 退出聊天室 * @param int $dialog_id 会话ID(即 聊天室ID) * @param int|array $userid 加入的会员ID或会员ID组 * @return bool */ public static function quitGroup($dialog_id, $userid) { if (is_array($userid)) { WebSocketDialogUser::whereDialogId($dialog_id)->whereIn('userid', $userid)->delete(); } else { WebSocketDialogUser::whereDialogId($dialog_id)->whereUserid($userid)->delete(); } return true; } /** * 获取聊天室对话 * @param int $userid 会员ID * @param int $dialog_id 会话ID(即 聊天室ID) * @return self */ public static function checkGroupDialog($userid, $dialog_id) { if ($userid == 0) { return self::whereId($dialog_id)->first(); } else { return self::select(['web_socket_dialogs.*']) ->join('web_socket_dialog_users', 'web_socket_dialog_users.dialog_id', '=', 'web_socket_dialogs.id') ->where('web_socket_dialogs.id', $dialog_id) ->where('web_socket_dialogs.type', 'group') ->where('web_socket_dialog_users.userid', $userid) ->first(); } } /** * 获取会员对话(没有自动创建) * @param int $userid 会员ID * @param int $userid2 另一个会员ID * @return self|null */ public static function checkUserDialog($userid, $userid2) { $dialogUser = self::select(['web_socket_dialogs.*']) ->join('web_socket_dialog_users', 'web_socket_dialog_users.dialog_id', '=', 'web_socket_dialogs.id') ->where('web_socket_dialogs.type', 'user') ->whereIn('web_socket_dialog_users.userid', [$userid, $userid2]) ->get(); if ($dialogUser->count() >= 2) { return $dialogUser[0]; } $result = AbstractModel::transaction(function () use ($userid2, $userid) { $dialog = self::createInstance([ 'type' => 'user', ]); $dialog->save(); WebSocketDialogUser::createInstance([ 'dialog_id' => $dialog->id, 'userid' => $userid, ])->save(); WebSocketDialogUser::createInstance([ 'dialog_id' => $dialog->id, 'userid' => $userid2, ])->save(); return Base::retSuccess('success', $dialog); }); return Base::isSuccess($result) ? $result['data'] : null; } }