57 lines
2.2 KiB
C#
57 lines
2.2 KiB
C#
using Hangfire;
|
||
using Hangfire.Server;
|
||
using Masuit.Tools;
|
||
using SqlSugar;
|
||
using WGShare.API.Helpers;
|
||
using WGShare.Domain.Entities;
|
||
|
||
namespace WGShare.API.BackgroudServices
|
||
{
|
||
public class OssCleanWorker : BackgroundService
|
||
{
|
||
private readonly ILogger<OssCleanWorker> _logger;
|
||
private readonly ISqlSugarClient _sugarClient;
|
||
private readonly OssHelper _ossHelper;
|
||
|
||
public OssCleanWorker(ILogger<OssCleanWorker> logger, ISqlSugarClient sugarClient, OssHelper ossHelper)
|
||
{
|
||
_logger = logger;
|
||
this._sugarClient = sugarClient;
|
||
this._ossHelper = ossHelper;
|
||
}
|
||
|
||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||
{
|
||
RecurringJob.AddOrUpdate("DeleteOssFile", () => DeleteOssFile(), Cron.Daily());
|
||
}
|
||
|
||
public async Task DeleteOssFile()
|
||
{
|
||
await Console.Out.WriteLineAsync($@"开始清除过期文件,当前时间:{DateTime.Now}");
|
||
|
||
// 查找已删除,未文件清理,并过期180天的文件
|
||
var deleteFiles = await _sugarClient.Queryable<ShareFile>()
|
||
.Where(x => x.IsDelete == true && x.IsFileClean == false && SqlFunc.DateDiff(DateType.Day, x.ModifyTime, SqlFunc.GetDate()) > 180)
|
||
.ToListAsync();
|
||
if (deleteFiles.IsNullOrEmpty())
|
||
{
|
||
await Console.Out.WriteLineAsync($@"当前无可清除文件,退出本次操作,当前时间:{DateTime.Now}");
|
||
return;
|
||
}
|
||
|
||
await Console.Out.WriteLineAsync($@"本次清除文件数量:{deleteFiles.Count}");
|
||
await Console.Out.WriteLineAsync($@"本次清除文件路径:{string.Join(',', deleteFiles.Select(x => x.FileUrl))}");
|
||
|
||
if (_ossHelper.DeleteObjects(deleteFiles.Select(x => x.FileUrl).ToArray()))
|
||
{
|
||
await _sugarClient.Updateable<ShareFile>()
|
||
.SetColumns(x => x.IsFileClean == true)
|
||
.Where(x => deleteFiles.Select(a => a.Id).Contains(x.Id))
|
||
.ExecuteCommandAsync();
|
||
}
|
||
|
||
await Console.Out.WriteLineAsync($@"本次清除操作结束,当前时间:{DateTime.Now}");
|
||
}
|
||
}
|
||
}
|