diff --git a/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs b/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs index d739843..f0c68ea 100644 --- a/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs +++ b/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs @@ -580,6 +580,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek //校验结果质量 var checkRes = await VerifySpanQuality(questionRes, taskInfo, captions, sections, Course_Id); + if (checkRes != null && checkRes.Score >= 80) { //写入知识点 diff --git a/VideoAnalysisCore/Common/RedisExpand.cs b/VideoAnalysisCore/Common/RedisExpand.cs index b8a4911..acd79f8 100644 --- a/VideoAnalysisCore/Common/RedisExpand.cs +++ b/VideoAnalysisCore/Common/RedisExpand.cs @@ -196,7 +196,7 @@ namespace VideoAnalysisCore.Common //if (gptRes is null) // throw new Exception("未能读取到GPT处理结果"); //删除任务执行状态 - await Redis.HDelAsync(RedisExpandKey.IDTask,task); + await Redis.LRemAsync(RedisExpandKey.IDTask,1,task); var taskData = await DbScoped.Sugar.Queryable() .FirstAsync(s => s.Id == tId); if (taskData.Captions == "[]") @@ -275,14 +275,42 @@ namespace VideoAnalysisCore.Common ReceivingTaskAsync(); } + public static bool StopTask { get; set; } = false; + /// + /// 停止接收新任务 + /// + public static void StopTaskAsync() + { + StopTask = true; + try + { + //取消接收任务监听 + Subscribe?.Dispose(); + } + catch (Exception) + { + throw; + } + } + + /// + /// 开始接收新任务 + /// + public static void RestartTaskAsync() + { + StopTask = false; + NewTaskAsync(); + } /// /// 重新执行新任务 /// /// public static async void NewTaskAsync() { - await Redis.DelAsync(RedisExpandKey.IDTask); + // 取消 消费机的任务订阅 + if (StopTask) + return; ReceivingTaskAsync(); } @@ -298,7 +326,7 @@ namespace VideoAnalysisCore.Common } Task.Run(async () => { - var oldTask = await Redis.GetAsync(RedisExpandKey.IDTask); + var oldTask = await Redis.LPopAsync(RedisExpandKey.IDTask); if (!string.IsNullOrEmpty(oldTask)) { Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "-------------> 接收重试任务 " + oldTask); @@ -307,17 +335,21 @@ namespace VideoAnalysisCore.Common await InsertChannel(lastEnum, oldTask); return; } - if (Subscribe?.IsUnsubscribed == false)//排除重试机制后 多次接收任务导致内存泄露 - return; - Subscribe = Redis.SubscribeList(RedisExpandKey.ChannelKey, async (taskId) => + lock (Redis) { - if (taskId is null) return; - Subscribe?.Dispose();//取消接收任务监听 - //存储当前机器的任务 - Redis.Set(RedisExpandKey.IDTask, taskId); - Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "-------------> 接收到任务 " + taskId); - await InsertChannel(RedisChannelEnum.下载文件, taskId); - }); + if (Subscribe?.IsUnsubscribed == false)//排除重试机制后 多次接收任务导致内存泄露 + return; + Subscribe = Redis.SubscribeList(RedisExpandKey.ChannelKey, async (taskId) => + { + if (taskId is null) return; + Subscribe?.Dispose();//取消接收任务监听 + //存储当前机器的任务 + Redis.LPush(RedisExpandKey.IDTask, taskId); + Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "-------------> 接收到任务 " + taskId); + await InsertChannel(RedisChannelEnum.下载文件, taskId); + }); + } + }); } @@ -333,6 +365,8 @@ namespace VideoAnalysisCore.Common var error = string.Empty; if (ex != null) { + + await Redis.LRemAsync(RedisExpandKey.IDTask, 1, taskID.ToString()); //执行任务时出现异常 error = ex.Message + ex.StackTrace; Console.WriteLine("====================[出现异常]===================="); diff --git a/VideoAnalysisCore/Controllers/ApiController.cs b/VideoAnalysisCore/Controllers/ApiController.cs index 2c0ea4c..625f7eb 100644 --- a/VideoAnalysisCore/Controllers/ApiController.cs +++ b/VideoAnalysisCore/Controllers/ApiController.cs @@ -193,6 +193,7 @@ namespace VideoAnalysisCore.Controllers Tag = req.Tag, TagId = req.TagId, PPTVideoCode = req.PPTVideoCode, + PPTVideoUrl = req.PPTVideoUrl, VideoType=req.VideoType }; // diff --git a/VideoAnalysisCore/Controllers/Dto/ApiDto.cs b/VideoAnalysisCore/Controllers/Dto/ApiDto.cs index 6cddf5e..fa357d9 100644 --- a/VideoAnalysisCore/Controllers/Dto/ApiDto.cs +++ b/VideoAnalysisCore/Controllers/Dto/ApiDto.cs @@ -181,6 +181,7 @@ namespace VideoAnalysisCore.Controllers.Dto /// 课程对应ppt视频 /// public string? PPTVideoCode { get; set; } + public string? PPTVideoUrl { get; set; } /// ///回调Api地址 /// diff --git a/VideoAnalysisCore/Controllers/LJZK_Controller.cs b/VideoAnalysisCore/Controllers/LJZK_Controller.cs index d04712e..b3cf309 100644 --- a/VideoAnalysisCore/Controllers/LJZK_Controller.cs +++ b/VideoAnalysisCore/Controllers/LJZK_Controller.cs @@ -167,16 +167,17 @@ namespace VideoAnalysisCore.Controllers /// ȡƵ֪ʶƬtaskId/tagIdѡһ /// /// Զid + /// Զid /// [HttpGet(Name = "TaskKnowInfo")] - public async Task TaskKnowInfo(string? tagId) + public async Task TaskKnowInfo(string? tagId , string? taskId) { + if (string.IsNullOrEmpty(tagId) && !string.IsNullOrEmpty(taskId)) + tagId = taskId; if (string.IsNullOrEmpty(tagId)) return BadRequest(); - long taskId = 0; - var taskIdOK = long.TryParse(tagId, out taskId); var task = await videoTaskDB.AsQueryable() - .Where(s => s.TagId == tagId || s.PPTVideoCode == tagId || (taskIdOK && s.Id == taskId)) + .Where(s => s.TagId == tagId || s.PPTVideoCode == tagId) .FirstAsync(); if (task is null) return BadRequest("Ч"); @@ -185,7 +186,7 @@ namespace VideoAnalysisCore.Controllers .Where(s => s.VideoTaskId == task.Id) .ToArrayAsync(); if (konwArr is null || konwArr.Length == 0) - return BadRequest("Ч"); + return BadRequest("Чֶ"); var res = new TaskKnowRes() { TagId = task.TagId,