修复 视频知识点片段名称错误问题

This commit is contained in:
小肥羊 2025-09-24 10:43:37 +08:00
parent a0e00c8b5d
commit 6015245d78
5 changed files with 56 additions and 18 deletions

View File

@ -580,6 +580,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
//校验结果质量 //校验结果质量
var checkRes = await VerifySpanQuality(questionRes, taskInfo, captions, sections, Course_Id); var checkRes = await VerifySpanQuality(questionRes, taskInfo, captions, sections, Course_Id);
if (checkRes != null && checkRes.Score >= 80) if (checkRes != null && checkRes.Score >= 80)
{ {
//写入知识点 //写入知识点

View File

@ -196,7 +196,7 @@ namespace VideoAnalysisCore.Common
//if (gptRes is null) //if (gptRes is null)
// throw new Exception("未能读取到GPT处理结果"); // throw new Exception("未能读取到GPT处理结果");
//删除任务执行状态 //删除任务执行状态
await Redis.HDelAsync(RedisExpandKey.IDTask,task); await Redis.LRemAsync(RedisExpandKey.IDTask,1,task);
var taskData = await DbScoped.Sugar.Queryable<VideoTask>() var taskData = await DbScoped.Sugar.Queryable<VideoTask>()
.FirstAsync(s => s.Id == tId); .FirstAsync(s => s.Id == tId);
if (taskData.Captions == "[]") if (taskData.Captions == "[]")
@ -275,14 +275,42 @@ namespace VideoAnalysisCore.Common
ReceivingTaskAsync(); ReceivingTaskAsync();
} }
public static bool StopTask { get; set; } = false;
/// <summary>
/// 停止接收新任务
/// </summary>
public static void StopTaskAsync()
{
StopTask = true;
try
{
//取消接收任务监听
Subscribe?.Dispose();
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 开始接收新任务
/// </summary>
public static void RestartTaskAsync()
{
StopTask = false;
NewTaskAsync();
}
/// <summary> /// <summary>
/// 重新执行新任务 /// 重新执行新任务
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public static async void NewTaskAsync() public static async void NewTaskAsync()
{ {
await Redis.DelAsync(RedisExpandKey.IDTask); // 取消 消费机的任务订阅
if (StopTask)
return;
ReceivingTaskAsync(); ReceivingTaskAsync();
} }
@ -298,7 +326,7 @@ namespace VideoAnalysisCore.Common
} }
Task.Run(async () => Task.Run(async () =>
{ {
var oldTask = await Redis.GetAsync(RedisExpandKey.IDTask); var oldTask = await Redis.LPopAsync(RedisExpandKey.IDTask);
if (!string.IsNullOrEmpty(oldTask)) if (!string.IsNullOrEmpty(oldTask))
{ {
Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "-------------> 接收重试任务 " + oldTask); Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "-------------> 接收重试任务 " + oldTask);
@ -307,6 +335,8 @@ namespace VideoAnalysisCore.Common
await InsertChannel(lastEnum, oldTask); await InsertChannel(lastEnum, oldTask);
return; return;
} }
lock (Redis)
{
if (Subscribe?.IsUnsubscribed == false)//排除重试机制后 多次接收任务导致内存泄露 if (Subscribe?.IsUnsubscribed == false)//排除重试机制后 多次接收任务导致内存泄露
return; return;
Subscribe = Redis.SubscribeList(RedisExpandKey.ChannelKey, async (taskId) => Subscribe = Redis.SubscribeList(RedisExpandKey.ChannelKey, async (taskId) =>
@ -314,10 +344,12 @@ namespace VideoAnalysisCore.Common
if (taskId is null) return; if (taskId is null) return;
Subscribe?.Dispose();//取消接收任务监听 Subscribe?.Dispose();//取消接收任务监听
//存储当前机器的任务 //存储当前机器的任务
Redis.Set(RedisExpandKey.IDTask, taskId); Redis.LPush(RedisExpandKey.IDTask, taskId);
Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "-------------> 接收到任务 " + taskId); Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "-------------> 接收到任务 " + taskId);
await InsertChannel(RedisChannelEnum., taskId); await InsertChannel(RedisChannelEnum., taskId);
}); });
}
}); });
} }
@ -333,6 +365,8 @@ namespace VideoAnalysisCore.Common
var error = string.Empty; var error = string.Empty;
if (ex != null) if (ex != null)
{ {
await Redis.LRemAsync(RedisExpandKey.IDTask, 1, taskID.ToString());
//执行任务时出现异常 //执行任务时出现异常
error = ex.Message + ex.StackTrace; error = ex.Message + ex.StackTrace;
Console.WriteLine("====================[出现异常]===================="); Console.WriteLine("====================[出现异常]====================");

View File

@ -193,6 +193,7 @@ namespace VideoAnalysisCore.Controllers
Tag = req.Tag, Tag = req.Tag,
TagId = req.TagId, TagId = req.TagId,
PPTVideoCode = req.PPTVideoCode, PPTVideoCode = req.PPTVideoCode,
PPTVideoUrl = req.PPTVideoUrl,
VideoType=req.VideoType VideoType=req.VideoType
}; };
//Èë¿â //Èë¿â

View File

@ -181,6 +181,7 @@ namespace VideoAnalysisCore.Controllers.Dto
/// 课程对应ppt视频 /// 课程对应ppt视频
/// </summary> /// </summary>
public string? PPTVideoCode { get; set; } public string? PPTVideoCode { get; set; }
public string? PPTVideoUrl { get; set; }
/// <summary> /// <summary>
///回调Api地址 ///回调Api地址
/// </summary> /// </summary>

View File

@ -167,16 +167,17 @@ namespace VideoAnalysisCore.Controllers
/// 获取视频知识点片段<para>taskId/tagId二选一</para> /// 获取视频知识点片段<para>taskId/tagId二选一</para>
/// </summary> /// </summary>
/// <param name="tagId">自定义id</param> /// <param name="tagId">自定义id</param>
/// <param name="taskId">自定义id</param>
/// <returns></returns> /// <returns></returns>
[HttpGet(Name = "TaskKnowInfo")] [HttpGet(Name = "TaskKnowInfo")]
public async Task<IActionResult> TaskKnowInfo(string? tagId) public async Task<IActionResult> TaskKnowInfo(string? tagId , string? taskId)
{ {
if (string.IsNullOrEmpty(tagId) && !string.IsNullOrEmpty(taskId))
tagId = taskId;
if (string.IsNullOrEmpty(tagId)) if (string.IsNullOrEmpty(tagId))
return BadRequest(); return BadRequest();
long taskId = 0;
var taskIdOK = long.TryParse(tagId, out taskId);
var task = await videoTaskDB.AsQueryable() 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(); .FirstAsync();
if (task is null) if (task is null)
return BadRequest("无效任务"); return BadRequest("无效任务");
@ -185,7 +186,7 @@ namespace VideoAnalysisCore.Controllers
.Where(s => s.VideoTaskId == task.Id) .Where(s => s.VideoTaskId == task.Id)
.ToArrayAsync(); .ToArrayAsync();
if (konwArr is null || konwArr.Length == 0) if (konwArr is null || konwArr.Length == 0)
return BadRequest("ÎÞЧÈÎÎñ"); return BadRequest("无有效任务分段");
var res = new TaskKnowRes() var res = new TaskKnowRes()
{ {
TagId = task.TagId, TagId = task.TagId,