CrazyIter_Bin 9 月之前
父节点
当前提交
8e76fe29d6

+ 3 - 3
TEAMModelBI/TEAMModelBI.csproj

@@ -65,9 +65,9 @@
 		<SpaRoot>ClientApp\</SpaRoot>
 		<SpaRoot>ClientApp\</SpaRoot>
 		<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
 		<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
 		<UserSecretsId>078b5d89-7d90-4f6a-88fc-7d96025990a8</UserSecretsId>
 		<UserSecretsId>078b5d89-7d90-4f6a-88fc-7d96025990a8</UserSecretsId>
-		<Version>5.2409.4</Version>
-		<AssemblyVersion>5.2409.4.1</AssemblyVersion>
-		<FileVersion>5.2409.4.1</FileVersion>
+		<Version>5.2409.11</Version>
+		<AssemblyVersion>5.2409.11.1</AssemblyVersion>
+		<FileVersion>5.2409.11.1</FileVersion>
 		<Description>TEAMModelBI(BI)</Description>
 		<Description>TEAMModelBI(BI)</Description>
 		<PackageReleaseNotes>BI版本说明版本切换标记2022000908</PackageReleaseNotes>
 		<PackageReleaseNotes>BI版本说明版本切换标记2022000908</PackageReleaseNotes>
 		<PackageId>TEAMModelBI</PackageId>
 		<PackageId>TEAMModelBI</PackageId>

+ 139 - 335
TEAMModelOS.Extension/HTEX.Test/Controllers/LessonRecordController.cs

@@ -170,9 +170,7 @@ namespace HTEX.Test.Controllers
 
 
                     //读取ExamData
                     //读取ExamData
                     List<ExamData> examDatas = new List<ExamData>();
                     List<ExamData> examDatas = new List<ExamData>();
-
                     try {
                     try {
-
                         var examPages =  timeLineData?.events.Where(x => string.IsNullOrWhiteSpace(x.ExamId));
                         var examPages =  timeLineData?.events.Where(x => string.IsNullOrWhiteSpace(x.ExamId));
                         if (examDatas!=null  && examDatas.Count>0) 
                         if (examDatas!=null  && examDatas.Count>0) 
                         {
                         {
@@ -182,27 +180,45 @@ namespace HTEX.Test.Controllers
                             {
                             {
                                 if (examsFile.EndsWith("Exam.json")) 
                                 if (examsFile.EndsWith("Exam.json")) 
                                 {
                                 {
-                                    BlobDownloadResult examDataDownload = await _azureStorage.GetBlobContainerClient(item.school).GetBlobClient(examsFile).DownloadContentAsync();
-                                    ExamData examData = examDataDownload.Content.ToObjectFromJson<ExamData>();
-                                    if (examData.exam.papers.IsNotEmpty())
+                                    ExamData? examData = null;
+                                    try {
+                                        BlobDownloadResult examDataDownload = await _azureStorage.GetBlobContainerClient(item.school).GetBlobClient(examsFile).DownloadContentAsync();
+                                        examData = examDataDownload.Content.ToObjectFromJson<ExamData>();
+                                    } catch (Exception ex)
+                                    {
+                                        if (!ex.Message.Contains("The specified blob does not exist"))
+                                        {
+                                            _logger.LogError(ex, $"文件不存在:{examsFile}");
+                                        }
+                                    }
+                                    
+                                    if (examData!=null && examData.exam.papers.IsNotEmpty())
                                     {
                                     {
                                         string paperId=  examData.exam.papers.First().id;
                                         string paperId=  examData.exam.papers.First().id;
                                       
                                       
                                         if (_azureStorage.GetBlobContainerClient(item.school).GetBlobClient($"/records/{item.id}/ExamPaper/{paperId}/index.json").Exists())
                                         if (_azureStorage.GetBlobContainerClient(item.school).GetBlobClient($"/records/{item.id}/ExamPaper/{paperId}/index.json").Exists())
                                         {
                                         {
-                                            BlobDownloadResult paperblobDownload = await _azureStorage.GetBlobContainerClient(item.school).GetBlobClient($"/records/{item.id}/ExamPaper/{paperId}/index.json").DownloadContentAsync();
-                                            LessonPaper paperIndex = paperblobDownload.Content.ToObjectFromJson<LessonPaper>();
+                                            LessonPaper lessonPaper = null;
+                                            try {
+                                                BlobDownloadResult paperblobDownload = await _azureStorage.GetBlobContainerClient(item.school).GetBlobClient($"/records/{item.id}/ExamPaper/{paperId}/index.json").DownloadContentAsync();
+                                                lessonPaper = paperblobDownload.Content.ToObjectFromJson<LessonPaper>();
+                                                examData.paper = lessonPaper;
+                                            } catch (Exception ex) {
+                                                if (!ex.Message.Contains("The specified blob does not exist"))
+                                                {
+                                                    _logger.LogError(ex, $"文件不存在:/records/{item.id}/ExamPaper/{paperId}/index.json");
+                                                }
+                                            }
                                         }
                                         }
+                                        examDatas.Add(examData);
                                     }
                                     }
-                                    examDatas.Add(examData);
                                 }
                                 }
                             }
                             }
-                          
                         }
                         }
-                     
                     } 
                     } 
-                    catch (Exception ex) 
+                    catch (Exception ex)
                     {
                     {
+                        _logger.LogError(ex,ex.Message);
                     }
                     }
                 }
                 }
             }
             }
@@ -245,7 +261,7 @@ namespace HTEX.Test.Controllers
         /// <param name="lessonBase"></param>
         /// <param name="lessonBase"></param>
         /// <param name="irsDatas"></param>
         /// <param name="irsDatas"></param>
         /// <returns></returns>
         /// <returns></returns>
-        private   List<StudentLessonData> GetIRSData(LessonRecord lessonRecord, LessonBase lessonBase, TimeLineData timeLineData, List<IRSData> irsDatas, List<StudentLessonData> studentLessonDatas)
+        private   List<StudentLessonData> GetIRSData(LessonRecord lessonRecord, LessonBase lessonBase, TimeLineData timeLineData, List<IRSData> irsDatas, List<StudentLessonData> studentLessonDatas,List<ExamData> examDatas)
         {
         {
             List<string> interactTypes = new List<string>() { "PopQuesLoad", "ReAtmpAnsStrt", "BuzrAns", "BuzrLoad", "PickupResult" };
             List<string> interactTypes = new List<string>() { "PopQuesLoad", "ReAtmpAnsStrt", "BuzrAns", "BuzrLoad", "PickupResult" };
             //去重页面
             //去重页面
@@ -257,7 +273,7 @@ namespace HTEX.Test.Controllers
 
 
                 foreach (var item in enventsInteract)
                 foreach (var item in enventsInteract)
                 {
                 {
-                    ProcessIRSPageData(irsDatas, studentLessonDatas, item);
+                    ProcessIRSPageData(irsDatas, studentLessonDatas,examDatas, item);
                 }
                 }
                 //处理其他,评测类型的互动,因为有可能不会记录在TimeLine.json中
                 //处理其他,评测类型的互动,因为有可能不会记录在TimeLine.json中
                 var envents_other = timeLineData.events.Where(x => !keys.Contains(x.Pgid)).GroupBy(x => x.Pgid)  .Select(x => new { key = x.Key, list = x.ToList() });
                 var envents_other = timeLineData.events.Where(x => !keys.Contains(x.Pgid)).GroupBy(x => x.Pgid)  .Select(x => new { key = x.Key, list = x.ToList() });
@@ -265,7 +281,7 @@ namespace HTEX.Test.Controllers
                 {
                 {
                     foreach (var item in envents_other)
                     foreach (var item in envents_other)
                     {
                     {
-                        ProcessIRSPageData(irsDatas, studentLessonDatas, item);
+                        ProcessIRSPageData(irsDatas, studentLessonDatas,examDatas, item);
                     }
                     }
                 }
                 }
             }
             }
@@ -277,7 +293,7 @@ namespace HTEX.Test.Controllers
                 {
                 {
                     foreach (var item in envents_other)
                     foreach (var item in envents_other)
                     {
                     {
-                        ProcessIRSPageData(irsDatas, studentLessonDatas, item);
+                        ProcessIRSPageData(irsDatas, studentLessonDatas,examDatas, item);
                     }
                     }
                 }
                 }
             }
             }
@@ -310,13 +326,15 @@ namespace HTEX.Test.Controllers
             return studentLessonDatas;
             return studentLessonDatas;
         }
         }
 
 
-        private static List<StudentLessonData>  ProcessIRSPageData(List<IRSData> irsDatas, List<StudentLessonData> studentLessonDatas, dynamic item)
+        private static List<StudentLessonData>  ProcessIRSPageData(List<IRSData> irsDatas, List<StudentLessonData> studentLessonDatas, List<ExamData> examDatas, dynamic item)
         {
         {
             var irsDataPages = irsDatas.Where(y => item.key.Equals(y.pageID));
             var irsDataPages = irsDatas.Where(y => item.key.Equals(y.pageID));
             foreach (var irsDataPage in irsDataPages)
             foreach (var irsDataPage in irsDataPages)
             {
             {
                 //检查是否设置正确答案。
                 //检查是否设置正确答案。
                 var answers_q = irsDataPage.question?["exercise"]?["answer"]?.ToJsonString().ToObject<List<string>>();
                 var answers_q = irsDataPage.question?["exercise"]?["answer"]?.ToJsonString().ToObject<List<string>>();
+                var question_id = $"{irsDataPage.question?["id"]}";
+                var xs=  examDatas.Where(x =>x.paper!=null && x.paper.slides.Exists(x =>!string.IsNullOrWhiteSpace(x.url) && x.url.Equals($"{question_id}.json"))).FirstOrDefault();
                 List<string> answers = new List<string>();
                 List<string> answers = new List<string>();
                 answers_q?.ForEach(x => {
                 answers_q?.ForEach(x => {
                     if (!string.IsNullOrWhiteSpace(x))
                     if (!string.IsNullOrWhiteSpace(x))
@@ -875,326 +893,112 @@ namespace HTEX.Test.Controllers
         }
         }
     }
     }
 
 
-    public class LessonPaper 
-    {
-        
-        public List<LessonPaperSlide> slides { get; set; }= new List<LessonPaperSlide>();
-    }
-    public class LessonPaperSlide
-    {
-        /// <summary>
-        /// blob 路徑
-        /// </summary>
-        public string? url { get; set; }
-        /// <summary>
-        /// 題型
-        /// </summary>
-        public string? type { get; set; }
-        /// <summary>
-        /// scoring
-        /// </summary>
-        public LessonPaperSlideScoring? scoring { get; set; }
-    }
-    public class LessonPaperSlideScoring
-    {
-        /// <summary>
-        /// knowledge
-        /// </summary>
-        public List<string> knowledge { get; set; } = new List<string>();
-        /// <summary>
-        /// 答案
-        /// </summary>
-        public List<string> ans { get; set; } = new List<string>();
-
-    }
-    /// <summary>
-    /// 学生课中数据
-    /// </summary>
-    public class StudentLessonData
-    {
-        /// <summary>
-        /// 课例id
-        /// </summary>
-        public string? lessonId { get; set; }
-        /// <summary>
-        /// 课程id
-        /// </summary>
-        public string? courseId { get; set; }
-        /// <summary>
-        /// 科目id
-        /// </summary>
-        public string? subjectId { get; set; }
-        /// <summary>
-        /// 学生的学号
-        /// </summary>
-        public string? id { get; set; }
-        /// <summary>
-        /// 学生所在下标
-        /// </summary>
-        public int index { get; set; } = -1;
-        /// <summary>
-        /// 学生座位号
-        /// </summary>
-        public string? seatID { get; set; }
-        /// <summary>
-        /// 小组编号
-        /// </summary>
-        public string? groupId { get; set; }
-        /// <summary>
-        /// 小组下标 ,暂不使用
-        /// </summary>
-        //public int groupIndex { get; set; } = -1;
-       
-        /// <summary>
-        /// 学生评测记录相关
-        /// </summary>
-        public List<StudentExamRecord> examRecords { get; set; } = new List<StudentExamRecord>();
-        public StudentCoworkRecord  coworkRecord { get; set; } = new StudentCoworkRecord();
-        /// <summary>
-        /// 互动记录
-        /// </summary>
-        public   StudentInteractRecord interactRecord { get; set; } = new StudentInteractRecord();
-
-    }
-
-    /// <summary>
-    /// 学生协作记录
-    /// </summary>
-    public class StudentInteractRecord
-    {
-     /// <summary>
-        /// 学生专属的互动次数,单独设置此字段,因为存在挑人的情况,需要单独设置
-        /// </summary>
-        public int interactRate { get; set; }
-        /// <summary>
-        /// 互动积分
-        /// </summary>
-        public double interactScore { get; set; }
-
-        /// <summary>
-        /// -1表示本次互动未统计分数,0表示本次互动答错为0,大于0 的分数表示本次互动打对为相应的分数。  该分数用于统计成果。
-        /// 互动积分记录[-1,0,10]
-        /// </summary>
-        public List<ItemRecord> interactRecords { get; set; } = new List<ItemRecord>();
-    }
-    /// <summary>
-    /// 学生协作记录
-    /// </summary>
-    public class StudentCoworkRecord 
-    {
-        /// <summary>
-        /// 协作参与率
-        /// </summary>
-        public double coworkRate { get; set; }
-        /// <summary>
-        /// 协作得分
-        /// </summary>
-        public double coworkScore { get; set; }
-        /// <summary>
-        /// 协作参与记录
-        /// </summary>
-        public List<ItemRecord> itemRecords { get; set; } = new List<ItemRecord>();
-    }
-    /// <summary>
-    /// 学生课中评测记录
-    /// </summary>
-    public class StudentExamRecord
-    {
-        /// <summary>
-        /// 作答率0 未作答,1,所有题目作答,小数点则表示部分作答。 可纳入学习态度计算,  主观题需要确认 是否会在此写入答案。
-        /// </summary>
-        public double  answerRate{ get; set; }
-        /// <summary>
-        /// 评测得分
-        /// </summary>
-        public double score { get; set;}
-        /// <summary>
-        /// 评测id
-        /// </summary>
-        public string? examId { get; set; }
-        /// <summary>
-        /// 得分率
-        /// </summary>
-        public double scoreRate { get; set; }
-        /// <summary>
-        /// 配分
-        /// </summary>
-        //  public double allocation { get; set; }
-        /// <summary> 
-        /// 暂不计算,取消{ get; set; }
-        /// 每个题的得分情况
-        /// </summary>
-        public List<ItemRecord> itemRecords /*{ get; set; }*/ = new List<ItemRecord>();
-    }
-
-    public class ItemRecord
-    {
-
-        /// <summary>
-        ///    { "PopQuesLoad", "ReAtmpAnsStrt", "BuzrAns", "BuzrLoad", "PickupResult","SPQStrt" };  //"SPQStrt" 课中评测专用,不参与互动的统计,会重复
-        /// </summary>
-        public string? interactType { get; set; }
-        /// <summary>
-        /// 互动结果权重,纳入学习状态计算
-        /// </summary>
-        public double resultWeight { get; set; }
-        /// <summary>
-        /// 互动结果类型,如:T0没有作答, 没有参与,T1作答错误,有参加,有抢权,TP部分正确,TT作答正确,抢权成功,被抽到
-        /// </summary>
-        public string? resultType { get; set; }
-        /// <summary>
-        ///  互动积分,试题评分
-        /// </summary>
-        public double interactScore { get; set; }
-        /// <summary>
-        /// 基准分值
-        /// </summary>
-        public double criterion { get; set; }
-    }
-    public static class InteractReultType 
-    {
-        /// <summary>
-        /// 没有作答, 没有参与0
-        /// </summary>
-        public static readonly string T0 = "T0";
-        /// <summary>
-        /// 作答错误,有参加,有抢权1
-        /// </summary>
-        public static readonly string T1 = "T1";
-        /// <summary>
-        /// 部分正确1.3
-        /// </summary>
-        public static readonly string TP = "TP";
-        /// <summary>
-        /// 作答正确,抢权成功,被抽到1.5
-        /// </summary>
-        public static readonly string TT ="TT";
-
-    }
-    public static class InteractWeight 
-    {
-        /// <summary>
-        /// 没有作答, 没有参与0
-        /// </summary>
-        public static readonly double T0 = 0;
-        /// <summary>
-        /// 作答错误,有参加,有抢权1
-        /// </summary>
-        public static readonly double T1 = 1;
-        /// <summary>
-        /// 部分正确1.3
-        /// </summary>
-        public static readonly double TP =1.3;
-        /// <summary>
-        /// 作答正确,抢权成功,被抽到1.5
-        /// </summary>
-        public static readonly double TT = 1.5;
+   
+    /// 互动参与指数(按倍数的权重设计)
+    /// 无二次作答的互动,且未设置正确答案:1.未作答0
+    ///                                     2.已作答1
+    ///                                     
+    /// 无二次作答的互动,且设置了正确答案:3.未作答0
+    ///                                     4.已作答1
+    ///                                     5.不完全正确1.3 
+    ///                                     6.作答正确1.5
+    ///                     
+    ///                                     
+    /// 有二次作答的互动,且未设置正确答案:7.第一次未作答0,第二次未作答0=》0
+    ///                                     8.第一次已作答1,第二次未作答0=》1
+    ///                                     9.第一次未作答0,第二次已作答1=》1
+    ///                                     10.第一次已作答1,第二次已作答1=》2
+    ///                                     
+    /// 有二次作答的互动,且设置了正确答案:(16种可能)
+    ///                                     11.第一次未作答0,第二次未作答0=》0
+    ///                                     12.第一次已作答,不完全正确1.3,第二次未作答0=》1.3
+    ///                                     13.第一次已作答,作答正确1.5,第二次未作答0=》1.5
+    ///                                     14.第一次已作答,作答错误1,第二次未作答0=》1
+    ///                                     15.第一次未作答0,第二次已作答,不完全正确1.3=》1.3
+    ///                                     16.第一次未作答0,第二次已作答,作答正确1.5=》1.5
+    ///                                     17.第一次未作答0,第二次已作答,作答错误1=》1
+    ///                                     18.第一次已作答,作答错误1,第二次已作答,作答错误1=》2
+    ///                                     19.第一次已作答,不完全正确1.3,第二次已作答,作答错误1=》2.3
+    ///                                     20.第一次已作答,作答正确1.5,第二次已作答,作答错误1=》2.5
+    ///                                     21.第一次已作答,作答错误1,第二次已作答,不完全正确1.3=》2.3
+    ///                                     22.第一次已作答,作答错误1,第二次已作答,作答正确1.5=》2.5
+    ///                                     23.第一次已作答,不完全正确1.3,第二次已作答,不完全正确1.3=》2.6
+    ///                                     24.第一次已作答,不完全正确1.3,第二次已作答,作答正确1.5=》2.8
+    ///                                     25.第一次已作答,作答正确1.5,第二次已作答,不完全正确1.3=》2.8
+    ///                                     26.第一次已作答,作答正确1.5,第二次已作答,作答正确1.5=》3
+    ///                                     
+    /// 抢权模式:                          27.未参与抢权 0
+    ///                                     28.参与抢权 1
+    ///                                     29.抢权成功 1.5                                   
+    /// 挑人时被挑到                        30.被挑到 1.5                                    
+    /// 有三次作答的互动,且设置了正确答案:(64种可能)
+    /*
+   1	未作答0	未作答0	未作答0	0
+   2	未作答0	未作答0	不完全正确1.3	1.3
+   3	未作答0	未作答0	作答正确1.5	1.5
+   4	未作答0	未作答0	作答错误1	1
+   5	未作答0	不完全正确1.3	未作答0	1.3
+   6	未作答0	不完全正确1.3	不完全正确1.3	2.6
+   7	未作答0	不完全正确1.3	作答正确1.5	2.8
+   8	未作答0	不完全正确1.3	作答错误1	2.3
+   9	未作答0	作答正确1.5	未作答0	1.5
+   10	未作答0	作答正确1.5	不完全正确1.3	2.8
+   11	未作答0	作答正确1.5	作答正确1.5	3
+   12	未作答0	作答正确1.5	作答错误1	2.5
+   13	未作答0	作答错误1	未作答0	1
+   14	未作答0	作答错误1	不完全正确1.3	2.3
+   15	未作答0	作答错误1	作答正确1.5	2.5
+   16	未作答0	作答错误1	作答错误1	2
+   17	已作答错误1	未作答0	未作答0	1
+   18	已作答错误1	未作答0	不完全正确1.3	2.3
+   19	已作答错误1	未作答0	作答正确1.5	2.5
+   20	已作答错误1	未作答0	作答错误1	2
+   21	已作答错误1	不完全正确1.3	未作答0	2.3
+   22	已作答错误1	不完全正确1.3	不完全正确1.3	3.6
+   23	已作答错误1	不完全正确1.3	作答正确1.5	3.8
+   24	已作答错误1	不完全正确1.3	作答错误1	3.3
+   25	已作答错误1	作答正确1.5	未作答0	2.5
+   26	已作答错误1	作答正确1.5	不完全正确1.3	3.8
+   27	已作答错误1	作答正确1.5	作答正确1.5	4
+   28	已作答错误1	作答正确1.5	作答错误1	3.5
+   29	已作答错误1	作答错误1	未作答0	2
+   30	已作答错误1	作答错误1	不完全正确1.3	3.3
+   31	已作答错误1	作答错误1	作答正确1.5	3.5
+   32	已作答错误1	作答错误1	作答错误1	3
+   33	已作答不完全正确1.3	未作答0	未作答0	1.3
+   34	已作答不完全正确1.3	未作答0	不完全正确1.3	2.6
+   35	已作答不完全正确1.3	未作答0	作答正确1.5	2.8
+   36	已作答不完全正确1.3	未作答0	作答错误1	2.3
+   37	已作答不完全正确1.3	不完全正确1.3	未作答0	2.6
+   38	已作答不完全正确1.3	不完全正确1.3	不完全正确1.3	3.9
+   39	已作答不完全正确1.3	不完全正确1.3	作答正确1.5	4.1
+   40	已作答不完全正确1.3	不完全正确1.3	作答错误1	3.6
+   41	已作答不完全正确1.3	作答正确1.5	未作答0	2.8
+   42	已作答不完全正确1.3	作答正确1.5	不完全正确1.3	4.1
+   43	已作答不完全正确1.3	作答正确1.5	作答正确1.5	4.3
+   44	已作答不完全正确1.3	作答正确1.5	作答错误1	3.8
+   45	已作答不完全正确1.3	作答错误1	未作答0	2.3
+   46	已作答不完全正确1.3	作答错误1	不完全正确1.3	3.6
+   47	已作答不完全正确1.3	作答错误1	作答正确1.5	3.8
+   48	已作答不完全正确1.3	作答错误1	作答错误1	3.3
+   49	已作答正确1.5	未作答0	未作答0	1.5
+   50	已作答正确1.5	未作答0	不完全正确1.3	2.8
+   51	已作答正确1.5	未作答0	作答正确1.5	3
+   52	已作答正确1.5	未作答0	作答错误1	2.5
+   53	已作答正确1.5	不完全正确1.3	未作答0	2.8
+   54	已作答正确1.5	不完全正确1.3	不完全正确1.3	4.1
+   55	已作答正确1.5	不完全正确1.3	作答正确1.5	4.3
+   56	已作答正确1.5	不完全正确1.3	作答错误1	3.8
+   57	已作答正确1.5	作答正确1.5	未作答0	3
+   58   已作答正确1.5   作答正确1.5 不完全正确1.3 4.3
+   59   已作答正确1.5   作答正确1.5作答正确1.5  4.5
+   60   已作答正确1.5   作答正确1.5作答错误1 4  
+   61   已作答正确1.5   作答错误1 未作答0   2.5
+   62   已作答正确1.5   作答错误1 不完全正确1.3 3.8
+   63   已作答正确1.5   作答错误1 作答正确1.54  
+   64   已作答正确1.5   作答错误1 作答错误1 3.5
+         */
 
 
-        /// 互动参与指数(按倍数的权重设计)
-        /// 无二次作答的互动,且未设置正确答案:1.未作答0
-        ///                                     2.已作答1
-        ///                                     
-        /// 无二次作答的互动,且设置了正确答案:3.未作答0
-        ///                                     4.已作答1
-        ///                                     5.不完全正确1.3 
-        ///                                     6.作答正确1.5
-        ///                     
-        ///                                     
-        /// 有二次作答的互动,且未设置正确答案:7.第一次未作答0,第二次未作答0=》0
-        ///                                     8.第一次已作答1,第二次未作答0=》1
-        ///                                     9.第一次未作答0,第二次已作答1=》1
-        ///                                     10.第一次已作答1,第二次已作答1=》2
-        ///                                     
-        /// 有二次作答的互动,且设置了正确答案:(16种可能)
-        ///                                     11.第一次未作答0,第二次未作答0=》0
-        ///                                     12.第一次已作答,不完全正确1.3,第二次未作答0=》1.3
-        ///                                     13.第一次已作答,作答正确1.5,第二次未作答0=》1.5
-        ///                                     14.第一次已作答,作答错误1,第二次未作答0=》1
-        ///                                     15.第一次未作答0,第二次已作答,不完全正确1.3=》1.3
-        ///                                     16.第一次未作答0,第二次已作答,作答正确1.5=》1.5
-        ///                                     17.第一次未作答0,第二次已作答,作答错误1=》1
-        ///                                     18.第一次已作答,作答错误1,第二次已作答,作答错误1=》2
-        ///                                     19.第一次已作答,不完全正确1.3,第二次已作答,作答错误1=》2.3
-        ///                                     20.第一次已作答,作答正确1.5,第二次已作答,作答错误1=》2.5
-        ///                                     21.第一次已作答,作答错误1,第二次已作答,不完全正确1.3=》2.3
-        ///                                     22.第一次已作答,作答错误1,第二次已作答,作答正确1.5=》2.5
-        ///                                     23.第一次已作答,不完全正确1.3,第二次已作答,不完全正确1.3=》2.6
-        ///                                     24.第一次已作答,不完全正确1.3,第二次已作答,作答正确1.5=》2.8
-        ///                                     25.第一次已作答,作答正确1.5,第二次已作答,不完全正确1.3=》2.8
-        ///                                     26.第一次已作答,作答正确1.5,第二次已作答,作答正确1.5=》3
-        ///                                     
-        /// 抢权模式:                          27.未参与抢权 0
-        ///                                     28.参与抢权 1
-        ///                                     29.抢权成功 1.5                                   
-        /// 挑人时被挑到                        30.被挑到 1.5                                    
-        /// 有三次作答的互动,且设置了正确答案:(64种可能)
-        /*
-       1	未作答0	未作答0	未作答0	0
-       2	未作答0	未作答0	不完全正确1.3	1.3
-       3	未作答0	未作答0	作答正确1.5	1.5
-       4	未作答0	未作答0	作答错误1	1
-       5	未作答0	不完全正确1.3	未作答0	1.3
-       6	未作答0	不完全正确1.3	不完全正确1.3	2.6
-       7	未作答0	不完全正确1.3	作答正确1.5	2.8
-       8	未作答0	不完全正确1.3	作答错误1	2.3
-       9	未作答0	作答正确1.5	未作答0	1.5
-       10	未作答0	作答正确1.5	不完全正确1.3	2.8
-       11	未作答0	作答正确1.5	作答正确1.5	3
-       12	未作答0	作答正确1.5	作答错误1	2.5
-       13	未作答0	作答错误1	未作答0	1
-       14	未作答0	作答错误1	不完全正确1.3	2.3
-       15	未作答0	作答错误1	作答正确1.5	2.5
-       16	未作答0	作答错误1	作答错误1	2
-       17	已作答错误1	未作答0	未作答0	1
-       18	已作答错误1	未作答0	不完全正确1.3	2.3
-       19	已作答错误1	未作答0	作答正确1.5	2.5
-       20	已作答错误1	未作答0	作答错误1	2
-       21	已作答错误1	不完全正确1.3	未作答0	2.3
-       22	已作答错误1	不完全正确1.3	不完全正确1.3	3.6
-       23	已作答错误1	不完全正确1.3	作答正确1.5	3.8
-       24	已作答错误1	不完全正确1.3	作答错误1	3.3
-       25	已作答错误1	作答正确1.5	未作答0	2.5
-       26	已作答错误1	作答正确1.5	不完全正确1.3	3.8
-       27	已作答错误1	作答正确1.5	作答正确1.5	4
-       28	已作答错误1	作答正确1.5	作答错误1	3.5
-       29	已作答错误1	作答错误1	未作答0	2
-       30	已作答错误1	作答错误1	不完全正确1.3	3.3
-       31	已作答错误1	作答错误1	作答正确1.5	3.5
-       32	已作答错误1	作答错误1	作答错误1	3
-       33	已作答不完全正确1.3	未作答0	未作答0	1.3
-       34	已作答不完全正确1.3	未作答0	不完全正确1.3	2.6
-       35	已作答不完全正确1.3	未作答0	作答正确1.5	2.8
-       36	已作答不完全正确1.3	未作答0	作答错误1	2.3
-       37	已作答不完全正确1.3	不完全正确1.3	未作答0	2.6
-       38	已作答不完全正确1.3	不完全正确1.3	不完全正确1.3	3.9
-       39	已作答不完全正确1.3	不完全正确1.3	作答正确1.5	4.1
-       40	已作答不完全正确1.3	不完全正确1.3	作答错误1	3.6
-       41	已作答不完全正确1.3	作答正确1.5	未作答0	2.8
-       42	已作答不完全正确1.3	作答正确1.5	不完全正确1.3	4.1
-       43	已作答不完全正确1.3	作答正确1.5	作答正确1.5	4.3
-       44	已作答不完全正确1.3	作答正确1.5	作答错误1	3.8
-       45	已作答不完全正确1.3	作答错误1	未作答0	2.3
-       46	已作答不完全正确1.3	作答错误1	不完全正确1.3	3.6
-       47	已作答不完全正确1.3	作答错误1	作答正确1.5	3.8
-       48	已作答不完全正确1.3	作答错误1	作答错误1	3.3
-       49	已作答正确1.5	未作答0	未作答0	1.5
-       50	已作答正确1.5	未作答0	不完全正确1.3	2.8
-       51	已作答正确1.5	未作答0	作答正确1.5	3
-       52	已作答正确1.5	未作答0	作答错误1	2.5
-       53	已作答正确1.5	不完全正确1.3	未作答0	2.8
-       54	已作答正确1.5	不完全正确1.3	不完全正确1.3	4.1
-       55	已作答正确1.5	不完全正确1.3	作答正确1.5	4.3
-       56	已作答正确1.5	不完全正确1.3	作答错误1	3.8
-       57	已作答正确1.5	作答正确1.5	未作答0	3
-       58   已作答正确1.5   作答正确1.5 不完全正确1.3 4.3
-       59   已作答正确1.5   作答正确1.5作答正确1.5  4.5
-       60   已作答正确1.5   作答正确1.5作答错误1 4  
-       61   已作答正确1.5   作答错误1 未作答0   2.5
-       62   已作答正确1.5   作答错误1 不完全正确1.3 3.8
-       63   已作答正确1.5   作答错误1 作答正确1.54  
-       64   已作答正确1.5   作答错误1 作答错误1 3.5
-             */
-    }
 
 
 
 
     /*
     /*

+ 3 - 3
TEAMModelOS.Function/TEAMModelOS.Function.csproj

@@ -5,9 +5,9 @@
     <OutputType>Exe</OutputType>
     <OutputType>Exe</OutputType>
     <ImplicitUsings>enable</ImplicitUsings>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
     <Nullable>enable</Nullable>
-	<Version>5.2409.4</Version>
-	<AssemblyVersion>5.2409.4.1</AssemblyVersion>
-	<FileVersion>5.2409.4.1</FileVersion>
+	<Version>5.2409.11</Version>
+	<AssemblyVersion>5.2409.11.1</AssemblyVersion>
+	<FileVersion>5.2409.11.1</FileVersion>
 	<PackageId>TEAMModelOS.FunctionV4</PackageId>
 	<PackageId>TEAMModelOS.FunctionV4</PackageId>
 	<Authors>teammodel</Authors>
 	<Authors>teammodel</Authors>
 	<Company>醍摩豆(成都)信息技术有限公司</Company>
 	<Company>醍摩豆(成都)信息技术有限公司</Company>

+ 217 - 0
TEAMModelOS.SDK/Models/Cosmos/Common/LessonRecord.cs

@@ -459,6 +459,190 @@ namespace TEAMModelOS.SDK.Models
         public MutualSummary mutualSummary { get; set; }
         public MutualSummary mutualSummary { get; set; }
         public Dictionary<string, Dictionary<string, string>> mutualDetailSummary { get; set; } = new Dictionary<string, Dictionary<string, string>>();
         public Dictionary<string, Dictionary<string, string>> mutualDetailSummary { get; set; } = new Dictionary<string, Dictionary<string, string>>();
     }
     }
+
+    /// <summary>
+    /// 学生课中数据
+    /// </summary>
+    public class StudentLessonData
+    {
+        /// <summary>
+        /// 课例id
+        /// </summary>
+        public string? lessonId { get; set; }
+        /// <summary>
+        /// 课程id
+        /// </summary>
+        public string? courseId { get; set; }
+        /// <summary>
+        /// 科目id
+        /// </summary>
+        public string? subjectId { get; set; }
+        /// <summary>
+        /// 学生的学号
+        /// </summary>
+        public string? id { get; set; }
+        /// <summary>
+        /// 学生所在下标
+        /// </summary>
+        public int index { get; set; } = -1;
+        /// <summary>
+        /// 学生座位号
+        /// </summary>
+        public string? seatID { get; set; }
+        /// <summary>
+        /// 小组编号
+        /// </summary>
+        public string? groupId { get; set; }
+        /// <summary>
+        /// 小组下标 ,暂不使用
+        /// </summary>
+        //public int groupIndex { get; set; } = -1;
+
+        /// <summary>
+        /// 学生评测记录相关
+        /// </summary>
+        public List<StudentExamRecord> examRecords { get; set; } = new List<StudentExamRecord>();
+        public StudentCoworkRecord coworkRecord { get; set; } = new StudentCoworkRecord();
+        /// <summary>
+        /// 互动记录
+        /// </summary>
+        public StudentInteractRecord interactRecord { get; set; } = new StudentInteractRecord();
+
+    }
+
+    /// <summary>
+    /// 学生协作记录
+    /// </summary>
+    public class StudentInteractRecord
+    {
+        /// <summary>
+        /// 学生专属的互动次数,单独设置此字段,因为存在挑人的情况,需要单独设置
+        /// </summary>
+        public int interactRate { get; set; }
+        /// <summary>
+        /// 互动积分
+        /// </summary>
+        public double interactScore { get; set; }
+
+        /// <summary>
+        /// -1表示本次互动未统计分数,0表示本次互动答错为0,大于0 的分数表示本次互动打对为相应的分数。  该分数用于统计成果。
+        /// 互动积分记录[-1,0,10]
+        /// </summary>
+        public List<ItemRecord> interactRecords { get; set; } = new List<ItemRecord>();
+    }
+    /// <summary>
+    /// 学生协作记录
+    /// </summary>
+    public class StudentCoworkRecord
+    {
+        /// <summary>
+        /// 协作参与率
+        /// </summary>
+        public double coworkRate { get; set; }
+        /// <summary>
+        /// 协作得分
+        /// </summary>
+        public double coworkScore { get; set; }
+        /// <summary>
+        /// 协作参与记录
+        /// </summary>
+        public List<ItemRecord> itemRecords { get; set; } = new List<ItemRecord>();
+    }
+    /// <summary>
+    /// 学生课中评测记录
+    /// </summary>
+    public class StudentExamRecord
+    {
+        /// <summary>
+        /// 作答率0 未作答,1,所有题目作答,小数点则表示部分作答。 可纳入学习态度计算,  主观题需要确认 是否会在此写入答案。
+        /// </summary>
+        public double answerRate { get; set; }
+        /// <summary>
+        /// 评测得分
+        /// </summary>
+        public double score { get; set; }
+        /// <summary>
+        /// 评测id
+        /// </summary>
+        public string? examId { get; set; }
+        /// <summary>
+        /// 得分率
+        /// </summary>
+        public double scoreRate { get; set; }
+        /// <summary>
+        /// 配分
+        /// </summary>
+        //  public double allocation { get; set; }
+        /// <summary> 
+        /// 暂不计算,取消{ get; set; }
+        /// 每个题的得分情况
+        /// </summary>
+        public List<ItemRecord> itemRecords /*{ get; set; }*/ = new List<ItemRecord>();
+    }
+
+    public class ItemRecord
+    {
+
+        /// <summary>
+        ///    { "PopQuesLoad", "ReAtmpAnsStrt", "BuzrAns", "BuzrLoad", "PickupResult","SPQStrt" };  //"SPQStrt" 课中评测专用,不参与互动的统计,会重复
+        /// </summary>
+        public string? interactType { get; set; }
+        /// <summary>
+        /// 互动结果权重,纳入学习状态计算
+        /// </summary>
+        public double resultWeight { get; set; }
+        /// <summary>
+        /// 互动结果类型,如:T0没有作答, 没有参与,T1作答错误,有参加,有抢权,TP部分正确,TT作答正确,抢权成功,被抽到
+        /// </summary>
+        public string? resultType { get; set; }
+        /// <summary>
+        ///  互动积分,试题评分
+        /// </summary>
+        public double interactScore { get; set; }
+        /// <summary>
+        /// 基准分值
+        /// </summary>
+        public double criterion { get; set; }
+    }
+    public static class InteractReultType
+    {
+        /// <summary>
+        /// 没有作答, 没有参与0
+        /// </summary>
+        public static readonly string T0 = "T0";
+        /// <summary>
+        /// 作答错误,有参加,有抢权1
+        /// </summary>
+        public static readonly string T1 = "T1";
+        /// <summary>
+        /// 部分正确1.3
+        /// </summary>
+        public static readonly string TP = "TP";
+        /// <summary>
+        /// 作答正确,抢权成功,被抽到1.5
+        /// </summary>
+        public static readonly string TT = "TT";
+
+    }
+    public static class InteractWeight
+    {
+        /// <summary>
+        /// 没有作答, 没有参与0
+        /// </summary>
+        public static readonly double T0 = 0;
+        /// <summary>
+        /// 作答错误,有参加,有抢权1
+        /// </summary>
+        public static readonly double T1 = 1;
+        /// <summary>
+        /// 部分正确1.3
+        /// </summary>
+        public static readonly double TP = 1.3;
+        /// <summary>
+        /// 作答正确,抢权成功,被抽到1.5
+        /// </summary>
+        public static readonly double TT = 1.5;
+    }
     public class MutualSummary
     public class MutualSummary
     {
     {
         public string mutualType { get; set;}
         public string mutualType { get; set;}
@@ -580,6 +764,39 @@ namespace TEAMModelOS.SDK.Models
     {
     {
         public ExamInfo exam { get; set; }
         public ExamInfo exam { get; set; }
         public List<ExamLessonStudentAnswerArray> examClassResult { get; set; } = new List<ExamLessonStudentAnswerArray>();
         public List<ExamLessonStudentAnswerArray> examClassResult { get; set; } = new List<ExamLessonStudentAnswerArray>();
+        public LessonPaper paper { get; set; }
+    }
+    public class LessonPaper
+    {
+
+        public List<LessonPaperSlide> slides { get; set; } = new List<LessonPaperSlide>();
+    }
+    public class LessonPaperSlide
+    {
+        /// <summary>
+        /// blob 路徑
+        /// </summary>
+        public string? url { get; set; }
+        /// <summary>
+        /// 題型
+        /// </summary>
+        public string? type { get; set; }
+        /// <summary>
+        /// scoring
+        /// </summary>
+        public LessonPaperSlideScoring? scoring { get; set; }
+    }
+    public class LessonPaperSlideScoring
+    {
+        /// <summary>
+        /// knowledge
+        /// </summary>
+        public List<string> knowledge { get; set; } = new List<string>();
+        /// <summary>
+        /// 答案
+        /// </summary>
+        public List<string> ans { get; set; } = new List<string>();
+
     }
     }
     /// <summary>
     /// <summary>
     /// IRS.json
     /// IRS.json

+ 3 - 3
TEAMModelOS.SDK/TEAMModelOS.SDK.csproj

@@ -1,9 +1,9 @@
 <Project Sdk="Microsoft.NET.Sdk">
 <Project Sdk="Microsoft.NET.Sdk">
 	<PropertyGroup>
 	<PropertyGroup>
 		<TargetFramework>net8.0</TargetFramework>
 		<TargetFramework>net8.0</TargetFramework>
-		<Version>5.2409.4</Version>
-		<AssemblyVersion>5.2409.4.1</AssemblyVersion>
-		<FileVersion>5.2409.4.1</FileVersion>
+		<Version>5.2409.11</Version>
+		<AssemblyVersion>5.2409.11.1</AssemblyVersion>
+		<FileVersion>5.2409.11.1</FileVersion>
 		<PackageReleaseNotes>发版</PackageReleaseNotes>
 		<PackageReleaseNotes>发版</PackageReleaseNotes>
 	</PropertyGroup>
 	</PropertyGroup>
 
 

+ 1 - 1
TEAMModelOS/Controllers/Third/IRS/ThirdIRSController.cs

@@ -183,7 +183,7 @@ namespace TEAMModelOS.Controllers
         [HttpPost("third-irs/receive-139zhxy")]
         [HttpPost("third-irs/receive-139zhxy")]
         public async Task<IActionResult> Receive_139zhxy(JsonElement json)
         public async Task<IActionResult> Receive_139zhxy(JsonElement json)
         {
         {
-         //   await _dingDing.SendBotMsg($"收到,接收到 139zhxy反馈器推送信息!{json.ToJsonString()}\n", GroupNames.成都开发測試群組);
+            await _dingDing.SendBotMsg($"收到,接收到 139zhxy反馈器推送信息!{json.ToJsonString()}\n", GroupNames.成都开发測試群組);
             string sign = string.Empty, timestamp = string.Empty, message="请求失败";
             string sign = string.Empty, timestamp = string.Empty, message="请求失败";
             int code = -1;
             int code = -1;
             long now =  DateTimeOffset.UtcNow.GetGMTTime(8).ToUnixTimeMilliseconds();
             long now =  DateTimeOffset.UtcNow.GetGMTTime(8).ToUnixTimeMilliseconds();

+ 4 - 4
TEAMModelOS/TEAMModelOS.csproj

@@ -80,11 +80,11 @@
 		<SpaRoot>ClientApp\</SpaRoot>
 		<SpaRoot>ClientApp\</SpaRoot>
 		<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
 		<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
 		<UserSecretsId>078b5d89-7d90-4f6a-88fc-7d96025990a8</UserSecretsId>
 		<UserSecretsId>078b5d89-7d90-4f6a-88fc-7d96025990a8</UserSecretsId>
-		<Version>5.2409.4</Version>
-		<AssemblyVersion>5.2409.4.1</AssemblyVersion>
-		<FileVersion>5.2409.4.1</FileVersion>
+		<Version>5.2409.11</Version>
+		<AssemblyVersion>5.2409.11.1</AssemblyVersion>
+		<FileVersion>5.2409.11.1</FileVersion>
 		<Description>TEAMModelOS(IES5)</Description>
 		<Description>TEAMModelOS(IES5)</Description>
-		<PackageReleaseNotes>IES版本说明版本切换标记5.2409.4.1</PackageReleaseNotes>
+		<PackageReleaseNotes>IES版本说明版本切换标记5.2409.11.1</PackageReleaseNotes>
 		<PackageId>TEAMModelOS</PackageId>
 		<PackageId>TEAMModelOS</PackageId>
 		<Authors>teammodel</Authors>
 		<Authors>teammodel</Authors>
 		<Company>醍摩豆(成都)信息技术有限公司</Company>
 		<Company>醍摩豆(成都)信息技术有限公司</Company>

+ 1 - 1
TEAMModelOS/appsettings.Development.json

@@ -18,7 +18,7 @@
     "IdTokenSalt": "8263692E2213497BB55E74792B7900B4",
     "IdTokenSalt": "8263692E2213497BB55E74792B7900B4",
     "HttpTrigger": "https://teammodelosfunction-test.chinacloudsites.cn/api/",
     "HttpTrigger": "https://teammodelosfunction-test.chinacloudsites.cn/api/",
     //"HttpTrigger": "http://localhost:7071/api/"
     //"HttpTrigger": "http://localhost:7071/api/"
-    "Version": "5.2409.4.1"
+    "Version": "5.2409.11.1"
   },
   },
   "Azure": {
   "Azure": {
     // 测试站数据库
     // 测试站数据库

+ 1 - 1
TEAMModelOS/appsettings.json

@@ -18,7 +18,7 @@
     "Exp": 86400,
     "Exp": 86400,
     "IdTokenSalt": "8263692E2213497BB55E74792B7900B4",
     "IdTokenSalt": "8263692E2213497BB55E74792B7900B4",
     "HttpTrigger": "https://teammodelosfunction.chinacloudsites.cn/api/",
     "HttpTrigger": "https://teammodelosfunction.chinacloudsites.cn/api/",
-    "Version": "5.2409.4.1"
+    "Version": "5.2409.11.1"
   },
   },
   "Azure": {
   "Azure": {
     "Storage": {
     "Storage": {