|
|
|
@ -344,4 +344,166 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe |
|
|
|
|
|
|
|
|
|
return ServiceResult.OprateSuccess("提交成功!"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public async Task<ServiceResult<QueryExam>> QueryExamAsync(long id) |
|
|
|
|
{ |
|
|
|
|
var extend = new QueryExam(); |
|
|
|
|
var body = new QueryBody(); |
|
|
|
|
body.pageNum = 1; |
|
|
|
|
body.pageSize = 10000; |
|
|
|
|
|
|
|
|
|
long examRecordId = 0; |
|
|
|
|
if (await Db.Queryable<Ghre_Exam>().AnyAsync(x => x.Id == id)) |
|
|
|
|
{ |
|
|
|
|
var examRecord = await Db.Queryable<Ghre_ExamRecord>().FirstAsync(x => x.ExamId == id); |
|
|
|
|
if (examRecord != null) |
|
|
|
|
examRecordId = examRecord.Id; |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
var insrt = new InsertGhre_ExamRecordInput() |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
examRecordId = await base.Add(insrt); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (await Db.Queryable<Ghre_StudyRecord>().AnyAsync(x => x.Id == id)) |
|
|
|
|
{ |
|
|
|
|
var studyRecord = await Db.Queryable<Ghre_StudyRecord>().FirstAsync(x => x.Id == id); |
|
|
|
|
|
|
|
|
|
//if (examRecord != null) |
|
|
|
|
// examRecordId = examRecord.Id; |
|
|
|
|
//else |
|
|
|
|
//{ |
|
|
|
|
// var insrt = new InsertGhre_ExamRecordInput() |
|
|
|
|
// { |
|
|
|
|
|
|
|
|
|
// }; |
|
|
|
|
// examRecordId = await base.Add(insrt); |
|
|
|
|
//} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var records = await QueryFilterPage(body, $"Id='{examRecordId}'"); |
|
|
|
|
|
|
|
|
|
if (!records.result.DT_TableDataT1.Any()) |
|
|
|
|
return ServiceResult<QueryExam>.OprateFailed("无效的考试ID!"); |
|
|
|
|
|
|
|
|
|
var record = records.result.DT_TableDataT1.FirstOrDefault(); |
|
|
|
|
|
|
|
|
|
var details = await Db.Queryable<Ghre_ExamRecordDetail>().Where(x => x.ExamRecordId == record.Id).ToListAsync(); |
|
|
|
|
var detailIds = details.Select(x => x.Id).ToList(); |
|
|
|
|
var recordAnswers = await Db.Queryable<Ghre_ExamRecordAnswer>() |
|
|
|
|
.OrderBy(x => x.TaxisNo) |
|
|
|
|
.Where(x => x.ExamRecordDetailId != null && detailIds.Contains(x.ExamRecordDetailId.Value)) |
|
|
|
|
.ToListAsync(); |
|
|
|
|
//if (record.ScoreStatus == "NoScore") |
|
|
|
|
// await ExamHelper.SystemMarkAsync(Db, record, details, recordAnswers); |
|
|
|
|
|
|
|
|
|
var exampaper = await Db.Queryable<Ghre_ExamPaper>().FirstAsync(x => x.Id == record.ExamPaperId); |
|
|
|
|
var baseData = new DefaultGhre_ExamPaperBaseData(); |
|
|
|
|
baseData.PaperNo = exampaper.PaperNo; |
|
|
|
|
baseData.PaperName = exampaper.PaperName; |
|
|
|
|
baseData.AnswerTime = exampaper.AnswerTime; |
|
|
|
|
baseData.ScoreMethod = exampaper.ScoreMethod; |
|
|
|
|
baseData.TotalScore = exampaper.TotalScore; |
|
|
|
|
baseData.PassScore = exampaper.PassScore; |
|
|
|
|
baseData.RetakeTimes = exampaper.RetakeTimes; |
|
|
|
|
baseData.RemarkSz = exampaper.RemarkSz; |
|
|
|
|
baseData.LinkType = exampaper.LinkType; |
|
|
|
|
baseData.CourseId = exampaper.LinkType == "CourseId" ? exampaper.LinkId : null; |
|
|
|
|
baseData.CourseSceneId = exampaper.LinkType == "CourseSceneId" ? exampaper.LinkId : null; |
|
|
|
|
extend.baseData = baseData; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extend.styleInfo.coverImage = exampaper.CoverUrl; |
|
|
|
|
extend.styleInfo.paperStyle = exampaper.Style; |
|
|
|
|
extend.styleInfo.coverBackGround = exampaper.CoverBackGround; |
|
|
|
|
|
|
|
|
|
var questions = await Db.Queryable<Ghre_ExamPaperQuestion>().Where(x => x.ExamPaperId == exampaper.Id).ToListAsync(); |
|
|
|
|
var previews = questions.Where(x => x.QuestionId != null).Select(x => new DefaultGhre_ExamPaperPreview() |
|
|
|
|
{ |
|
|
|
|
Id = x.Id, |
|
|
|
|
ConfigId = x.ConfigId, |
|
|
|
|
parentId = x.ConfigId, |
|
|
|
|
QuestionId = x.QuestionId.Value, |
|
|
|
|
ExamPaperId = x.ExamPaperId, |
|
|
|
|
Score = x.Score, |
|
|
|
|
RealScore = details.Where(m => m.QuestionId == x.QuestionId).Sum(m => (m.Score ?? 0) + (m.AdjustScore ?? 0)) |
|
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
|
|
var questionIds = previews.Select(x => x.QuestionId).Distinct().ToList(); |
|
|
|
|
|
|
|
|
|
var questions1 = await Db.Queryable<Ghre_Question>().Where(x => questionIds.Contains(x.Id)).ToListAsync(); |
|
|
|
|
var answers = await Db.Queryable<Ghre_QuestionAnswer>().Where(x => x.QuestionId != null && questionIds.Contains(x.QuestionId.Value)).OrderBy(x => x.TaxisNo).ToListAsync(); ; |
|
|
|
|
|
|
|
|
|
previews.ForEach(x => |
|
|
|
|
{ |
|
|
|
|
var answers1 = answers.Where(y => y.QuestionId == x.QuestionId).ToList(); |
|
|
|
|
x.QuestionType = questions1.FirstOrDefault(a => a.Id == x.QuestionId)?.QuestionType; |
|
|
|
|
x.QuestionContent = questions1.FirstOrDefault(a => a.Id == x.QuestionId)?.QuestionContent; |
|
|
|
|
if (!string.IsNullOrEmpty(x.QuestionContent)) |
|
|
|
|
x.QuestionContent = WebUtility.HtmlDecode(x.QuestionContent); |
|
|
|
|
var detail = new FromGhre_QuestionQuestionTypeDetail(); |
|
|
|
|
detail.content = x.QuestionContent; |
|
|
|
|
detail.difficulty = questions1.FirstOrDefault(a => a.Id == x.QuestionId)?.DifficultyLevel; |
|
|
|
|
detail.answer = answers1.Where(x => x.IsCorrect == true).FirstOrDefault()?.QuestionNo; |
|
|
|
|
detail.answer1 = answers1.Where(x => x.IsCorrect == true).Select(x => x.QuestionNo).ToList(); |
|
|
|
|
detail.answerList = answers1.Select(x => new FromGhre_QuestionQuestionAnswerList() |
|
|
|
|
{ |
|
|
|
|
No = x.QuestionNo, |
|
|
|
|
label = x.AnswerContent, |
|
|
|
|
imageUrl = x.ImageUrl, |
|
|
|
|
imgWidthPc = x.ImageWidthPc, |
|
|
|
|
imgWidthApp = x.ImageWidthApp, |
|
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
|
|
x.detail = detail; |
|
|
|
|
|
|
|
|
|
var recordDetail = details.FirstOrDefault(m => m.ExamPaperQuestionId == x.Id); |
|
|
|
|
switch (x.QuestionType) |
|
|
|
|
{ |
|
|
|
|
case "Completion": |
|
|
|
|
case "ShortAnswer": |
|
|
|
|
var answerIds1 = recordAnswers.Where(m => m.ExamRecordDetailId == recordDetail?.Id && m.QuestionAnswerId == null).Select(m => m.AnswerContent).ToList(); |
|
|
|
|
answerIds1.ForEach(m => |
|
|
|
|
{ |
|
|
|
|
x.value1.Add(m); |
|
|
|
|
}); |
|
|
|
|
if (x.value1.Any()) |
|
|
|
|
x.value = x.value1.First(); |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
var answerIds = recordAnswers.Where(m => m.ExamRecordDetailId == recordDetail?.Id && m.QuestionAnswerId != null).Select(m => m.QuestionAnswerId).ToList(); |
|
|
|
|
|
|
|
|
|
answers1.Where(m => answerIds.Contains(m.Id)).ForEach(m => |
|
|
|
|
{ |
|
|
|
|
x.value1.Add(m.QuestionNo); |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
if (x.value1.Any()) |
|
|
|
|
x.value = x.value1.First(); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
extend.questionList = previews; |
|
|
|
|
|
|
|
|
|
extend.StaffNo = record.StaffNo; |
|
|
|
|
extend.StaffName = record.StaffName; |
|
|
|
|
extend.DeptNo = record.StaffNo; |
|
|
|
|
extend.DeptName = record.DepteName; |
|
|
|
|
extend.StaffPhoto = record.StaffPhotoUrl; |
|
|
|
|
extend.ExamName = record.ExamName + "(" + record.ExamNo + ")"; |
|
|
|
|
extend.ExamBeginDate = DateTimeHelper.ConvertToMiniuteString(record.BeginTime); |
|
|
|
|
extend.ExamEndDate = DateTimeHelper.ConvertToMiniuteString(record.EndTime); |
|
|
|
|
extend.ExamStatus = record.Status; |
|
|
|
|
extend.TotalScore = record.TotalScore; |
|
|
|
|
extend.Id = record.Id; |
|
|
|
|
return ServiceResult<QueryExam>.OprateSuccess("查询成功!", extend); |
|
|
|
|
} |
|
|
|
|
} |