From d3a50e7810c56475c1ce644e3d3d17b8381d15fe Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sun, 19 Feb 2023 23:48:27 +0800 Subject: [PATCH] =?UTF-8?q?perf:=E5=AE=8C=E5=96=84=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E5=B8=90=E5=8F=B7=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 19 +++++++++------ app/Http/Controllers/Api/PublicController.php | 2 +- app/Http/Controllers/Api/UsersController.php | 4 ++-- app/Models/ProjectTask.php | 12 +++++----- app/Models/WebSocketDialog.php | 23 +++++++++++-------- app/Models/WebSocketDialogMsg.php | 12 +++++----- app/Tasks/BotReceiveMsgTask.php | 2 +- resources/assets/js/components/UserAvatar.vue | 7 +++++- .../manage/components/DialogGroupInfo.vue | 2 ++ .../pages/manage/components/DialogRespond.vue | 2 ++ .../assets/js/pages/manage/messenger.vue | 6 ++++- 11 files changed, 56 insertions(+), 35 deletions(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index fee31cb0e..7b5a9d78c 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -315,6 +315,9 @@ class DialogController extends AbstractController if (empty($callUser) || empty($callUser->tel)) { return Base::retError("对方未设置联系电话"); } + if ($user->isTemp()) { + return Base::retError("无法查看联系电话"); + } // $add = null; $res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'notice', [ @@ -353,7 +356,7 @@ class DialogController extends AbstractController return Base::retError('错误的会话'); } // - $dialog = WebSocketDialog::checkUserDialog($user->userid, $userid); + $dialog = WebSocketDialog::checkUserDialog($user, $userid); if (empty($dialog)) { return Base::retError('打开会话失败'); } @@ -866,8 +869,7 @@ class DialogController extends AbstractController $fileLink = $file->getShareLink($user->userid); $fileMsg = "~{$file->getNameAndExt()}"; // - $sender = $user->userid; - return AbstractModel::transaction(function() use ($sender, $fileMsg, $userids, $dialogids) { + return AbstractModel::transaction(function() use ($user, $fileMsg, $userids, $dialogids) { $msgs = []; $already = []; if ($dialogids) { @@ -875,7 +877,7 @@ class DialogController extends AbstractController $dialogids = [$dialogids]; } foreach ($dialogids as $dialogid) { - $res = WebSocketDialogMsg::sendMsg(null, $dialogid, 'text', ['text' => $fileMsg], $sender); + $res = WebSocketDialogMsg::sendMsg(null, $dialogid, 'text', ['text' => $fileMsg], $user->userid); if (Base::isSuccess($res)) { $msgs[] = $res['data']; $already[] = $dialogid; @@ -890,9 +892,9 @@ class DialogController extends AbstractController if (!User::whereUserid($userid)->exists()) { continue; } - $dialog = WebSocketDialog::checkUserDialog($sender, $userid); + $dialog = WebSocketDialog::checkUserDialog($user, $userid); if ($dialog && !in_array($dialog->id, $already)) { - $res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $fileMsg], $sender); + $res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $fileMsg], $user->userid); if (Base::isSuccess($res)) { $msgs[] = $res['data']; } @@ -1216,7 +1218,7 @@ class DialogController extends AbstractController } WebSocketDialog::checkDialog($msg->dialog_id); // - return $msg->forwardMsg($dialogids, $userids, $user->userid); + return $msg->forwardMsg($dialogids, $userids, $user); } /** @@ -1445,6 +1447,9 @@ class DialogController extends AbstractController } $chatName = implode(", ", $array); } + if ($user->isTemp()) { + return Base::retError('无法创建群组'); + } $dialog = WebSocketDialog::createGroup($chatName, $userids, 'user', $user->userid); if (empty($dialog)) { return Base::retError('创建群组失败'); diff --git a/app/Http/Controllers/Api/PublicController.php b/app/Http/Controllers/Api/PublicController.php index ab6355ce1..466ccc075 100755 --- a/app/Http/Controllers/Api/PublicController.php +++ b/app/Http/Controllers/Api/PublicController.php @@ -148,7 +148,7 @@ class PublicController extends AbstractController } Cache::put($cacheKey, "yes", Carbon::now()->addDay()); // - $dialog = WebSocketDialog::checkUserDialog($botUser->userid, $checkin->userid); + $dialog = WebSocketDialog::checkUserDialog($botUser, $checkin->userid); if ($dialog) { $hi = date("H:i"); $pre = $type == "up" ? "上班" : "下班"; diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index b47ab604f..dd763d1e5 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -1101,7 +1101,7 @@ class UsersController extends AbstractController if (!User::whereUserid($userid)->exists()) { continue; } - $dialog = WebSocketDialog::checkUserDialog($user->userid, $userid); + $dialog = WebSocketDialog::checkUserDialog($user, $userid); if ($dialog) { $res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'meeting', $data, $user->userid); if (Base::isSuccess($res)) { @@ -1151,7 +1151,7 @@ class UsersController extends AbstractController if (!User::whereUserid($userid)->exists()) { continue; } - $dialog = WebSocketDialog::checkUserDialog($user->userid, $userid); + $dialog = WebSocketDialog::checkUserDialog($user, $userid); if ($dialog) { $res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'meeting', $data, $user->userid); if (Base::isSuccess($res)) { diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index baba314d0..e17b92df1 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -1448,8 +1448,8 @@ class ProjectTask extends AbstractModel return; } $owners = $this->taskUser->pluck('owner', 'userid')->toArray(); - $users = User::whereIn('userid', $userids)->whereNull('disable_at')->get(); - if (empty($users)) { + $receivers = User::whereIn('userid', $userids)->whereNull('disable_at')->get(); + if (empty($receivers)) { return; } @@ -1467,18 +1467,18 @@ class ProjectTask extends AbstractModel }; /** @var User $user */ - foreach ($users as $user) { + foreach ($receivers as $receiver) { $data = [ 'type' => $type, - 'userid' => $user->userid, + 'userid' => $receiver->userid, 'task_id' => $this->id, ]; if (in_array($type, [1, 2]) && ProjectTaskPushLog::where($data)->exists()) { continue; } // - $replace = $owners[$user->userid] ? "您负责的任务" : "您协助的任务"; - $dialog = WebSocketDialog::checkUserDialog($botUser->userid, $data['userid']); + $replace = $owners[$receiver->userid] ? "您负责的任务" : "您协助的任务"; + $dialog = WebSocketDialog::checkUserDialog($botUser, $receiver->userid); if ($dialog) { ProjectTaskPushLog::createInstance($data)->save(); WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', [ diff --git a/app/Models/WebSocketDialog.php b/app/Models/WebSocketDialog.php index 8933d8b71..e173c7609 100644 --- a/app/Models/WebSocketDialog.php +++ b/app/Models/WebSocketDialog.php @@ -481,37 +481,40 @@ class WebSocketDialog extends AbstractModel /** * 获取会员对话(没有自动创建) - * @param int $userid 会员ID - * @param int $userid2 另一个会员ID + * @param User $user 发起会话的会员 + * @param int $receiver 另一个会员ID * @return self|null */ - public static function checkUserDialog($userid, $userid2) + public static function checkUserDialog($user, $receiver) { - if ($userid == $userid2) { - $userid2 = 0; + if ($user->userid == $receiver) { + $receiver = 0; } $dialogUser = self::select(['web_socket_dialogs.*']) ->join('web_socket_dialog_users as u1', 'web_socket_dialogs.id', '=', 'u1.dialog_id') ->join('web_socket_dialog_users as u2', 'web_socket_dialogs.id', '=', 'u2.dialog_id') - ->where('u1.userid', $userid) - ->where('u2.userid', $userid2) + ->where('u1.userid', $user->userid) + ->where('u2.userid', $receiver) ->where('web_socket_dialogs.type', 'user') ->first(); if ($dialogUser) { return $dialogUser; } - return AbstractModel::transaction(function () use ($userid2, $userid) { + if ($receiver > 0 && $user->isTemp()) { + throw new ApiException('无法发起会话'); + } + return AbstractModel::transaction(function () use ($receiver, $user) { $dialog = self::createInstance([ 'type' => 'user', ]); $dialog->save(); WebSocketDialogUser::createInstance([ 'dialog_id' => $dialog->id, - 'userid' => $userid, + 'userid' => $user->userid, ])->save(); WebSocketDialogUser::createInstance([ 'dialog_id' => $dialog->id, - 'userid' => $userid2, + 'userid' => $receiver, ])->save(); return $dialog; }); diff --git a/app/Models/WebSocketDialogMsg.php b/app/Models/WebSocketDialogMsg.php index d34e4994c..32bb397ab 100644 --- a/app/Models/WebSocketDialogMsg.php +++ b/app/Models/WebSocketDialogMsg.php @@ -367,12 +367,12 @@ class WebSocketDialogMsg extends AbstractModel * 转发消息 * @param array|int $dialogids * @param array|int $userids - * @param int $sender 发送的会员ID + * @param User $user 发送的会员 * @return mixed */ - public function forwardMsg($dialogids, $userids, $sender) + public function forwardMsg($dialogids, $userids, $user) { - return AbstractModel::transaction(function() use ($dialogids, $sender, $userids) { + return AbstractModel::transaction(function() use ($dialogids, $user, $userids) { $originalMsg = Base::json2array($this->getRawOriginal('msg')); $msgs = []; $already = []; @@ -381,7 +381,7 @@ class WebSocketDialogMsg extends AbstractModel $dialogids = [$dialogids]; } foreach ($dialogids as $dialogid) { - $res = self::sendMsg(null, $dialogid, $this->type, $originalMsg, $sender); + $res = self::sendMsg(null, $dialogid, $this->type, $originalMsg, $user->userid); if (Base::isSuccess($res)) { $msgs[] = $res['data']; $already[] = $dialogid; @@ -396,9 +396,9 @@ class WebSocketDialogMsg extends AbstractModel if (!User::whereUserid($userid)->exists()) { continue; } - $dialog = WebSocketDialog::checkUserDialog($sender, $userid); + $dialog = WebSocketDialog::checkUserDialog($user, $userid); if ($dialog && !in_array($dialog->id, $already)) { - $res = self::sendMsg(null, $dialog->id, $this->type, $originalMsg, $sender); + $res = self::sendMsg(null, $dialog->id, $this->type, $originalMsg, $user->userid); if (Base::isSuccess($res)) { $msgs[] = $res['data']; } diff --git a/app/Tasks/BotReceiveMsgTask.php b/app/Tasks/BotReceiveMsgTask.php index 9a2d16b39..496c78447 100644 --- a/app/Tasks/BotReceiveMsgTask.php +++ b/app/Tasks/BotReceiveMsgTask.php @@ -150,7 +150,7 @@ class BotReceiveMsgTask extends AbstractTask $notice = "创建失败。"; break; } - $dialog = WebSocketDialog::checkUserDialog($data->userid, $msg->userid); + $dialog = WebSocketDialog::checkUserDialog($data, $msg->userid); if ($dialog) { $text = "

您好,我是机器人:{$data->nickname},我的机器人ID是:{$data->userid},

你可以发送 /help 查看我支持什么命令。

"; WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $text], $data->userid); // todo 未能在任务end事件来发送任务 diff --git a/resources/assets/js/components/UserAvatar.vue b/resources/assets/js/components/UserAvatar.vue index 7a723a75c..2fd57a46d 100755 --- a/resources/assets/js/components/UserAvatar.vue +++ b/resources/assets/js/components/UserAvatar.vue @@ -299,7 +299,12 @@ }, openDialog() { - this.$store.dispatch("openDialogUserid", this.userid); + this.$store.dispatch("showSpinner", 600) + this.$store.dispatch("openDialogUserid", this.userid).catch(({msg}) => { + $A.modalError(msg) + }).finally(_ => { + this.$store.dispatch("hiddenSpinner") + }); }, onError() { diff --git a/resources/assets/js/pages/manage/components/DialogGroupInfo.vue b/resources/assets/js/pages/manage/components/DialogGroupInfo.vue index 1e54b361a..62602a5e5 100644 --- a/resources/assets/js/pages/manage/components/DialogGroupInfo.vue +++ b/resources/assets/js/pages/manage/components/DialogGroupInfo.vue @@ -251,6 +251,8 @@ export default { this.$store.dispatch("showSpinner", 600) this.$store.dispatch("openDialogUserid", userid).then(_ => { this.$emit("on-close") + }).catch(({msg}) => { + $A.modalError(msg) }).finally(_ => { this.openIng = false this.$store.dispatch("hiddenSpinner") diff --git a/resources/assets/js/pages/manage/components/DialogRespond.vue b/resources/assets/js/pages/manage/components/DialogRespond.vue index fdbf85f43..f75635095 100644 --- a/resources/assets/js/pages/manage/components/DialogRespond.vue +++ b/resources/assets/js/pages/manage/components/DialogRespond.vue @@ -39,6 +39,8 @@ export default { this.$store.dispatch("showSpinner", 600) this.$store.dispatch("openDialogUserid", userid).then(_ => { this.$emit("on-close") + }).catch(({msg}) => { + $A.modalError(msg) }).finally(_ => { this.openIng = false this.$store.dispatch("hiddenSpinner") diff --git a/resources/assets/js/pages/manage/messenger.vue b/resources/assets/js/pages/manage/messenger.vue index a1a4e29c4..8bce58dc0 100644 --- a/resources/assets/js/pages/manage/messenger.vue +++ b/resources/assets/js/pages/manage/messenger.vue @@ -504,7 +504,9 @@ export default { // if ($A.isJson(dialogId) && $A.leftExists(dialogId.dialog_id, "u:")) { this.$store.dispatch("showSpinner", 300) - this.$store.dispatch("openDialogUserid", $A.leftDelete(dialogId.dialog_id, "u:")).finally(_ => { + this.$store.dispatch("openDialogUserid", $A.leftDelete(dialogId.dialog_id, "u:")).catch(({msg}) => { + $A.modalError(msg) + }).finally(_ => { this.$store.dispatch("hiddenSpinner") }) } else { @@ -521,6 +523,8 @@ export default { if (this.windowLarge) { this.tabActive = 'dialog'; } + }).catch(({msg}) => { + $A.modalError(msg) }).finally(_ => { this.$set(user, 'loading', false); });