diff --git a/app/Http/Controllers/Api/FileController.php b/app/Http/Controllers/Api/FileController.php index e1f8bf501..bf8f213e2 100755 --- a/app/Http/Controllers/Api/FileController.php +++ b/app/Http/Controllers/Api/FileController.php @@ -418,7 +418,7 @@ class FileController extends AbstractController throw new ApiException("{$file->name} 内含有共享文件,无法移动到另一个共享文件夹内"); } $file->userid = $toShareFile->userid; - File::where('pids', 'LIKE', "%,{$file->id},%")->update(['userid' => $toShareFile->userid]); + $file->updateChildFilesUserid($toShareFile->userid); } // $tmpId = $pid; @@ -430,7 +430,7 @@ class FileController extends AbstractController } } else { $file->userid = $user->userid; - File::where('pids', 'LIKE', "%,{$file->id},%")->update(['userid' => $user->userid]); + $file->updateChildFilesUserid($user->userid); } // $file->pid = $pid; diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 620e45c4e..cee34f93e 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -2379,7 +2379,7 @@ class ProjectController extends AbstractController $task->save(); ProjectTaskUser::whereTaskId($task->id)->update(['task_pid' => $task->id]); if ($task->visibility == 3 && !empty($visibilityUserids)) { - ProjectTaskVisibilityUser::whereTaskId($task->id)->delete(); + ProjectTaskVisibilityUser::whereTaskId($task->id)->remove(); foreach (array_unique($visibilityUserids) as $userid) { if (!$userid) { continue; @@ -3031,7 +3031,7 @@ class ProjectController extends AbstractController $taskTag->project_id = $project->id; $taskTag->save(); } - ProjectTaskUser::whereTaskId($copy->id)->delete(); + ProjectTaskUser::whereTaskId($copy->id)->remove(); $copy->setRelation('taskUser', collect()); $copy->setRelation('project', $project); $updateData = [ diff --git a/app/Models/File.php b/app/Models/File.php index c65ce8d39..dca2c6afe 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -6,6 +6,8 @@ use Request; use App\Module\Apps; use App\Module\Base; use App\Tasks\PushTask; +use App\Tasks\ManticoreSyncTask; +use App\Observers\AbstractObserver; use App\Exceptions\ApiException; use Illuminate\Support\Facades\DB; use Hhxsv5\LaravelS\Swoole\Task\Task; @@ -623,6 +625,26 @@ class File extends AbstractModel return true; } + /** + * 批量更新子文件的 userid 并同步到 Manticore + * @param int $userid 新的 userid + * @return int 更新的文件数量 + */ + public function updateChildFilesUserid(int $userid): int + { + self::where('pids', 'like', "%,{$this->id},%")->update(['userid' => $userid]); + + // 批量 update 绕过 Observer,手动触发 Manticore 同步 + $childFileIds = self::where('pids', 'like', "%,{$this->id},%") + ->where('type', '!=', 'folder') + ->pluck('id') + ->toArray(); + foreach ($childFileIds as $childFileId) { + AbstractObserver::taskDeliver(new ManticoreSyncTask('file_sync', ['id' => $childFileId])); + } + return count($childFileIds); + } + /** * 获取文件分享链接 * @param $userid diff --git a/app/Models/FileUser.php b/app/Models/FileUser.php index ce146f43f..cc31457cd 100644 --- a/app/Models/FileUser.php +++ b/app/Models/FileUser.php @@ -45,7 +45,7 @@ class FileUser extends AbstractModel } else { FileLink::whereFileId($file_id)->delete(); } - FileUser::whereFileId($file_id)->delete(); + FileUser::whereFileId($file_id)->remove(); }); } /** @@ -58,7 +58,7 @@ class FileUser extends AbstractModel { return AbstractModel::transaction(function() use ($userid, $file_id) { FileLink::whereFileId($file_id)->whereUserid($userid)->delete(); - return self::whereFileId($file_id)->whereUserid($userid)->delete(); + return self::whereFileId($file_id)->whereUserid($userid)->remove(); }); } } diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 446c37bc8..81f1cf73a 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -800,7 +800,7 @@ class ProjectTask extends AbstractModel $this->visibility = $data["visibility"]; ProjectTask::whereParentId($data['task_id'])->change(['visibility' => $data["visibility"]]); } - ProjectTaskVisibilityUser::whereTaskId($data['task_id'])->delete(); + ProjectTaskVisibilityUser::whereTaskId($data['task_id'])->remove(); if (Arr::exists($data, 'visibility_appointor')) { foreach ($data['visibility_appointor'] as $uid) { if ($uid) { diff --git a/app/Observers/ProjectTaskUserObserver.php b/app/Observers/ProjectTaskUserObserver.php index efc7c2ae1..812b1632f 100644 --- a/app/Observers/ProjectTaskUserObserver.php +++ b/app/Observers/ProjectTaskUserObserver.php @@ -42,7 +42,18 @@ class ProjectTaskUserObserver extends AbstractObserver */ public function updated(ProjectTaskUser $projectTaskUser) { - // + // userid 变更时需要更新任务权限(移交场景) + if ($projectTaskUser->isDirty('userid')) { + self::taskDeliver(new ManticoreSyncTask('update_task_allowed_users', [ + 'task_id' => $projectTaskUser->task_id, + ])); + // 如果是子任务,也更新父任务 + if ($projectTaskUser->task_pid) { + self::taskDeliver(new ManticoreSyncTask('update_task_allowed_users', [ + 'task_id' => $projectTaskUser->task_pid, + ])); + } + } } /** diff --git a/app/Observers/ProjectUserObserver.php b/app/Observers/ProjectUserObserver.php index ac27a14b7..d3b9648ff 100644 --- a/app/Observers/ProjectUserObserver.php +++ b/app/Observers/ProjectUserObserver.php @@ -36,7 +36,15 @@ class ProjectUserObserver extends AbstractObserver */ public function updated(ProjectUser $projectUser) { - // + // userid 变更时需要更新项目权限和级联任务权限(移交场景) + if ($projectUser->isDirty('userid')) { + self::taskDeliver(new ManticoreSyncTask('update_project_allowed_users', [ + 'project_id' => $projectUser->project_id, + ])); + self::taskDeliver(new ManticoreSyncTask('cascade_project_users', [ + 'project_id' => $projectUser->project_id, + ])); + } } /**