Learn.VideoAnalysis/VideoAnalysisCore/Job/TaskFileClearJob.cs

98 lines
3.5 KiB
C#

using AlibabaCloud.SDK.Vod20170321;
using Coravel.Invocable;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.IO;
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;
private readonly VideoSliceWorkflowManager _videoSliceWorkflowManager;
public TaskFileClearJob(Repository<VideoTask> videotaskDB, VideoSliceWorkflowManager videoSliceWorkflowManager)
{
this.videotaskDB = videotaskDB;
_videoSliceWorkflowManager = videoSliceWorkflowManager;
}
public async Task DeleteTaskAllCachesAsync()
{
var startTime = 0;
var timeSpan = startTime - 999;
// 计算 {startTime} 天前已完成任务缓存
DateTime twoDaysAgo = DateTime.Now.AddDays(startTime);
DateTime endDaysAgo = DateTime.Now.AddDays(timeSpan);
// 查询 {startTime} 天前任务执行完成的记录
var completedTasks = videotaskDB.AsQueryable()
.Where(t => (
//筛选 结束任务 或者 错误任务
t.LastEnum == Model.Enum.RedisChannelEnum. ||
t.ErrorMessage != null
)
&& t.EndTime < twoDaysAgo
&& t.EndTime > endDaysAgo)
.Select(s => s.Id)
.ToList();
// 遍历查询结果,删除缓存文件
foreach (var taskId in completedTasks)
await ExpandFunction.DeleteTaskAllFileAsync(taskId, _videoSliceWorkflowManager);
}
public async Task DeleteTaskVideoCachesAsync()
{
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)
.Select(s => s.Id)
.ToList();
// 遍历查询结果,删除缓存文件
foreach (var taskId in completedTasks)
await ExpandFunction.DeleteTaskFileAsync(taskId, _videoSliceWorkflowManager);
}
catch (Exception ex)
{
Console.WriteLine($"清理缓存时出错: {ex.Message}");
}
}
public async Task Invoke()
{
Console.WriteLine($"{DateTime.Now} 执行=>{this.GetType().FullName}");
await DeleteTaskVideoCachesAsync();
await DeleteTaskAllCachesAsync();
}
}
}