|
@@ -2,8 +2,10 @@
|
|
|
using Exam.Application.Interface.Questions;
|
|
|
using Exam.ExamManages;
|
|
|
using Exam.Infrastructure.Data.Entity;
|
|
|
+using Exam.Infrastructure.Enums;
|
|
|
using Exam.Insfrastructure.Service.Service;
|
|
|
using Exam.Questions;
|
|
|
+using Exam.Repository.Sqlsugar;
|
|
|
using Exam.Repository.Sqlsugar.Repositories;
|
|
|
using Exam.Share.ViewResponses.Question;
|
|
|
using Hotline.Application.Exam.QueryExtensions.Questions;
|
|
@@ -18,23 +20,32 @@ using XF.Domain.Dependency;
|
|
|
|
|
|
namespace Hotline.Application.Exam.Service.Questions
|
|
|
{
|
|
|
- public class QuestionService : ApiService<Question, QuestionDto,HotlineDbContext>, IQuestionService, IScopeDependency
|
|
|
+ public class QuestionService : ApiService<Question, QuestionDto, HotlineDbContext>, IQuestionService, IScopeDependency
|
|
|
{
|
|
|
#region ctor
|
|
|
private readonly IQuestionRepository _repository;
|
|
|
private readonly IQuestionTagRepository _questionTagRepository;
|
|
|
private readonly IQuestionOptionsRepository _questionOptionRepository;
|
|
|
+ private readonly IQuestionAnswerRepository _questionAnswerRepository;
|
|
|
+ private readonly IQuestionSourcewareRepository _questionSourcewareRepository;
|
|
|
+ private readonly IQuestionKnowladgeRepository _questionKnowladgeRepository;
|
|
|
private readonly IDataPermissionFilterBuilder _dataPermissionFilterBuilder;
|
|
|
private readonly IServiceProvider _serviceProvider;
|
|
|
public QuestionService(IQuestionRepository repository,
|
|
|
IQuestionTagRepository questionTagRepository,
|
|
|
IQuestionOptionsRepository questionOptionsRepository,
|
|
|
+ IQuestionAnswerRepository questionAnswerRepository,
|
|
|
+ IQuestionSourcewareRepository questionSourcewareRepository,
|
|
|
+ IQuestionKnowladgeRepository questionKnowladgeRepository,
|
|
|
IDataPermissionFilterBuilder dataPermissionFilterBuilder, IServiceProvider serviceProvider
|
|
|
) : base(repository)
|
|
|
{
|
|
|
_repository = repository;
|
|
|
_questionTagRepository = questionTagRepository;
|
|
|
+ _questionAnswerRepository = questionAnswerRepository;
|
|
|
_questionOptionRepository = questionOptionsRepository;
|
|
|
+ _questionSourcewareRepository = questionSourcewareRepository;
|
|
|
+ _questionKnowladgeRepository = questionKnowladgeRepository;
|
|
|
_dataPermissionFilterBuilder = dataPermissionFilterBuilder;
|
|
|
_serviceProvider = serviceProvider;
|
|
|
}
|
|
@@ -56,7 +67,7 @@ namespace Hotline.Application.Exam.Service.Questions
|
|
|
var questionTable = _repository.Queryable().Where(expression);
|
|
|
|
|
|
var questionTagExpression = queryRequest.GetQuestionTagExpression();
|
|
|
- var questionTagTable = new ExamRepository<QuestionTag>(_repository.UOW,_dataPermissionFilterBuilder,_serviceProvider).Queryable().Where(questionTagExpression);
|
|
|
+ var questionTagTable = new ExamRepository<QuestionTag>(_repository.UOW, _dataPermissionFilterBuilder, _serviceProvider).Queryable().Where(questionTagExpression);
|
|
|
|
|
|
var examTagExpression = queryRequest.GetExamTagExpression();
|
|
|
var examTagTable = new ExamRepository<ExamTag>(_repository.UOW, _dataPermissionFilterBuilder, _serviceProvider).Queryable().Where(examTagExpression);
|
|
@@ -111,7 +122,7 @@ namespace Hotline.Application.Exam.Service.Questions
|
|
|
};
|
|
|
|
|
|
return result;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
public override async Task AddAsync(QuestionDto actionRequest, CancellationToken cancellationToken)
|
|
|
{
|
|
@@ -120,6 +131,12 @@ namespace Hotline.Application.Exam.Service.Questions
|
|
|
await AddQuestionTags(actionRequest, cancellationToken);
|
|
|
|
|
|
await AddQuestionOptions(actionRequest, cancellationToken);
|
|
|
+
|
|
|
+ await AddQuestionAnswer(actionRequest, cancellationToken);
|
|
|
+
|
|
|
+ await AddKnowladges(actionRequest, cancellationToken);
|
|
|
+
|
|
|
+ await AddSourcewares(actionRequest, cancellationToken);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
@@ -128,23 +145,65 @@ namespace Hotline.Application.Exam.Service.Questions
|
|
|
{
|
|
|
if (actionRequest.QuestionTagDtos == null) return;
|
|
|
|
|
|
- var questionTags = actionRequest.QuestionTagDtos.Adapt<QuestionTag>();
|
|
|
+ var questionTags = actionRequest.QuestionTagDtos.Where(x => x.OperationStatus == OperationStatus.Add).Adapt<QuestionTag>();
|
|
|
|
|
|
questionTags.ToInsert(actionRequest);
|
|
|
|
|
|
- await _questionTagRepository.AddWithValidateAsync(questionTags,cancellationToken);
|
|
|
+ await _questionTagRepository.AddWithValidateAsync(questionTags, cancellationToken);
|
|
|
}
|
|
|
|
|
|
private async Task AddQuestionOptions(QuestionDto actionRequest, CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (actionRequest.QuestionOptionsDtos == null) return;
|
|
|
|
|
|
- var questionOptionses = actionRequest.QuestionOptionsDtos.Adapt<QuestionOptions>();
|
|
|
+ // 简单和填空没有选项
|
|
|
+ if (actionRequest.QuestionType == Share.Enums.Exams.EQuestionType.Essay || actionRequest.QuestionType == Share.Enums.Exams.EQuestionType.Blank)
|
|
|
+ return;
|
|
|
+
|
|
|
+ var questionOptionses = actionRequest.QuestionOptionsDtos.Where(x => x.OperationStatus == OperationStatus.Add).Adapt<QuestionOptions>();
|
|
|
|
|
|
questionOptionses.ToInsert(actionRequest);
|
|
|
|
|
|
await _questionOptionRepository.AddWithValidateAsync(questionOptionses, cancellationToken);
|
|
|
}
|
|
|
+
|
|
|
+ private async Task AddQuestionAnswer(QuestionDto actionRequest, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ if (actionRequest.QuestionAnswerDto == null) return;
|
|
|
+
|
|
|
+ // 简单和填空没有选项
|
|
|
+ if (actionRequest.QuestionType == Share.Enums.Exams.EQuestionType.Multi
|
|
|
+ || actionRequest.QuestionType == Share.Enums.Exams.EQuestionType.Single
|
|
|
+ || actionRequest.QuestionType == Share.Enums.Exams.EQuestionType.Judge) return;
|
|
|
+
|
|
|
+ var questionAnswer = actionRequest.QuestionAnswerDto.Adapt<QuestionAnswer>();
|
|
|
+
|
|
|
+ questionAnswer.ToInsert(actionRequest);
|
|
|
+
|
|
|
+ await _questionAnswerRepository.AddWithValidateAsync(questionAnswer, cancellationToken);
|
|
|
+
|
|
|
+ }
|
|
|
+ private async Task AddSourcewares(QuestionDto actionRequest, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ if (actionRequest.QuestionSourcewareDtos == null) return;
|
|
|
+
|
|
|
+ var questionSourcewares = actionRequest.QuestionSourcewareDtos.Where(x=>x.OperationStatus == OperationStatus.Add).Adapt<QuestionSourceware>();
|
|
|
+
|
|
|
+ questionSourcewares.ToInsert(actionRequest);
|
|
|
+
|
|
|
+ await _questionSourcewareRepository.AddWithValidateAsync(questionSourcewares,cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
+ private async Task AddKnowladges(QuestionDto actionRequest, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ if (actionRequest.QuestionKnowladgeDtos == null) return;
|
|
|
+
|
|
|
+ var questionKnowladges = actionRequest.QuestionKnowladgeDtos.Where(x => x.OperationStatus == OperationStatus.Add).Adapt<QuestionKnowladge>();
|
|
|
+
|
|
|
+ questionKnowladges.ToInsert(actionRequest);
|
|
|
+
|
|
|
+ await _questionKnowladgeRepository.AddWithValidateAsync(questionKnowladges, cancellationToken);
|
|
|
+ }
|
|
|
#endregion
|
|
|
}
|
|
|
}
|