|
@@ -39,378 +39,389 @@ namespace TEAMModelFunction
|
|
|
return;
|
|
|
}
|
|
|
await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}阅卷配置【{tdata.name}-{tdata.id}-ttl={tdata.ttl}】正在执行", GroupNames.成都开发測試群組);
|
|
|
- Correct correct = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<Correct>(input.Id, new Azure.Cosmos.PartitionKey($"{tdata.code}"));
|
|
|
-
|
|
|
- if (correct != null)
|
|
|
- {
|
|
|
- string PartitionKey = string.Format("{0}{1}{2}", correct.code, "-", correct.progress);
|
|
|
- List<ChangeRecord> correctRecords = await _azureStorage.FindListByDict<ChangeRecord>(new Dictionary<string, object>() { { "RowKey", input.Id }, { "PartitionKey", PartitionKey } });
|
|
|
- switch (correct.progress)
|
|
|
+ try {
|
|
|
+ Correct correct = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<Correct>(input.Id, new Azure.Cosmos.PartitionKey($"{tdata.code}"));
|
|
|
+
|
|
|
+ if (correct != null)
|
|
|
{
|
|
|
- case "pending":
|
|
|
- var messageCorrect = new ServiceBusMessage(new { id = input.Id, progress = "going", code = tdata.code }.ToJsonString());
|
|
|
- messageCorrect.ApplicationProperties.Add("name", "Correct");
|
|
|
- if (correctRecords.Count > 0)
|
|
|
- {
|
|
|
- long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageCorrect, DateTimeOffset.FromUnixTimeMilliseconds(tdata.stime));
|
|
|
- await _serviceBus.GetServiceBusClient().cancelMessage(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), correctRecords[0].sequenceNumber);
|
|
|
- correctRecords[0].sequenceNumber = start;
|
|
|
- await _azureStorage.SaveOrUpdate<ChangeRecord>(correctRecords[0]);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageCorrect, DateTimeOffset.FromUnixTimeMilliseconds(tdata.stime));
|
|
|
- ChangeRecord changeRecord = new ChangeRecord
|
|
|
+ string PartitionKey = string.Format("{0}{1}{2}", correct.code, "-", correct.progress);
|
|
|
+ List<ChangeRecord> correctRecords = await _azureStorage.FindListByDict<ChangeRecord>(new Dictionary<string, object>() { { "RowKey", input.Id }, { "PartitionKey", PartitionKey } });
|
|
|
+ switch (correct.progress)
|
|
|
+ {
|
|
|
+ case "pending":
|
|
|
+ var messageCorrect = new ServiceBusMessage(new { id = input.Id, progress = "going", code = tdata.code }.ToJsonString());
|
|
|
+ messageCorrect.ApplicationProperties.Add("name", "Correct");
|
|
|
+ if (correctRecords.Count > 0)
|
|
|
{
|
|
|
- RowKey = input.Id,
|
|
|
- PartitionKey = PartitionKey,
|
|
|
- sequenceNumber = start,
|
|
|
- msgId = messageCorrect.MessageId
|
|
|
- };
|
|
|
- await _azureStorage.Save<ChangeRecord>(changeRecord);
|
|
|
- }
|
|
|
- break;
|
|
|
- case "going":
|
|
|
- //评测id
|
|
|
- string eid = correct.id;
|
|
|
- //评测的分区键
|
|
|
- string ecode = correct.scode;
|
|
|
- ExamInfo info = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<ExamInfo>(input.Id, new Azure.Cosmos.PartitionKey($"{ecode}"));
|
|
|
- if (correct.subs.IsNotEmpty())
|
|
|
- {
|
|
|
-
|
|
|
- foreach (var sub in correct.subs)
|
|
|
+ long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageCorrect, DateTimeOffset.FromUnixTimeMilliseconds(tdata.stime));
|
|
|
+ await _serviceBus.GetServiceBusClient().cancelMessage(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), correctRecords[0].sequenceNumber);
|
|
|
+ correctRecords[0].sequenceNumber = start;
|
|
|
+ await _azureStorage.SaveOrUpdate<ChangeRecord>(correctRecords[0]);
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- ///生成阅卷教师的阅卷任务列表
|
|
|
- if (sub.markers.IsNotEmpty())
|
|
|
+ long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageCorrect, DateTimeOffset.FromUnixTimeMilliseconds(tdata.stime));
|
|
|
+ ChangeRecord changeRecord = new ChangeRecord
|
|
|
{
|
|
|
- foreach (var marker in sub.markers)
|
|
|
+ RowKey = input.Id,
|
|
|
+ PartitionKey = PartitionKey,
|
|
|
+ sequenceNumber = start,
|
|
|
+ msgId = messageCorrect.MessageId
|
|
|
+ };
|
|
|
+ await _azureStorage.Save<ChangeRecord>(changeRecord);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "going":
|
|
|
+ //评测id
|
|
|
+ string eid = correct.id;
|
|
|
+ //评测的分区键
|
|
|
+ string ecode = correct.scode;
|
|
|
+ ExamInfo info = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<ExamInfo>(input.Id, new Azure.Cosmos.PartitionKey($"{ecode}"));
|
|
|
+ if (correct.subs.IsNotEmpty())
|
|
|
+ {
|
|
|
+
|
|
|
+ foreach (var sub in correct.subs)
|
|
|
+ {
|
|
|
+ ///生成阅卷教师的阅卷任务列表
|
|
|
+ if (sub.markers.IsNotEmpty())
|
|
|
{
|
|
|
- CorrectTask task = new CorrectTask
|
|
|
+ foreach (var marker in sub.markers)
|
|
|
{
|
|
|
- ttl = -1,
|
|
|
- pk = "CorrectTask",
|
|
|
- code = "CorrectTask-" + marker.id,
|
|
|
+ CorrectTask task = new CorrectTask
|
|
|
+ {
|
|
|
+ ttl = -1,
|
|
|
+ pk = "CorrectTask",
|
|
|
+ code = "CorrectTask-" + marker.id,
|
|
|
|
|
|
- id = Guid.NewGuid().ToString(),
|
|
|
- //评测id 或者阅卷配置id
|
|
|
- cid = correct.id,
|
|
|
- //科目
|
|
|
- subject = sub.id,
|
|
|
- //科目名称
|
|
|
- subjectName = sub.name,
|
|
|
- //评测code
|
|
|
- ecode = correct.scode,
|
|
|
- //阅卷配置code
|
|
|
- scode = correct.code,
|
|
|
- //任务名称
|
|
|
- name = correct.name,
|
|
|
- progress = "going",
|
|
|
- //开始时间
|
|
|
- startTime = correct.startTime,
|
|
|
- //结束时间
|
|
|
- endTime = correct.endTime,
|
|
|
- //批改数量
|
|
|
- count = marker.count,
|
|
|
- //按题阅卷时,题号
|
|
|
- qu = marker.qu,
|
|
|
- //模块数
|
|
|
- model = sub.model,
|
|
|
- type = 1,
|
|
|
- createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
|
|
- source = info.source
|
|
|
- };
|
|
|
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<CorrectTask>(task, new Azure.Cosmos.PartitionKey(task.code));
|
|
|
+ id = Guid.NewGuid().ToString(),
|
|
|
+ //评测id 或者阅卷配置id
|
|
|
+ cid = correct.id,
|
|
|
+ //科目
|
|
|
+ subject = sub.id,
|
|
|
+ //科目名称
|
|
|
+ subjectName = sub.name,
|
|
|
+ //评测code
|
|
|
+ ecode = correct.scode,
|
|
|
+ //阅卷配置code
|
|
|
+ scode = correct.code,
|
|
|
+ //任务名称
|
|
|
+ name = correct.name,
|
|
|
+ progress = "going",
|
|
|
+ //开始时间
|
|
|
+ startTime = correct.startTime,
|
|
|
+ //结束时间
|
|
|
+ endTime = correct.endTime,
|
|
|
+ //批改数量
|
|
|
+ count = marker.count,
|
|
|
+ //按题阅卷时,题号
|
|
|
+ qu = marker.qu,
|
|
|
+ //模块数
|
|
|
+ model = sub.model,
|
|
|
+ type = 1,
|
|
|
+ createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
|
|
+ source = info.source
|
|
|
+ };
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<CorrectTask>(task, new Azure.Cosmos.PartitionKey(task.code));
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
|
|
- //生成异常卷处理人员
|
|
|
- if (sub.err.IsNotEmpty())
|
|
|
- {
|
|
|
-
|
|
|
- foreach (var tId in sub.err)
|
|
|
+ //生成异常卷处理人员
|
|
|
+ if (sub.err.IsNotEmpty())
|
|
|
{
|
|
|
- CorrectTask task = new CorrectTask
|
|
|
- {
|
|
|
- ttl = -1,
|
|
|
- pk = "CorrectTask",
|
|
|
- code = "CorrectTask-" + tId,
|
|
|
|
|
|
- id = Guid.NewGuid().ToString(),
|
|
|
- //评测id 或者阅卷配置id
|
|
|
- cid = correct.id,
|
|
|
- //科目
|
|
|
- subject = sub.id,
|
|
|
- //科目名称
|
|
|
- subjectName = sub.name,
|
|
|
- //评测code
|
|
|
- ecode = correct.scode,
|
|
|
- //阅卷配置code
|
|
|
- scode = correct.code,
|
|
|
- progress = "going",
|
|
|
- //任务名称
|
|
|
- name = correct.name,
|
|
|
- //开始时间
|
|
|
- startTime = correct.startTime,
|
|
|
- //结束时间
|
|
|
- endTime = correct.endTime,
|
|
|
- //模块数
|
|
|
- model = sub.model,
|
|
|
- type = 2,
|
|
|
- createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
|
|
|
- };
|
|
|
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<CorrectTask>(task, new Azure.Cosmos.PartitionKey(task.code));
|
|
|
- }
|
|
|
+ foreach (var tId in sub.err)
|
|
|
+ {
|
|
|
+ CorrectTask task = new CorrectTask
|
|
|
+ {
|
|
|
+ ttl = -1,
|
|
|
+ pk = "CorrectTask",
|
|
|
+ code = "CorrectTask-" + tId,
|
|
|
|
|
|
+ id = Guid.NewGuid().ToString(),
|
|
|
+ //评测id 或者阅卷配置id
|
|
|
+ cid = correct.id,
|
|
|
+ //科目
|
|
|
+ subject = sub.id,
|
|
|
+ //科目名称
|
|
|
+ subjectName = sub.name,
|
|
|
+ //评测code
|
|
|
+ ecode = correct.scode,
|
|
|
+ //阅卷配置code
|
|
|
+ scode = correct.code,
|
|
|
+ progress = "going",
|
|
|
+ //任务名称
|
|
|
+ name = correct.name,
|
|
|
+ //开始时间
|
|
|
+ startTime = correct.startTime,
|
|
|
+ //结束时间
|
|
|
+ endTime = correct.endTime,
|
|
|
+ //模块数
|
|
|
+ model = sub.model,
|
|
|
+ type = 2,
|
|
|
+ createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
|
|
|
+ };
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<CorrectTask>(task, new Azure.Cosmos.PartitionKey(task.code));
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
- //生成仲裁人员
|
|
|
+ }
|
|
|
|
|
|
- if (sub.arb.IsNotEmpty())
|
|
|
- {
|
|
|
+ //生成仲裁人员
|
|
|
|
|
|
- foreach (var tId in sub.arb)
|
|
|
+ if (sub.arb.IsNotEmpty())
|
|
|
{
|
|
|
- CorrectTask task = new CorrectTask
|
|
|
+
|
|
|
+ foreach (var tId in sub.arb)
|
|
|
{
|
|
|
- ttl = -1,
|
|
|
- pk = "CorrectTask",
|
|
|
- code = "CorrectTask-" + tId,
|
|
|
+ CorrectTask task = new CorrectTask
|
|
|
+ {
|
|
|
+ ttl = -1,
|
|
|
+ pk = "CorrectTask",
|
|
|
+ code = "CorrectTask-" + tId,
|
|
|
|
|
|
- id = Guid.NewGuid().ToString(),
|
|
|
- //评测id 或者阅卷配置id
|
|
|
- cid = correct.id,
|
|
|
- //科目
|
|
|
- subject = sub.id,
|
|
|
- //科目名称
|
|
|
- subjectName = sub.name,
|
|
|
- progress = "going",
|
|
|
- //评测code
|
|
|
- ecode = correct.scode,
|
|
|
- //阅卷配置code
|
|
|
- scode = correct.code,
|
|
|
- //任务名称
|
|
|
- name = correct.name,
|
|
|
- //开始时间
|
|
|
- startTime = correct.startTime,
|
|
|
- //结束时间
|
|
|
- endTime = correct.endTime,
|
|
|
- //模块数
|
|
|
- model = sub.model,
|
|
|
- type = 3,
|
|
|
- createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
|
|
|
- };
|
|
|
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<CorrectTask>(task, new Azure.Cosmos.PartitionKey(task.code));
|
|
|
- }
|
|
|
+ id = Guid.NewGuid().ToString(),
|
|
|
+ //评测id 或者阅卷配置id
|
|
|
+ cid = correct.id,
|
|
|
+ //科目
|
|
|
+ subject = sub.id,
|
|
|
+ //科目名称
|
|
|
+ subjectName = sub.name,
|
|
|
+ progress = "going",
|
|
|
+ //评测code
|
|
|
+ ecode = correct.scode,
|
|
|
+ //阅卷配置code
|
|
|
+ scode = correct.code,
|
|
|
+ //任务名称
|
|
|
+ name = correct.name,
|
|
|
+ //开始时间
|
|
|
+ startTime = correct.startTime,
|
|
|
+ //结束时间
|
|
|
+ endTime = correct.endTime,
|
|
|
+ //模块数
|
|
|
+ model = sub.model,
|
|
|
+ type = 3,
|
|
|
+ createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
|
|
|
+ };
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<CorrectTask>(task, new Azure.Cosmos.PartitionKey(task.code));
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- }
|
|
|
- //评测科目
|
|
|
- string subjectId = sub.id;
|
|
|
- //生成临时作答数据存放到redis
|
|
|
- //var redisClient = _azureRedis.GetRedisClient(8);
|
|
|
- //ExamInfo info = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<ExamInfo>(eid, new Azure.Cosmos.PartitionKey(ecode));
|
|
|
- List<ExamClassResult> classResults = new List<ExamClassResult>();
|
|
|
- //获取原题配分
|
|
|
- int paperIndex = 0;
|
|
|
- foreach (ExamSubject subject in info.subjects)
|
|
|
- {
|
|
|
- if (subject.id.Equals(subjectId))
|
|
|
- {
|
|
|
- break;
|
|
|
}
|
|
|
- else
|
|
|
+ //评测科目
|
|
|
+ string subjectId = sub.id;
|
|
|
+ //生成临时作答数据存放到redis
|
|
|
+ //var redisClient = _azureRedis.GetRedisClient(8);
|
|
|
+ //ExamInfo info = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<ExamInfo>(eid, new Azure.Cosmos.PartitionKey(ecode));
|
|
|
+ List<ExamClassResult> classResults = new List<ExamClassResult>();
|
|
|
+ //获取原题配分
|
|
|
+ int paperIndex = 0;
|
|
|
+ foreach (ExamSubject subject in info.subjects)
|
|
|
{
|
|
|
- paperIndex++;
|
|
|
+ if (subject.id.Equals(subjectId))
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ paperIndex++;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- List<double> paperPoint = info.papers[paperIndex].point;
|
|
|
- List<List<string>> ans = info.papers[paperIndex].answers;
|
|
|
- if (info.scope.Equals("school"))
|
|
|
- {
|
|
|
-
|
|
|
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<ExamClassResult>(
|
|
|
- queryText: $"select value(c) from c where c.examId = '{eid}' and c.subjectId = '{subjectId}'",
|
|
|
- requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"ExamClassResult-{info.school}") }))
|
|
|
+ List<double> paperPoint = info.papers[paperIndex].point;
|
|
|
+ List<List<string>> ans = info.papers[paperIndex].answers;
|
|
|
+ if (info.scope.Equals("school"))
|
|
|
{
|
|
|
- classResults.Add(item);
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<ExamClassResult>(
|
|
|
+
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<ExamClassResult>(
|
|
|
queryText: $"select value(c) from c where c.examId = '{eid}' and c.subjectId = '{subjectId}'",
|
|
|
- requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"ExamClassResult-{info.creatorId}") }))
|
|
|
+ requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"ExamClassResult-{info.school}") }))
|
|
|
+ {
|
|
|
+ classResults.Add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- classResults.Add(item);
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<ExamClassResult>(
|
|
|
+ queryText: $"select value(c) from c where c.examId = '{eid}' and c.subjectId = '{subjectId}'",
|
|
|
+ requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"ExamClassResult-{info.creatorId}") }))
|
|
|
+ {
|
|
|
+ classResults.Add(item);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- List<Task<ItemResponse<Scoring>>> tasks = new List<Task<ItemResponse<Scoring>>>();
|
|
|
- //初始化老师阅卷记录
|
|
|
- //List<string> tmds = new List<string>();
|
|
|
- /* List<string> marks = new List<string>();
|
|
|
- for (int i = 0; i < correct.num; i++)
|
|
|
- {
|
|
|
- marks.Add("");
|
|
|
- }*/
|
|
|
- foreach (ExamClassResult examClass in classResults)
|
|
|
- {
|
|
|
- foreach (string stuId in examClass.studentIds)
|
|
|
+ List<Task<ItemResponse<Scoring>>> tasks = new List<Task<ItemResponse<Scoring>>>();
|
|
|
+ //初始化老师阅卷记录
|
|
|
+ //List<string> tmds = new List<string>();
|
|
|
+ /* List<string> marks = new List<string>();
|
|
|
+ for (int i = 0; i < correct.num; i++)
|
|
|
+ {
|
|
|
+ marks.Add("");
|
|
|
+ }*/
|
|
|
+ foreach (ExamClassResult examClass in classResults)
|
|
|
{
|
|
|
- int index = examClass.studentIds.IndexOf(stuId);
|
|
|
- if (index > -1)
|
|
|
+ foreach (string stuId in examClass.studentIds)
|
|
|
{
|
|
|
- List<double> scc = examClass.studentScores[index];
|
|
|
- List<Item> items = new List<Item>();
|
|
|
- List<Qs> qss = new List<Qs>();
|
|
|
- int itemIndex = 0;
|
|
|
- foreach (double psc in scc)
|
|
|
+ int index = examClass.studentIds.IndexOf(stuId);
|
|
|
+ if (index > -1)
|
|
|
{
|
|
|
- //初始化异常卷信息,初始化仲裁卷信息
|
|
|
- Qs qs = new Qs();
|
|
|
- List<Info> infos = new List<Info>();
|
|
|
- Item item = new Item
|
|
|
+ List<double> scc = examClass.studentScores[index];
|
|
|
+ List<Item> items = new List<Item>();
|
|
|
+ List<Qs> qss = new List<Qs>();
|
|
|
+ int itemIndex = 0;
|
|
|
+ foreach (double psc in scc)
|
|
|
{
|
|
|
- ssc = paperPoint[itemIndex],
|
|
|
- scores = infos
|
|
|
- };
|
|
|
- itemIndex++;
|
|
|
- items.Add(item);
|
|
|
- qss.Add(qs);
|
|
|
- }
|
|
|
- //处理学生未作答 生成阅卷数据时 客观题分数为-1的情况
|
|
|
- List<double> scores = new List<double>();
|
|
|
- int n = 0;
|
|
|
- foreach (List<string> answer in ans)
|
|
|
- {
|
|
|
- var scs = examClass.studentScores[index][n];
|
|
|
-
|
|
|
- if (answer.Count > 0)
|
|
|
+ //初始化异常卷信息,初始化仲裁卷信息
|
|
|
+ Qs qs = new Qs();
|
|
|
+ List<Info> infos = new List<Info>();
|
|
|
+ Item item = new Item
|
|
|
+ {
|
|
|
+ ssc = paperPoint[itemIndex],
|
|
|
+ scores = infos
|
|
|
+ };
|
|
|
+ itemIndex++;
|
|
|
+ items.Add(item);
|
|
|
+ qss.Add(qs);
|
|
|
+ }
|
|
|
+ //处理学生未作答 生成阅卷数据时 客观题分数为-1的情况
|
|
|
+ List<double> scores = new List<double>();
|
|
|
+ int n = 0;
|
|
|
+ foreach (List<string> answer in ans)
|
|
|
{
|
|
|
- if (scs == -1)
|
|
|
+ var scs = examClass.studentScores[index][n];
|
|
|
+
|
|
|
+ if (answer.Count > 0)
|
|
|
{
|
|
|
- scores.Add(0);
|
|
|
+ if (scs == -1)
|
|
|
+ {
|
|
|
+ scores.Add(0);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ scores.Add(scs);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
scores.Add(scs);
|
|
|
}
|
|
|
+ n++;
|
|
|
}
|
|
|
- else
|
|
|
+ Scoring sc = new Scoring
|
|
|
{
|
|
|
- scores.Add(scs);
|
|
|
- }
|
|
|
- n++;
|
|
|
- }
|
|
|
- Scoring sc = new Scoring
|
|
|
- {
|
|
|
- id = Guid.NewGuid().ToString(),
|
|
|
- code = "Scoring-" + info.school,
|
|
|
- blob = examClass.studentAnswers[index].Count > 0 ? examClass.studentAnswers[index][0] : "",
|
|
|
- stuId = stuId,
|
|
|
- examId = eid,
|
|
|
- subjectId = subjectId,
|
|
|
- scores = scores,
|
|
|
- count = correct.num,
|
|
|
- //marks = marks,
|
|
|
- items = items,
|
|
|
- qs = qss,
|
|
|
- //endTime = correct.endTime,
|
|
|
- model = sub.model
|
|
|
+ id = Guid.NewGuid().ToString(),
|
|
|
+ code = "Scoring-" + info.school,
|
|
|
+ blob = examClass.studentAnswers[index].Count > 0 ? examClass.studentAnswers[index][0] : "",
|
|
|
+ stuId = stuId,
|
|
|
+ examId = eid,
|
|
|
+ subjectId = subjectId,
|
|
|
+ scores = scores,
|
|
|
+ count = correct.num,
|
|
|
+ //marks = marks,
|
|
|
+ items = items,
|
|
|
+ qs = qss,
|
|
|
+ //endTime = correct.endTime,
|
|
|
+ model = sub.model
|
|
|
|
|
|
- };
|
|
|
- tasks.Add(client.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Scoring>(sc, new Azure.Cosmos.PartitionKey(sc.code)));
|
|
|
+ };
|
|
|
+ tasks.Add(client.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Scoring>(sc, new Azure.Cosmos.PartitionKey(sc.code)));
|
|
|
+ }
|
|
|
+ //tasks.Add(redisClient.HashSetAsync($"Exam:Scoring:{eid}-{subjectId}", stuId, new { tmdId = tmds, ans = examClass.studentAnswers[index].Count > 0 ? examClass.studentAnswers[index][0] : "", score = examClass.studentScores[index] }.ToJsonString()));
|
|
|
}
|
|
|
- //tasks.Add(redisClient.HashSetAsync($"Exam:Scoring:{eid}-{subjectId}", stuId, new { tmdId = tmds, ans = examClass.studentAnswers[index].Count > 0 ? examClass.studentAnswers[index][0] : "", score = examClass.studentScores[index] }.ToJsonString()));
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
+ await Task.WhenAll(tasks);
|
|
|
}
|
|
|
- await Task.WhenAll(tasks);
|
|
|
}
|
|
|
- }
|
|
|
- var messageCorrectEnd = new ServiceBusMessage(new { id = input.Id, progress = "finish", code = tdata.code }.ToJsonString());
|
|
|
- messageCorrectEnd.ApplicationProperties.Add("name", "Correct");
|
|
|
- if (correctRecords.Count > 0)
|
|
|
- {
|
|
|
- long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageCorrectEnd, DateTimeOffset.FromUnixTimeMilliseconds(tdata.etime));
|
|
|
- await _serviceBus.GetServiceBusClient().cancelMessage(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), correctRecords[0].sequenceNumber);
|
|
|
- correctRecords[0].sequenceNumber = end;
|
|
|
- await _azureStorage.SaveOrUpdate<ChangeRecord>(correctRecords[0]);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageCorrectEnd, DateTimeOffset.FromUnixTimeMilliseconds(tdata.etime));
|
|
|
- ChangeRecord changeRecord = new ChangeRecord
|
|
|
+ var messageCorrectEnd = new ServiceBusMessage(new { id = input.Id, progress = "finish", code = tdata.code }.ToJsonString());
|
|
|
+ messageCorrectEnd.ApplicationProperties.Add("name", "Correct");
|
|
|
+ if (correctRecords.Count > 0)
|
|
|
{
|
|
|
- RowKey = input.Id,
|
|
|
- PartitionKey = PartitionKey,
|
|
|
- sequenceNumber = end,
|
|
|
- msgId = messageCorrectEnd.MessageId
|
|
|
- };
|
|
|
- await _azureStorage.Save<ChangeRecord>(changeRecord);
|
|
|
- }
|
|
|
- break;
|
|
|
- case "finish":
|
|
|
- foreach (var sub in correct.subs)
|
|
|
- {
|
|
|
- List<string> ids = new List<string>();
|
|
|
- ///阅卷教师的阅卷任务列表
|
|
|
- if (sub.markers.IsNotEmpty())
|
|
|
+ long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageCorrectEnd, DateTimeOffset.FromUnixTimeMilliseconds(tdata.etime));
|
|
|
+ await _serviceBus.GetServiceBusClient().cancelMessage(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), correctRecords[0].sequenceNumber);
|
|
|
+ correctRecords[0].sequenceNumber = end;
|
|
|
+ await _azureStorage.SaveOrUpdate<ChangeRecord>(correctRecords[0]);
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- foreach (var marker in sub.markers)
|
|
|
+ long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageCorrectEnd, DateTimeOffset.FromUnixTimeMilliseconds(tdata.etime));
|
|
|
+ ChangeRecord changeRecord = new ChangeRecord
|
|
|
{
|
|
|
- ids.Add(marker.id);
|
|
|
- //await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<CorrectTask>(task, new Azure.Cosmos.PartitionKey(task.code),new ItemRequestOptions().PostTriggers);
|
|
|
- }
|
|
|
+ RowKey = input.Id,
|
|
|
+ PartitionKey = PartitionKey,
|
|
|
+ sequenceNumber = end,
|
|
|
+ msgId = messageCorrectEnd.MessageId
|
|
|
+ };
|
|
|
+ await _azureStorage.Save<ChangeRecord>(changeRecord);
|
|
|
}
|
|
|
- //异常卷处理人员
|
|
|
- if (sub.err.IsNotEmpty())
|
|
|
+ break;
|
|
|
+ case "finish":
|
|
|
+ foreach (var sub in correct.subs)
|
|
|
{
|
|
|
-
|
|
|
- foreach (var tId in sub.err)
|
|
|
+ List<string> ids = new List<string>();
|
|
|
+ ///阅卷教师的阅卷任务列表
|
|
|
+ if (sub.markers.IsNotEmpty())
|
|
|
{
|
|
|
- if (!ids.Contains(tId))
|
|
|
+ foreach (var marker in sub.markers)
|
|
|
{
|
|
|
- ids.Add(tId);
|
|
|
+ ids.Add(marker.id);
|
|
|
+ //await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<CorrectTask>(task, new Azure.Cosmos.PartitionKey(task.code),new ItemRequestOptions().PostTriggers);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //异常卷处理人员
|
|
|
+ if (sub.err.IsNotEmpty())
|
|
|
+ {
|
|
|
+
|
|
|
+ foreach (var tId in sub.err)
|
|
|
+ {
|
|
|
+ if (!ids.Contains(tId))
|
|
|
+ {
|
|
|
+ ids.Add(tId);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- //仲裁人员
|
|
|
+ //仲裁人员
|
|
|
|
|
|
- if (sub.arb.IsNotEmpty())
|
|
|
- {
|
|
|
- foreach (var tId in sub.arb)
|
|
|
+ if (sub.arb.IsNotEmpty())
|
|
|
+ {
|
|
|
+ foreach (var tId in sub.arb)
|
|
|
+ {
|
|
|
+ if (!ids.Contains(tId))
|
|
|
+ {
|
|
|
+ ids.Add(tId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<CorrectTask> corrects = new List<CorrectTask>();
|
|
|
+ foreach (string id in ids)
|
|
|
{
|
|
|
- if (!ids.Contains(tId))
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<CorrectTask>(
|
|
|
+ queryText: $"select value(c) from c where c.cid = '{correct.id}'",
|
|
|
+ requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"CorrectTask-{id}") }))
|
|
|
{
|
|
|
- ids.Add(tId);
|
|
|
+ corrects.Add(item);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- List<CorrectTask> corrects = new List<CorrectTask>();
|
|
|
- foreach (string id in ids)
|
|
|
- {
|
|
|
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<CorrectTask>(
|
|
|
- queryText: $"select value(c) from c where c.cid = '{correct.id}'",
|
|
|
- requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"CorrectTask-{id}") }))
|
|
|
+ List<Task<ItemResponse<CorrectTask>>> tasks = new List<Task<ItemResponse<CorrectTask>>>();
|
|
|
+ foreach (CorrectTask task in corrects)
|
|
|
{
|
|
|
- corrects.Add(item);
|
|
|
+ task.progress = "finish";
|
|
|
+ tasks.Add(client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(task, task.id, new Azure.Cosmos.PartitionKey(task.code)));
|
|
|
}
|
|
|
+ await Task.WhenAll(tasks);
|
|
|
}
|
|
|
- List<Task<ItemResponse<CorrectTask>>> tasks = new List<Task<ItemResponse<CorrectTask>>>();
|
|
|
- foreach (CorrectTask task in corrects)
|
|
|
- {
|
|
|
- task.progress = "finish";
|
|
|
- tasks.Add(client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(task, task.id, new Azure.Cosmos.PartitionKey(task.code)));
|
|
|
- }
|
|
|
- await Task.WhenAll(tasks);
|
|
|
- }
|
|
|
- break;
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ catch (CosmosException e)
|
|
|
+ {
|
|
|
+ await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-CosmosDB异常{e.Message}\n{e.Status}", GroupNames.成都开发測試群組);
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-阅卷异常{e.Message}\n{e.StackTrace}", GroupNames.成都开发測試群組);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
}
|