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 @@
-
+