Explorar o código

名单联动调整

zhouj1203@hotmail.com %!s(int64=3) %!d(string=hai) anos
pai
achega
15c93f8a7b

+ 75 - 77
TEAMModelOS.FunctionV4/CosmosDB/TriggerExam.cs

@@ -316,22 +316,20 @@ namespace TEAMModelOS.FunctionV4
                                     {
                                         newStatus = 1;
                                     }
-                                    if (newStatus == 1)
+                                    Settlement settlement = await getMore(client, info, examClassResults);
+                                    long nowTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                                    //判断评分状态是否发生变化,便于实时的更新评测基本信息
+                                    if ((info.updateTime != nowTime && info.average != settlement.score) || info.sStatus != newStatus)
                                     {
-                                        Settlement settlement = await getMore(client, info, examClassResults);
-                                        long nowTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-                                        //判断评分状态是否发生变化,便于实时的更新评测基本信息
-                                        if ((info.updateTime != nowTime && info.average != settlement.score) || info.sStatus != newStatus)
-                                        {
-                                            info.sRate = settlement.rate;
-                                            info.sStatus = newStatus;
-                                            info.updateTime = nowTime;
-                                            info.average = settlement.score;
-                                            await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<ExamInfo>(info, info.id, new PartitionKey(info.code));
-                                        }
+                                        info.sRate = settlement.rate;
+                                        info.sStatus = newStatus;
+                                        info.updateTime = nowTime;
+                                        info.average = settlement.score;
+                                        await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<ExamInfo>(info, info.id, new PartitionKey(info.code));
                                     }
-
                                 }
+
+
                             }
                             catch (Exception e)
                             {
@@ -448,59 +446,59 @@ namespace TEAMModelOS.FunctionV4
             {
                 examResults.Add(item);
             }
-
-            List<Task<ItemResponse<ExamClassResult>>> tasks = new List<Task<ItemResponse<ExamClassResult>>>();
-            //结算单科单班的标准差和平均分
-            foreach (ExamClassResult classResult in examClassResults)
+            if (examResults.Count > 0)
             {
-                //标记单科单班总得分
-                double subScore = 0;
-                //标准差
-                double sPowSum = 0;
-                List<double> newSumScore = new List<double>();
-                var scount = classResult.studentIds.Count;
-                foreach (List<double> sc in classResult.studentScores)
+                List<Task<ItemResponse<ExamClassResult>>> tasks = new List<Task<ItemResponse<ExamClassResult>>>();
+                //结算单科单班的标准差和平均分
+                foreach (ExamClassResult classResult in examClassResults)
                 {
-                    List<double> newSc = new List<double>();
-                    foreach (double ssc in sc)
+                    //标记单科单班总得分
+                    double subScore = 0;
+                    //标准差
+                    double sPowSum = 0;
+                    List<double> newSumScore = new List<double>();
+                    var scount = classResult.studentIds.Count;
+                    foreach (List<double> sc in classResult.studentScores)
                     {
-                        if (ssc == -1)
+                        List<double> newSc = new List<double>();
+                        foreach (double ssc in sc)
                         {
-                            newSc.Add(0);
-                        }
-                        else
-                        {
-                            newSc.Add(ssc);
+                            if (ssc == -1)
+                            {
+                                newSc.Add(0);
+                            }
+                            else
+                            {
+                                newSc.Add(ssc);
+                            }
                         }
+                        double nc = newSc.Sum();
+                        newSumScore.Add(nc);
+                        subScore += nc;
                     }
-                    double nc = newSc.Sum();
-                    newSumScore.Add(nc);
-                    subScore += nc;
-                }
-                double rateScore = scount > 0 ? Math.Round(subScore * 1.0 / scount, 2) : 0;
-                foreach (double scs in newSumScore)
-                {
-                    sPowSum += Math.Pow(scs - rateScore, 2);
+                    double rateScore = scount > 0 ? Math.Round(subScore * 1.0 / scount, 2) : 0;
+                    foreach (double scs in newSumScore)
+                    {
+                        sPowSum += Math.Pow(scs - rateScore, 2);
 
+                    }
+                    classResult.standard = Math.Round(scount > 0 ? Math.Pow(sPowSum / scount, 0.5) : 0, 2);
+                    classResult.average = scount > 0 ? Math.Round(subScore / scount, 2) : 0;
+                    classResult.progress = true;
+                    tasks.Add(client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(classResult, classResult.id, new Azure.Cosmos.PartitionKey($"{classResult.code}")));
                 }
-                classResult.standard = Math.Round(scount > 0 ? Math.Pow(sPowSum / scount, 0.5) : 0, 2);
-                classResult.average = scount > 0 ? Math.Round(subScore / scount, 2) : 0;
-                classResult.progress = true;
-                tasks.Add(client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(classResult, classResult.id, new Azure.Cosmos.PartitionKey($"{classResult.code}")));
-            }
-            await Task.WhenAll(tasks);
-            //记录某次考试所有学生得分总分
-            double score = 0;
-            double allScore = 0;
-            int stuCount = 0;
-            //标准差
-            double powSum = 0;
-            List<string> losStu = new List<string>();
-            //当前完成考试得人数
-            int total = examResults[0].studentIds.Count;
-            //先与第一个值取并集
-            if (examResults.Count > 0)
-            {
+                await Task.WhenAll(tasks);
+                //记录某次考试所有学生得分总分
+                double score = 0;
+                double allScore = 0;
+                int stuCount = 0;
+                //标准差
+                double powSum = 0;
+                List<string> losStu = new List<string>();
+
+                //当前完成考试得人数
+                int total = examResults[0].studentIds.Count;
+                //先与第一个值取并集
                 losStu = losStu.Union(examResults[0].lostStus).ToList();
                 foreach (ExamResult examResult in examResults)
                 {
@@ -516,28 +514,28 @@ namespace TEAMModelOS.FunctionV4
                     //取交集
                     losStu = losStu.Intersect(examResult.lostStus).ToList();
                 }
-            }
-            double NewsRateScore = stuCount > 0 ? Math.Round(score * 1.0 / stuCount, 2) : 0;
-            foreach (PaperSimple simple in info.papers)
-            {
-                allScore += simple.point.Sum();
-            }
-            //计算全科标准差
-            foreach (string id in examResults[0].studentIds)
-            {
-                double sc = 0;
-                foreach (ExamResult result in examResults)
+                double NewsRateScore = stuCount > 0 ? Math.Round(score * 1.0 / stuCount, 2) : 0;
+                foreach (PaperSimple simple in info.papers)
                 {
-                    sc += result.studentScores[result.studentIds.IndexOf(id)].Sum();
+                    allScore += simple.point.Sum();
+                }
+                //计算全科标准差
+                foreach (string id in examResults[0].studentIds)
+                {
+                    double sc = 0;
+                    foreach (ExamResult result in examResults)
+                    {
+                        sc += result.studentScores[result.studentIds.IndexOf(id)].Sum();
+                    }
+                    powSum += Math.Pow(sc - NewsRateScore, 2);
                 }
-                powSum += Math.Pow(sc - NewsRateScore, 2);
+                info.standard = Math.Round(total > 0 ? Math.Pow(powSum / total, 0.5) : 0, 2);
+                double NewsRate = allScore > 0 ? Math.Round(NewsRateScore / allScore * 100, 2) : 0;
+                settlement.rate = NewsRate;
+                settlement.score = NewsRateScore;
+                settlement.stus = losStu;
+                settlement.total = total;
             }
-            info.standard = Math.Round(total > 0 ? Math.Pow(powSum / total, 0.5) : 0, 2);
-            double NewsRate = allScore > 0 ? Math.Round(NewsRateScore / allScore * 100, 2) : 0;
-            settlement.rate = NewsRate;
-            settlement.score = NewsRateScore;
-            settlement.stus = losStu;
-            settlement.total = total;
             return settlement;
         }
 

+ 5 - 5
TEAMModelOS.SDK/Models/Service/ActivityService.cs

@@ -502,7 +502,7 @@ namespace TEAMModelOS.SDK
                             try
                             {
                                 bool isAns = item.studentScores.Exists(s => s.Contains(-1));
-                                if (isAns)
+                                if (!isAns)
                                 {
                                     //整合名单
                                     List<string> classes = ExamService.getClasses(info.classes, info.stuLists);
@@ -518,11 +518,11 @@ namespace TEAMModelOS.SDK
 
                                         }
 
-                                    });
-                                    long nowTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-                                    info.updateTime = nowTime;
-                                    await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(info, info.id, new PartitionKey($"{info.code}"));
+                                    });                                   
                                 }
+                                long nowTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                                info.updateTime = nowTime;
+                                await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(info, info.id, new PartitionKey($"{info.code}"));
                             }
                             catch (Exception e)
                             {