|
@@ -3,6 +3,7 @@ using Azure.Messaging.ServiceBus;
|
|
using Microsoft.Azure.Documents;
|
|
using Microsoft.Azure.Documents;
|
|
using System;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Generic;
|
|
|
|
+using System.Linq;
|
|
using System.Text;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using System.Text.Json;
|
|
using System.Threading.Tasks;
|
|
using System.Threading.Tasks;
|
|
@@ -282,6 +283,43 @@ namespace TEAMModelFunction
|
|
await createClassResultAsync(info, examClassResults, subject, fno, _azureCosmos);
|
|
await createClassResultAsync(info, examClassResults, subject, fno, _azureCosmos);
|
|
fno++;
|
|
fno++;
|
|
}
|
|
}
|
|
|
|
+ //计算单次考试简易统计信息
|
|
|
|
+ List<ExamResult> examResults = new List<ExamResult>();
|
|
|
|
+ await foreach (var item in client.GetContainer("TEAMModelOS", "Common").GetItemQueryIterator<ExamResult>(
|
|
|
|
+ queryText: $"select value(c) from c where c.examId = '{info.id}'", requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"ExamResult-{info.id}") }))
|
|
|
|
+ {
|
|
|
|
+ examResults.Add(item);
|
|
|
|
+ }
|
|
|
|
+ //记录某次考试所有学生得分总分
|
|
|
|
+ double score = 0;
|
|
|
|
+ double allScore = 0;
|
|
|
|
+ int stuCount = 0;
|
|
|
|
+ List<string> losStu = new List<string>();
|
|
|
|
+ //先与第一个值取并集
|
|
|
|
+ if (examResults.Count >0 ) {
|
|
|
|
+ losStu.Union(examResults[0].lostStus);
|
|
|
|
+ foreach (ExamResult examResult in examResults)
|
|
|
|
+ {
|
|
|
|
+ if (info.id == examResult.examId)
|
|
|
|
+ {
|
|
|
|
+ foreach (List<double> sc in examResult.studentScores)
|
|
|
|
+ {
|
|
|
|
+ score += sc.Sum();
|
|
|
|
+ }
|
|
|
|
+ stuCount = examResult.studentIds.Count;
|
|
|
|
+ }
|
|
|
|
+ //取交集
|
|
|
|
+ losStu = losStu.Intersect(examResult.lostStus).ToList();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ double ascore = stuCount > 0 ? Math.Round(score * 0.1 / stuCount, 2) : 0;
|
|
|
|
+ foreach (PaperSimple simple in info.papers)
|
|
|
|
+ {
|
|
|
|
+ allScore += simple.point.Sum();
|
|
|
|
+ }
|
|
|
|
+ info.sRate = allScore > 0 ? ascore / allScore * 100 : 0;
|
|
|
|
+ info.lostStu = losStu;
|
|
|
|
+ await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync<ExamInfo>(info, info.id, new Azure.Cosmos.PartitionKey(info.code));
|
|
//ActivityData data;
|
|
//ActivityData data;
|
|
if (info.scope == "school")
|
|
if (info.scope == "school")
|
|
{
|
|
{
|
|
@@ -331,19 +369,35 @@ namespace TEAMModelFunction
|
|
//人数总和
|
|
//人数总和
|
|
int Count = 0;
|
|
int Count = 0;
|
|
int m = 0;
|
|
int m = 0;
|
|
|
|
+ double score = 0;
|
|
|
|
+ double allScore = info.papers[no].point.Sum();
|
|
List<ClassRange> classRanges = new List<ClassRange>();
|
|
List<ClassRange> classRanges = new List<ClassRange>();
|
|
|
|
+ List<string> lostStu = new List<string>();
|
|
foreach (ExamClassResult classResult in examClassResults)
|
|
foreach (ExamClassResult classResult in examClassResults)
|
|
{
|
|
{
|
|
if (classResult.subjectId.Equals(subject.id))
|
|
if (classResult.subjectId.Equals(subject.id))
|
|
{
|
|
{
|
|
|
|
+ //记录缺考学生索引位置
|
|
|
|
+ int index = 0;
|
|
foreach (List<double> scores in classResult.studentScores)
|
|
foreach (List<double> scores in classResult.studentScores)
|
|
{
|
|
{
|
|
List<double> newScores = new List<double>();
|
|
List<double> newScores = new List<double>();
|
|
|
|
+ int count = 0;
|
|
foreach (double sc in scores) {
|
|
foreach (double sc in scores) {
|
|
newScores.Add(sc > -1 ? sc : 0);
|
|
newScores.Add(sc > -1 ? sc : 0);
|
|
|
|
+ if(sc == -1) {
|
|
|
|
+ count++;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ if (count == scores.Count) {
|
|
|
|
+ lostStu.Add(classResult.studentIds[index]);
|
|
|
|
+ //mcount++;
|
|
|
|
+ }
|
|
|
|
+ score += newScores.Sum();
|
|
result.studentScores.Add(newScores);
|
|
result.studentScores.Add(newScores);
|
|
|
|
+ index++;
|
|
}
|
|
}
|
|
|
|
+
|
|
//处理班级信息
|
|
//处理班级信息
|
|
ClassRange range = new ClassRange();
|
|
ClassRange range = new ClassRange();
|
|
range.id = classResult.info.id;
|
|
range.id = classResult.info.id;
|
|
@@ -372,6 +426,8 @@ namespace TEAMModelFunction
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ result.lostStus = lostStu;
|
|
|
|
+ result.sRate =result.studentIds.Count> 0 ? Math.Round(score *1.0 / result.studentIds.Count ,2 ): 0 / allScore;
|
|
result.classes = classRanges;
|
|
result.classes = classRanges;
|
|
result.code = "ExamResult-" + info.id;
|
|
result.code = "ExamResult-" + info.id;
|
|
result.school = info.school;
|
|
result.school = info.school;
|
|
@@ -384,6 +440,7 @@ namespace TEAMModelFunction
|
|
result.scope = info.scope;
|
|
result.scope = info.scope;
|
|
result.name = info.name;
|
|
result.name = info.name;
|
|
result.time = info.startTime;
|
|
result.time = info.startTime;
|
|
|
|
+
|
|
await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Common").UpsertItemAsync(result, new Azure.Cosmos.PartitionKey($"ExamResult-{info.id}"));
|
|
await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Common").UpsertItemAsync(result, new Azure.Cosmos.PartitionKey($"ExamResult-{info.id}"));
|
|
|
|
|
|
}
|
|
}
|