Learn.VideoAnalysis/VideoAnalysisCore/Job/TaskFileClearJob.cs

83 lines
2.8 KiB
C#

using AlibabaCloud.SDK.Vod20170321;
using Coravel.Invocable;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using UserCenter.Model.Enum;
using VideoAnalysisCore.Common;
using VideoAnalysisCore.Model;
using VideoAnalysisCore.Model.Dto;
using VideoAnalysisCore.Model.Interface;
using VideoAnalysisCore.Model.;
using Yitter.IdGenerator;
namespace VideoAnalysisCore.Job
{
/// <summary>
/// 下载视频的任务文件清理任务
/// </summary>
public class TaskFileClearJob : IInvocable
{
private readonly Repository<VideoTask> videotaskDB;
public TaskFileClearJob(Repository<VideoTask> videotaskDB)
{
this.videotaskDB = videotaskDB;
}
public void DeleteOldCompletedTaskCaches()
{
try
{
var startTime = -1;
var timeSpan = startTime - 999;
// 计算 2 天前的时间
DateTime twoDaysAgo = DateTime.Now.AddDays(startTime);
DateTime endDaysAgo = DateTime.Now.AddDays(timeSpan);
// 查询 2 天前任务执行完成的记录
var completedTasks = videotaskDB.AsQueryable()
.Where(t => (
//筛选 结束任务 或者 错误任务
t.LastEnum == Model.Enum.RedisChannelEnum. ||
t.ErrorMessage != null
)
&& t.EndTime < twoDaysAgo
&& t.EndTime > endDaysAgo)
.ToList();
// 遍历查询结果,删除缓存文件
foreach (var task in completedTasks)
{
var path = task.Id.ToString().LocalPath();
if (!string.IsNullOrEmpty(path) && Directory.Exists(path))
{
try
{
Directory.Delete(path, true);
Console.WriteLine($"已删除缓存文件: {task.LocalMediaPath}");
}
catch (Exception ex)
{
Console.WriteLine($"删除缓存文件 {task.Id} 时出错: {ex.Message}");
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"清理缓存时出错: {ex.Message}");
}
}
public async Task Invoke()
{
Console.WriteLine($"{DateTime.Now} 执行=>{this.GetType().FullName}");
DeleteOldCompletedTaskCaches();
}
}
}