我的学习跳转去考试(包含自动评卷、答案提交)

master
xiaochanghai 11 months ago
parent 3a87d1aec7
commit 677fe32b51
  1. 2175
      Model/Tiobon.Web.pdm
  2. 3
      Tiobon.Core.Model/View/Ghre/Ghre_ExamRecord.Dto.View.cs
  3. 87
      Tiobon.Core.Model/ViewModels/Extend/Ghre_ExamRecordExtend.cs
  4. 162
      Tiobon.Core.Services/Ghre/Ghre_ExamRecordServices.cs

File diff suppressed because it is too large Load Diff

@ -42,6 +42,9 @@ public class Ghre_ExamRecordDto : Ghre_ExamRecord
public DateTime? Indate { get; set; }
public string InStatus { get; set; }
public string ExamDate { get; set; }
public string StaffPhotoUrl { get; set; }
public string ExamNo { get; set; }
public string ExamName { get; set; }
public decimal? TotalScore { get; set; } = 0;

@ -12,6 +12,91 @@ public class Ghre_ExamRecordExtend : DefaultGhre_ExamPaperPageData
}
public class QueryExam : DefaultGhre_ExamPaperPageData
{
public long Id { get; set; }
/// <summary>
/// 课程名称
/// </summary>
public string CourseName { get; set; }
/// <summary>
/// 考试名称
/// </summary>
public string ExamName { get; set; }
/// <summary>
/// 考试开始时间
/// </summary>
public string ExamBeginDate { get; set; }
/// <summary>
/// 考试结束时间
/// </summary>
public string ExamEndDate { get; set; }
/// <summary>
/// Wait 等待考试, Examing 考试中, End 考试结束
/// </summary>
public string ExamStatus { get; set; }
/// <summary>
/// 剩余时间
/// </summary>
public string RemainingSecond { get; set; }
/// <summary>
/// 头像
/// </summary>
public string StaffPhoto { get; set; }
/// <summary>
/// 员工姓名
/// </summary>
public string StaffName { get; set; }
/// <summary>
/// 工号
/// </summary>
public string StaffNo { get; set; }
/// <summary>
/// 部门
/// </summary>
public string DeptName { get; set; }
/// <summary>
/// 部门编号
/// </summary>
public string DeptNo { get; set; }
/// <summary>
/// 最终得分
/// </summary>
public decimal? TotalScore { get; set; }
/// <summary>
/// 实际考试时长
/// </summary>
public string UsageTime { get; set; }
/// <summary>
/// 可重考
/// </summary>
public string CanRetake { get; set; }
/// <summary>
/// 出分中
/// </summary>
public string ScoreOut { get; set; }
/// <summary>
/// 出分时间
/// </summary>
public string ScoreOutTime { get; set; }
}
public class CommentData
{
public string Comment { get; set; }
@ -30,5 +115,7 @@ public class StaffInfo
public string StaffName { get; set; }
public string DeptNo { get; set; }
public string DepteName { get; set; }
public decimal StaffScore { get; set; }
public string PhotoUrl { get; set; }
}

@ -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);
}
}
Loading…
Cancel
Save