Browse Source

处理异常、班级标准差修复

zhouj1203@hotmail.com 1 year ago
parent
commit
5a13c66677

+ 14 - 5
TEAMModelOS.FunctionV4/CosmosDB/TriggerExam.cs

@@ -474,6 +474,7 @@ namespace TEAMModelOS.FunctionV4
                 //标准差
                 double sPowSum = 0;
                 List<double> newSumScore = new List<double>();
+                List<double> effectiveScore = new List<double>();
                 int lostStu = classResult.status.Where(c => c == 1).ToList().Count;
                 var scount = classResult.studentIds.Count - lostStu;
                 int index = 0;
@@ -555,13 +556,18 @@ namespace TEAMModelOS.FunctionV4
                         }
                     }
                     double nc = Math.Round(newSc.Sum(), 2);
+                    if (classResult.status[sIndex] == 0)
+                    {
+                        effectiveScore.Add(nc);
+                    };
                     newSumScore.Add(nc);
                     subScore += nc;
                     classResult.sum[sIndex] = nc;
                     sIndex++;
                 }
                 double rateScore = scount > 0 ? Math.Round(subScore * 1.0 / scount, 2) : 0;
-                foreach (double scs in newSumScore)
+                //有效分数
+                foreach (double scs in effectiveScore)
                 {
                     sPowSum += Math.Pow(scs - rateScore, 2);
 
@@ -1319,8 +1325,10 @@ namespace TEAMModelOS.FunctionV4
                                 lostStu.Add(classResult.studentIds[index_stu]);
                             }
                         }
-                        else {
-                            if (classResult.status[index_stu] == 1) {
+                        else
+                        {
+                            if (classResult.status[index_stu] == 1)
+                            {
                                 if (!lostStu.Contains(classResult.studentIds[index_stu]))
                                 {
                                     lostStu.Add(classResult.studentIds[index_stu]);
@@ -1413,9 +1421,10 @@ namespace TEAMModelOS.FunctionV4
             result.studentIds.ForEach(x =>
             {
                 double sc = result.studentScores[result.studentIds.IndexOf(x)].Sum();
-                if (!result.lostStus.Contains(x)) {
+                if (!result.lostStus.Contains(x))
+                {
                     powSum += Math.Pow(sc - result.average, 2);
-                }               
+                }
             });
             result.standard = Math.Round((result.studentIds.Count - result.lostStus.Count) > 0 ? Math.Pow(powSum / (result.studentIds.Count - result.lostStus.Count), 0.5) : 0, 2);
             result.csRate = csRate;

+ 14 - 2
TEAMModelOS/Controllers/Analysis/AnalysisController.cs

@@ -429,8 +429,20 @@ namespace TEAMModelOS.Controllers.Analysis
                         }
                         /*  //班级得分率
                           x.csRate = totalAll > 0 ? Math.Round(totalAverage / totalAll,2) : 0;*/
-                        //标准差
-                        powSum += Math.Pow(x.total - totalAverage, 2);
+                        //标准差 介于缺考人员的判定逻辑 多科考试必须多科同时缺考才能算整个评测缺考
+                        int inx = examClassResults.FirstOrDefault(e => e.info.id.Equals(rGroup.id)).studentIds.IndexOf(x.id);
+                        var statu = examClassResults.Select(x => x.status).ToList();
+                        bool flag = false;
+                        foreach (var ets in statu) {
+                            if (ets[inx] == 0) {
+                                flag = true;
+                                break;
+                            }
+                        }
+                        if (flag) {
+                            powSum += Math.Pow(x.total - totalAverage, 2);
+                        }
+                       
                         //进线人数
                         if (x.total >= ipoint)
                         {