From ba7ee58625385418c530864f34277c983fb947ca Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 22 Jul 2024 15:13:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9=E5=A4=8D=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/ResourceDirController.php | 19 +++++++++ app/model/Resource.php | 8 ++++ app/service/ResourceDirService.php | 70 +++++++++++++++++++++++++++++++- app/service/ResourceService.php | 4 +- 4 files changed, 98 insertions(+), 3 deletions(-) diff --git a/app/controller/ResourceDirController.php b/app/controller/ResourceDirController.php index 13a574f..34be190 100644 --- a/app/controller/ResourceDirController.php +++ b/app/controller/ResourceDirController.php @@ -115,4 +115,23 @@ class ResourceDirController return json($res); } + + + /** + * 资源 移动到 + */ + public function copyTo(Request $request) + { + Db::startTrans(); + try { + // 复制资源 + $res = (new ResourceDirService())->copyTo($request->param('ids'), $request->param('to_id')); + Db::commit(); + } catch (\Exception $e) { + Db::rollback(); + return jsonReturn(-5, $e->getMessage()); + } + + return json($res); + } } diff --git a/app/model/Resource.php b/app/model/Resource.php index 1bd0b8b..567584a 100644 --- a/app/model/Resource.php +++ b/app/model/Resource.php @@ -36,4 +36,12 @@ class Resource extends Model { return $this->hasMany(File::class, 'resource_id', 'id'); } + + /** + * 子资源 + */ + public function childrenResources() + { + return $this->hasMany(Resource::class, 'parent_id', 'id'); + } } diff --git a/app/service/ResourceDirService.php b/app/service/ResourceDirService.php index 4debacd..21e2372 100644 --- a/app/service/ResourceDirService.php +++ b/app/service/ResourceDirService.php @@ -17,7 +17,6 @@ class ResourceDirService extends Service { try { $resource_dir = ResourceDir::create($param); - //更新id_path $resource_dir->id_path = $this->getResourceDirIdPath($resource_dir->id); $resource_dir->save(); @@ -121,6 +120,75 @@ class ResourceDirService extends Service /** + * @param $ids 需要复制的文件夹资源ids + * @param $to_id 文件夹资源id + * @return array + * 复制操作 + */ + public function copyTo($ids, $to_id) + { + // 更新 新的文件夹资源 以及所有父文件夹资源 大小和数量 + foreach ($ids as $resource_id) { + $resource = Resource::find($resource_id); + (new ResourceDirService())->changeDirSizeAndCount($resource, $to_id, '+'); + } + + //递归复制 + $this->copyFolderRecursively($ids, $to_id); + return dataReturn($this->sucCode, $this->copyMsg); + } + /** + * @param $ids 需要复制的普通资源ids + * @param $to_id 文件夹资源id + * @return array + * 递归复制资源文件夹及其内容 + */ + public function copyFolderRecursively($ids, $to_id) + { + + foreach ($ids as $resource_id) { + // 复制源文件夹 + $resource = Resource::find($resource_id); + + $new_resource_dir = $this->copyResourceDir($resource->toArray(), $to_id); + $new_resource_dir_id = $new_resource_dir['data']; + + // 复制子文件和子文件夹 + $children = Resource::with(['files', 'accredit_files'])->where('parent_id', $resource->id)->select(); + + if ($children) { + foreach ($children as $child) { + if ($child['type'] == '2') { + // 递归复制子文件夹 + $this->copyFolderRecursively([$child['id']], $new_resource_dir_id); + } else { + // 复制文件 + (new ResourceService())->copyResource($child->toArray(), $new_resource_dir_id); + } + } + } + } + } + + + /** + * @param $resource 资源数组(因为前台创建是数组 保持一致) + * @param $to_id 复制到的文件夹id + * @return array + * 复制一个文件夹资源数据 + */ + public function copyResourceDir($resource, $to_id) + { + unset($resource['id']); + $resource['create_time'] = date('Y-m-d H:i:s'); + $resource['update_time'] = date('Y-m-d H:i:s'); + $resource['parent_id'] = $to_id; + + //重新创建资源 + return $this->addResourceDir($resource); + } + + /** * 递归更新文件夹的 id_path * * @param int $folderId 要更新的文件夹 ID diff --git a/app/service/ResourceService.php b/app/service/ResourceService.php index aba61c9..962c720 100644 --- a/app/service/ResourceService.php +++ b/app/service/ResourceService.php @@ -85,7 +85,7 @@ class ResourceService extends Service * @param $ids 需要复制的普通资源ids * @param $to_id 文件夹资源id * @return array - * 移动操作 + * 复制操作 */ public function copyTo($ids, $to_id) { @@ -107,7 +107,7 @@ class ResourceService extends Service * @param $resource 资源数组(因为前台创建是数组 保持一致) * @param $to_id 复制到的文件夹id * @return array - * 复制一个资源数据 + * 复制一个普通资源数据 */ public function copyResource($resource, $to_id) {