|
@@ -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;
|
|
|
}
|
|
|
|