Browse Source

移动资源

master
unknown 1 year ago
parent
commit
910270dfb3
  1. 17
      app/common.php
  2. 21
      app/controller/ResourceController.php
  3. 19
      app/controller/ResourceDirController.php
  4. 2
      app/model/Model.php
  5. 63
      app/model/Resource.php
  6. 69
      app/model/ResourceDir.php
  7. 2
      app/validate/ResourceValidate.php
  8. 6
      route/app.php

17
app/common.php

@ -25,3 +25,20 @@ function dataReturn($code, $msg = 'success', $data = [])
return ['code' => $code, 'data' => $data, 'msg' => $msg]; return ['code' => $code, 'data' => $data, 'msg' => $msg];
} }
// 递归函数来查找父级路径
function findParent($obj, $id, &$path)
{
// 查找当前文件夹的信息
$resource_dir = $obj::where('id', $id)->where('type', 2)->find();
if ($resource_dir) {
// 将当前文件夹ID添加到路径
$path[] = $resource_dir['id'];
// 如果有父级ID,继续查找父级
if (!is_null($resource_dir['parent_id'])) {
findParent($obj, $resource_dir['parent_id'], $path);
}
}
}

21
app/controller/ResourceController.php

@ -105,18 +105,15 @@ class ResourceController
/** /**
* 资源 重命名 * 资源 重命名
*/ */
public function rename(Resource $resource, Request $request, $id)
public function rename(Resource $resource, Request $request)
{ {
try { try {
validate(ResourceValidate::class)->scene('rename')->check($request->param()); validate(ResourceValidate::class)->scene('rename')->check($request->param());
} catch (ValidateException $e) { } catch (ValidateException $e) {
return jsonReturn(-1, $e->getError()); return jsonReturn(-1, $e->getError());
} }
try { try {
$resource_detail = $resource::find($id);
$resource_detail->name = $request->param('name');
$resource_detail->save();
$resource::whereIn('id', $request->param('ids'))->update(['name' => $request->param('name')]);
return jsonReturn(0, Lang::get('成功')); return jsonReturn(0, Lang::get('成功'));
} catch (\Exception $e) { } catch (\Exception $e) {
return jsonReturn(-5, $e->getMessage()); return jsonReturn(-5, $e->getMessage());
@ -126,8 +123,20 @@ class ResourceController
/** /**
* 资源 移动到 * 资源 移动到
*/ */
public function moveTo()
public function moveTo(Resource $resource, Request $request)
{ {
//保存到数据库
Db::startTrans();
try {
// 移动资源
$res = $resource->moveTo($request->param('ids'), $request->param('to_id'));
Db::commit();
} catch (\Exception $e) {
Db::rollback();
return jsonReturn(-5, $e->getMessage());
}
return json($res);
} }
/** /**

19
app/controller/ResourceDirController.php

@ -57,4 +57,23 @@ class ResourceDirController
return json($res); return json($res);
} }
/**
* 文件夹 重命名
*/
public function rename(Resource $resource, Request $request)
{
try {
validate(ResourceValidate::class)->scene('rename_dir')->check($request->param());
} catch (ValidateException $e) {
return jsonReturn(-1, $e->getError());
}
try {
$resource::whereIn('id', $request->param('ids'))->update(['name' => $request->param('name')]);
return jsonReturn(0, Lang::get('成功'));
} catch (\Exception $e) {
return jsonReturn(-5, $e->getMessage());
}
}
} }

2
app/model/Model.php

@ -17,6 +17,7 @@ use think\Model as BaseModel;
class Model extends BaseModel class Model extends BaseModel
{ {
// msg // msg
public $moveMsg;
public $getMsg; public $getMsg;
public $addMsg; public $addMsg;
public $updateMsg; public $updateMsg;
@ -48,6 +49,7 @@ class Model extends BaseModel
$this->className = $this->getClassName(); $this->className = $this->getClassName();
$this->listCacheKey = $this->className . '_cache_list'; $this->listCacheKey = $this->className . '_cache_list';
$this->detailCacheKey = $this->className . '_cache_detail'; $this->detailCacheKey = $this->className . '_cache_detail';
$this->moveMsg = lang('移动成功');
$this->getMsg = lang('获取成功'); $this->getMsg = lang('获取成功');
$this->addMsg = lang('添加成功'); $this->addMsg = lang('添加成功');
$this->updateMsg = lang('修改成功'); $this->updateMsg = lang('修改成功');

63
app/model/Resource.php

@ -35,8 +35,6 @@ class Resource extends Model
public function addResource($param): array public function addResource($param): array
{ {
try { try {
//添加资源的前置操作
$param = $this->beforeAddResource($param);
//插入资源表 //插入资源表
$resource = self::create($param); $resource = self::create($param);
//存在授权文件 插入授权文件表 //存在授权文件 插入授权文件表
@ -45,6 +43,9 @@ class Resource extends Model
} }
//插入素材表 //插入素材表
(new File())->addFile($resource, $param['files'], $param['file_input_mode']); (new File())->addFile($resource, $param['files'], $param['file_input_mode']);
//添加资源的后置操作
$this->afterAddResource($resource);
} catch (\Exception $e) { } catch (\Exception $e) {
throw new ModelException($e->getMessage()); throw new ModelException($e->getMessage());
} }
@ -52,14 +53,62 @@ class Resource extends Model
} }
/** /**
* @param $param 前端提交的参数
* @param $resource 资源对象
* @return array * @return array
* 添加资源的操作
* 添加资源后的的操作
*/ */
public function beforeAddResource($param)
public function afterAddResource($resource)
{ {
$param['size'] = (new File())->getFileSize($param['files']);
//根据素材 更新资源大小 数量
$file_size_and_count = $this->getFileSizeAndCount($resource);
$resource->file_size = $file_size_and_count['file_size'];
$resource->file_count = $file_size_and_count['file_count'];
//todo 还有状态的啥的 //todo 还有状态的啥的
return $param;
$resource->save();
}
/**
* @param $ids 需要移动的资源ids
* @param $to_id 文件夹id
* @return array
* 移动操作
*/
public function moveTo($ids, $to_id)
{
foreach ($ids as $resource_id) {
$resource = $this::find($resource_id);
if ($resource->parent_id == $to_id) {
//移动到同文件夹 无需操作
continue;
}
//1 更新原文件夹 以及所有父文件夹 大小和数量
(new ResourceDir())->changeDirSizeAndCount($resource, $resource->parent_id, '-');
//2 更新parent_id
$resource->parent_id = $to_id;
$resource->save();
//3 更新 新的文件夹 以及所有父文件夹 大小和数量
(new ResourceDir())->changeDirSizeAndCount($resource, $to_id, '+');
}
return dataReturn($this->sucCode, $this->moveMsg);
}
/**
* @param $resource 资源对象
* @return array
* 获取一个资源的大小(所有素材大小的总和) 和包含的素材数量
*/
public function getFileSizeAndCount($resource)
{
$size = 0;
$count = 0;
foreach ($resource->files as $file) {
$size += $file['size'];
$count++;
}
return [
'file_size' => $size,
'file_count' => $count,
];
} }
} }

69
app/model/ResourceDir.php

@ -17,11 +17,15 @@ class ResourceDir extends Model
public function addResourceDir($param): array public function addResourceDir($param): array
{ {
try { try {
$resource = self::create($param);
$resource_dir = self::create($param);
//更新id_path
$resource_dir->id_path = $this->getResourceDirIdPath($resource_dir->id);
$resource_dir->save();
} catch (\Exception $e) { } catch (\Exception $e) {
throw new ModelException($e->getMessage()); throw new ModelException($e->getMessage());
} }
return dataReturn($this->sucCode, $this->addMsg, $resource->id);
return dataReturn($this->sucCode, $this->addMsg, $resource_dir->id);
} }
/** /**
@ -37,23 +41,60 @@ class ResourceDir extends Model
->select(); ->select();
return $resource_list; return $resource_list;
} }
/** /**
* @param $folderId 文件夹id
* @param $resource 资源
* @param $resource_dir_id 移入/移出的文件夹id
* @param $resource_dir_id method + 移入 - 移除
* @return array * @return array
* 递归获取一个文件夹下所有ids
* 将一资源移入或者移出文件夹 文件夹修改资源数量 资源大小
*/ */
public function getFolderIds($folderId)
public function changeDirSizeAndCount($resource, $resource_dir_id, $method = '+')
{ {
$folderIds = [];
// 获取直接子文件夹
$sub_folders = Resource::where('parent_id', $folderId)
->where('type', 2)
->select();
foreach ($sub_folders as $subfolder) {
$folderIds[] = $subfolder['id'];
$folderIds = array_merge($folderIds, $this->getFolderIds($subfolder['id']));
$resource_dir = $this::find($resource_dir_id);
if ($method === '+') {
$this::whereIn('id', $resource_dir['id_path'])->inc('resource_size', $resource->file_size)
->inc('resource_count', 1)
->update();
} elseif ($method === '-') {
$this::whereIn('id', $resource_dir['id_path'])->dec('resource_size', $resource->file_size)
->dec('resource_count', 1)
->update();
} }
}
return $folderIds;
/**
* @param $resource_dir_id 文件夹id
* 获取文件夹 id_path(从顶级文件夹到自己的路径)
*/
public function getResourceDirIdPath($resource_dir_id)
{
$path = [];
// 调用递归函数
findParent($this, $resource_dir_id, $path);
// 反转路径数组,使顶级文件夹在前
return implode(',', array_reverse($path));
} }
// /**
// * @param $folderId 文件夹id
// * @return array
// * 递归获取一个文件夹下所有ids
// */
// public function getFolderIds($folderId)
// {
// $folderIds = [];
// // 获取直接子文件夹
// $sub_folders = Resource::where('parent_id', $folderId)
// ->where('type', 2)
// ->select();
// foreach ($sub_folders as $subfolder) {
// $folderIds[] = $subfolder['id'];
// $folderIds = array_merge($folderIds, $this->getFolderIds($subfolder['id']));
// }
// return $folderIds;
// }
} }

2
app/validate/ResourceValidate.php

@ -33,6 +33,8 @@ class ResourceValidate extends Validate
'rename' => ['name'], 'rename' => ['name'],
'save_dir' => ['name'], //新增文件夹 'save_dir' => ['name'], //新增文件夹
'rename_dir' => ['name'], //重命名文件夹
// 'setStatus' => ['id', 'status'], // 'setStatus' => ['id', 'status'],
]; ];

6
route/app.php

@ -21,12 +21,14 @@ Route::group('resource', function () {
Route::post('/save', 'save'); Route::post('/save', 'save');
Route::get('/detail/:id', 'detail'); Route::get('/detail/:id', 'detail');
Route::get('/share/:id', 'share'); Route::get('/share/:id', 'share');
Route::post('/rename/:id', 'rename');
Route::post('/rename', 'rename');
Route::post('/move_to', 'moveTo');
})->prefix('resource/'); })->prefix('resource/');
Route::group('resourceDir', function () { Route::group('resourceDir', function () {
Route::get('/index', 'index'); Route::get('/index', 'index');
Route::post('/save', 'save');
Route::post('/save', 'save'); //新建文件夹 子文件夹
Route::post('/rename', 'rename');
})->prefix('resourceDir/'); })->prefix('resourceDir/');
Route::group('oss', function () { Route::group('oss', function () {

Loading…
Cancel
Save