using AntDesign; using AntDesign.TableModels; using FFmpeg.NET.Services; using Learn.VideoAnalysis.API.Expand; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.DataProtection.KeyManagement; using SqlSugar; using System.Data.Common; using System.Linq.Expressions; using System.Threading.Tasks; using VideoAnalysisCore.Common; using VideoAnalysisCore.Controllers.Dto; using VideoAnalysisCore.Model; using VideoAnalysisCore.Model.Dto; using VideoAnalysisCore.Model.Enum; namespace Learn.VideoAnalysis.Components.Pages { public partial class VideoTaskPage : ComponentBase { [Inject] private ConfirmService ComfirmService { get; set; } = default!; [Inject] private Repository taskDB { get; set; } = default!; [Inject] private NavigationManager NavigationManager { get; set; } = default!; [Inject] private RedisManager redisManager { get; set; } = default!; [Inject] private INotificationService _notice { get; set; } = default!; IEnumerable _selectedRows = []; ITable _table; List _dataSource = null; RefAsync _total = 0; bool modalShow = false; bool tableLoading = false; private VideoTaskDto selectData; private bool rowRestartLoading = false; private VideoTaskDto reStartTask ; static TextValue[] SelectDataSource = Enum.GetValues(typeof(RedisChannelEnum)) .Cast() .Select(s => new TextValue(s.ToString(), (int)s)) .ToArray(); int selectEnum = 1; int selectDefaultValue =1; /// /// 点击重试 /// /// async void ReStartClick(VideoTaskDto query) { selectDefaultValue = (await redisManager.Redis.HMGetAsync(RedisExpandKey.Task(query.Id), "LastEnum")).FirstOrDefault(); selectEnum = selectDefaultValue; reStartTask = query; modalShow = true; } void PreviewTask(VideoTaskDto task) { NavigationManager.NavigateTo("/VideoTaskShow/"+task.Id); } /// /// 重试 /// /// async void ReStart() { await redisManager.ClearTaskError(reStartTask.Id); _=Task.Run(() => redisManager.InsertChannel((RedisChannelEnum)selectEnum, reStartTask.Id) ); modalShow = false; } private QueryModel lastQuery = null; /// /// 分页 查询 筛选 时 /// /// /// async void ShowErrorTask(MouseEventArgs e) { _dataSource = await taskDB.AsQueryable() .Where(s => s.ErrorMessage != null && s.ErrorMessage != string.Empty) .Select() .ToListAsync(); _total = _dataSource.Count(); tableLoading = false; StateHasChanged(); } /// /// 分页 查询 筛选 时 /// /// async void OnChange(QueryModel query) { lastQuery = query; tableLoading = true; List where = default!; if (query.FilterModel != null && ((query.FilterModel?.Count() ?? 0) > 0)) { where = query.ToSqlSugerWhere(); } _dataSource = await taskDB.AsQueryable() .Where(where) .Select() .OrderByDescending(s => s.Id) .ToPageListAsync(query.PageIndex , query.PageSize, _total); tableLoading = false; StateHasChanged(); } /// /// 刷新数据 /// /// public void RowRload(RowData rowData) { rowRestartLoading = true; var item = rowData.Data; if (item is null) return; var data = redisManager.Redis.HMGet(RedisExpandKey.Task(item.Id), "Progress", "LastEnum", "StartTime", "ErrorMessage"); item.Progress = data[0]; item.LastEnum = data[1] == null ?default:data[1].ToEnum() ?? default; item.StartTimeDic = data[2]==null?null: System.Text.Json.JsonSerializer.Deserialize>(data[2]) ?? null; item.ErrorMessage = data[3]; rowRestartLoading = false; var statusStr = "wait"; var dic = rowData.Data.StartTimeDic; if (dic is null) statusStr= "wait"; else if (!string.IsNullOrEmpty(rowData.Data.ErrorMessage)) statusStr= "error"; else if (dic.ContainsKey(RedisChannelEnum.结束任务)) statusStr= "finish"; item.TaskStatus = statusStr; StateHasChanged(); } /// /// /// /// private string RowST(RowData rowData, RedisChannelEnum e) { var dic = rowData.Data.StartTimeDic; if (dic is null || !dic.ContainsKey(e)) return "--"; return dic[e].ToString(); } private void OnExpand(RowData rowData) { if(rowData.Expanded) RowRload(rowData); } /// /// 在渲染页面之后 /// /// /// protected override async Task OnAfterRenderAsync(bool firstRender) { } /// /// 初始化 /// protected override void OnInitialized() { } private async Task Comfirm(string message) { return await ComfirmService.Show(message, "提示", ConfirmButtons.YesNo, ConfirmIcon.Warning) == ConfirmResult.Yes; } } }