Bladeren bron

Hiteach評測上傳API修正:Exam更新欄位、ExamClassResult無法取得才新建邏輯

jeff 4 jaren geleden
bovenliggende
commit
2e036a46d2
1 gewijzigde bestanden met toevoegingen van 60 en 19 verwijderingen
  1. 60 19
      TEAMModelOS/Controllers/Client/HiTeachController.cs

+ 60 - 19
TEAMModelOS/Controllers/Client/HiTeachController.cs

@@ -894,9 +894,28 @@ namespace TEAMModelOS.Controllers.Client
                 if (!request.TryGetProperty("exam", out JsonElement exam)) return BadRequest();
                 if (!request.TryGetProperty("examClassResult", out JsonElement examClassResult)) return BadRequest();
 
+                ExamInfo ExamInfoFromReq = exam.ToObject<ExamInfo>();
+                string examId = ExamInfoFromReq.id;
+                string excode = ExamInfoFromReq.code;
                 ExamInfo dbExamInfo = exam.ToObject<ExamInfo>();
-                List<ExamClassResultStudentAnswerArray> dbExamClassResultList = examClassResult.ToObject<List<ExamClassResultStudentAnswerArray>>();
+                var queryex = $"SELECT * FROM c WHERE c.id = '{examId}'";
+                await foreach (var itemex in _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Common").GetItemQueryStreamIterator(queryText: queryex, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{excode}") }))
+                {
+                    var jsonex = await JsonDocument.ParseAsync(itemex.ContentStream);
+                    if (jsonex.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                    {
+                        foreach (var obj in jsonex.RootElement.GetProperty("Documents").EnumerateArray())
+                        {
+                            dbExamInfo = obj.ToObject<ExamInfo>();
+                        }
+                    }
+                }
+                if(string.IsNullOrWhiteSpace(dbExamInfo.id))
+                {
+                    dbExamInfo = ExamInfoFromReq;
+                }                
 
+                List<ExamClassResultStudentAnswerArray> dbExamClassResultList = examClassResult.ToObject<List<ExamClassResultStudentAnswerArray>>();
                 //ExamInfo內容取得、調整
                 //※規則  owner:"school" => 校園評測  "teacher" => 個人評測 
                 //※規則  scope:"school" => 校本班級  "private" => 個人班級 
@@ -906,7 +925,7 @@ namespace TEAMModelOS.Controllers.Client
                 //取得課堂紀錄下的試卷資料(blob)、複製到評測紀錄下
                 bool paperDataCopyErrFlg = false; //試卷資料拷貝錯誤Flag  true:拷貝錯誤
                 List<Dictionary<string, string>> recordPaperInfo = new List<Dictionary<string, string>>();
-                foreach (PaperSimple paperInfo in dbExamInfo.papers)
+                foreach (PaperSimple paperInfo in ExamInfoFromReq.papers)
                 {
                     string paperBlobPath = (!paperInfo.blob.EndsWith("/")) ? paperInfo.blob + "/" : paperInfo.blob;
                     paperBlobPath = (paperInfo.blob.StartsWith("/")) ? paperBlobPath.Remove(0, 1) : paperBlobPath;
@@ -974,25 +993,47 @@ namespace TEAMModelOS.Controllers.Client
                 bool studentAnswerCopyErrFlg = false; //學生作答資料拷貝錯誤Flag  true:拷貝錯誤
                 foreach (ExamClassResultStudentAnswerArray examClassResultRow in dbExamClassResultList)
                 {
+                    //以subjectId及classId(info.id)取得DB中的ExamClassResult
                     ExamClassResult examClassResultUpd = new ExamClassResult();
-                    examClassResultUpd.pk = examClassResultRow.pk;
-                    examClassResultUpd.code = examClassResultRow.code;
-                    examClassResultUpd.id = examClassResultRow.id;
-                    examClassResultUpd.school = examClassResultRow.school;
-                    examClassResultUpd.examId = examClassResultRow.examId;
-                    examClassResultUpd.subjectId = examClassResultRow.subjectId;
-                    examClassResultUpd.gradeId = examClassResultRow.gradeId;
-                    examClassResultUpd.year = examClassResultRow.year;
-                    examClassResultUpd.info = examClassResultRow.info;
-                    examClassResultUpd.progress = examClassResultRow.progress;
-                    examClassResultUpd.studentIds = examClassResultRow.studentIds;
-                    examClassResultUpd.studentAnswers = new List<List<string>>();
-                    examClassResultUpd.studentScores = examClassResultRow.studentScores;
-                    examClassResultUpd.scope = examClassResultRow.scope;
-                    examClassResultUpd.sum = examClassResultRow.sum;
-
-                    string examId = examClassResultRow.examId;
+                    string exclcode = examClassResultRow.code;
+                    string classId = examClassResultRow.info.id;
                     string subjectId = examClassResultRow.subjectId;
+                    var querycr = $"SELECT * FROM c WHERE c.examId = '{examId}' AND c.info.id = '{classId}' AND c.subjectId = '{subjectId}'";
+                    await foreach (var itemcr in _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Common").GetItemQueryStreamIterator(queryText: querycr, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{exclcode}") }))
+                    {
+                        var jsontcr = await JsonDocument.ParseAsync(itemcr.ContentStream);
+                        if (jsontcr.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                        {
+                            foreach (var obj in jsontcr.RootElement.GetProperty("Documents").EnumerateArray())
+                            {
+                                examClassResultUpd = obj.ToObject<ExamClassResult>();
+                                examClassResultUpd.progress = examClassResultRow.progress;
+                                examClassResultUpd.studentIds = examClassResultRow.studentIds;
+                                examClassResultUpd.studentAnswers = new List<List<string>>();
+                                examClassResultUpd.studentScores = examClassResultRow.studentScores;
+                                examClassResultUpd.sum = examClassResultRow.sum;
+                            }
+                        }
+                    }
+                    //無法取得既有ExamClassResult,新建
+                    if (string.IsNullOrWhiteSpace(examClassResultUpd.id))
+                    {
+                        examClassResultUpd.pk = examClassResultRow.pk;
+                        examClassResultUpd.code = examClassResultRow.code;
+                        examClassResultUpd.id = examClassResultRow.id;
+                        examClassResultUpd.school = examClassResultRow.school;
+                        examClassResultUpd.examId = examClassResultRow.examId;
+                        examClassResultUpd.subjectId = examClassResultRow.subjectId;
+                        examClassResultUpd.gradeId = examClassResultRow.gradeId;
+                        examClassResultUpd.year = examClassResultRow.year;
+                        examClassResultUpd.info = examClassResultRow.info;
+                        examClassResultUpd.progress = examClassResultRow.progress;
+                        examClassResultUpd.studentIds = examClassResultRow.studentIds;
+                        examClassResultUpd.studentAnswers = new List<List<string>>();
+                        examClassResultUpd.studentScores = examClassResultRow.studentScores;
+                        examClassResultUpd.scope = examClassResultRow.scope;
+                        examClassResultUpd.sum = examClassResultRow.sum;
+                    }
                     //examClassResult.studentAnswers 將學生答案上傳blob後轉換內容為blob路徑
                     if (examClassResultRow.studentIds != null && examClassResultRow.studentIds.Count > 0 && examClassResultRow.studentAnswersArray != null && examClassResultRow.studentAnswersArray.Count > 0)
                     {