浏览代码

班级 年级得分率

CrazyIter_Bin 4 年之前
父节点
当前提交
0bdd4c052e
共有 1 个文件被更改,包括 41 次插入11 次删除
  1. 41 11
      TEAMModelOS/Controllers/Analysis/AnalysisController.cs

+ 41 - 11
TEAMModelOS/Controllers/Analysis/AnalysisController.cs

@@ -22,6 +22,7 @@ using static TEAMModelOS.SDK.Models.Cosmos.Student.StudentAnalysis;
 using TEAMModelOS.SDK.Models.Cosmos.School;
 using static TEAMModelOS.SDK.Models.Cosmos.School.ClassAnalysis;
 using static TEAMModelOS.SDK.Models.Cosmos.School.GradeAnalysis;
+using System.Text;
 
 namespace TEAMModelOS.Controllers.Analysis
 {
@@ -87,7 +88,8 @@ namespace TEAMModelOS.Controllers.Analysis
                 "PL",
                 "X",
                 "Y",
-                "knowledge"
+                "knowledge",
+                "examScoreRate"
             };
             ExamInfo info = null;
             List<KeyValuePair<string, List<List<string>>>> subjectPaperDatas = new List<KeyValuePair<string, List<List<string>>>>();
@@ -353,11 +355,11 @@ namespace TEAMModelOS.Controllers.Analysis
 
         private static (KeyValuePair<string,List<List<string>>>, KeyValuePair<string, List<KeyValuePair<string, List<string>>>>)   DoExerciseScatteres(ExamResult e,  List<string > paperKey) 
         {
-            List<double> gradeAnswer = new List<double>();
-            List<string> grasdepersent = new List<string>();
+            List<double> examAnswer = new List<double>();
+            List<string> examPersent = new List<string>();
             for (int n = 0; n < e.paper.point.Count; n++)
             {
-                gradeAnswer.Add(0);
+                examAnswer.Add(0);
             }
             //参考人数
             double Qnum = 0;
@@ -370,7 +372,9 @@ namespace TEAMModelOS.Controllers.Analysis
             });
            
             List<List<string>> datas = new List<List<string>>();
-            List<string[]> itemAnalysis = new List<string[]>(); 
+            List<string[]> itemAnalysis = new List<string[]>();
+            Dictionary<string,List<int>> gradeItemScore = new Dictionary<string, List<int>>();
+            Dictionary<string, int > gradeItemStuCount = new Dictionary<string,  int>();
             List<KeyValuePair<string, List<string>>> classdatas = new List<KeyValuePair<string, List<string>>>();
             try
             {
@@ -379,7 +383,7 @@ namespace TEAMModelOS.Controllers.Analysis
                     //初始化每题得分情况
                     List<int> answerCount = new List<int>();
                     List<string> persent = new List<string>();
-                    double peopleCount = 0;
+                    int  peopleCount = 0;
                     for (int n = 0; n < e.paper.point.Count; n++)
                     {
                         answerCount.Add(0);
@@ -397,7 +401,7 @@ namespace TEAMModelOS.Controllers.Analysis
                                     //记录班级每题得分数
                                     answerCount[j] = answerCount[j] + 1;
                                     //记录年级每题得分数
-                                    gradeAnswer[j] = gradeAnswer[j] + 1;
+                                    examAnswer[j] = examAnswer[j] + 1;
                                 }
                             }
                         }
@@ -413,7 +417,18 @@ namespace TEAMModelOS.Controllers.Analysis
                         persent.Add(t.ToString());
                     }
                     classdatas.Add(new KeyValuePair<string, List<string>>(c.id, persent));
+                    if (gradeItemScore.ContainsKey(c.gradeId))
+                    {
+                        int index = 0;
+                        gradeItemScore[c.gradeId].ForEach(x => { x = x + answerCount[index]; index += 1; });
+                        gradeItemStuCount[c.gradeId]= gradeItemStuCount[c.gradeId] + peopleCount;
+                    }
+                    else {
+                        gradeItemScore.Add(c.gradeId, answerCount);
+                        gradeItemStuCount.Add(c.gradeId, peopleCount);
+                    }
                 });
+                 
                 double[] point = StringHelper.ListTodouble(e.paper.point);
                 double[,] result = StringHelper.ListToDouble(e.studentScores);
                 var cdm = new ClouDASMatrix(result, point);
@@ -432,10 +447,10 @@ namespace TEAMModelOS.Controllers.Analysis
                     ex = ss.Split(",");
                     itemAnalysis.Add(ex);
                 }
-                foreach (int p in gradeAnswer)
+                foreach (int p in examAnswer)
                 {
                     var t = Math.Round(p * 1.0 / Qnum * 100,2);
-                    grasdepersent.Add(t.ToString());
+                    examPersent.Add(t.ToString());
                 }
                 for (int k = 0; k < e.paper.point.Count; k++)
                 {
@@ -474,13 +489,28 @@ namespace TEAMModelOS.Controllers.Analysis
                         values[18] = "-";
                         values[19] = "-";
                     }
-                    values[7] = grasdepersent[k];
-                    values[8] = grasdepersent[k];
+                    Dictionary<string,string> its = new Dictionary<string, string>();
+                    classdatas.ForEach(cls => { its.Add(cls.Key, cls.Value[k]); });
+                    StringBuilder classBuilder = new StringBuilder();
+                    foreach (var key in its.Keys) {
+                        classBuilder.Append(key+":"+ its[key]+",");
+                    }
+                    var cstr = classBuilder.ToString();
+                    values[7] = cstr.Substring(0, cstr.Length-1);
+                    StringBuilder gradeBuilder = new StringBuilder();
+                    //处理年级的这个题的得分
+                    foreach (var key in gradeItemScore.Keys) {
+                        var data = Math.Round(gradeItemScore[key][k] * 1.0 / gradeItemStuCount[key] * 100, 2);
+                        gradeBuilder.Append(key + ":" + data + ",");
+                    }
+                    var gstr = gradeBuilder.ToString();
+                    values[8] = gstr.Substring(0,gstr.Length-1);
                     values[20] = quality[k].ToString();
                     values[21] = answer[k].ToString();
                     string pointName = "";
                    
                     values[22] = pointName;
+                    values[23] = examPersent[k];
                     datas.Add(values);
                 }
                 KeyValuePair<string, List<List<string>>> keyValue = new KeyValuePair<string, List<List<string>>>(e.subjectId, datas);