Browse Source

取得統測評量API修正:追加各老師課程對應的評量ID

jeff 10 months ago
parent
commit
dd2f5cf6ec

+ 9 - 0
TEAMModelOS.SDK/Models/Cosmos/Teacher/JointEvent.cs

@@ -37,6 +37,7 @@ namespace TEAMModelOS.SDK.Models
             public string type { get; set; } //"exam":評量 "join":報名 "other":其他
             public string examType { get; set; } //評量類型 "regular":一般競賽 "custom":挑戰賽
             public bool examOverwrite { get; set; } //評量可否重複作答 true:可 false:不可
+            public string blob { get; set; } //說明文件存放Blob路徑
             public long startTime { get; set; }
             public long endTime { get; set; }
             public string progress { get; set; } //進行狀況 "pending" "going" "finish"
@@ -61,6 +62,14 @@ namespace TEAMModelOS.SDK.Models
             public string courseId { get; set; }
             public string courseName { get; set; }
             public List<JointEventGroupCourseGroup> groupLists { get; set; } = new();
+            public string examId { get; set; } //對應生成的examId
+        }
+
+        /// <summary>
+        /// 統測活動學校報名班級 基底class
+        /// </summary>
+        public class JointEventClassBase
+        {
         }
         public class JointEventGroupCourseGroup
         {

+ 27 - 2
TEAMModelOS/Controllers/Teacher/JointEventController.cs

@@ -651,7 +651,6 @@ namespace TEAMModelOS.Controllers.Common
                     if (!token_1.ValueKind.Equals(JsonValueKind.Null) && token_1.ValueKind.Equals(JsonValueKind.String))
                     {
                         token = token_1.GetString();
-
                     }
                 }
                 List<JointExamIdCollector> jointExamIdCollectorsPrivate = new List<JointExamIdCollector>();
@@ -699,6 +698,24 @@ namespace TEAMModelOS.Controllers.Common
                     }
 
                 }
+                //取得Exam
+                List<ExamInfo> exams = new List<ExamInfo>();
+                List<string> jointExamIds = jointExamInfo.Select(x => x.id).ToList();
+                if (jointExamIds.Count > 0)
+                {
+                    StringBuilder stringBuilderExam = new($"SELECT * FROM c WHERE CONTAINS(c.code, 'Exam-', true) AND ARRAY_CONTAINS({JsonSerializer.Serialize(jointExamIds)}, c.jointExamId)");
+                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryStreamIteratorSql(queryText: stringBuilderExam.ToString(), requestOptions: null))
+                    {
+                        using var json = await JsonDocument.ParseAsync(item.Content);
+                        if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                        {
+                            foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                            {
+                                exams.Add(obj.ToObject<ExamInfo>());
+                            }
+                        }
+                    }
+                }
                 //取得老師報名的JointCourse
                 List<JointEventGroupDb> jointEventGroup = new List<JointEventGroupDb>(); //個人課程
                 if (jointExamIdCollectorsPrivate.Count > 0)
@@ -722,6 +739,12 @@ namespace TEAMModelOS.Controllers.Common
                             foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
                             {
                                 JointEventGroupDb jointEventGroupRow = obj.ToObject<JointEventGroupDb>();
+                                foreach(var course in jointEventGroupRow.courseLists)
+                                {
+                                    if(jointEventGroupRow.scope.Equals("private") && string.IsNullOrWhiteSpace(course.subjectId) && !string.IsNullOrWhiteSpace(course.courseId)) course.subjectId = course.courseId;
+                                    ExamInfo examRelated = exams.Where(e => e.subjects.Select(s => s.id).ToList().Contains(course.courseId)).FirstOrDefault();
+                                    if(examRelated != null) course.examId = examRelated.id;
+                                }
                                 jointEventGroup.Add(jointEventGroupRow);
                             }
                         }
@@ -732,9 +755,10 @@ namespace TEAMModelOS.Controllers.Common
                 {
 
                 }
+                
 
                 //整理 jointExamInfo
-                if(jointExamInfo.Count > 0)
+                if (jointExamInfo.Count > 0)
                 {
                     foreach(JointExam jointExam in jointExamInfo)
                     {
@@ -751,6 +775,7 @@ namespace TEAMModelOS.Controllers.Common
                                     stuListRow.creatorId = stu.creatorId;
                                     stuListRow.creatorName = stu.creatorName;
                                     stuListRow.courseLists = stu.courseLists;
+
                                     jointExam.stuLists.Add(stuListRow);
                                 }
                             }