feat: 添加迁移脚本以反转待办消息中的用户ID顺序

This commit is contained in:
kuaifan 2025-12-24 07:11:01 +00:00
parent 862acd0776
commit 989660969c
2 changed files with 63 additions and 2 deletions

View File

@ -2439,8 +2439,8 @@ class DialogController extends AbstractController
if ($msg) { if ($msg) {
$doneUserIds = WebSocketDialogMsgTodo::whereMsgId($msg->id) $doneUserIds = WebSocketDialogMsgTodo::whereMsgId($msg->id)
->whereNotNull('done_at') ->whereNotNull('done_at')
->orderBy('done_at') ->orderByDesc('done_at')
->orderBy('id') ->orderByDesc('id')
->pluck('userid') ->pluck('userid')
->toArray(); ->toArray();
// //

View File

@ -0,0 +1,61 @@
<?php
use App\Module\Base;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
class ReverseDoneUseridsInTodoDoneMsgs extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$this->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)]);
}
});
}
}