Browse Source

生成學生評量歷程、課堂歷程:追加「學生名單中若無OpenID則不執行」邏輯

jeff 1 year ago
parent
commit
68ff9fcb42

+ 13 - 34
TEAMModelOS.FunctionV4/CosmosDB/TriggerExam.cs

@@ -567,12 +567,7 @@ namespace TEAMModelOS.FunctionV4
             try
             try
             {
             {
                 if (info.papers.Count > 0)
                 if (info.papers.Count > 0)
-                {
-                    // debug用
-                    //if (info.id == "d1dc1417-eeb0-4b4c-b1b3-7e9f99c95087")
-                    //{
-                    //}
-                    
+                {                    
                     for (int i = 0; i < info.papers.Count; i++)
                     for (int i = 0; i < info.papers.Count; i++)
                     {// 每一個科目的試卷
                     {// 每一個科目的試卷
                         string rootName = "";
                         string rootName = "";
@@ -600,34 +595,10 @@ namespace TEAMModelOS.FunctionV4
                                 if (info.classes.Count > 0)
                                 if (info.classes.Count > 0)
                                 {// 按照classes取ans.json
                                 {// 按照classes取ans.json
                                     sbsql.Append($" and ARRAY_CONTAINS({System.Text.Json.JsonSerializer.Serialize(info.classes)}, c.info.id)");
                                     sbsql.Append($" and ARRAY_CONTAINS({System.Text.Json.JsonSerializer.Serialize(info.classes)}, c.info.id)");
-                                    //sbsql.Append($" and c.info.id in (");
-                                    //foreach (var classes in info.classes)
-                                    //{// 組合所有classesid                                                                         
-                                    //    if (classes == info.classes[info.classes.Count - 1])
-                                    //    {
-                                    //        sbsql.Append($"'{classes}' )");
-                                    //    }
-                                    //    else
-                                    //    {
-                                    //        sbsql.Append($"'{classes}',");
-                                    //    }
-                                    //}
                                 }
                                 }
                                 else if (info.stuLists.Count > 0)
                                 else if (info.stuLists.Count > 0)
                                 {
                                 {
                                     sbsql.Append($" and ARRAY_CONTAINS({System.Text.Json.JsonSerializer.Serialize(info.stuLists)}, c.info.id)");
                                     sbsql.Append($" and ARRAY_CONTAINS({System.Text.Json.JsonSerializer.Serialize(info.stuLists)}, c.info.id)");
-                                    //sbsql.Append($" and c.info.id in (");
-                                    //foreach (var stuLists in info.stuLists)
-                                    //{// 組合所有stuListsid                                                                         
-                                    //    if (stuLists == info.stuLists[info.stuLists.Count - 1])
-                                    //    {
-                                    //        sbsql.Append($"'{stuLists}' )");
-                                    //    }
-                                    //    else
-                                    //    {
-                                    //        sbsql.Append($"'{stuLists}',");
-                                    //    }
-                                    //}
                                 }
                                 }
                                 // 取學生答案及學生名單
                                 // 取學生答案及學生名單
                                 var client = _azureCosmos.GetCosmosClient();
                                 var client = _azureCosmos.GetCosmosClient();
@@ -644,15 +615,23 @@ namespace TEAMModelOS.FunctionV4
                                     stuListForSql = stuListForSql.Union(item.studentIds).ToList();
                                     stuListForSql = stuListForSql.Union(item.studentIds).ToList();
                                 }
                                 }
                                 //取得學校的學生名單
                                 //取得學校的學生名單
+                                List<string> stuOpenIdList = new List<string>();
                                 if(!string.IsNullOrWhiteSpace(info.school))
                                 if(!string.IsNullOrWhiteSpace(info.school))
                                 {
                                 {
-                                    StringBuilder stusql = new StringBuilder($"SELECT VALUE c.id FROM c WHERE c.pk = 'Base' AND ARRAY_CONTAINS({System.Text.Json.JsonSerializer.Serialize(stuListForSql)}, c.id)");
-                                    await foreach (string item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIterator<string>(queryText: stusql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-{info.school}") }))
+                                    StringBuilder stusql = new StringBuilder($"SELECT * FROM c WHERE c.pk = 'Base' AND ARRAY_CONTAINS({System.Text.Json.JsonSerializer.Serialize(stuListForSql)}, c.id)");
+                                    await foreach (Student item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIterator<Student>(queryText: stusql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-{info.school}") }))
                                     {
                                     {
-                                        stuDic[info.school].Add(item);
+                                        stuDic[info.school].Add(item.id);
+                                        if(!string.IsNullOrWhiteSpace(item.openId) && !stuOpenIdList.Contains(item.openId))
+                                        {
+                                            stuOpenIdList.Add(item.openId);
+                                        }
                                     }
                                     }
                                 }
                                 }
-
+                                if(stuOpenIdList.Count.Equals(0)) //無任何有OpenID的學生 => 中止生成此試卷的學生歷程
+                                {
+                                    continue;
+                                }
                                 // 按照取出的學生答案blob 對答案 組合資料
                                 // 按照取出的學生答案blob 對答案 組合資料
                                 foreach (var studentAnswers in studentAnswersList)
                                 foreach (var studentAnswers in studentAnswersList)
                                 {// 每一個班級
                                 {// 每一個班級

+ 35 - 5
TEAMModelOS/Controllers/Client/HiTeachController.cs

@@ -166,7 +166,7 @@ namespace TEAMModelOS.Controllers.Client
         /// </summary>
         /// </summary>
         /// <param name="request"></param>
         /// <param name="request"></param>
         /// <returns></returns>
         /// <returns></returns>
-        //[Authorize(Roles = "HiTeach")]
+        [Authorize(Roles = "HiTeach")]
         [ProducesDefaultResponseType]
         [ProducesDefaultResponseType]
         [HttpPost("update-lesson-recordLearnRecord")]
         [HttpPost("update-lesson-recordLearnRecord")]
         public async Task<IActionResult> UpdateLessonRecordLearnRecord(JsonElement request)
         public async Task<IActionResult> UpdateLessonRecordLearnRecord(JsonElement request)
@@ -201,6 +201,7 @@ namespace TEAMModelOS.Controllers.Client
         {
         {
             try
             try
             {
             {
+                var client = _azureCosmos.GetCosmosClient();
                 string school = $"{_school}";
                 string school = $"{_school}";
                 string tmdid = _tmdid.GetString();
                 string tmdid = _tmdid.GetString();
                 string lessonId = _lessonId.GetString();
                 string lessonId = _lessonId.GetString();
@@ -221,6 +222,39 @@ namespace TEAMModelOS.Controllers.Client
                     _azureStorage.GetBlobContainerClient(rootName).GetBlobClient($"/records/{lessonId}/IES/IRS.json").Exists() &&
                     _azureStorage.GetBlobContainerClient(rootName).GetBlobClient($"/records/{lessonId}/IES/IRS.json").Exists() &&
                     _azureStorage.GetBlobContainerClient(rootName).GetBlobClient($"/records/{lessonId}/IES/base.json").Exists())
                     _azureStorage.GetBlobContainerClient(rootName).GetBlobClient($"/records/{lessonId}/IES/base.json").Exists())
                 {
                 {
+                    // 開啟 base.json
+                    BlobDownloadResult baseblobDownload = await _azureStorage.GetBlobContainerClient(rootName).GetBlobClient($"/records/{lessonId}/IES/base.json").DownloadContentAsync();
+                    ScoreLessonBase lessonBase = baseblobDownload.Content.ToObjectFromJson<ScoreLessonBase>();
+                    //取得學校學生名單
+                    List<string> stuOpenIdList = new List<string>();
+                    List<string> stuIdForSql = new List<string>();
+                    if (lessonBase.student.Count > 0)
+                    {
+                        foreach(LessonStudent stu in lessonBase.student)
+                        {
+                            if(!string.IsNullOrWhiteSpace(stu.id) && !stuIdForSql.Contains(stu.id))
+                            {
+                                stuIdForSql.Add(stu.id);
+                            }
+                        }
+                    }
+                    if(!string.IsNullOrWhiteSpace(school) && stuIdForSql.Count > 0)
+                    {
+                        StringBuilder stusql = new StringBuilder($"SELECT * FROM c WHERE c.pk = 'Base' AND ARRAY_CONTAINS({JsonSerializer.Serialize(stuIdForSql)}, c.id)");
+                        await foreach (Student item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIterator<Student>(queryText: stusql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-{school}") }))
+                        {
+                            if (!string.IsNullOrWhiteSpace(item.openId) && !stuOpenIdList.Contains(item.openId))
+                            {
+                                stuOpenIdList.Add(item.openId);
+                            }
+                        }
+                    }
+                    //若無任一OpenID學生則不執行以下程序
+                    if (stuOpenIdList.Count.Equals(0))
+                    {
+                        return;
+                    }
+
                     // 開啟 TimeLine.json
                     // 開啟 TimeLine.json
                     BlobDownloadResult TimeLineblobDownload = await _azureStorage.GetBlobContainerClient(rootName).GetBlobClient($"/records/{lessonId}/IES/TimeLine.json").DownloadContentAsync();
                     BlobDownloadResult TimeLineblobDownload = await _azureStorage.GetBlobContainerClient(rootName).GetBlobClient($"/records/{lessonId}/IES/TimeLine.json").DownloadContentAsync();
                     TimeLineEvents timeLineEvents = TimeLineblobDownload.Content.ToObjectFromJson<TimeLineEvents>();
                     TimeLineEvents timeLineEvents = TimeLineblobDownload.Content.ToObjectFromJson<TimeLineEvents>();
@@ -229,10 +263,6 @@ namespace TEAMModelOS.Controllers.Client
                     BlobDownloadResult IRSblobDownload = await _azureStorage.GetBlobContainerClient(rootName).GetBlobClient($"/records/{lessonId}/IES/IRS.json").DownloadContentAsync();
                     BlobDownloadResult IRSblobDownload = await _azureStorage.GetBlobContainerClient(rootName).GetBlobClient($"/records/{lessonId}/IES/IRS.json").DownloadContentAsync();
                     List<IRSItem> iRSItems = IRSblobDownload.Content.ToObjectFromJson<List<IRSItem>>();
                     List<IRSItem> iRSItems = IRSblobDownload.Content.ToObjectFromJson<List<IRSItem>>();
 
 
-                    // 開啟 base.json
-                    BlobDownloadResult baseblobDownload = await _azureStorage.GetBlobContainerClient(rootName).GetBlobClient($"/records/{lessonId}/IES/base.json").DownloadContentAsync();
-                    ScoreLessonBase lessonBase = baseblobDownload.Content.ToObjectFromJson<ScoreLessonBase>();
-
                     // 開啟 Task.json
                     // 開啟 Task.json
                     BlobDownloadResult taskblobDownload = await _azureStorage.GetBlobContainerClient(rootName).GetBlobClient($"/records/{lessonId}/IES/Task.json").DownloadContentAsync();
                     BlobDownloadResult taskblobDownload = await _azureStorage.GetBlobContainerClient(rootName).GetBlobClient($"/records/{lessonId}/IES/Task.json").DownloadContentAsync();
                     List<TaskItem> taskItems = taskblobDownload.Content.ToObjectFromJson<List<TaskItem>>();
                     List<TaskItem> taskItems = taskblobDownload.Content.ToObjectFromJson<List<TaskItem>>();