From de3bd9082290b8c63e237a8d4595d0c3bf1b881e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Fri, 17 Apr 2026 09:50:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E5=85=A8=E4=BA=BA?= =?UTF-8?q?=E7=89=A9=E6=B5=81=E7=A8=8BGradeYear?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VideoAnalysis/Learn.VideoAnalysis.csproj | 2 +- .../AICore/GPT/GTP_Analysis_1.cs | 1 + VideoAnalysisCore/Controllers/Dto/ApiDto.cs | 48 +++++++++++++--- .../Controllers/LJZK_Controller.cs | 55 ++++++++++++++++--- VideoAnalysisCore/Model/NodePackageInfo.cs | 5 ++ VideoAnalysisCore/Model/VideoTask.cs | 5 ++ VideoAnalysisCore/Model/VideoTaskStage.cs | 5 ++ VideoAnalysisCore/VideoAnalysisCore.csproj | 2 +- 8 files changed, 103 insertions(+), 20 deletions(-) diff --git a/VideoAnalysis/Learn.VideoAnalysis.csproj b/VideoAnalysis/Learn.VideoAnalysis.csproj index 37cdb45..e1767b0 100644 --- a/VideoAnalysis/Learn.VideoAnalysis.csproj +++ b/VideoAnalysis/Learn.VideoAnalysis.csproj @@ -39,7 +39,7 @@ - + diff --git a/VideoAnalysisCore/AICore/GPT/GTP_Analysis_1.cs b/VideoAnalysisCore/AICore/GPT/GTP_Analysis_1.cs index 39fe375..3ac1c1c 100644 --- a/VideoAnalysisCore/AICore/GPT/GTP_Analysis_1.cs +++ b/VideoAnalysisCore/AICore/GPT/GTP_Analysis_1.cs @@ -842,6 +842,7 @@ namespace VideoAnalysisCore.AICore.GPT TextBookVersionId = taskInfo.TextBookVersionId, GradeSemester = taskInfo.GradeSemester, GradeId = taskInfo.GradeId, + GradeYear = taskInfo.GradeYear, }).ToList(); //尝试追加 作业布置分段 if (homework != null && !questionRes.Any(s => s.Stage == StageEnum.作业布置.ToString())) diff --git a/VideoAnalysisCore/Controllers/Dto/ApiDto.cs b/VideoAnalysisCore/Controllers/Dto/ApiDto.cs index d3ba6f5..c4f0b77 100644 --- a/VideoAnalysisCore/Controllers/Dto/ApiDto.cs +++ b/VideoAnalysisCore/Controllers/Dto/ApiDto.cs @@ -138,6 +138,7 @@ namespace VideoAnalysisCore.Controllers.Dto /// 年级 /// public GradeEnum? GradeId { get; set; } + public int? Trem { get; set; } /// /// 教育阶段 @@ -346,12 +347,39 @@ namespace VideoAnalysisCore.Controllers.Dto public class VideoKonwPointQueryReq { public long? CloudSchoolId { get; set; } + /// + /// 难度 [PN TK BJ] + /// public CourselevelTypeEnum? CourseLevel { get; set; } + /// + /// 年级 + /// public GradeEnum? GradeId { get; set; } + /// + /// 毕业届 + /// + public int? GradeYear { get; set; } + + /// + /// 上下册 + /// public GradeSemesterEnum? GradeSemester { get; set; } + /// + /// 教材版本 + /// public long? TextBookVersionId { get; set; } + /// + /// 知识点名称 + /// public string[]? KnowPointStrArr { get; set; } + + /// + /// 切片主题 + /// public string? Theme { get; set; } + /// + /// 切片内容 + /// public string? Content { get; set; } public int PageIndex { get; set; } = 0; public int PageSize { get; set; } = 200; @@ -363,6 +391,7 @@ namespace VideoAnalysisCore.Controllers.Dto /// 视频vid /// public long VideoTaskId { get; set; } + public string PlayUrl { get; set; } /// /// 分段 /// @@ -372,10 +401,17 @@ namespace VideoAnalysisCore.Controllers.Dto public class VideoTaskStageRes { + /// + /// 视频封面地址 + /// + public string PreviewUrl { get; set; } + /// + /// 视频地址 + /// + public string PlayUrl { get; set; } /// /// id /// - [SugarColumn(IsPrimaryKey = true)] public long Id { get; set; } = YitIdHelper.NextId(); /// /// 视频任务id @@ -386,23 +422,19 @@ namespace VideoAnalysisCore.Controllers.Dto /// 自定义Id [任务视频自定义id] /// /// - [SugarColumn(Length = 500, IsNullable = true)] public string? TagId { get; set; } /// /// 开始时间 /// - [SugarColumn(IsNullable = true)] public float? StartTime { get; set; } /// /// 结束时间 /// - [SugarColumn(IsNullable = true)] public float? EndTime { get; set; } /// /// 持续时间 /// - [SugarColumn(IsIgnore = true)] public float? KeepTime => (EndTime ?? 0) - StartTime ?? 0; /// /// 主题 @@ -411,13 +443,11 @@ namespace VideoAnalysisCore.Controllers.Dto /// /// 课程阶段 /// - [SugarColumn(IsIgnore = true)] public virtual StageEnum? Stage { get; set; } /// /// 视频所属云校ID /// 用户中心的云校id /// - [SugarColumn(IsNullable = true)] public long? CloudSchoolId { get; set; } /// /// 知识点 @@ -432,12 +462,12 @@ namespace VideoAnalysisCore.Controllers.Dto Data = []; Total = 0; } - public VideoTaskStageQueryRes(VideoTaskInfoRes[] data, int total = 0) + public VideoTaskStageQueryRes(VideoTaskStageRes[] data, int total = 0) { Data = data; Total = total; } public int Total { get; set; } - public VideoTaskInfoRes[] Data { get; set; } + public VideoTaskStageRes[] Data { get; set; } } } diff --git a/VideoAnalysisCore/Controllers/LJZK_Controller.cs b/VideoAnalysisCore/Controllers/LJZK_Controller.cs index 3132f02..a83c5ed 100644 --- a/VideoAnalysisCore/Controllers/LJZK_Controller.cs +++ b/VideoAnalysisCore/Controllers/LJZK_Controller.cs @@ -18,7 +18,9 @@ using VideoAnalysisCore.Model; using VideoAnalysisCore.Controllers.Dto; using VideoAnalysisCore.Model.Dto; using SqlSugar; +using AlibabaCloud.SDK.Vod20170321; using VideoAnalysisCore.Model.ǿ; +using AlibabaCloud.SDK.Vod20170321.Models; namespace VideoAnalysisCore.Controllers { @@ -34,6 +36,7 @@ namespace VideoAnalysisCore.Controllers private readonly Repository videoTaskDB; private readonly Repository courseInfoDB; private readonly Repository videoKonwPointDB; + private readonly Client vodClient; private readonly Repository videoTaskStageDB; private readonly Repository nodePackageInfoDB; private readonly Repository videoQuestionDB; @@ -42,7 +45,7 @@ namespace VideoAnalysisCore.Controllers public LJZK_Controller(IMapper mp, Repository nodesubscriptionDB, Repository videoTaskDB = null, Repository videoKonwPointDB = null - , Repository nodePackageInfoDB = null, Repository videoQuestionDB = null, Repository videoQuestionKonwDB = null, Repository courseInfoDB = null, RedisManager redisManager = null, Repository videoTaskStageDB = null) + , Repository nodePackageInfoDB = null, Repository videoQuestionDB = null, Repository videoQuestionKonwDB = null, Repository courseInfoDB = null, RedisManager redisManager = null, Repository videoTaskStageDB = null, Client vodClient = null) { this.mp = mp; this.nodesubscriptionDB = nodesubscriptionDB; @@ -54,6 +57,7 @@ namespace VideoAnalysisCore.Controllers this.courseInfoDB = courseInfoDB; this.redisManager = redisManager; this.videoTaskStageDB = videoTaskStageDB; + this.vodClient = vodClient; } @@ -124,6 +128,7 @@ namespace VideoAnalysisCore.Controllers HostIP = s.HostIP, StageId = s.StageId, GradeId = s.GradeId, + GradeYear = s.Trem==0?null : s.Trem, GradeSemester = s.GradeSemester, TextBookVersionId = s.TextBookVersionId, }; @@ -149,6 +154,7 @@ namespace VideoAnalysisCore.Controllers GradeSemester =s .GradeSemester, CourseLevel =s.CourseLevel, GradeId = s.GradeId, + GradeYear = np.GradeYear, }); } await nodePackageInfoDB.InsertRangeAsync(nodePackages); @@ -297,6 +303,7 @@ namespace VideoAnalysisCore.Controllers var stageQuery = videoTaskStageDB.AsQueryable(); stageQuery = stageQuery.WhereIF(req.CloudSchoolId.HasValue, s => s.CloudSchoolId == req.CloudSchoolId); + stageQuery = stageQuery.WhereIF(req.GradeYear.HasValue, s => s.GradeYear == req.GradeYear); stageQuery = stageQuery.WhereIF(req.CourseLevel.HasValue, s => s.CourseLevel == req.CourseLevel); stageQuery = stageQuery.WhereIF(req.GradeId.HasValue, s => s.GradeId == req.GradeId); stageQuery = stageQuery.WhereIF(req.GradeSemester.HasValue, s => s.GradeSemester == req.GradeSemester); @@ -305,7 +312,7 @@ namespace VideoAnalysisCore.Controllers stageQuery = stageQuery.WhereIF(!string.IsNullOrWhiteSpace(req.Content), s => s.Content.Contains(req.Content)); var pageIndex = req.PageIndex < 0 ? 0 : req.PageIndex; - var pageSize = req.PageSize <= 0 ? 200 : req.PageSize > 500 ? 500 : req.PageSize; + var pageSize = req.PageSize <= 0 ? 50 : req.PageSize > 100 ?100 : req.PageSize; string[]? knowArr = null; if (req.KnowPointStrArr is not null && req.KnowPointStrArr.Length > 0) { @@ -326,7 +333,7 @@ namespace VideoAnalysisCore.Controllers var taskIdArr = stagePageArr.Select(s => s.VideoTaskId).ToArray(); var kpQuery = videoKonwPointDB.AsQueryable() .Where(s => taskIdArr.Contains(s.VideoTaskId) && s.KnowPointId != null); - if (knowArr.Length > 0) + if (knowArr !=null && knowArr.Length > 0) kpQuery = kpQuery.Where(s => knowArr.Contains(s.KnowPointId)); var kpArr = await kpQuery @@ -336,6 +343,12 @@ namespace VideoAnalysisCore.Controllers .GroupBy(s => s.StageId) .ToDictionary(s => s.Key, s => s.Select(x => x.KnowPoint!).Distinct().ToArray()); + //var gDataKey = stagePageArr.GroupBy(s => s.VideoTaskId).Select(s => s.Key).Distinct(); + //var videoInfoQRes = vodClient.GetVideoInfos(new GetVideoInfosRequest() + //{ + // VideoIds = string.Join(",", gDataKey) + //}); + //var videoInfoRes = videoInfoQRes.Body.VideoList.ToDictionary(s => s.VideoId, s => s.CoverURL); var data = stagePageArr.Select(s => new VideoTaskStageRes() { Id = s.Id, @@ -345,23 +358,47 @@ namespace VideoAnalysisCore.Controllers EndTime = s.EndTime, Theme = s.Theme, CloudSchoolId = s.CloudSchoolId, + Stage=s.Stage, + //PreviewUrl= videoInfoRes.ContainsKey(s.VideoTaskId.ToString())? videoInfoRes[] : KnowPoints = kpDic.ContainsKey(s.Id) ? kpDic[s.Id] : [] }).ToArray(); + return Ok(new VideoTaskStageQueryRes() { Total = total, - Data = data.GroupBy(s=>s.VideoTaskId) - .Select(s=>new VideoTaskInfoRes() - { - Stages = s.ToArray(), - VideoTaskId =s.Key - }).ToArray() + Data = data }); } + /// + /// ѯ ƵƬ + /// + /// Ƶid + /// Ƶַ + [HttpGet(Name = "GetVideoURL")] + public async Task GetVideoURL(long videoTaskId) + { + if (videoTaskId ==0) + return BadRequest("Ϊ"); + var task =await videoTaskDB.GetByIdAsync(videoTaskId); + if (task is null) + return BadRequest("Ч"); + + var videoInfo = await vodClient.GetPlayInfoAsync(new GetPlayInfoRequest() + { + VideoId = task.TagId, + Formats = "mp4", + OutputType = "cdn", + AuthTimeout = 3600 * 24 * 12, + }); + if (videoInfo is null || videoInfo.StatusCode != 200 && !videoInfo.Body.PlayInfoList.PlayInfo.Any()) + return BadRequest("ȡ洢ƵϢʧ!"); + + return Ok(videoInfo.Body.PlayInfoList.PlayInfo.First().PlayURL); + } } } diff --git a/VideoAnalysisCore/Model/NodePackageInfo.cs b/VideoAnalysisCore/Model/NodePackageInfo.cs index c5621c6..0544372 100644 --- a/VideoAnalysisCore/Model/NodePackageInfo.cs +++ b/VideoAnalysisCore/Model/NodePackageInfo.cs @@ -88,6 +88,11 @@ namespace VideoAnalysisCore.Model [SugarColumn(IsNullable = true)] public GradeEnum? GradeId { get; set; } /// + /// 毕业届 + /// + [SugarColumn(IsNullable = true)] + public int? GradeYear { get; set; } + /// /// 教育阶段 /// [SugarColumn(IsNullable = true)] diff --git a/VideoAnalysisCore/Model/VideoTask.cs b/VideoAnalysisCore/Model/VideoTask.cs index ea26755..49284ed 100644 --- a/VideoAnalysisCore/Model/VideoTask.cs +++ b/VideoAnalysisCore/Model/VideoTask.cs @@ -157,6 +157,11 @@ namespace VideoAnalysisCore.Model [SugarColumn(IsNullable = true)] public GradeEnum? GradeId { get; set; } /// + /// 毕业届 + /// + [SugarColumn(IsNullable = true)] + public int? GradeYear { get; set; } + /// /// 年级册(上册/下册) /// [SugarColumn(IsNullable = true)] diff --git a/VideoAnalysisCore/Model/VideoTaskStage.cs b/VideoAnalysisCore/Model/VideoTaskStage.cs index d46dc92..eef1b1b 100644 --- a/VideoAnalysisCore/Model/VideoTaskStage.cs +++ b/VideoAnalysisCore/Model/VideoTaskStage.cs @@ -94,6 +94,11 @@ namespace VideoAnalysisCore.Model [SugarColumn(IsNullable = true)] public GradeSemesterEnum? GradeSemester { get; set; } /// + /// 毕业届 + /// + [SugarColumn(IsNullable = true)] + public int? GradeYear { get; set; } + /// /// 学科网的教材版本Id /// public long TextBookVersionId { get; set; } diff --git a/VideoAnalysisCore/VideoAnalysisCore.csproj b/VideoAnalysisCore/VideoAnalysisCore.csproj index 1d3a695..23bb1b4 100644 --- a/VideoAnalysisCore/VideoAnalysisCore.csproj +++ b/VideoAnalysisCore/VideoAnalysisCore.csproj @@ -13,7 +13,7 @@ - +