From 989660969cd34e6924a9f5ae6fcf7f0ff49a97f9 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Wed, 24 Dec 2025 07:11:01 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E4=BB=A5=E5=8F=8D=E8=BD=AC=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E4=B8=AD=E7=9A=84=E7=94=A8=E6=88=B7ID?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 4 +- ...reverse_done_userids_in_todo_done_msgs.php | 61 +++++++++++++++++++ 2 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 database/migrations/2025_12_19_000001_reverse_done_userids_in_todo_done_msgs.php diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 26fca4037..51004964b 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -2439,8 +2439,8 @@ class DialogController extends AbstractController if ($msg) { $doneUserIds = WebSocketDialogMsgTodo::whereMsgId($msg->id) ->whereNotNull('done_at') - ->orderBy('done_at') - ->orderBy('id') + ->orderByDesc('done_at') + ->orderByDesc('id') ->pluck('userid') ->toArray(); // diff --git a/database/migrations/2025_12_19_000001_reverse_done_userids_in_todo_done_msgs.php b/database/migrations/2025_12_19_000001_reverse_done_userids_in_todo_done_msgs.php new file mode 100644 index 000000000..6eb7bd840 --- /dev/null +++ b/database/migrations/2025_12_19_000001_reverse_done_userids_in_todo_done_msgs.php @@ -0,0 +1,61 @@ +reverseDoneUserids('2025-12-19 00:00:00'); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $this->reverseDoneUserids('2025-12-19 00:00:00'); + } + + private function reverseDoneUserids(string $after) + { + DB::table('web_socket_dialog_msgs') + ->select(['id', 'msg']) + ->where('type', 'todo') + ->where('created_at', '>', $after) + ->orderBy('id') + ->chunkById(200, function ($rows) { + foreach ($rows as $row) { + $msg = Base::json2array($row->msg); + if (empty($msg) || !is_array($msg)) { + continue; + } + if (($msg['action'] ?? '') !== 'done') { + continue; + } + $data = $msg['data'] ?? null; + if (!is_array($data)) { + continue; + } + $doneUserids = $data['done_userids'] ?? null; + if (!is_array($doneUserids) || count($doneUserids) < 2) { + continue; + } + $data['done_userids'] = array_reverse($doneUserids); + $msg['data'] = $data; + DB::table('web_socket_dialog_msgs') + ->where('id', $row->id) + ->update(['msg' => Base::array2json($msg)]); + } + }); + } +}