zhouj1203@hotmail.com 9 months ago
parent
commit
e9392c50c7

+ 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));

+ 28 - 17
TEAMModelOS/Controllers/Common/ExamController.cs

@@ -379,9 +379,9 @@ namespace TEAMModelOS.Controllers
         }
 
         [ProducesDefaultResponseType]
-        [AuthToken(Roles = "teacher,admin")]
+        //[AuthToken(Roles = "teacher,admin")]
         [HttpPost("get-exam-point")]
-        [Authorize(Roles = "IES")]
+        //[Authorize(Roles = "IES")]
         public async Task<IActionResult> getExamPoint(JsonElement request)
         {
             try
@@ -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 });
                 }
 
             }

+ 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
         {