答题 接口

master
xiaochanghai 11 months ago
parent f37485e8f9
commit 49078afa5f
  1. 12
      Tiobon.Core.Api/Controllers/Ghre/Ghre_ExamRecordController.cs
  2. 8
      Tiobon.Core.Api/Tiobon.Core.xml
  3. 2
      Tiobon.Core.DataAccess/DataContext.cs
  4. 2
      Tiobon.Core.IServices/Ghre/IGhre_ExamRecordServices.cs
  5. 105
      Tiobon.Core.Services/Ghre/Ghre_ExamRecordServices.cs

@ -79,4 +79,16 @@ public class Ghre_ExamRecordController : BaseController<IGhre_ExamRecordServices
{ {
return await _service.StartExamAsync(examRecordId); return await _service.StartExamAsync(examRecordId);
} }
/// <summary>
/// 答题
/// </summary>
/// <param name="studyRecordId">学习记录ID</param>
/// <param name="answers"></param>
/// <returns></returns>
[HttpPost("AnswerExam/{studyRecordId}")]
public async Task<ServiceResult> AnswerExamAsync(long studyRecordId, [FromBody] List<DefaultGhre_ExamPaperPreview> answers)
{
return await _service.AnswerExamAsync(answers, studyRecordId);
}
} }

@ -855,6 +855,14 @@
<param name="examRecordId"></param> <param name="examRecordId"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Tiobon.Core.Api.Controllers.Ghre_ExamRecordController.AnswerExamAsync(System.Int64,System.Collections.Generic.List{Tiobon.Core.Model.DefaultGhre_ExamPaperPreview})">
<summary>
答题
</summary>
<param name="studyRecordId">学习记录ID</param>
<param name="answers"></param>
<returns></returns>
</member>
<member name="T:Tiobon.Core.Api.Controllers.Ghre_ExamRecordDetailController"> <member name="T:Tiobon.Core.Api.Controllers.Ghre_ExamRecordDetailController">
<summary> <summary>
Ghre_ExamRecordDetail(Controller) Ghre_ExamRecordDetail(Controller)

@ -9,6 +9,8 @@ namespace Tiobon.Core.DataAccess
public virtual DbSet<Ghra_Grade> Ghra_Grade { get; set; } public virtual DbSet<Ghra_Grade> Ghra_Grade { get; set; }
public virtual DbSet<Ghre_Attachment> Ghre_Attachment { get; set; } public virtual DbSet<Ghre_Attachment> Ghre_Attachment { get; set; }
public virtual DbSet<Ghre_ExamRecordDetail> Ghre_ExamRecordDetail { get; set; }
public virtual DbSet<Ghre_ExamRecordAnswer> Ghre_ExamRecordAnswer { get; set; }
//占位符 //占位符

@ -21,5 +21,7 @@ namespace Tiobon.Core.IServices
Task<ServiceResult<QueryExam>> QueryExamAsync(long id); Task<ServiceResult<QueryExam>> QueryExamAsync(long id);
Task<ServiceResult> StartExamAsync(long examRecordId); Task<ServiceResult> StartExamAsync(long examRecordId);
Task<ServiceResult> AnswerExamAsync(List<DefaultGhre_ExamPaperPreview> answers, long studyRecordId);
} }
} }

@ -11,7 +11,8 @@ using System.Text.RegularExpressions;
using System.Net; using System.Net;
using Tiobon.Core.Common.Helper; using Tiobon.Core.Common.Helper;
using AgileObjects.AgileMapper.Extensions; using AgileObjects.AgileMapper.Extensions;
using Tiobon.Core.Common.DB.Dapper.Extensions; using SqlSugar;
using Tiobon.Core.DataAccess;
namespace Tiobon.Core.Services; namespace Tiobon.Core.Services;
@ -346,7 +347,6 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
return ServiceResult.OprateSuccess("提交成功!"); return ServiceResult.OprateSuccess("提交成功!");
} }
public async Task<ServiceResult<QueryExam>> QueryExamAsync(long id) public async Task<ServiceResult<QueryExam>> QueryExamAsync(long id)
{ {
var extend = new QueryExam(); var extend = new QueryExam();
@ -499,8 +499,8 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
var detail = new FromGhre_QuestionQuestionTypeDetail(); var detail = new FromGhre_QuestionQuestionTypeDetail();
detail.content = x.QuestionContent; detail.content = x.QuestionContent;
detail.difficulty = questions1.FirstOrDefault(a => a.Id == x.QuestionId)?.DifficultyLevel; detail.difficulty = questions1.FirstOrDefault(a => a.Id == x.QuestionId)?.DifficultyLevel;
detail.answer = answers1.Where(x => x.IsCorrect == true).FirstOrDefault()?.QuestionNo; //detail.answer = answers1.Where(x => x.IsCorrect == true).FirstOrDefault()?.QuestionNo;
detail.answer1 = answers1.Where(x => x.IsCorrect == true).Select(x => x.QuestionNo).ToList(); //detail.answer1 = answers1.Where(x => x.IsCorrect == true).Select(x => x.QuestionNo).ToList();
detail.answerList = answers1.Select(x => new FromGhre_QuestionQuestionAnswerList() detail.answerList = answers1.Select(x => new FromGhre_QuestionQuestionAnswerList()
{ {
No = x.QuestionNo, No = x.QuestionNo,
@ -561,7 +561,6 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
return ServiceResult<QueryExam>.OprateSuccess("查询成功!", extend); return ServiceResult<QueryExam>.OprateSuccess("查询成功!", extend);
} }
public async Task<ServiceResult> StartExamAsync(long examRecordId) public async Task<ServiceResult> StartExamAsync(long examRecordId)
{ {
var entity = await base.QuerySingle(examRecordId); var entity = await base.QuerySingle(examRecordId);
@ -592,4 +591,100 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
return ServiceResult.OprateSuccess("成功!"); return ServiceResult.OprateSuccess("成功!");
} }
public async Task<ServiceResult> AnswerExamAsync(List<DefaultGhre_ExamPaperPreview> 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<Ghre_QuestionAnswer>().Where(x => x.QuestionId != null && questionIds.Contains(x.QuestionId.Value)).OrderBy(x => x.TaxisNo).ToListAsync(); ;
var staff = await Db.Queryable<Ghrs_User>().Where(x => x.UserId == App.User.ID).FirstAsync();
var recordDetails = new List<Ghre_ExamRecordDetail>();
var recordDetailAnswers = new List<Ghre_ExamRecordAnswer>();
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("提交成功!");
}
} }
Loading…
Cancel
Save