|
@@ -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)
|
|
|
{
|