|
@@ -14,6 +14,7 @@ using Microsoft.Extensions.Caching.Memory;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.Configuration;
|
|
using System;
|
|
using System;
|
|
using System.Diagnostics.Eventing.Reader;
|
|
using System.Diagnostics.Eventing.Reader;
|
|
|
|
+using System.Diagnostics.Metrics;
|
|
using System.Linq.Expressions;
|
|
using System.Linq.Expressions;
|
|
using System.Net.Http;
|
|
using System.Net.Http;
|
|
using System.Net.Http.Json;
|
|
using System.Net.Http.Json;
|
|
@@ -63,15 +64,62 @@ namespace IES.ExamServer.Controllers
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
[HttpPost("export-evaluation-result")]
|
|
[HttpPost("export-evaluation-result")]
|
|
[AuthToken("admin", "teacher", "visitor")]
|
|
[AuthToken("admin", "teacher", "visitor")]
|
|
- public async Task<IActionResult> ExportEvaluationResult(JsonNode json)
|
|
|
|
|
|
+ public IActionResult ExportEvaluationResult(JsonNode json)
|
|
{
|
|
{
|
|
- string id = $"{json["evaluationId"]}";
|
|
|
|
|
|
+ string evaluationId = $"{json["evaluationId"]}";
|
|
string shortCode = $"{json["shortCode"]}";
|
|
string shortCode = $"{json["shortCode"]}";
|
|
string openCode = $"{json["openCode"]}";
|
|
string openCode = $"{json["openCode"]}";
|
|
- string deviceId = $"{json["deviceId"]}";
|
|
|
|
|
|
+ string? loginToken = HttpContext.GetXAuth("AuthToken");
|
|
EvaluationClient? evaluationClient = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>()
|
|
EvaluationClient? evaluationClient = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>()
|
|
- .FindOne(x => x.id!.Equals(id) && x.openCode!.Equals(openCode)&& x.shortCode!.Equals(shortCode));
|
|
|
|
- return Ok();
|
|
|
|
|
|
+ .FindOne(x => x.id!.Equals(evaluationId) && x.openCode!.Equals(openCode));
|
|
|
|
+ //已作答
|
|
|
|
+ int answerCount = 0;
|
|
|
|
+ //未作答
|
|
|
|
+ int absentCount = 0;
|
|
|
|
+ List<SubjectPushData> subjectPushDatas = new List<SubjectPushData>();
|
|
|
|
+ List<SubjectPushData> subjectPushNew = new List<SubjectPushData>();
|
|
|
|
+ if (evaluationClient!=null)
|
|
|
|
+ {
|
|
|
|
+ var datas = _liteDBFactory.GetLiteDatabase().GetCollection<SubjectPushData>()
|
|
|
|
+ .Find(x => !string.IsNullOrWhiteSpace(x.evaluationId) && x.evaluationId!.Equals(evaluationId)).ToList();
|
|
|
|
+ if (datas.IsNotEmpty())
|
|
|
|
+ {
|
|
|
|
+ subjectPushDatas.AddRange(datas);
|
|
|
|
+ }
|
|
|
|
+ var data = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentResult>()
|
|
|
|
+ .Find(x => !string.IsNullOrWhiteSpace(x.evaluationId) && x.evaluationId.Equals(evaluationId));
|
|
|
|
+
|
|
|
|
+ if (data.IsNotEmpty())
|
|
|
|
+ {
|
|
|
|
+ foreach (var item in data)
|
|
|
|
+ {
|
|
|
|
+ foreach (var subjectResult in item.subjectResults)
|
|
|
|
+ {
|
|
|
|
+ if (subjectResult.finished==1)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ SubjectPushData subjectPushData = new SubjectPushData(subjectResult, item);
|
|
|
|
+ subjectPushData.loginToken=loginToken;
|
|
|
|
+ if (!datas.Exists(x => x.id!.Equals(subjectPushData.id)))
|
|
|
|
+ {
|
|
|
|
+ //数据丢失导致的推送SubjectPushData 没有被保存的问题
|
|
|
|
+ subjectPushDatas.Add(subjectPushData);
|
|
|
|
+ subjectPushNew.Add(subjectPushData);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else { absentCount++; }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (subjectPushNew.IsNotEmpty())
|
|
|
|
+ {
|
|
|
|
+ _liteDBFactory.GetLiteDatabase().GetCollection<SubjectPushData>().Upsert(subjectPushNew);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ answerCount=subjectPushDatas.Count(x => x.finished==1 && x.answers.IsNotEmpty());
|
|
|
|
+ absentCount+=subjectPushDatas.Count()-answerCount;
|
|
|
|
+ //TODO 以及增加 作答文件的相关数据。
|
|
|
|
+ return Ok(new { answerCount, absentCount, subjectPushDatas });
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 手动推送
|
|
/// 手动推送
|
|
@@ -84,21 +132,72 @@ namespace IES.ExamServer.Controllers
|
|
[AuthToken("admin", "teacher", "visitor")]
|
|
[AuthToken("admin", "teacher", "visitor")]
|
|
public async Task<IActionResult> ManualPush(JsonNode json)
|
|
public async Task<IActionResult> ManualPush(JsonNode json)
|
|
{
|
|
{
|
|
- string id = $"{json["evaluationId"]}";
|
|
|
|
- string shortCode = $"{json["shortCode"]}";
|
|
|
|
|
|
+ string evaluationId = $"{json["evaluationId"]}";
|
|
|
|
+ //string shortCode = $"{json["shortCode"]}";
|
|
string openCode = $"{json["openCode"]}";
|
|
string openCode = $"{json["openCode"]}";
|
|
string deviceId = $"{json["deviceId"]}";
|
|
string deviceId = $"{json["deviceId"]}";
|
|
EvaluationClient? evaluationClient = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>()
|
|
EvaluationClient? evaluationClient = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>()
|
|
- .FindOne(x => x.id!.Equals(id) && x.openCode!.Equals(openCode)&& x.shortCode!.Equals(shortCode));
|
|
|
|
|
|
+ .FindOne(x => x.id!.Equals(evaluationId) && x.openCode!.Equals(openCode));
|
|
|
|
+ int count = 0;
|
|
|
|
+ string? loginToken = HttpContext.GetXAuth("AuthToken");
|
|
if (evaluationClient!=null)
|
|
if (evaluationClient!=null)
|
|
{
|
|
{
|
|
- //IEnumerable<EvaluationSubjectResult> evaluationSubjectResults= _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationSubjectResult>().Find(x => x.pushed<=1 &&!string.IsNullOrWhiteSpace(x.evaluationId) && x.evaluationId.Equals(evaluationId));
|
|
|
|
- //foreach (var item in evaluationSubjectResults)
|
|
|
|
- //{
|
|
|
|
- // _dataQueue.TryAddAsync();
|
|
|
|
- //}
|
|
|
|
|
|
+ var datas = _liteDBFactory.GetLiteDatabase().GetCollection<SubjectPushData>()
|
|
|
|
+ .Find(x => !string.IsNullOrWhiteSpace(x.evaluationId) && x.evaluationId!.Equals(evaluationId)).ToList();
|
|
|
|
+ if (datas.IsNotEmpty())
|
|
|
|
+ {
|
|
|
|
+ foreach (var item in datas)
|
|
|
|
+ {
|
|
|
|
+ if (item.pushed<=1 && item.finished==1)
|
|
|
|
+ {
|
|
|
|
+ item.order=count;
|
|
|
|
+ item.loginToken=loginToken;
|
|
|
|
+ count++;
|
|
|
|
+ //_logger.LogInformation($"推送数据加入队列=>>序号:{subjectPushData.order}--学号:{item.studentId}--姓名:{item.studentName}--科目:{subjectResult.subjectName}");
|
|
|
|
+ await _dataQueue.TryAddAsync(item);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var data = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentResult>()
|
|
|
|
+ .Find(x =>!string.IsNullOrWhiteSpace(x.evaluationId) && x.evaluationId.Equals(evaluationId) );
|
|
|
|
+ List<SubjectPushData> subjectPushDatas = new List<SubjectPushData>();
|
|
|
|
+ if (data.IsNotEmpty())
|
|
|
|
+ {
|
|
|
|
+ foreach (var item in data)
|
|
|
|
+ {
|
|
|
|
+ foreach (var subjectResult in item.subjectResults)
|
|
|
|
+ {
|
|
|
|
+ if ( subjectResult.finished==1)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ SubjectPushData subjectPushData= new SubjectPushData(subjectResult, item);
|
|
|
|
+ subjectPushData.order=count;
|
|
|
|
+ subjectPushData.loginToken=loginToken;
|
|
|
|
+ if (!datas.Exists(x => x.id!.Equals(subjectPushData.id)))
|
|
|
|
+ {
|
|
|
|
+ //数据丢失导致的推送SubjectPushData 没有被保存的问题
|
|
|
|
+ subjectPushDatas.Add(subjectPushData);
|
|
|
|
+ //未被推送的数据
|
|
|
|
+ if (subjectPushData.pushed<=1 && subjectPushData.finished==1)
|
|
|
|
+ {
|
|
|
|
+ count++;
|
|
|
|
+ subjectPushData.pushed=1;
|
|
|
|
+ await _dataQueue.TryAddAsync(subjectPushData);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (subjectPushDatas.IsNotEmpty())
|
|
|
|
+ {
|
|
|
|
+ _liteDBFactory.GetLiteDatabase().GetCollection<SubjectPushData>().Upsert(subjectPushDatas);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- return Ok(new { code=200, message="推送成功!" });
|
|
|
|
|
|
+ return Ok(new { code=200, message="推送成功!", count });
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|