Quellcode durchsuchen

Merge branch 'develop' of http://52.130.252.100:10000/TEAMMODEL/TEAMModelOS into develop

XW vor 9 Monaten
Ursprung
Commit
465dada6e8

+ 45 - 19
TEAMModelOS.Extension/HTEX.Test/Controllers/LessonRecordController.cs

@@ -1,15 +1,11 @@
 using Azure.Storage.Blobs.Models;
 using Microsoft.AspNetCore.Mvc;
-using Microsoft.Azure.Cosmos.Linq;
 using System.Text.Json;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Extension;
-using System.Drawing;
-using TEAMModelOS.SDK.Models.Cosmos.OpenEntity;
-using Grpc.Core;
-using Microsoft.Extensions.Azure;
+
 namespace HTEX.Test.Controllers
 {
     [ApiController]
@@ -219,7 +215,7 @@ namespace HTEX.Test.Controllers
         /// <param name="lessonBase"></param>
         /// <param name="irsDatas"></param>
         /// <returns></returns>
-        public async Task<List<StudentLessonData>  > GetIRSData(LessonRecord lessonRecord, LessonBase lessonBase, TimeLineData timeLineData, List<IRSData> irsDatas, List<StudentLessonData> studentLessonDatas)
+        public async Task<List<StudentLessonData>> GetIRSData(LessonRecord lessonRecord, LessonBase lessonBase, TimeLineData timeLineData, List<IRSData> irsDatas, List<StudentLessonData> studentLessonDatas)
         {
             List<string> interactTypes = new List<string>() { "PopQuesLoad", "ReAtmpAnsStrt", "BuzrAns", "BuzrLoad", "PickupResult" };
             //去重页面
@@ -242,7 +238,7 @@ namespace HTEX.Test.Controllers
 
                     if (irsDataPage.clientAnswers.IsNotEmpty())
                     {
-                       
+
                         //第一个list是几轮,一次作答,二次作答, 第二个list是学生的下标, 第三个list是 答案
                         List<List<List<string>>> clientAnswers = new List<List<List<string>>>();
                         foreach (var key in irsDataPage.clientAnswers.Keys)
@@ -271,7 +267,7 @@ namespace HTEX.Test.Controllers
                                 {
                                     //index  代表学生下标
                                     List<InteractRecord> interactRecords = new List<InteractRecord>();
-                                    if (clientAnswers.Count==1) 
+                                    if (clientAnswers.Count==1)
                                     {
                                         //即问即答
                                         interactType = "PopQuesLoad";
@@ -284,7 +280,7 @@ namespace HTEX.Test.Controllers
                                         });
                                     }
                                     if (clientAnswers.Count==2)
-                                    { 
+                                    {
                                         //二次作答
                                         interactType="ReAtmpAnsStrt";
                                         var ans1 = clientAnswers[1][index];
@@ -296,7 +292,7 @@ namespace HTEX.Test.Controllers
                                         });
                                     }
                                     if (clientAnswers.Count>2)
-                                    { 
+                                    {
                                         //三次作答
                                         interactType="TeAtmpAnsStrt";
                                         var ans2 = clientAnswers[2][index];
@@ -320,7 +316,7 @@ namespace HTEX.Test.Controllers
                         Dictionary<string, InteractRecord> buzzParticipants = new Dictionary<string, InteractRecord>();
                         foreach (var buzzParticipant in irsDataPage.buzzParticipants)
                         {
-                            var studentData=  studentLessonDatas.Find(x => x.seatID!.Equals(buzzParticipant));
+                            var studentData = studentLessonDatas.Find(x => x.seatID!.Equals(buzzParticipant));
                             if (studentData != null)
                             {
                                 buzzParticipants[buzzParticipant]=new InteractRecord() { status = InteractStatus.T1, interactType= interactType };
@@ -331,7 +327,7 @@ namespace HTEX.Test.Controllers
                         {
                             buzzParticipants[buzzClient]=new InteractRecord() { status = InteractStatus.TT, interactType= interactType };
                         }
-                        foreach (var studentLessonData in studentLessonDatas) 
+                        foreach (var studentLessonData in studentLessonDatas)
                         {
                             if (buzzParticipants.ContainsKey(studentLessonData.seatID!))
                             {
@@ -339,7 +335,7 @@ namespace HTEX.Test.Controllers
                                 studentLessonData.interactRecords.Add(buzzParticipants[studentLessonData.seatID!]);
                             }
                             else
-                            { 
+                            {
                                 //处理未参与抢权的
                                 studentLessonData.interactRecords.Add(new InteractRecord() { status = InteractStatus.T0, interactType = interactType });
                             }
@@ -352,18 +348,18 @@ namespace HTEX.Test.Controllers
             //不需要去重页面,直接获取挑人大类 PickupResult
             //小类处理:PickupRight  , PickupOption  , PickupNthGrp  ,PickupEachGrp  ,PickupDiff
             var enventsPickup = timeLineData.events.Where(x => x.Event.Equals("PickupResult"));
-            if (enventsPickup.IsNotEmpty()) 
+            if (enventsPickup.IsNotEmpty())
             {
                 foreach (var item in enventsPickup)
                 {
-                    List<int> mbrs= item.PickupMemberId.ToObject<List<int>>();
+                    List<int> mbrs = item.PickupMemberId.ToObject<List<int>>();
 
                     foreach (var mbr in mbrs)
                     {
-                       var studentLessonData =  studentLessonDatas.Find(x => x.seatID!.Equals($"{mbr}"));
-                        if (studentLessonData!=null) 
+                        var studentLessonData = studentLessonDatas.Find(x => x.seatID!.Equals($"{mbr}"));
+                        if (studentLessonData!=null)
                         {
-                            studentLessonData.interactRecords.Add( new InteractRecord (){ status = InteractStatus.TT, interactType = string.IsNullOrWhiteSpace(item.PickupType)? "PickupResult" : item.PickupType}) ;
+                            studentLessonData.interactRecords.Add(new InteractRecord() { status = InteractStatus.TT, interactType = string.IsNullOrWhiteSpace(item.PickupType) ? "PickupResult" : item.PickupType });
                         }
                     }
                 }
@@ -419,6 +415,20 @@ namespace HTEX.Test.Controllers
             return status;
         }
 
+        /// <summary>
+        /// 获取课中评测数据
+        /// </summary>
+        /// <param name="lessonRecord"></param>
+        /// <param name="lessonBase"></param>
+        /// <param name="timeLineData"></param>
+        /// <param name="coworkDatas"></param>
+        /// <param name="studentLessonDatas"></param>
+        /// <returns></returns>
+        public async Task<dynamic> GetExamData(LessonRecord lessonRecord, LessonBase lessonBase, TimeLineData timeLineData, List<ExamData> examDatas, List<StudentLessonData> studentLessonDatas) 
+        {
+            return null;
+        }
+
         public async Task<dynamic> GetCoworkData(LessonRecord lessonRecord, LessonBase lessonBase, TimeLineData timeLineData, List<CoworkData> coworkDatas, List<StudentLessonData> studentLessonDatas)
         {
             return Ok(lessonRecord);
@@ -483,6 +493,11 @@ namespace HTEX.Test.Controllers
         /// </summary>
         public List<InteractRecord> interactRecords { get; set; } = new List<InteractRecord>();
     }
+    public class StudentExamRecord
+    {
+
+    }
+
     public class InteractRecord
     {
         /// <summary>
@@ -626,6 +641,14 @@ namespace HTEX.Test.Controllers
 
 
     /*
+     * 
+     /// 事件
+        /// 推送相关 在Push.json处理 DifObjPush 推送给学生 差异化推送   "PushMemberId":[1,4,8,12,17,18,19,23,24,27,32,36]  ,FastPgPush 同一推送
+        /// 互动相关 在IRS.json处理 'PopQuesLoad'互动问答 , 'ReAtmpAnsStrt' 二次作答 , 'BuzrAns'  抢权(新), 'BuzrLoad'抢权(旧), PickupResult   挑人算不算互动??  读取PickupMemberId "[\r\n  35\r\n]"
+        /// 测验相关 在IRS.json处理 SPQStrt 测验模式
+        /// 任务相关 在Task.json处理 'WrkSpaceLoad' 作品收集, 'WrkCmp' 作品贴上  是什么操作
+        /// 评分相关 在SmartRating.json 处理 'SmartRating' 评分模式,分 投票Voting 和 GrandRating  星光大评分(All每人多件评分,Two随机分配互评, Self自评)    
+        /// 协作相关 在Cowork.json 处理   CoworkLoad 协作类型   coworkType   All: '全体协作',    Group: '分组协作',   其他的为  : '差异化协作',
      问题汇总:
     TimeLine.json 
     挑人大类 Event= PickupResult 里面 分小类
@@ -634,6 +657,9 @@ namespace HTEX.Test.Controllers
                 "PickupMemberId":"[\r\n  1\r\n]"  里面是学生的座号还是数组下标。
     "Event":"PressGood","TargetClass":0,"MemberId":"[\r\n  1\r\n]","Count":1},
         是代表什么意思。 MemberId  是座号还说下标。
-
+    8月27日 17:581.   Task.json的  clientWorks.isGroupItem    bool 类型  false代表什么意思   true代表什么意思
+2.   Cowork.json 的  coworkType   All: '全体协作',    Group: '分组协作',      : '差异化协作',    差异化协作的简码是什么?  
+3.   TimeLine.json 的  类型 PickupResult   挑人算不算互动??  读取PickupMemberId "[\r\n  35\r\n]"
+4.   小组任务具体详细信息如何获取? 需要精确到 所有小组任务信息和 某一小组的参与情况  用于计算小组任务参与率
      */
 }

+ 6 - 1
TEAMModelOS.SDK/Models/Cosmos/Common/LessonRecord.cs

@@ -575,7 +575,12 @@ namespace TEAMModelOS.SDK.Models
         //public string reciveTime { get; set; }
         // public int displayIndex {  get; set; }
     }
-
+    //Exam.json
+    public class ExamData 
+    {
+        public ExamInfo exam { get; set; }
+       public List<ExamClassResult> examClassResult { get; set; }
+    }
     /// <summary>
     /// IRS.json
     /// </summary>

+ 3 - 3
TEAMModelOS.SDK/Models/Service/ExamService.cs

@@ -143,13 +143,13 @@ namespace TEAMModelOS.SDK.Models.Service
                         {
                             double totalScore = info.papers.SelectMany(x => x.point).Sum();
                             var classResult = classResults.Where(x => x.examId.Equals(info.id)).ToList();
-                            var classScores = classResult.GroupBy(x => x.info.id).Select(c => new { classId = c.Key, average = Math.Round(c.ToList().Sum(z => z.average) / info.subjects.Count / totalScore,2) }).ToList();
+                            var classScores = classResult.GroupBy(x => x.info.id).Select(c => new { classId = c.Key, average = Math.Round(c.ToList().Sum(z => z.average) / info.subjects.Count / totalScore,4) }).ToList();
                             List<(string className, double average)> classMore = new();
                             foreach (var cs in classScores)
                             {
                                 classMore.Add((cs.classId, cs.average));
                             }
-                            var gradeScores = Math.Round(info.average / totalScore,2);
+                            var gradeScores = Math.Round(info.average / totalScore,4);
                             List<(string sname, double scores, string classId)> stus = new();
                             foreach (RMember member in rmembers)
                             {
@@ -162,7 +162,7 @@ namespace TEAMModelOS.SDK.Models.Service
                                         scroe += result.sum[index];
                                     }
                                 }
-                                var persent = Math.Round(scroe * 1.0 / totalScore, 2);
+                                var persent = Math.Round(scroe * 1.0 / totalScore, 4);
                                 stus.Add((member.id, persent, member.classId));
                             }
                             grades.Add((info.name, classMore, gradeScores, stus,info.startTime));

+ 6 - 6
TEAMModelOS/Controllers/Client/HiScanController.cs

@@ -388,7 +388,7 @@ namespace TEAMModelOS.Controllers.Core
             try
             {
                 HashSet<string> classesSet = new HashSet<string>();
-                ExamData examData = null;
+                ExamSheetData examData = null;
                 if (!request.TryGetProperty("id", out JsonElement id)) return BadRequest();
                 if (!request.TryGetProperty("schoolId", out JsonElement _schoolId)) return BadRequest();
                 if (!request.TryGetProperty("sheetNo", out JsonElement _sheetNo)) return BadRequest();
@@ -474,7 +474,7 @@ namespace TEAMModelOS.Controllers.Core
                 }
                 string blobSas = null;
                 string blobUrl = null;
-                ExamData exam = null;
+                ExamSheetData exam = null;
                 if (examData.sheet.scope.Equals("school", StringComparison.OrdinalIgnoreCase))
                 {
                     if (examData != null)
@@ -504,9 +504,9 @@ namespace TEAMModelOS.Controllers.Core
             }
         }
 
-        private async Task<ExamData> GetExamBySheet(string owner, string school, string code, CosmosClient client,HashSet<string> classesSet, string sheetNo)
+        private async Task<ExamSheetData> GetExamBySheet(string owner, string school, string code, CosmosClient client,HashSet<string> classesSet, string sheetNo)
         {
-            ExamData examRcds = null;
+            ExamSheetData examRcds = null;
     
             StringBuilder sql = new StringBuilder($"SELECT  value(c) FROM c  join papers in c.papers where (c.status<>404 or IS_DEFINED(c.status) = false ) and   c.owner='{owner}'  and papers.sheetNo='{sheetNo}' ");
             if (!string.IsNullOrEmpty(school))
@@ -552,7 +552,7 @@ namespace TEAMModelOS.Controllers.Core
                 {
                     paper = new PaperRcdData { name = pap.name, answers = pap.answers, point = pap.point, };
                 }
-                examRcds = new ExamData
+                examRcds = new ExamSheetData
                 {
                     code = exam.code.Replace("Exam-", ""),
                     id = exam.id,
@@ -593,7 +593,7 @@ namespace TEAMModelOS.Controllers.Core
         public string id { get; set; }
         public string name { get; set; }
     }
-    public record ExamData
+    public record ExamSheetData
     {
         public string code { get; set; }
         public SheetConfig sheet { get; set; }

+ 49 - 16
TEAMModelOS/Controllers/Common/ExamController.cs

@@ -397,7 +397,9 @@ namespace TEAMModelOS.Controllers
                 List<string> clds = classId.ToObject<List<string>>().ToList();
                 List<string> clas = classId.ToObject<List<string>>().ToList();
                 List<ExamSubject> subs = [];
+                List<PaperSimple> paperSimples = [];
                 List<(string id,string type)> source = [];
+                List<(string id, double score)> averages = [];
                 //获取学校基本信息
                 School schoolBase = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(code.GetString(), new PartitionKey("Base"));
                 var period = schoolBase.period.Find(x => x.id.Equals($"{periodId}"));
@@ -437,7 +439,7 @@ namespace TEAMModelOS.Controllers
                 string classInfos = string.Join(" or ", strs);
 
                 (List<RMember> members, List<RGroupList> groups) = await GroupListService.GetMemberByListids(_coreAPIHttpService, client, _dingDing, clds, $"{code}");
-                    var queryExam = $"select c.id,c.subjects,c.source from c where c.period.id = '{periodId}' and ({classInfos}) " +
+                    var queryExam = $"select c.id,c.subjects,c.source,c.average,c.papers from c where c.period.id = '{periodId}' and ({classInfos}) " +
                     $"and c.qamode <> 2 and c.progress = 'finish' and c.scope = 'school' and c.startTime > {semesterData.date.ToUnixTimeMilliseconds()} and c.startTime < {semesterData.nextSemester.ToUnixTimeMilliseconds()} ";
                     await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIteratorSql(queryText: queryExam, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Exam-{code}") }))
                     {
@@ -453,13 +455,21 @@ namespace TEAMModelOS.Controllers
                                 {
                                     subs.AddRange(subject.ToObject<List<ExamSubject>>());
                                 }
+                                if (account.TryGetProperty("papers", out JsonElement papers))
+                                {
+                                    paperSimples.AddRange(papers.ToObject<List<PaperSimple>>());
+                                }
                                 source.Add((account.GetProperty("id").GetString(), account.GetProperty("source").GetString()));
+                                averages.Add((account.GetProperty("id").GetString(), account.GetProperty("average").GetDouble()));
                             }
                         }
                     }
                     subs = subs.Where((x, i) => subs.FindIndex(z => z.id == x.id) == i).ToList();
                 List<ExamClassResult> classResults = new();
                 List<ExamClassResult> results = new();
+
+                var point = paperSimples.FirstOrDefault().point.Sum();
+                var gradeAverageRate = Math.Round(averages.Select(c => c.score).Sum() / averages.Count / point,4);
                 if (clas.Count == 0)
                 {
                     var queryClass = $"select value(c) from c where  c.examId in ({string.Join(",", ids.Select(o => $"'{o}'"))})";
@@ -494,10 +504,11 @@ namespace TEAMModelOS.Controllers
                         x.Key,
                         cc = x.ToList().Count,
                         students = x.ToList().SelectMany(z => z.studentIds).Distinct().ToList(),
+                        classRate = Math.Round(x.ToList().Select(z => z.average).Sum() / x.ToList().Count,2)
                         //score = x.ToList().Select(k => k.sum).Aggregate((current, next) => current.Zip(next, (a, b) => a + b).ToList()),
                         //gRate = Math.Round( x.ToList().SelectMany(k => k.sum).Sum() / x.ToList().Count / members.Count, 2)
                     });
-                List<(string sub, List<(string id, double score)> subScore,int cc)> stuScore = [];
+                List<(string sub, List<(string id, double score)> subScore,int cc,double average)> stuScore = [];
                 foreach (var es in examScore) {
                     List<(string id, double score)> subScore = [];
                     foreach (var sId in es.students) {
@@ -505,7 +516,7 @@ namespace TEAMModelOS.Controllers
                         var totalScore = classResults.Where(c => c.subjectId.Equals(es.Key) && c.studentIds.Contains(sId)).ToList().Select(z => z.sum[z.studentIds.IndexOf(sId)]).Sum();
                         subScore.Add((sId, Math.Round(totalScore / count,2)));
                     }
-                    stuScore.Add((es.Key, subScore,es.cc));
+                    stuScore.Add((es.Key, subScore,es.cc,es.classRate));
                 }
 
 
@@ -517,17 +528,17 @@ namespace TEAMModelOS.Controllers
                     classRate = x.ToList().GroupBy(z => z.info.id).Select(m => new { 
                         classId = m.Key,
                         className = groups.Where(k => k.id.Equals(m.Key)).FirstOrDefault().name,
-                        rate = Math.Round(m.ToList().SelectMany(j => j.sum).Sum() / m.ToList().Count /m.ToList().SelectMany(z => z.studentIds).Distinct().ToList().Count,2)
-                    }),
+                        rate = Math.Round(m.ToList().Select(k => k.average).Sum() / m.ToList().Count,2)
+                    })
                     //score = x.ToList().Select(k => k.sum).Aggregate((current, next) => current.Zip(next, (a, b) => a + b).ToList()),
-                    gRate = Math.Round(x.ToList().SelectMany(k => k.sum).Sum() / x.ToList().Count / members.Count, 2)
+                    //gRate = Math.Round(x.ToList().SelectMany(k => k.sum).Sum() / x.ToList().Count / members.Count, 2)
                 }) ;
                 var gradeRate = examAllScore.Select(x => new
                 {
                     subjectId = x.Key,
                     subjectName = subs.Where(z => z.id.Equals(x.Key)).FirstOrDefault().name,
-                    x.classRate,
-                    x.gRate
+                    x.classRate
+                    //x.gRate
                 });
 
                 if (request.TryGetProperty("studentId", out JsonElement studentId) && !string.IsNullOrWhiteSpace($"{studentId}"))
@@ -536,22 +547,22 @@ namespace TEAMModelOS.Controllers
                     {
                         subjectId = x.sub,
                         subjectName = subs.Where(z => z.id.Equals(x.sub)).FirstOrDefault().name,
-                        classRate = Math.Round(x.subScore.Select(z => z.score).Sum() / x.cc / x.subScore.Count, 2),
+                        classRate = Math.Round(x.average / point, 4),
                         rank = x.subScore.OrderByDescending(x => x.score).Select(z => z.id).ToList().IndexOf(studentId.GetString()) + 1,
                         stuRate = x.subScore.OrderByDescending(x => x.score).Select(z => new
                         {
                             z.id,
                             members.Where(s => s.id.Equals(z.id)).FirstOrDefault().name,
-                            rate = Math.Round(z.score, 2)
+                            rate = Math.Round(z.score / point, 4)
                         }).ToList().Take(10),
                         sper = x.subScore.Where(c => c.id.Equals(studentId.GetString())).Select(z => new
                         {
                             z.id,
                             members.Where(s => s.id.Equals(z.id)).FirstOrDefault().name,
-                            rate = Math.Round(z.score, 2)
+                            rate = Math.Round(z.score / point, 4)
                         })
                     });
-                    return Ok(new { orderScore, typeCount, gradeRate, pCount = members.Count, code = 200 });
+                    return Ok(new { orderScore, typeCount, gradeRate, pCount = members.Count, gradeAverageRate, point, code = 200 });
                 }
                 else
                 {
@@ -559,14 +570,14 @@ namespace TEAMModelOS.Controllers
                     {
                         subjectId = x.sub,
                         subjectName = subs.Where(z => z.id.Equals(x.sub)).FirstOrDefault().name,
-                        classRate = Math.Round(x.subScore.Select(z => z.score).Sum() / x.cc / x.subScore.Count,2),
+                        classRate = Math.Round(x.average / point,4),
                         stuRate = x.subScore.OrderByDescending(x => x.score).Select(z => new
                         {
                             z.id,
-                            rate = Math.Round(z.score , 2)
+                            rate = Math.Round(z.score / point, 4)
                         }).ToList().Take(10)
                     });
-                    return Ok(new { orderScore, typeCount, gradeRate, pCount = members.Count, code = 200 });
+                    return Ok(new { orderScore, typeCount, gradeRate, pCount = members.Count, gradeAverageRate, point, code = 200 });
                 }
 
             }
@@ -2054,6 +2065,7 @@ namespace TEAMModelOS.Controllers
                 var (_, _, _, school) = HttpContext.GetAuthTokenInfo();
                 //string code = school_code.ToString().Substring(5);
                 //ExamInfo info = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<ExamInfo>(id.ToString(), new PartitionKey($"Exam-{school_code}"));
+                Dictionary<string, List<string>> examClassResultCodeIdDic = new Dictionary<string, List<string>>(); //examClassResult code對應ID表 ※取得閱卷變更結果用
                 List<ExamClassResult> examClassResults = new List<ExamClassResult>();
                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIteratorSql<ExamClassResult>(queryText: $"select c.id,c.subjectId,c.code,c.scIds,c.info,c.studentIds,c.studentAnswers,c.studentScores,c.mark,c.status from c where c.examId = '{id}' and c.subjectId = '{subjectId}' and c.info.id = '{classId}'",
                     requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"ExamClassResult-{school_code}") }))
@@ -2066,6 +2078,8 @@ namespace TEAMModelOS.Controllers
                 {
                     ids.AddRange(result.studentIds);
                     //codes.AddRange(result.scIds);
+                    if(!examClassResultCodeIdDic.ContainsKey(result.code)) examClassResultCodeIdDic.Add(result.code, new List<string>() { result.id });
+                    else if (!examClassResultCodeIdDic[result.code].Contains(result.id)) examClassResultCodeIdDic[result.code].Add(result.id);
                 }
                 List<string> cid = new()
                 {
@@ -2190,7 +2204,26 @@ namespace TEAMModelOS.Controllers
                         return Ok(new { props });
                     }                   
                 }*/
-                return Ok(new { examClassResults, ufos, delIds });
+                //取得教師批改紀錄 ※目前只有統測評量有紀錄
+                List<ExamClassResultMark> markResult = new List<ExamClassResultMark>();
+                foreach(KeyValuePair<string, List<string>> seed in examClassResultCodeIdDic) {
+                    string code = seed.Key.Replace("ExamClassResult", "ExamClassResultMark");
+                    List<string> idList = seed.Value;
+                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryStreamIteratorSql(queryText: $"SELECT * FROM c where c.id in ({string.Join(",", idList.Select(o => $"'{o}'"))}) and c.pk = 'ExamClassResultMark'",
+                                    requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey(code) }))
+                    {
+                        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())
+                            {
+                                markResult.Add(obj.ToObject<ExamClassResultMark>());
+                            }
+                        }
+                    }
+                }
+
+                return Ok(new { examClassResults, ufos, delIds, markResult });
             }
             catch (Exception ex)
             {

+ 15 - 15
TEAMModelOS/Controllers/Student/OverallEducationController.cs

@@ -678,19 +678,19 @@ namespace TEAMModelOS.Controllers
                         var student =  students.Find(x => x.id.Equals($"{_studentId}"));
                         ExamScore exam3Score = new ExamScore();
                         exam3Score.name = item.name;
-                        exam3Score.gradeScore=item.total;
+                        exam3Score.gradeRate=item.total;
                         exam3Score.xdatas= new List<CodeDouble> 
                         { 
                             new CodeDouble 
                             {
                                 code = student.id,
                                 name= student.name,
-                                value=item.students.Find(x=>x.studentId.Equals(student.id)).scores,
+                                value= item.students.Find(x=>x.studentId.Equals(student.id)).scores,
                                 rank = item.students.OrderByDescending(x => x.scores).Select(z => z.studentId).ToList().IndexOf(student.id) + 1,
                                 time = item.time
                             } 
                         };
-                        exam3Score.classScore=item.classMore.Find(x=>x.classId.Equals(student.classId)).average;
+                        exam3Score.classRate=item.classMore.Find(x=>x.classId.Equals(student.classId)).average;
                         exam3Scores.Add(exam3Score);
                     }
                     else
@@ -700,8 +700,8 @@ namespace TEAMModelOS.Controllers
                             Class clazz = classes.First();
                             ExamScore exam3Score = new ExamScore();
                             exam3Score.name = item.name;
-                            exam3Score.gradeScore=item.total;
-                            exam3Score.classScore=item.classMore.Find(x => x.classId.Equals(clazz.id)).average;
+                            exam3Score.gradeRate=item.total;
+                            exam3Score.classRate=item.classMore.Find(x => x.classId.Equals(clazz.id)).average;
                             exam3Score.xdatas= item.students.Where(y=>y.classId.Equals(clazz.id)).Select(x=>new CodeDouble { 
                                 code=x.studentId,
                                 name= students.Find(z=>z.id.Equals(x.studentId))?.name,
@@ -716,8 +716,8 @@ namespace TEAMModelOS.Controllers
                         {
                             ExamScore exam3Score = new ExamScore();
                             exam3Score.name = item.name;
-                            exam3Score.gradeScore=item.total;
-                            exam3Score.classScore=-1;
+                            exam3Score.gradeRate =item.total;
+                            exam3Score.classRate =-1;
                             exam3Score.xdatas= item.classMore.Select(x => new CodeDouble { 
                                 code=x.classId, 
                                 name= grade_classes.Find(z => z.id.Equals(x.classId))?.name, 
@@ -730,8 +730,8 @@ namespace TEAMModelOS.Controllers
                 }
                 var examScores = exam3Scores.Select(x => new { 
                     x.name,
-                    x.gradeScore,
-                    x.classScore,
+                    x.gradeRate,
+                    x.classRate,
                     data = x.xdatas.Where(c => !string.IsNullOrEmpty(c.name)).Select(z => new { 
                         z.code,
                         z.name,
@@ -748,7 +748,7 @@ namespace TEAMModelOS.Controllers
                     exam3Scores.ForEach(z => {
                         var stu =  z.xdatas.Find(z => z.code.Equals($"{_studentId}"));
                         if (stu!=null) {
-                            stuExamScores.Add(new ExamDimensionScore { examName=z.name, classScore=z.classScore,gradeScore=z.gradeScore,stuScore=stu.value });
+                            stuExamScores.Add(new ExamDimensionScore { examName=z.name, classRate=z.classRate,gradeRate=z.gradeRate,stuScore=stu.value });
                         }
                     });
                     var student = students.Find(z => z.id.Equals($"{_studentId}"));
@@ -809,7 +809,7 @@ namespace TEAMModelOS.Controllers
                             var stu = z.xdatas.Find(z => z.code.Equals(student.id));
                             if (stu!=null)
                             {
-                                stuExamScores.Add(new ExamDimensionScore { examName=z.name, classScore=z.classScore, gradeScore=z.gradeScore, stuScore=stu.value });
+                                stuExamScores.Add(new ExamDimensionScore { examName=z.name, classRate=z.classRate, gradeRate=z.gradeRate, stuScore=stu.value });
                             }
                         });
                         studentDimension=new StudentDimensionScore
@@ -914,8 +914,8 @@ namespace TEAMModelOS.Controllers
         }
         public class ExamScore { 
 
-            public double gradeScore { get; set; }
-            public double classScore { get; set; }
+            public double gradeRate { get; set; }
+            public double classRate { get; set; }
             public string name { get; set; }
             public List<CodeDouble> xdatas = new List<CodeDouble>();
         }
@@ -951,8 +951,8 @@ namespace TEAMModelOS.Controllers
         {
             public string examName {  get; set; }
             public double stuScore { get; set; }
-            public double classScore { get;set;  }
-            public double gradeScore { get; set;  }
+            public double classRate { get;set;  }
+            public double gradeRate { get; set;  }
         }
         public class ClassDimensionScore
         {