From a023c0b8bfbf886a68da72713eb01d0437e44270 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Thu, 7 Nov 2024 22:26:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=97=A0=E6=B3=95=E6=89=93=E5=BC=80?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 4 +++ app/Models/WebSocketDialog.php | 6 +++- app/Tasks/BotReceiveMsgTask.php | 1 + ...4_11_07_222241_add_index_some_20241107.php | 30 +++++++++++++++++++ resources/assets/js/store/actions.js | 4 +-- 5 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 database/migrations/2024_11_07_222241_add_index_some_20241107.php diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index b5e1ecbde..5688268cb 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -117,6 +117,7 @@ class DialogController extends AbstractController ->join('web_socket_dialogs as d', 'u.dialog_id', '=', 'd.id') ->where('u.userid', $user->userid) ->where('d.name', 'LIKE', "%{$key}%") + ->whereNull('d.deleted_at') ->orderByDesc('u.top_at') ->orderByDesc('u.last_at') ->take(20) @@ -174,6 +175,7 @@ class DialogController extends AbstractController ->join('web_socket_dialogs as d', 'u.dialog_id', '=', 'd.id') ->join('web_socket_dialog_msgs as m', 'm.dialog_id', '=', 'd.id') ->where('u.userid', $user->userid) + ->whereNull('d.deleted_at') ->whereRaw("MATCH({$prefix}m.key) AGAINST('{$against}' IN BOOLEAN MODE)") ->orderByDesc('m.id') ->take(20 - count($list)) @@ -209,6 +211,7 @@ class DialogController extends AbstractController ->join('web_socket_dialogs as d', 'u.dialog_id', '=', 'd.id') ->join('web_socket_dialog_msgs as m', 'm.dialog_id', '=', 'd.id') ->where('u.userid', $user->userid) + ->whereNull('d.deleted_at') ->where('m.tag', '>', 0) ->orderByDesc('m.id') ->take(50) @@ -246,6 +249,7 @@ class DialogController extends AbstractController ->join('web_socket_dialogs as d', 'u.dialog_id', '=', 'd.id') ->where('u.userid', $user->userid) ->where('d.id', $dialog_id) + ->whereNull('d.deleted_at') ->first(); return Base::retSuccess('success', WebSocketDialog::synthesizeData($item, $user->userid)); } diff --git a/app/Models/WebSocketDialog.php b/app/Models/WebSocketDialog.php index d1797b50c..bbb25ac98 100644 --- a/app/Models/WebSocketDialog.php +++ b/app/Models/WebSocketDialog.php @@ -91,7 +91,8 @@ class WebSocketDialog extends AbstractModel $builder = DB::table('web_socket_dialog_users as u') ->select(['d.*', 'u.top_at', 'u.last_at', 'u.mark_unread', 'u.silence', 'u.hide', 'u.color', 'u.updated_at as user_at']) ->join('web_socket_dialogs as d', 'u.dialog_id', '=', 'd.id') - ->where('u.userid', $userid); + ->where('u.userid', $userid) + ->whereNull('d.deleted_at'); if ($updated) { $builder->where('u.updated_at', '>', $updated); } @@ -130,6 +131,7 @@ class WebSocketDialog extends AbstractModel ->join('web_socket_dialog_msg_reads as r', 'd.id', '=', 'r.dialog_id') ->where('u.userid', $userid) ->where('u.last_at', '<', $unreadAt) + ->whereNull('d.deleted_at') ->where('r.userid', $userid) ->where('r.read_at') ->groupBy('u.dialog_id') @@ -148,6 +150,7 @@ class WebSocketDialog extends AbstractModel ->where('u.userid', $userid) ->where('u.mark_unread', 1) ->where('u.last_at', '<', $unreadAt) + ->whereNull('d.deleted_at') ->take(20) ->get(); $list->transform(function ($item) use ($userid, &$ids, &$array) { @@ -165,6 +168,7 @@ class WebSocketDialog extends AbstractModel ->join('web_socket_dialog_msg_todos as t', 'd.id', '=', 't.dialog_id') ->where('u.userid', $userid) ->where('u.last_at', '<', $todoAt) + ->whereNull('d.deleted_at') ->where('t.userid', $userid) ->where('t.done_at') ->groupBy('u.dialog_id') diff --git a/app/Tasks/BotReceiveMsgTask.php b/app/Tasks/BotReceiveMsgTask.php index 012cff054..b6613a65f 100644 --- a/app/Tasks/BotReceiveMsgTask.php +++ b/app/Tasks/BotReceiveMsgTask.php @@ -322,6 +322,7 @@ class BotReceiveMsgTask extends AbstractTask ->join('web_socket_dialogs as d', 'u.dialog_id', '=', 'd.id') ->where('u.userid', $data->userid) ->where('d.name', 'LIKE', "%{$nameKey}%") + ->whereNull('d.deleted_at') ->orderByDesc('u.top_at') ->orderByDesc('u.last_at') ->take(20) diff --git a/database/migrations/2024_11_07_222241_add_index_some_20241107.php b/database/migrations/2024_11_07_222241_add_index_some_20241107.php new file mode 100644 index 000000000..03dc30806 --- /dev/null +++ b/database/migrations/2024_11_07_222241_add_index_some_20241107.php @@ -0,0 +1,30 @@ +index('deleted_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // 回滚数据 - 无法回滚 + } +} diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 86d7a62c4..a68977951 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -1189,7 +1189,7 @@ export default { } // state.cacheDialogs.some(dialog => { - if (dialog.type == 'group' && dialog.group_type == 'project' && dialog.group_info.id == data.id) { + if (dialog.type == 'group' && dialog.group_type == 'project' && dialog.group_info && dialog.group_info.id == data.id) { if (data.name !== undefined) { dialog.name = data.name } @@ -1586,7 +1586,7 @@ export default { if (dialog.name === undefined || dialog.dialog_delete === 1) { return false; } - if (dialog.type == 'group' && dialog.group_type == 'task' && dialog.group_info.id == data.id) { + if (dialog.type == 'group' && dialog.group_type == 'task' && dialog.group_info && dialog.group_info.id == data.id) { if (data.name !== undefined) { dialog.name = data.name }