|
@@ -6,10 +6,12 @@ using IES.ExamServer.Helper;
|
|
using IES.ExamServer.Helpers;
|
|
using IES.ExamServer.Helpers;
|
|
using IES.ExamServer.Models;
|
|
using IES.ExamServer.Models;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
+using Microsoft.AspNetCore.SignalR;
|
|
using Microsoft.Extensions.Caching.Memory;
|
|
using Microsoft.Extensions.Caching.Memory;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.Configuration;
|
|
using System.Linq.Expressions;
|
|
using System.Linq.Expressions;
|
|
using System.Net.Http;
|
|
using System.Net.Http;
|
|
|
|
+using System.Net.Http.Json;
|
|
using System.Text.Json;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Nodes;
|
|
using System.Text.Json.Nodes;
|
|
|
|
|
|
@@ -22,14 +24,14 @@ namespace IES.ExamServer.Controllers
|
|
private readonly IConfiguration _configuration;
|
|
private readonly IConfiguration _configuration;
|
|
private readonly IHttpClientFactory _httpClientFactory;
|
|
private readonly IHttpClientFactory _httpClientFactory;
|
|
private readonly IMemoryCache _memoryCache;
|
|
private readonly IMemoryCache _memoryCache;
|
|
- private readonly ILogger _logger;
|
|
|
|
|
|
+ private readonly ILogger<ManageController> _logger;
|
|
private readonly LiteDBFactory _liteDBFactory;
|
|
private readonly LiteDBFactory _liteDBFactory;
|
|
private readonly DataCenterConnectionService _connectionService;
|
|
private readonly DataCenterConnectionService _connectionService;
|
|
private readonly int DelayMicro = 10;//微观数据延迟
|
|
private readonly int DelayMicro = 10;//微观数据延迟
|
|
private readonly int DelayMacro = 100;//宏观数据延迟
|
|
private readonly int DelayMacro = 100;//宏观数据延迟
|
|
- private readonly SignalRExamServerHub _signalRExamServerHub;
|
|
|
|
- public ManageController(LiteDBFactory liteDBFactory,ILogger logger, IConfiguration configuration,
|
|
|
|
- IHttpClientFactory httpClientFactory, IMemoryCache memoryCache, DataCenterConnectionService connectionService,SignalRExamServerHub signalRExamServerHub)
|
|
|
|
|
|
+ private readonly IHubContext<SignalRExamServerHub> _signalRExamServerHub;
|
|
|
|
+ public ManageController(LiteDBFactory liteDBFactory,ILogger<ManageController> logger, IConfiguration configuration,
|
|
|
|
+ IHttpClientFactory httpClientFactory, IMemoryCache memoryCache, DataCenterConnectionService connectionService, IHubContext<SignalRExamServerHub> signalRExamServerHub)
|
|
{
|
|
{
|
|
_logger = logger;
|
|
_logger = logger;
|
|
_configuration=configuration;
|
|
_configuration=configuration;
|
|
@@ -40,10 +42,10 @@ namespace IES.ExamServer.Controllers
|
|
_signalRExamServerHub=signalRExamServerHub;
|
|
_signalRExamServerHub=signalRExamServerHub;
|
|
}
|
|
}
|
|
[HttpPost("download-package")]
|
|
[HttpPost("download-package")]
|
|
- [AuthToken("admin","teacher")]
|
|
|
|
|
|
+ // [AuthToken("admin","teacher")]
|
|
public async Task<IActionResult> DownloadPackage(JsonNode json)
|
|
public async Task<IActionResult> DownloadPackage(JsonNode json)
|
|
{
|
|
{
|
|
-
|
|
|
|
|
|
+
|
|
//C#.NET 6 后端与前端流式通信
|
|
//C#.NET 6 后端与前端流式通信
|
|
//https://www.doubao.com/chat/collection/687687510791426?type=Thread
|
|
//https://www.doubao.com/chat/collection/687687510791426?type=Thread
|
|
//下载日志记录:1.步骤,检查,2.获取描述信息,3.分类型,4下载文件,5.前端处理,6.返回结果 , 正在下载...==> [INFO]https://www.doubao.com/chat/collection/687687510791426?type=Thread [Size=180kb] Ok...
|
|
//下载日志记录:1.步骤,检查,2.获取描述信息,3.分类型,4下载文件,5.前端处理,6.返回结果 , 正在下载...==> [INFO]https://www.doubao.com/chat/collection/687687510791426?type=Thread [Size=180kb] Ok...
|
|
@@ -175,12 +177,12 @@ namespace IES.ExamServer.Controllers
|
|
_liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().Insert(evaluationLocal);
|
|
_liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().Insert(evaluationLocal);
|
|
}
|
|
}
|
|
List<string> file_error = new List<string>();
|
|
List<string> file_error = new List<string>();
|
|
|
|
+ int checkTotal=0, checkSuccess=0, checkError=0,checkWarning = 0;
|
|
if (evaluationLocal!=null)
|
|
if (evaluationLocal!=null)
|
|
{
|
|
{
|
|
-
|
|
|
|
-
|
|
|
|
- await _signalRExamServerHub.SendMessage(deviceId, Constant._Message_grant_type_check_file,
|
|
|
|
|
|
+ await _signalRExamServerHub.SendMessage(_memoryCache, _logger, deviceId, Constant._Message_grant_type_check_file,
|
|
new MessageContent {dataId=evaluationLocal.id,dataName=evaluationLocal.name,messageType=Constant._Message_type_message, status=0, content="开始检查评测信息文件.." });
|
|
new MessageContent {dataId=evaluationLocal.id,dataName=evaluationLocal.name,messageType=Constant._Message_type_message, status=0, content="开始检查评测信息文件.." });
|
|
|
|
+
|
|
//校验本地文件数据
|
|
//校验本地文件数据
|
|
string packagePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "package");
|
|
string packagePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "package");
|
|
if (!Directory.Exists(packagePath))
|
|
if (!Directory.Exists(packagePath))
|
|
@@ -193,34 +195,19 @@ namespace IES.ExamServer.Controllers
|
|
{
|
|
{
|
|
file_error.Add("evaluation");
|
|
file_error.Add("evaluation");
|
|
msg_status=Constant._Message_status_error;
|
|
msg_status=Constant._Message_status_error;
|
|
|
|
+ checkTotal++;
|
|
|
|
+ checkError++;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
msg_status=Constant._Message_status_success;
|
|
msg_status=Constant._Message_status_success;
|
|
- //string jsonData = await System.IO.File.ReadAllTextAsync(path_evaluation);
|
|
|
|
- //EvaluationClient? evaluationFile =jsonData.ToObject<EvaluationClient>();
|
|
|
|
- //if (evaluationFile!=null)
|
|
|
|
- //{
|
|
|
|
- // if (evaluationFile.dataSize==evaluationLocal.dataSize )
|
|
|
|
- // {
|
|
|
|
- // file_error.Add("evaluation");
|
|
|
|
- // msg_status=Constant._Message_status_error;
|
|
|
|
- // }
|
|
|
|
- // else
|
|
|
|
- // {
|
|
|
|
- // msg_status=Constant._Message_status_success;
|
|
|
|
- // }
|
|
|
|
- //}
|
|
|
|
- //else
|
|
|
|
- //{
|
|
|
|
- // file_error.Add("evaluation");
|
|
|
|
- // msg_status=Constant._Message_status_error;
|
|
|
|
- //}
|
|
|
|
|
|
+ checkTotal++;
|
|
|
|
+ checkSuccess++;
|
|
}
|
|
}
|
|
//数据格式: [消息][信息/错误/警告][15:43]=>[开始检查评测信息文件...]
|
|
//数据格式: [消息][信息/错误/警告][15:43]=>[开始检查评测信息文件...]
|
|
//数据格式: [检查][成功/失败][15:43]=>[评测数据文件:/wwwroot/package/623a9fe6-5445-0938-ff77-aeb80066ef27/evaluation.json]
|
|
//数据格式: [检查][成功/失败][15:43]=>[评测数据文件:/wwwroot/package/623a9fe6-5445-0938-ff77-aeb80066ef27/evaluation.json]
|
|
//数据格式: [下载][成功/失败][15:43]=>[评测数据文件:/wwwroot/package/623a9fe6-5445-0938-ff77-aeb80066ef27/evaluation.json][1024kb][15ms]
|
|
//数据格式: [下载][成功/失败][15:43]=>[评测数据文件:/wwwroot/package/623a9fe6-5445-0938-ff77-aeb80066ef27/evaluation.json][1024kb][15ms]
|
|
- await _signalRExamServerHub.SendMessage(deviceId, Constant._Message_grant_type_check_file,
|
|
|
|
|
|
+ await _signalRExamServerHub.SendMessage(_memoryCache,_logger,deviceId, Constant._Message_grant_type_check_file,
|
|
new MessageContent { dataId=evaluationLocal.id, dataName=evaluationLocal.name, messageType= Constant._Message_type_check, status=msg_status,content=$"评测数据文件:{path_evaluation}" });
|
|
new MessageContent { dataId=evaluationLocal.id, dataName=evaluationLocal.name, messageType= Constant._Message_type_check, status=msg_status,content=$"评测数据文件:{path_evaluation}" });
|
|
//await Task.Delay(DelayMacro);
|
|
//await Task.Delay(DelayMacro);
|
|
string path_groupList = Path.Combine(evaluationPath, "groupList.json");
|
|
string path_groupList = Path.Combine(evaluationPath, "groupList.json");
|
|
@@ -229,12 +216,16 @@ namespace IES.ExamServer.Controllers
|
|
{
|
|
{
|
|
file_error.Add("groupList");
|
|
file_error.Add("groupList");
|
|
msg_status=Constant._Message_status_error;
|
|
msg_status=Constant._Message_status_error;
|
|
|
|
+ checkTotal++;
|
|
|
|
+ checkError++;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
msg_status=Constant._Message_status_success;
|
|
msg_status=Constant._Message_status_success;
|
|
|
|
+ checkTotal++;
|
|
|
|
+ checkSuccess++;
|
|
}
|
|
}
|
|
- await _signalRExamServerHub.SendMessage(deviceId, Constant._Message_grant_type_check_file,
|
|
|
|
|
|
+ await _signalRExamServerHub.SendMessage(_memoryCache, _logger, deviceId, Constant._Message_grant_type_check_file,
|
|
new MessageContent { dataId=evaluationLocal.id, dataName=evaluationLocal.name, messageType= Constant._Message_type_check, status=msg_status, content=$"评测名单文件:{path_groupList}" });
|
|
new MessageContent { dataId=evaluationLocal.id, dataName=evaluationLocal.name, messageType= Constant._Message_type_check, status=msg_status, content=$"评测名单文件:{path_groupList}" });
|
|
//await Task.Delay(DelayMacro);
|
|
//await Task.Delay(DelayMacro);
|
|
string path_source = Path.Combine(evaluationPath, "source.json");
|
|
string path_source = Path.Combine(evaluationPath, "source.json");
|
|
@@ -243,12 +234,16 @@ namespace IES.ExamServer.Controllers
|
|
{
|
|
{
|
|
file_error.Add("source");
|
|
file_error.Add("source");
|
|
msg_status=Constant._Message_status_error;
|
|
msg_status=Constant._Message_status_error;
|
|
|
|
+ checkTotal++;
|
|
|
|
+ checkError++;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
msg_status=Constant._Message_status_success;
|
|
msg_status=Constant._Message_status_success;
|
|
|
|
+ checkTotal++;
|
|
|
|
+ checkSuccess++;
|
|
}
|
|
}
|
|
- await _signalRExamServerHub.SendMessage(deviceId, Constant._Message_grant_type_check_file,
|
|
|
|
|
|
+ await _signalRExamServerHub.SendMessage(_memoryCache, _logger, deviceId, Constant._Message_grant_type_check_file,
|
|
new MessageContent { dataId=evaluationLocal.id, dataName=evaluationLocal.name, messageType= Constant._Message_type_check, status=msg_status, content=$"评测原始数据:{path_source}" });
|
|
new MessageContent { dataId=evaluationLocal.id, dataName=evaluationLocal.name, messageType= Constant._Message_type_check, status=msg_status, content=$"评测原始数据:{path_source}" });
|
|
// await Task.Delay(DelayMacro);
|
|
// await Task.Delay(DelayMacro);
|
|
msg_status =Constant._Message_status_info;
|
|
msg_status =Constant._Message_status_info;
|
|
@@ -271,14 +266,14 @@ namespace IES.ExamServer.Controllers
|
|
&&(evaluationLocal.webviewTime== evaluationClient.webviewTime)
|
|
&&(evaluationLocal.webviewTime== evaluationClient.webviewTime)
|
|
&&(!string.IsNullOrWhiteSpace(evaluationLocal.webviewPath)&& evaluationLocal.webviewPath.Equals(evaluationClient.webviewPath)))
|
|
&&(!string.IsNullOrWhiteSpace(evaluationLocal.webviewPath)&& evaluationLocal.webviewPath.Equals(evaluationClient.webviewPath)))
|
|
{
|
|
{
|
|
- msg_status=1;
|
|
|
|
|
|
+ msg_status=Constant._Message_status_info;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
msg_status=Constant._Message_status_error;
|
|
msg_status=Constant._Message_status_error;
|
|
}
|
|
}
|
|
- await _signalRExamServerHub.SendMessage(deviceId, Constant._Message_grant_type_check_file,
|
|
|
|
- new MessageContent { dataId=evaluationLocal.id, dataName=evaluationLocal.name, messageType=Constant._Message_type_message, status=msg_status, content="校验本地数据文件..." });
|
|
|
|
|
|
+ await _signalRExamServerHub.SendMessage(_memoryCache, _logger, deviceId, Constant._Message_grant_type_check_file,
|
|
|
|
+ new MessageContent { dataId=evaluationLocal.id, dataName=evaluationLocal.name, messageType=Constant._Message_type_message, status=msg_status, content="校验本地试卷文件..." });
|
|
}
|
|
}
|
|
|
|
|
|
List<EvaluationExam>? evaluationExams = evaluation_data["evaluationExams"]?.ToObject<List<EvaluationExam>>();
|
|
List<EvaluationExam>? evaluationExams = evaluation_data["evaluationExams"]?.ToObject<List<EvaluationExam>>();
|
|
@@ -330,7 +325,7 @@ namespace IES.ExamServer.Controllers
|
|
else {
|
|
else {
|
|
paper_msg_status=Constant._Message_status_success;
|
|
paper_msg_status=Constant._Message_status_success;
|
|
}
|
|
}
|
|
- await _signalRExamServerHub.SendMessage(deviceId, Constant._Message_grant_type_check_file,
|
|
|
|
|
|
+ await _signalRExamServerHub.SendMessage(_memoryCache, _logger, deviceId, Constant._Message_grant_type_check_file,
|
|
new MessageContent {
|
|
new MessageContent {
|
|
dataId=evaluationLocal.id,
|
|
dataId=evaluationLocal.id,
|
|
dataName=evaluationLocal.name,
|
|
dataName=evaluationLocal.name,
|
|
@@ -347,12 +342,56 @@ namespace IES.ExamServer.Controllers
|
|
catch (Exception e) {
|
|
catch (Exception e) {
|
|
|
|
|
|
}
|
|
}
|
|
- //检测参考名单
|
|
|
|
- await _signalRExamServerHub.SendMessage(deviceId, Constant._Message_grant_type_check_file,
|
|
|
|
- new MessageContent {
|
|
|
|
- dataId=evaluationLocal.id,
|
|
|
|
- dataName=evaluationLocal.name,
|
|
|
|
- messageType=Constant._Message_type_message, status=0, content="提取评测数据文件..." });
|
|
|
|
|
|
+
|
|
|
|
+ //检查需要更新的项目:
|
|
|
|
+ if (data==1)
|
|
|
|
+ {
|
|
|
|
+ await _signalRExamServerHub.SendMessage(_memoryCache, _logger, deviceId, Constant._Message_grant_type_check_file,
|
|
|
|
+ new MessageContent
|
|
|
|
+ {
|
|
|
|
+ dataId=evaluationLocal.id,
|
|
|
|
+ dataName=evaluationLocal.name,
|
|
|
|
+ messageType=Constant._Message_type_message,
|
|
|
|
+ status=Constant._Message_status_warning,
|
|
|
|
+ content=$"检查到评测数据需要更新。[{dataSize}]"
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ if (blob==1)
|
|
|
|
+ {
|
|
|
|
+ await _signalRExamServerHub.SendMessage(_memoryCache, _logger, deviceId, Constant._Message_grant_type_check_file,
|
|
|
|
+ new MessageContent
|
|
|
|
+ {
|
|
|
|
+ dataId=evaluationLocal.id,
|
|
|
|
+ dataName=evaluationLocal.name,
|
|
|
|
+ messageType=Constant._Message_type_message,
|
|
|
|
+ status=Constant._Message_status_warning,
|
|
|
|
+ content=$"检查到评测试卷需要更新。[{blobSize}]"
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ if (webview==1)
|
|
|
|
+ {
|
|
|
|
+ await _signalRExamServerHub.SendMessage(_memoryCache, _logger, deviceId, Constant._Message_grant_type_check_file,
|
|
|
|
+ new MessageContent
|
|
|
|
+ {
|
|
|
|
+ dataId=evaluationLocal.id,
|
|
|
|
+ dataName=evaluationLocal.name,
|
|
|
|
+ messageType=Constant._Message_type_message,
|
|
|
|
+ status=Constant._Message_status_warning,
|
|
|
|
+ content=$"检查到评测作答页面需要更新。[{webviewSize}]"
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ if (groupList==1)
|
|
|
|
+ {
|
|
|
|
+ await _signalRExamServerHub.SendMessage(_memoryCache, _logger, deviceId, Constant._Message_grant_type_check_file,
|
|
|
|
+ new MessageContent
|
|
|
|
+ {
|
|
|
|
+ dataId=evaluationLocal.id,
|
|
|
|
+ dataName=evaluationLocal.name,
|
|
|
|
+ messageType=Constant._Message_type_message,
|
|
|
|
+ status=Constant._Message_status_warning,
|
|
|
|
+ content=$"检查到评测名单需要更新。[{studentCount}]"
|
|
|
|
+ });
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return Ok(new {code=200, evaluation= evaluationLocal,data,blob,webview,dataSize,blobSize,webviewSize,status ,groupList,studentCount});
|
|
return Ok(new {code=200, evaluation= evaluationLocal,data,blob,webview,dataSize,blobSize,webviewSize,status ,groupList,studentCount});
|
|
}
|
|
}
|