From f3d4d3199f367e39c4a2ee797d629649b777fd3a Mon Sep 17 00:00:00 2001 From: kuaifan Date: Fri, 4 Jun 2021 16:16:57 +0800 Subject: [PATCH] no message --- .../Controllers/Api/ProjectController.php | 5 -- app/Models/Project.php | 17 ++++ app/Models/WebSocketDialog.php | 84 +++++++++++-------- app/Models/WebSocketDialogMsg.php | 6 +- 4 files changed, 67 insertions(+), 45 deletions(-) diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 4443c1a2..b470ca24 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -143,11 +143,6 @@ class ProjectController extends AbstractController 'userid' => $user->userid, ]); return AbstractModel::transaction(function() use ($insertColumns, $project) { - $dialog = WebSocketDialog::createGroup($project->name, $project->userid, 'project'); - if (empty($dialog)) { - return Base::retError('创建失败'); - } - $project->dialog_id = $dialog->id; $project->save(); ProjectUser::createInstance([ 'project_id' => $project->id, diff --git a/app/Models/Project.php b/app/Models/Project.php index 8ad7c9eb..e7172eb1 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -42,6 +42,23 @@ class Project extends AbstractModel { use SoftDeletes; + /** + * @param $value + * @return int|mixed + */ + public function getDialogIdAttribute($value) + { + if ($value === 0) { + $userid = $this->projectUser->pluck('userid')->toArray(); + $dialog = WebSocketDialog::createGroup($this->name, $userid, 'project'); + if ($dialog) { + $this->dialog_id = $value = $dialog->id; + $this->save(); + } + } + return $value; + } + /** * @return \Illuminate\Database\Eloquent\Relations\HasMany */ diff --git a/app/Models/WebSocketDialog.php b/app/Models/WebSocketDialog.php index 71310e74..82c5fee3 100644 --- a/app/Models/WebSocketDialog.php +++ b/app/Models/WebSocketDialog.php @@ -2,6 +2,8 @@ namespace App\Models; +use App\Module\Base; + /** * Class WebSocketDialog * @@ -32,25 +34,28 @@ class WebSocketDialog extends AbstractModel * @param string $name 聊天室名称 * @param int|array $userid 加入的会员ID或会员ID组 * @param string $group_type 聊天室类型 - * @return self + * @return self|null */ public static function createGroup($name, $userid, $group_type = '') { - $dialog = self::createInstance([ - 'type' => '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(); + $result = AbstractModel::transaction(function () use ($userid, $group_type, $name) { + $dialog = self::createInstance([ + 'type' => '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 $dialog; + return Base::retSuccess('success', $dialog); + }); + return Base::isSuccess($result) ? $result['data'] : null; } /** @@ -65,15 +70,17 @@ class WebSocketDialog extends AbstractModel if (empty($dialog)) { return false; } - foreach (is_array($userid) ? $userid : [$userid] as $value) { - if ($value > 0) { - WebSocketDialogUser::createInstance([ - 'dialog_id' => $dialog->id, - 'userid' => $value, - ])->save(); + $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 true; + }); + return Base::isSuccess($result); } /** @@ -116,7 +123,7 @@ class WebSocketDialog extends AbstractModel * 获取会员对话(没有自动创建) * @param int $userid 会员ID * @param int $userid2 另一个会员ID - * @return self + * @return self|null */ public static function checkUserDialog($userid, $userid2) { @@ -128,19 +135,22 @@ class WebSocketDialog extends AbstractModel if ($dialogUser->count() >= 2) { return $dialogUser[0]; } - $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 $dialog; + $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; } } diff --git a/app/Models/WebSocketDialogMsg.php b/app/Models/WebSocketDialogMsg.php index cf8fe55e..e3b2f41d 100644 --- a/app/Models/WebSocketDialogMsg.php +++ b/app/Models/WebSocketDialogMsg.php @@ -36,7 +36,7 @@ class WebSocketDialogMsg extends AbstractModel * @param int $dialog_id 会话ID(即 聊天室ID) * @param array $msg 发送的消息 * @param int $sender 发送的会员ID(默认自己,0为系统) - * @return array|bool + * @return array */ public static function addGroupMsg($dialog_id, $msg, $sender = 0) { @@ -54,7 +54,7 @@ class WebSocketDialogMsg extends AbstractModel $dialogMsg->dialog_id = $dialog->id; $dialogMsg->save(); // - $userids = WebSocketDialogUser::whereDialogId($dialog->id)->where('userid', '!=', $dialogMsg->userid)->pluck('userid'); + $userids = WebSocketDialogUser::whereDialogId($dialog->id)->where('userid', '!=', $dialogMsg->userid)->pluck('userid')->toArray(); if ($userids) { PushTask::push([ 'userid' => $userids, @@ -74,7 +74,7 @@ class WebSocketDialogMsg extends AbstractModel * @param int $userid 接收的会员ID * @param array $msg 发送的消息 * @param int $sender 发送的会员ID(默认自己,0为系统) - * @return array|bool + * @return array */ public static function addUserMsg($userid, $msg, $sender = 0) {