From eccb3e28259d7678fa6ec5b09820c7bc5f8dc5bf Mon Sep 17 00:00:00 2001 From: kuaifan Date: Thu, 24 Apr 2025 08:37:35 +0800 Subject: [PATCH] no message --- app/Models/AbstractModel.php | 39 ++++++++++++++++--- app/Module/ZincSearch/ZincSearchDialogMsg.php | 12 ++---- app/Observers/WebSocketDialogMsgObserver.php | 6 +-- app/Observers/WebSocketDialogUserObserver.php | 6 +-- app/Tasks/ZincSearchSyncTask.php | 24 +++++++----- .../pages/manage/components/TaskDeleted.vue | 6 +-- 6 files changed, 60 insertions(+), 33 deletions(-) diff --git a/app/Models/AbstractModel.php b/app/Models/AbstractModel.php index d75e1353d..0e430a67e 100644 --- a/app/Models/AbstractModel.php +++ b/app/Models/AbstractModel.php @@ -151,6 +151,25 @@ class AbstractModel extends Model return $date->format($this->dateFormat ?: 'Y-m-d H:i:s'); } + /** + * 通过模型创建实例 + * @param array $param + * @param bool $force + * @return static + */ + public static function fillInstance(array $param = [], bool $force = true) + { + $instance = new static; + if ($param) { + if ($force) { + $instance->forceFill($param); + } else { + $instance->fill($param); + } + } + return $instance; + } + /** * 创建/更新数据 * @param array $param @@ -209,15 +228,23 @@ class AbstractModel extends Model /** * 数据库更新或插入 - * @param $where - * @param array|\Closure $update 存在时更新的内容 - * @param array|\Closure $insert 不存在时插入的内容,如果没有则插入更新内容 - * @param bool $isInsert 是否是插入数据 + * @param array $where 查询条件 + * @param array|\Closure $update 存在时更新的内容 + * @param array|\Closure $insert 不存在时插入的内容,如果没有则插入更新内容 + * @param bool $isInsert 是否是插入数据 + * @param bool|null $lockForUpdate 是否加锁(true:加锁,false:不加锁,null:在事务中会自动加锁) * @return AbstractModel|\Illuminate\Database\Eloquent\Builder|Model|object|static|null */ - public static function updateInsert($where, $update = [], $insert = [], &$isInsert = true) + public static function updateInsert($where, $update = [], $insert = [], &$isInsert = true, $lockForUpdate = null) { - $row = static::where($where)->first(); + $query = static::where($where); + if ($lockForUpdate === null) { + $lockForUpdate = \DB::transactionLevel() > 0; + } + if ($lockForUpdate) { + $query->lockForUpdate(); + } + $row = $query->first(); if (empty($row)) { $row = new static; if ($insert instanceof \Closure) { diff --git a/app/Module/ZincSearch/ZincSearchDialogMsg.php b/app/Module/ZincSearch/ZincSearchDialogMsg.php index 376cb1a0a..c3ead3d19 100644 --- a/app/Module/ZincSearch/ZincSearchDialogMsg.php +++ b/app/Module/ZincSearch/ZincSearchDialogMsg.php @@ -429,10 +429,9 @@ class ZincSearchDialogMsg /** * 同步用户(建议在异步进程中使用) * @param WebSocketDialogUser $dialogUser - * @param bool $full 跳过判断是否已经存在(全量更新) * @return bool */ - public static function userSync(WebSocketDialogUser $dialogUser, bool $full = false): bool + public static function userSync(WebSocketDialogUser $dialogUser): bool { if (!self::ensureIndex()) { return false; @@ -453,13 +452,8 @@ class ZincSearchDialogMsg try { // 查询用户是否存在 - if ($full) { - $hits = null; - } else { - $result = ZincSearchBase::elasticSearch(self::$indexNameUser, $searchParams); - $hits = $result['data']['hits']['hits'] ?? []; - } - + $result = ZincSearchBase::elasticSearch(self::$indexNameUser, $searchParams); + $hits = $result['data']['hits']['hits'] ?? []; // 同步用户(存在更新、不存在添加) $result = ZincSearchBase::addDoc(self::$indexNameUser, $data); diff --git a/app/Observers/WebSocketDialogMsgObserver.php b/app/Observers/WebSocketDialogMsgObserver.php index b42cc0a7a..8d5725d8a 100644 --- a/app/Observers/WebSocketDialogMsgObserver.php +++ b/app/Observers/WebSocketDialogMsgObserver.php @@ -16,7 +16,7 @@ class WebSocketDialogMsgObserver */ public function created(WebSocketDialogMsg $webSocketDialogMsg) { - Task::deliver(new ZincSearchSyncTask('sync', $webSocketDialogMsg)); + Task::deliver(new ZincSearchSyncTask('sync', $webSocketDialogMsg->toArray())); } /** @@ -27,7 +27,7 @@ class WebSocketDialogMsgObserver */ public function updated(WebSocketDialogMsg $webSocketDialogMsg) { - Task::deliver(new ZincSearchSyncTask('sync', $webSocketDialogMsg)); + Task::deliver(new ZincSearchSyncTask('sync', $webSocketDialogMsg->toArray())); } /** @@ -38,7 +38,7 @@ class WebSocketDialogMsgObserver */ public function deleted(WebSocketDialogMsg $webSocketDialogMsg) { - Task::deliver(new ZincSearchSyncTask('delete', $webSocketDialogMsg)); + Task::deliver(new ZincSearchSyncTask('delete', $webSocketDialogMsg->toArray())); } /** diff --git a/app/Observers/WebSocketDialogUserObserver.php b/app/Observers/WebSocketDialogUserObserver.php index c60a59af2..1ebd7f354 100644 --- a/app/Observers/WebSocketDialogUserObserver.php +++ b/app/Observers/WebSocketDialogUserObserver.php @@ -31,7 +31,7 @@ class WebSocketDialogUserObserver } } Deleted::forget('dialog', $webSocketDialogUser->dialog_id, $webSocketDialogUser->userid); - Task::deliver(new ZincSearchSyncTask('userCreated', $webSocketDialogUser)); + Task::deliver(new ZincSearchSyncTask('userSync', $webSocketDialogUser->toArray())); } /** @@ -42,7 +42,7 @@ class WebSocketDialogUserObserver */ public function updated(WebSocketDialogUser $webSocketDialogUser) { - Task::deliver(new ZincSearchSyncTask('userSync', $webSocketDialogUser)); + Task::deliver(new ZincSearchSyncTask('userSync', $webSocketDialogUser->toArray())); } /** @@ -54,7 +54,7 @@ class WebSocketDialogUserObserver public function deleted(WebSocketDialogUser $webSocketDialogUser) { Deleted::record('dialog', $webSocketDialogUser->dialog_id, $webSocketDialogUser->userid); - Task::deliver(new ZincSearchSyncTask('delete', $webSocketDialogUser)); + Task::deliver(new ZincSearchSyncTask('deleteUser', $webSocketDialogUser->toArray())); } /** diff --git a/app/Tasks/ZincSearchSyncTask.php b/app/Tasks/ZincSearchSyncTask.php index 1e9d52a6d..da2a2aa41 100644 --- a/app/Tasks/ZincSearchSyncTask.php +++ b/app/Tasks/ZincSearchSyncTask.php @@ -2,6 +2,8 @@ namespace App\Tasks; +use App\Models\WebSocketDialogMsg; +use App\Models\WebSocketDialogUser; use App\Module\ZincSearch\ZincSearchDialogMsg; use Carbon\Carbon; use Illuminate\Support\Facades\Cache; @@ -26,19 +28,23 @@ class ZincSearchSyncTask extends AbstractTask { switch ($this->action) { case 'sync': - // 同步聊天数据 - ZincSearchDialogMsg::sync($this->data); - break; - - case 'userCreated': - case 'userSync': - // 同步用户数据 - ZincSearchDialogMsg::userSync($this->data, $this->action === 'userCreated'); + // 同步消息数据 + ZincSearchDialogMsg::sync(WebSocketDialogMsg::fillInstance($this->data)); break; case 'delete': + // 删除消息数据 + ZincSearchDialogMsg::delete(WebSocketDialogMsg::fillInstance($this->data)); + break; + + case 'userSync': + // 同步用户数据 + ZincSearchDialogMsg::userSync(WebSocketDialogUser::fillInstance($this->data)); + break; + + case 'deleteUser': // 删除用户数据 - ZincSearchDialogMsg::delete($this->data); + ZincSearchDialogMsg::delete(WebSocketDialogUser::fillInstance($this->data)); break; default: diff --git a/resources/assets/js/pages/manage/components/TaskDeleted.vue b/resources/assets/js/pages/manage/components/TaskDeleted.vue index f6ae6776f..39a81076e 100644 --- a/resources/assets/js/pages/manage/components/TaskDeleted.vue +++ b/resources/assets/js/pages/manage/components/TaskDeleted.vue @@ -24,14 +24,14 @@