mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-12 03:01:12 +00:00
perf: 自动清空文件回收站
This commit is contained in:
parent
01bb72523e
commit
160c736b38
@ -193,7 +193,8 @@ class IndexController extends InvokeController
|
|||||||
// 删除过期的临时表数据
|
// 删除过期的临时表数据
|
||||||
Task::deliver(new DeleteTmpTask('wg_tmp_msgs', 1));
|
Task::deliver(new DeleteTmpTask('wg_tmp_msgs', 1));
|
||||||
Task::deliver(new DeleteTmpTask('task_worker', 12));
|
Task::deliver(new DeleteTmpTask('task_worker', 12));
|
||||||
Task::deliver(new DeleteTmpTask('tmp', 24));
|
Task::deliver(new DeleteTmpTask('tmp'));
|
||||||
|
Task::deliver(new DeleteTmpTask('file'));
|
||||||
// 删除机器人消息
|
// 删除机器人消息
|
||||||
Task::deliver(new DeleteBotMsgTask());
|
Task::deliver(new DeleteBotMsgTask());
|
||||||
// 周期任务
|
// 周期任务
|
||||||
|
|||||||
@ -287,6 +287,27 @@ class File extends AbstractModel
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 强制删除文件
|
||||||
|
* @return true
|
||||||
|
*/
|
||||||
|
public function forceDeleteFile()
|
||||||
|
{
|
||||||
|
AbstractModel::transaction(function () {
|
||||||
|
$this->forceDelete();
|
||||||
|
FileContent::withTrashed()
|
||||||
|
->whereFid($this->id)
|
||||||
|
->orderBy('id')
|
||||||
|
->chunk(500, function ($contents) {
|
||||||
|
/** @var FileContent $content */
|
||||||
|
foreach ($contents as $content) {
|
||||||
|
$content->forceDeleteContent();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取文件分享链接
|
* 获取文件分享链接
|
||||||
* @param $userid
|
* @param $userid
|
||||||
|
|||||||
@ -39,6 +39,22 @@ class FileContent extends AbstractModel
|
|||||||
{
|
{
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 强制删除文件内容
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function forceDeleteContent()
|
||||||
|
{
|
||||||
|
$this->forceDelete();
|
||||||
|
$content = Base::json2array($this->content ?: []);
|
||||||
|
if (str_starts_with($content['url'], 'uploads/')) {
|
||||||
|
$path = public_path($content['url']);
|
||||||
|
if (file_exists($path)) {
|
||||||
|
@unlink($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 转预览地址
|
* 转预览地址
|
||||||
* @param array $array
|
* @param array $array
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Tasks;
|
namespace App\Tasks;
|
||||||
|
|
||||||
|
use App\Models\File;
|
||||||
use App\Models\TaskWorker;
|
use App\Models\TaskWorker;
|
||||||
use App\Models\Tmp;
|
use App\Models\Tmp;
|
||||||
use App\Models\WebSocketTmpMsg;
|
use App\Models\WebSocketTmpMsg;
|
||||||
@ -17,7 +18,11 @@ class DeleteTmpTask extends AbstractTask
|
|||||||
protected $data;
|
protected $data;
|
||||||
protected $hours; // 多久后删除,单位小时
|
protected $hours; // 多久后删除,单位小时
|
||||||
|
|
||||||
public function __construct(string $data, int $hours)
|
/**
|
||||||
|
* @param string $data
|
||||||
|
* @param int $hours
|
||||||
|
*/
|
||||||
|
public function __construct(string $data, int $hours = 24)
|
||||||
{
|
{
|
||||||
parent::__construct(...func_get_args());
|
parent::__construct(...func_get_args());
|
||||||
$this->data = $data;
|
$this->data = $data;
|
||||||
@ -28,13 +33,14 @@ class DeleteTmpTask extends AbstractTask
|
|||||||
{
|
{
|
||||||
switch ($this->data) {
|
switch ($this->data) {
|
||||||
/**
|
/**
|
||||||
* 表pre_wg_tmp_msgs
|
* 表pre_tmp_msgs
|
||||||
*/
|
*/
|
||||||
case 'wg_tmp_msgs':
|
case 'wg_tmp_msgs':
|
||||||
{
|
{
|
||||||
WebSocketTmpMsg::where('created_at', '<', Carbon::now()->subHours($this->hours)->toDateTimeString())
|
WebSocketTmpMsg::where('created_at', '<', Carbon::now()->subHours($this->hours))
|
||||||
->orderBy('id')
|
->orderBy('id')
|
||||||
->chunk(500, function ($msgs) {
|
->chunk(500, function ($msgs) {
|
||||||
|
/** @var WebSocketTmpMsg $msg */
|
||||||
foreach ($msgs as $msg) {
|
foreach ($msgs as $msg) {
|
||||||
$msg->delete();
|
$msg->delete();
|
||||||
}
|
}
|
||||||
@ -43,13 +49,14 @@ class DeleteTmpTask extends AbstractTask
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 表pre_wg_tmp
|
* 表pre_tmp
|
||||||
*/
|
*/
|
||||||
case 'tmp':
|
case 'tmp':
|
||||||
{
|
{
|
||||||
Tmp::where('created_at', '<', Carbon::now()->subHours($this->hours)->toDateTimeString())
|
Tmp::where('created_at', '<', Carbon::now()->subHours($this->hours))
|
||||||
->orderBy('id')
|
->orderBy('id')
|
||||||
->chunk(2000, function ($tmps) {
|
->chunk(500, function ($tmps) {
|
||||||
|
/** @var Tmp $tmp */
|
||||||
foreach ($tmps as $tmp) {
|
foreach ($tmps as $tmp) {
|
||||||
$tmp->delete();
|
$tmp->delete();
|
||||||
}
|
}
|
||||||
@ -63,11 +70,32 @@ class DeleteTmpTask extends AbstractTask
|
|||||||
case 'task_worker':
|
case 'task_worker':
|
||||||
{
|
{
|
||||||
TaskWorker::onlyTrashed()
|
TaskWorker::onlyTrashed()
|
||||||
->where('deleted_at', '<', Carbon::now()->subHours($this->hours)->toDateTimeString())
|
->where('deleted_at', '<', Carbon::now()->subHours($this->hours))
|
||||||
->orderBy('id')
|
->orderBy('id')
|
||||||
->forceDelete();
|
->forceDelete();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表pre_file
|
||||||
|
*/
|
||||||
|
case 'file':
|
||||||
|
{
|
||||||
|
$day = intval(env("AUTO_EMPTY_FILE_RECYCLE", 365));
|
||||||
|
if ($day <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
File::onlyTrashed()
|
||||||
|
->where('deleted_at', '<', Carbon::now()->addDays($day))
|
||||||
|
->orderBy('id')
|
||||||
|
->chunk(500, function ($files) {
|
||||||
|
/** @var File $file */
|
||||||
|
foreach ($files as $file) {
|
||||||
|
$file->forceDeleteFile();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user