From 49078afa5f753231d4d8a8a1dd1e30e5230dd85f Mon Sep 17 00:00:00 2001 From: xiaochanghai Date: Fri, 26 Jul 2024 15:02:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=94=E9=A2=98=20=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ghre/Ghre_ExamRecordController.cs | 12 ++ Tiobon.Core.Api/Tiobon.Core.xml | 8 ++ Tiobon.Core.DataAccess/DataContext.cs | 2 + .../Ghre/IGhre_ExamRecordServices.cs | 2 + .../Ghre/Ghre_ExamRecordServices.cs | 105 +++++++++++++++++- 5 files changed, 124 insertions(+), 5 deletions(-) diff --git a/Tiobon.Core.Api/Controllers/Ghre/Ghre_ExamRecordController.cs b/Tiobon.Core.Api/Controllers/Ghre/Ghre_ExamRecordController.cs index e63df571..e33db066 100644 --- a/Tiobon.Core.Api/Controllers/Ghre/Ghre_ExamRecordController.cs +++ b/Tiobon.Core.Api/Controllers/Ghre/Ghre_ExamRecordController.cs @@ -79,4 +79,16 @@ public class Ghre_ExamRecordController : BaseController + /// 答题 + /// + /// 学习记录ID + /// + /// + [HttpPost("AnswerExam/{studyRecordId}")] + public async Task AnswerExamAsync(long studyRecordId, [FromBody] List answers) + { + return await _service.AnswerExamAsync(answers, studyRecordId); + } } \ No newline at end of file diff --git a/Tiobon.Core.Api/Tiobon.Core.xml b/Tiobon.Core.Api/Tiobon.Core.xml index 07ce3d8e..82bd85b5 100644 --- a/Tiobon.Core.Api/Tiobon.Core.xml +++ b/Tiobon.Core.Api/Tiobon.Core.xml @@ -855,6 +855,14 @@ + + + 答题 + + 学习记录ID + + + Ghre_ExamRecordDetail(Controller) diff --git a/Tiobon.Core.DataAccess/DataContext.cs b/Tiobon.Core.DataAccess/DataContext.cs index f3206698..a19bf11f 100644 --- a/Tiobon.Core.DataAccess/DataContext.cs +++ b/Tiobon.Core.DataAccess/DataContext.cs @@ -9,6 +9,8 @@ namespace Tiobon.Core.DataAccess public virtual DbSet Ghra_Grade { get; set; } public virtual DbSet Ghre_Attachment { get; set; } + public virtual DbSet Ghre_ExamRecordDetail { get; set; } + public virtual DbSet Ghre_ExamRecordAnswer { get; set; } //占位符 diff --git a/Tiobon.Core.IServices/Ghre/IGhre_ExamRecordServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_ExamRecordServices.cs index 5afb32e9..2a128ba6 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_ExamRecordServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_ExamRecordServices.cs @@ -21,5 +21,7 @@ namespace Tiobon.Core.IServices Task> QueryExamAsync(long id); Task StartExamAsync(long examRecordId); + + Task AnswerExamAsync(List answers, long studyRecordId); } } \ No newline at end of file diff --git a/Tiobon.Core.Services/Ghre/Ghre_ExamRecordServices.cs b/Tiobon.Core.Services/Ghre/Ghre_ExamRecordServices.cs index d8e8a76e..546e8d8b 100644 --- a/Tiobon.Core.Services/Ghre/Ghre_ExamRecordServices.cs +++ b/Tiobon.Core.Services/Ghre/Ghre_ExamRecordServices.cs @@ -11,7 +11,8 @@ using System.Text.RegularExpressions; using System.Net; using Tiobon.Core.Common.Helper; using AgileObjects.AgileMapper.Extensions; -using Tiobon.Core.Common.DB.Dapper.Extensions; +using SqlSugar; +using Tiobon.Core.DataAccess; namespace Tiobon.Core.Services; @@ -346,7 +347,6 @@ public class Ghre_ExamRecordServices : BaseServices> QueryExamAsync(long id) { var extend = new QueryExam(); @@ -499,8 +499,8 @@ public class Ghre_ExamRecordServices : BaseServices 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.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, @@ -561,7 +561,6 @@ public class Ghre_ExamRecordServices : BaseServices.OprateSuccess("查询成功!", extend); } - public async Task StartExamAsync(long examRecordId) { var entity = await base.QuerySingle(examRecordId); @@ -592,4 +591,100 @@ public class Ghre_ExamRecordServices : BaseServices AnswerExamAsync(List answers, long studyRecordId) + { + var record = await base.QuerySingle(x => x.Id == studyRecordId); + if (record is null) return ServiceResult.OprateFailed("无效的考试ID"); + using var _context = ContextFactory.CreateContext(); + + var questionIds = answers.Select(x => x.QuestionId).ToList(); + var questionAnswers = await Db.Queryable().Where(x => x.QuestionId != null && questionIds.Contains(x.QuestionId.Value)).OrderBy(x => x.TaxisNo).ToListAsync(); ; + + var staff = await Db.Queryable().Where(x => x.UserId == App.User.ID).FirstAsync(); + + var recordDetails = new List(); + var recordDetailAnswers = new List(); + answers.ForEach(answer => + { + long id = SnowFlakeSingle.instance.getID(); + + recordDetails.Add(new Ghre_ExamRecordDetail() + { + Id = id, + CreateTime = DateTime.Now, + ExamRecordId = record.Id, + ExamPaperId = answer.ExamPaperId, + ExamPaperQuestionId = answer.Id, + QuestionId = answer.QuestionId, + StaffId = staff?.UserStaffID, + Score = 0, + AdjustScore = 0 + }); + var questionAnswers1 = questionAnswers.Where(x => x.QuestionId == answer.QuestionId).ToList(); + switch (answer.QuestionType) + { + case "TrueOrFalse": + case "Single": + recordDetailAnswers.Add(new Ghre_ExamRecordAnswer() + { + Id = SnowFlakeSingle.instance.getID(), + CreateTime = DateTime.Now, + ExamRecordDetailId = id, + + QuestionAnswerId = questionAnswers1.First(x => x.QuestionNo == answer.value)?.Id, + }); + break; + case "Multiple": + var TaxisNo = 100; + foreach (var value in answer.value1) + { + recordDetailAnswers.Add(new Ghre_ExamRecordAnswer() + { + Id = SnowFlakeSingle.instance.getID(), + CreateTime = DateTime.Now, + ExamRecordDetailId = id, + QuestionAnswerId = questionAnswers1.First(x => x.QuestionNo == value)?.Id, + TaxisNo = TaxisNo + }); + TaxisNo += 100; + } + break; + case "Completion": + var TaxisNo1 = 100; + foreach (var value in answer.value1) + { + recordDetailAnswers.Add(new Ghre_ExamRecordAnswer() + { + Id = SnowFlakeSingle.instance.getID(), + CreateTime = DateTime.Now, + ExamRecordDetailId = id, + AnswerContent = value, + TaxisNo = TaxisNo1 + }); + TaxisNo1 += 100; + } + break; + case "ShortAnswer": + recordDetailAnswers.Add(new Ghre_ExamRecordAnswer() + { + Id = SnowFlakeSingle.instance.getID(), + CreateTime = DateTime.Now, + ExamRecordDetailId = id, + AnswerContent = answer.value + }); + break; + default: + + break; + } + }); + + await _context.Ghre_ExamRecordDetail.AddRangeAsync(recordDetails); + await _context.Ghre_ExamRecordAnswer.AddRangeAsync(recordDetailAnswers); + await _context.SaveChangesAsync(); + + return ServiceResult.OprateSuccess("提交成功!"); + } } \ No newline at end of file