|
@@ -524,26 +524,45 @@ namespace IES.ExamServer.Controllers
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <param name="json"></param>
|
|
/// <param name="json"></param>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
- [HttpPost("load-evaluation-round-setting")]
|
|
|
|
|
|
+ [HttpPost("load-evaluation-round")]
|
|
[AuthToken("admin", "teacher", "visitor")]
|
|
[AuthToken("admin", "teacher", "visitor")]
|
|
- public IActionResult LoadEvaluationRoundSetting(JsonNode json)
|
|
|
|
|
|
+ public IActionResult LoadEvaluationRound(JsonNode json)
|
|
{
|
|
{
|
|
- EvaluationClient? evaluationClient = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().FindOne(x => x.id!.Equals(json["evaluationId"]));
|
|
|
|
|
|
+ string evaluationId = $"{json["evaluationId"]}";
|
|
|
|
+ string openCode = $"{json["openCode"]}";
|
|
|
|
+ string shortCode = $"{json["shortCode"]}";
|
|
|
|
+ EvaluationClient? evaluationClient = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>()
|
|
|
|
+ .FindOne(x => x.id!.Equals(evaluationId) && x.shortCode!.Equals(shortCode) && x.openCode!.Equals(openCode));
|
|
EvaluationRoundSetting? setting = null;
|
|
EvaluationRoundSetting? setting = null;
|
|
if (evaluationClient!=null)
|
|
if (evaluationClient!=null)
|
|
{
|
|
{
|
|
- if (string.IsNullOrWhiteSpace(evaluationClient.roundId))
|
|
|
|
|
|
+ if (!string.IsNullOrWhiteSpace(evaluationClient.roundId))
|
|
{
|
|
{
|
|
setting = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationRoundSetting>().FindOne(x => x.id!.Equals(evaluationClient.roundId));
|
|
setting = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationRoundSetting>().FindOne(x => x.id!.Equals(evaluationClient.roundId));
|
|
}
|
|
}
|
|
|
|
|
|
if (setting!=null)
|
|
if (setting!=null)
|
|
{
|
|
{
|
|
- return Ok(new
|
|
|
|
|
|
+ IEnumerable<EvaluationStudentResult>? results = null;
|
|
|
|
+ var members = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationMember>().Find(x => x.evaluationId!.Equals(evaluationClient.id) && x.roundId!.Equals(setting.id));
|
|
|
|
+ //并获取学生的作答信息
|
|
|
|
+ //顺便返回本轮的学生名单
|
|
|
|
+ if (members!=null && members.Count()>0)
|
|
|
|
+ {
|
|
|
|
+ results = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentResult>()
|
|
|
|
+ .Find(x => members.Select(x => x.id).Contains(x.studentId)&&!string.IsNullOrWhiteSpace(x.evaluationId) && x.evaluationId.Equals(evaluationClient.id));
|
|
|
|
+ if (results.Count()==members.Count())
|
|
|
|
+ {
|
|
|
|
+ return Ok(new { code = 200, setting, results });
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ return Ok(new { code = 200,msg="学生作答信息数量不匹配", setting, results });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
{
|
|
{
|
|
- code = 200,
|
|
|
|
- setting = setting
|
|
|
|
- });
|
|
|
|
|
|
+ return Ok(new { code = 200,msg="未分配学生名单,或名单没有学生!", setting , results });
|
|
|
|
+ }
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
@@ -554,20 +573,9 @@ namespace IES.ExamServer.Controllers
|
|
return Ok(new { code = 1, msg = "未找到评测信息!" });
|
|
return Ok(new { code = 1, msg = "未找到评测信息!" });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
/// <summary>
|
|
/// <summary>
|
|
- /// 设置评测开考信息(本轮名单,计时规则等)
|
|
|
|
- /// </summary>
|
|
|
|
- /// <param name="json"></param>
|
|
|
|
- /// <returns></returns>
|
|
|
|
- [HttpPost("assign-student-paper")]
|
|
|
|
- [AuthToken("admin", "teacher", "visitor")]
|
|
|
|
- public IActionResult AssignStudentPaper(JsonNode json)
|
|
|
|
- {
|
|
|
|
- return Ok();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /// <summary>
|
|
|
|
- /// 设置评测开考信息(本轮名单,计时规则等)
|
|
|
|
|
|
+ /// 设置评测开考信息(本轮名单,计时规则,分配试卷等)
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <param name="json"></param>
|
|
/// <param name="json"></param>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
@@ -578,21 +586,29 @@ namespace IES.ExamServer.Controllers
|
|
EvaluationRoundSetting? setting = json.ToObject<EvaluationRoundSetting>();
|
|
EvaluationRoundSetting? setting = json.ToObject<EvaluationRoundSetting>();
|
|
if (setting!=null)
|
|
if (setting!=null)
|
|
{
|
|
{
|
|
- EvaluationClient? evaluationClient = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().FindOne(x => x.id!.Equals(setting.evaluationId) && x.openCode!.Equals(json["openCode"])&& x.shortCode!.Equals(json["shortCode"]));
|
|
|
|
|
|
+ var db = _liteDBFactory.GetLiteDatabase();
|
|
|
|
+ var collection = db.GetCollection<EvaluationClient>() ;
|
|
|
|
+ //&& x.openCode!.Equals($"{json["openCode"]}")&& x.shortCode!.Equals($"{json["shortCode"]}")
|
|
|
|
+ string shortCode = $"{json["shortCode"]}";
|
|
|
|
+ string openCode = $"{json["openCode"]}";
|
|
|
|
+ EvaluationClient ? evaluationClient = collection.FindOne(x => x.id!.Equals(setting.evaluationId)
|
|
|
|
+ && !string.IsNullOrWhiteSpace(x.shortCode) && x.shortCode.Equals(x.shortCode)
|
|
|
|
+ && !string.IsNullOrWhiteSpace(x.openCode) && x.openCode.Equals(openCode) );
|
|
if (evaluationClient!=null)
|
|
if (evaluationClient!=null)
|
|
{
|
|
{
|
|
- IEnumerable<EvaluationClient> evaluationClients = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().Find(x => x.activate==1);
|
|
|
|
|
|
+ IEnumerable<EvaluationClient> evaluationClients = collection.Find(x => x.activate==1);
|
|
if (evaluationClients != null && evaluationClients.Count() > 0)
|
|
if (evaluationClients != null && evaluationClients.Count() > 0)
|
|
{
|
|
{
|
|
- foreach (EvaluationClient item in evaluationClients)
|
|
|
|
|
|
+ var datas = evaluationClients.ToList();
|
|
|
|
+ foreach (EvaluationClient item in datas)
|
|
{
|
|
{
|
|
item.activate = 0;
|
|
item.activate = 0;
|
|
- _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().Upsert(item);
|
|
|
|
}
|
|
}
|
|
|
|
+ collection.Upsert(datas);
|
|
}
|
|
}
|
|
/// 判断是否包含所有分组
|
|
/// 判断是否包含所有分组
|
|
bool isAllContained = setting.groupList.All(x => evaluationClient.grouplist.Any(y => y.id == x.id));
|
|
bool isAllContained = setting.groupList.All(x => evaluationClient.grouplist.Any(y => y.id == x.id));
|
|
- if (isAllContained)
|
|
|
|
|
|
+ if (isAllContained && evaluationClient.grouplist.IsNotEmpty())
|
|
{
|
|
{
|
|
evaluationClient.countdownType = setting.countdownType;
|
|
evaluationClient.countdownType = setting.countdownType;
|
|
evaluationClient.countdown = setting.countdown;
|
|
evaluationClient.countdown = setting.countdown;
|
|
@@ -605,7 +621,9 @@ namespace IES.ExamServer.Controllers
|
|
evaluationClient.roundId = setting.id;
|
|
evaluationClient.roundId = setting.id;
|
|
_liteDBFactory.GetLiteDatabase().GetCollection<EvaluationRoundSetting>().Upsert(setting);
|
|
_liteDBFactory.GetLiteDatabase().GetCollection<EvaluationRoundSetting>().Upsert(setting);
|
|
_liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().Upsert(evaluationClient);
|
|
_liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().Upsert(evaluationClient);
|
|
- return Ok(new { code = 200, msg = "操作成功!" });
|
|
|
|
|
|
+ /// 分配试卷
|
|
|
|
+ var (roundStudentPapers, members, results,code,msg) = AssignStudentPaper(evaluationClient, setting);
|
|
|
|
+ return Ok(new { code = code, msg =msg , setting, results });
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
@@ -655,5 +673,246 @@ namespace IES.ExamServer.Controllers
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 设置评测开考信息(本轮名单,计时规则等)
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <param name="json"></param>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ //[HttpPost("assign-student-paper")]
|
|
|
|
+ //[AuthToken("admin", "teacher", "visitor")]
|
|
|
|
+ private (List<EvaluationStudentPaper> roundStudentPapers, List<EvaluationMember> members, List<EvaluationStudentResult> results, int code, string msg) AssignStudentPaper(EvaluationClient evaluationClient, EvaluationRoundSetting setting)
|
|
|
|
+ {
|
|
|
|
+ int code = 200;
|
|
|
|
+ string msg = string.Empty;
|
|
|
|
+ List<EvaluationStudentPaper> roundStudentPapers = new List<EvaluationStudentPaper>();
|
|
|
|
+ List<EvaluationMember> members = new List<EvaluationMember>();
|
|
|
|
+ List<EvaluationStudentResult> results = new List<EvaluationStudentResult>();
|
|
|
|
+ string packagePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "package");
|
|
|
|
+ string evaluationPath = Path.Combine(packagePath, evaluationClient.id!);
|
|
|
|
+ string evaluationDataPath = Path.Combine(evaluationPath, "data");
|
|
|
|
+ string path_groupList = Path.Combine(evaluationDataPath, "groupList.json");
|
|
|
|
+ if (System.IO.File.Exists(path_groupList))
|
|
|
|
+ {
|
|
|
|
+ JsonNode? jsonNode = System.IO.File.ReadAllText(path_groupList).ToObject<JsonNode>();
|
|
|
|
+ if (jsonNode!=null && jsonNode["groupList"]!=null)
|
|
|
|
+ {
|
|
|
|
+ List<EvaluationGroupList>? groupList = jsonNode["groupList"]?.ToObject<List<EvaluationGroupList>>();
|
|
|
|
+ if (groupList!=null)
|
|
|
|
+ {
|
|
|
|
+ bool isAllContained = setting.groupList.All(x => groupList.Any(y => y.id == x.id));
|
|
|
|
+ if (isAllContained)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ foreach (var item in setting.groupList)
|
|
|
|
+ {
|
|
|
|
+ EvaluationGroupList? groupListItem = groupList.Find(x => x.id == item.id);
|
|
|
|
+ if (groupListItem!=null)
|
|
|
|
+ {
|
|
|
|
+ groupListItem.members.ForEach(x =>
|
|
|
|
+ {
|
|
|
|
+ x.schoolId=_connectionService?.serverDevice?.school?.id;
|
|
|
|
+ x.evaluationId=evaluationClient.id;
|
|
|
|
+ x.classId= groupListItem.id;
|
|
|
|
+ x.periodId= groupListItem.periodId;
|
|
|
|
+ x.roundId=setting.id;
|
|
|
|
+ x.className= groupListItem.name;
|
|
|
|
+ });
|
|
|
|
+ members.AddRange(groupListItem.members);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //清空数据库,重新插入
|
|
|
|
+ _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationMember>().DeleteAll();
|
|
|
|
+ //插入
|
|
|
|
+ _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationMember>().Upsert(members);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ foreach (var subject in evaluationClient.subjects)
|
|
|
|
+ {
|
|
|
|
+ var studentPaperIds = members.Select(x => ShaHashHelper.GetSHA1(x.id+evaluationClient.id+subject.examId+subject.subjectId));
|
|
|
|
+ IEnumerable<EvaluationStudentPaper> evaluationStudentPapers = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentPaper>()
|
|
|
|
+ .Find(x => studentPaperIds.Contains(x.id) && x.evaluationId!.Equals(evaluationClient.id));
|
|
|
|
+ List<EvaluationStudentPaper> studentPapers = new List<EvaluationStudentPaper>();
|
|
|
|
+ int paperIndex = 0;
|
|
|
|
+ int paperCount = subject.papers.Count();
|
|
|
|
+ //先把试卷顺序打乱
|
|
|
|
+ subject.papers =subject.papers.OrderBy(x => Guid.NewGuid().ToString()).ToList();
|
|
|
|
+ //将学生顺序打乱
|
|
|
|
+ members = members.OrderBy(x => Guid.NewGuid().ToString()).ToList();
|
|
|
|
+
|
|
|
|
+ foreach (var member in members)
|
|
|
|
+ {
|
|
|
|
+ SubjectExamPaper studentPaper = subject.papers[paperIndex];
|
|
|
|
+ string id = ShaHashHelper.GetSHA1(member.id+evaluationClient.id+subject.examId+subject.subjectId);
|
|
|
|
+ var paper = evaluationStudentPapers.Where(x => x.id!.Equals(id));
|
|
|
|
+ if (paper== null || paper.Count()==0)
|
|
|
|
+ {
|
|
|
|
+ studentPapers.Add(new EvaluationStudentPaper
|
|
|
|
+ {
|
|
|
|
+ studentId=member.id,
|
|
|
|
+ studentName=member.name,
|
|
|
|
+ classId=member.classId,
|
|
|
|
+ className=member.className,
|
|
|
|
+ evaluationId=evaluationClient.id,
|
|
|
|
+ examId=subject.examId,
|
|
|
|
+ examName=subject.examName,
|
|
|
|
+ subjectId=subject.subjectId,
|
|
|
|
+ subjectName=subject.subjectName,
|
|
|
|
+ paperId=studentPaper.paperId,
|
|
|
|
+ paperName=studentPaper.paperName,
|
|
|
|
+ id=id,
|
|
|
|
+ });
|
|
|
|
+ // 移动到下一个试卷
|
|
|
|
+ paperIndex = (paperIndex + 1) % paperCount;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ // Console.WriteLine("已经分配过试卷,跳过");
|
|
|
|
+ //已经分配过试卷,跳过
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (studentPapers.Count>0)
|
|
|
|
+ {
|
|
|
|
+ _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentPaper>().Upsert(studentPapers);
|
|
|
|
+ roundStudentPapers.AddRange(studentPapers);
|
|
|
|
+ }
|
|
|
|
+ if (evaluationStudentPapers!=null && evaluationStudentPapers.Count()>0)
|
|
|
|
+ {
|
|
|
|
+ roundStudentPapers.AddRange(evaluationStudentPapers);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ IEnumerable<EvaluationStudentResult> studentResults = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentResult>()
|
|
|
|
+ .Find(x => members.Select(x => x.id).Contains(x.studentId)&&!string.IsNullOrWhiteSpace(x.evaluationId) && x.evaluationId.Equals(evaluationClient.id));
|
|
|
|
+ foreach (var member in members)
|
|
|
|
+ {
|
|
|
|
+ EvaluationStudentResult? studentResult = null;
|
|
|
|
+ //sha1(evaluationId-schoolId-studentId)
|
|
|
|
+ string resultId = ShaHashHelper.GetSHA1(evaluationClient.id+_connectionService?.serverDevice?.school?.id+member.id);
|
|
|
|
+ var result = studentResults.Where(x => x.id!.Equals(resultId) && !string.IsNullOrWhiteSpace(x.studentId) && x.studentId.Equals(member.id));
|
|
|
|
+ if (result==null || result.Count()==0)
|
|
|
|
+ {
|
|
|
|
+ studentResult = new EvaluationStudentResult()
|
|
|
|
+ {
|
|
|
|
+ id = resultId,
|
|
|
|
+ evaluationId = evaluationClient.id,
|
|
|
|
+ schoolId = _connectionService?.serverDevice?.school?.id,
|
|
|
|
+ studentId = member.id,
|
|
|
|
+ studentName = member.name,
|
|
|
|
+ classId = member.classId,
|
|
|
|
+ className = member.className,
|
|
|
|
+ ownerId= evaluationClient.ownerId,
|
|
|
|
+ scope= evaluationClient.scope,
|
|
|
|
+ type= evaluationClient.type,
|
|
|
|
+ pid= evaluationClient.pid,
|
|
|
|
+ };
|
|
|
|
+ var studentPapers = roundStudentPapers.FindAll(x => !string.IsNullOrWhiteSpace(x.studentId) && x.studentId.Equals(member.id)
|
|
|
|
+ &&!string.IsNullOrWhiteSpace(x.evaluationId) && x.evaluationId.Equals(evaluationClient.id));
|
|
|
|
+
|
|
|
|
+ if (studentPapers.IsNotEmpty())
|
|
|
|
+ {
|
|
|
|
+ foreach (var studentPaper in studentPapers)
|
|
|
|
+ {
|
|
|
|
+ studentResult.subjectResults.Add(new EvaluationSubjectResult()
|
|
|
|
+ {
|
|
|
|
+ id = ShaHashHelper.GetSHA1(evaluationClient.id+studentPaper.examId+studentPaper.subjectId+member.id),
|
|
|
|
+ evaluationId = studentPaper.evaluationId,
|
|
|
|
+ examId = studentPaper.examId,
|
|
|
|
+ examName = studentPaper.examName,
|
|
|
|
+ subjectId = studentPaper.subjectId,
|
|
|
|
+ subjectName = studentPaper.subjectName,
|
|
|
|
+ paperId = studentPaper.paperId,
|
|
|
|
+ paperName = studentPaper.paperName,
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentResult>().Upsert(studentResult);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ studentResult = result.First();
|
|
|
|
+ studentResult.studentName = member.name;
|
|
|
|
+ studentResult.classId = member.classId;
|
|
|
|
+ studentResult.className = member.className;
|
|
|
|
+ var studentPapers = roundStudentPapers.FindAll(x => !string.IsNullOrWhiteSpace(x.studentId) && x.studentId.Equals(member.id)
|
|
|
|
+ &&!string.IsNullOrWhiteSpace(x.evaluationId) && x.evaluationId.Equals(evaluationClient.id));
|
|
|
|
+ if (studentPapers.IsNotEmpty())
|
|
|
|
+ {
|
|
|
|
+ foreach (var studentPaper in studentPapers)
|
|
|
|
+ {
|
|
|
|
+ string subjectResultId = ShaHashHelper.GetSHA1(evaluationClient.id+studentPaper.examId+studentPaper.subjectId+member.id);
|
|
|
|
+ var subjectResult = studentResult.subjectResults.Find(x => x.id!.Equals(subjectResultId));
|
|
|
|
+ if (subjectResult==null)
|
|
|
|
+ {
|
|
|
|
+ studentResult.subjectResults.Add(new EvaluationSubjectResult()
|
|
|
|
+ {
|
|
|
|
+ id = ShaHashHelper.GetSHA1(evaluationClient.id+studentPaper.examId+studentPaper.subjectId+member.id),
|
|
|
|
+ evaluationId = studentPaper.evaluationId,
|
|
|
|
+ examId = studentPaper.examId,
|
|
|
|
+ examName = studentPaper.examName,
|
|
|
|
+ subjectId = studentPaper.subjectId,
|
|
|
|
+ subjectName = studentPaper.subjectName,
|
|
|
|
+ paperId = studentPaper.paperId,
|
|
|
|
+ paperName = studentPaper.paperName,
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ subjectResult.evaluationId = studentPaper.evaluationId;
|
|
|
|
+ subjectResult.examId = studentPaper.examId;
|
|
|
|
+ subjectResult.examName = studentPaper.examName;
|
|
|
|
+ subjectResult.subjectId = studentPaper.subjectId;
|
|
|
|
+ subjectResult.subjectName = studentPaper.subjectName;
|
|
|
|
+ subjectResult.paperId = studentPaper.paperId;
|
|
|
|
+ subjectResult.paperName = studentPaper.paperName;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //_liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentResult>().Upsert(studentResult);
|
|
|
|
+ }
|
|
|
|
+ if (studentResult!=null)
|
|
|
|
+ {
|
|
|
|
+ results.Add(studentResult);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (results.Count>0)
|
|
|
|
+ {
|
|
|
|
+ _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentResult>().Upsert(results);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ msg = "开考名单不在当前评测中!";
|
|
|
|
+ code = 4;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ msg = "名单文件字段提取为空!";
|
|
|
|
+ code = 3;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ msg = "名单文件解析错误!";
|
|
|
|
+ code = 2;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ msg = "名单文件不存在!";
|
|
|
|
+ code = 1;
|
|
|
|
+ }
|
|
|
|
+ if (members.Count()!=results.Count())
|
|
|
|
+ {
|
|
|
|
+ code = 5;
|
|
|
|
+ msg = "名单成员与作答记录数量不匹配!";
|
|
|
|
+ }
|
|
|
|
+ if (roundStudentPapers.Count()!= results.SelectMany(x => x.subjectResults).Count())
|
|
|
|
+ {
|
|
|
|
+ code = 6;
|
|
|
|
+ msg = "学生分配的试卷与作答记录数量不匹配!";
|
|
|
|
+ }
|
|
|
|
+ return (roundStudentPapers, members, results, code, msg);
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|