|
@@ -28,6 +28,10 @@ using XF.Domain.Dependency;
|
|
|
using XF.Domain.Exceptions;
|
|
|
using Hotline.Share.Exams.Extensions;
|
|
|
using NPOI.SS.Formula.Functions;
|
|
|
+using Hotline.Repository.SqlSugar.Exam.Repositories.Trains;
|
|
|
+using static NPOI.HSSF.Util.HSSFColor;
|
|
|
+using DocumentFormat.OpenXml.Drawing.Charts;
|
|
|
+using JiebaNet.Segmenter.Common;
|
|
|
|
|
|
namespace Hotline.Application.Exam.Service.Trains
|
|
|
{
|
|
@@ -131,14 +135,16 @@ namespace Hotline.Application.Exam.Service.Trains
|
|
|
|
|
|
public async Task<TrainPracticeDto> GetTrainPracticeAsync(TrainPracticeRequest trainPracticeRequest)
|
|
|
{
|
|
|
- var trainPracticeRepostitory = new TrainPracticeRepository(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
+ SqlSugar.ISugarQueryable<ExamTrainPractice> trainPractices = GetTrainPractices(trainPracticeRequest);
|
|
|
|
|
|
- var trainPractice = await trainPracticeRepostitory.GetAsync(trainPracticeRequest.TrainPracticeId);
|
|
|
+ var trainPractice = await trainPractices.FirstAsync();
|
|
|
|
|
|
if (trainPractice == null) return null;
|
|
|
|
|
|
var trainPracticeDto = _mapper.Map<TrainPracticeDto>(trainPractice);
|
|
|
|
|
|
+ trainPracticeRequest.TrainPracticeId = trainPractice.Id;
|
|
|
+
|
|
|
trainPracticeDto.TrainPracticeOptionsDtos = await GetTrainQuestionOptions(trainPracticeRequest);
|
|
|
|
|
|
trainPracticeDto.TrainPracticeSourcewareDtos = await GetTrainPracticeSourcewares(trainPracticeRequest);
|
|
@@ -148,6 +154,23 @@ namespace Hotline.Application.Exam.Service.Trains
|
|
|
return trainPracticeDto;
|
|
|
}
|
|
|
|
|
|
+ public async Task<SimpleTrainPracticeDto> GetSimpleTrainPracticeAsync(TrainPracticeRequest trainPracticeRequest)
|
|
|
+ {
|
|
|
+ SqlSugar.ISugarQueryable<ExamTrainPractice> trainPractices = GetTrainPractices(trainPracticeRequest);
|
|
|
+
|
|
|
+ var trainPractice = await trainPractices.FirstAsync();
|
|
|
+
|
|
|
+ if (trainPractice == null) return null;
|
|
|
+
|
|
|
+ var trainPracticeDto = _mapper.Map<TrainPracticeDto>(trainPractice);
|
|
|
+
|
|
|
+ trainPracticeRequest.TrainPracticeId = trainPractice.Id;
|
|
|
+
|
|
|
+ trainPracticeDto.TrainPracticeOptionsDtos = await GetTrainQuestionOptions(trainPracticeRequest);
|
|
|
+
|
|
|
+ return trainPracticeDto;
|
|
|
+ }
|
|
|
+
|
|
|
public async Task<TrainResultPagedViewResponse> AnalysisTrainResult(TrainResultReportPagedRequest trainResultReportPagedRequest)
|
|
|
{
|
|
|
trainResultReportPagedRequest.ResoleEndTime();
|
|
@@ -244,9 +267,11 @@ namespace Hotline.Application.Exam.Service.Trains
|
|
|
private SqlSugar.ISugarQueryable<TrainRecordViewResponse> QueryResult(TrainRecordPagedRequest queryRequest)
|
|
|
{
|
|
|
var trainPlanRepository = new TrainPlanRepository(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
+ queryRequest.UserId = _sessionContext.UserId;
|
|
|
var expression = queryRequest.GetExpression();
|
|
|
var trainPlanTable = trainPlanRepository.Queryable().Where(expression);
|
|
|
- var trainRecordTable = _repository.Queryable();
|
|
|
+ var traiRecordExpression = queryRequest.GetTrainRecordExpression();
|
|
|
+ var trainRecordTable = _repository.Queryable().Where(traiRecordExpression);
|
|
|
|
|
|
var queryResult = trainPlanTable.InnerJoin(trainRecordTable, (p, r) => p.Id == r.TrainPlanId)
|
|
|
.Select((p, r) => new TrainRecordViewResponse
|
|
@@ -358,12 +383,36 @@ namespace Hotline.Application.Exam.Service.Trains
|
|
|
return trainPracticeDto;
|
|
|
}
|
|
|
|
|
|
+ private SqlSugar.ISugarQueryable<ExamTrainPractice> GetTrainPractices(TrainPracticeRequest trainPracticeRequest)
|
|
|
+ {
|
|
|
+ var trainPracticeRepostitory = new TrainPracticeRepository(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
+ var trainPlanRepository = new TrainPlanRepository(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
+ var trainPlanTemplateRepository = new TrainPlanTemplateRepository(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
+
|
|
|
+ var trainRecordTable = _repository.Queryable().Where(x => x.Id == trainPracticeRequest.Id);
|
|
|
+ var trainPlanTable = trainPlanRepository.Queryable();
|
|
|
+ var trainPracticeTable = trainPracticeRepostitory.Queryable().WhereIF(!string.IsNullOrEmpty(trainPracticeRequest.TrainPracticeId),x=>x.Id == trainPracticeRequest.TrainPracticeId);
|
|
|
+ var tranPlanTemplateTable = trainPlanTemplateRepository.Queryable();
|
|
|
+
|
|
|
+ var trainPractices = trainPracticeTable.InnerJoin(tranPlanTemplateTable, (tp, tpt) => tp.TrainTemplateId == tpt.TrainTemplateId)
|
|
|
+ .InnerJoin(trainPlanTable, (tp, tpt, tpn) => tpt.TrainPlanId == tpn.Id)
|
|
|
+ .InnerJoin(trainRecordTable, (tp, tpt, tpn, tr) => tpn.Id == tr.TrainPlanId)
|
|
|
+ .Select((tp, tpt, tpn, tr) => tp)
|
|
|
+ .OrderBy(tp => tp.CreationTime);
|
|
|
+ return trainPractices;
|
|
|
+ }
|
|
|
+
|
|
|
private async Task<List<SimpleTrainPracticeOptionsDto>> GetTrainQuestionOptions(TrainPracticeRequest trainPracticeRequest)
|
|
|
{
|
|
|
- var trainPracticeRepository = new ExamRepository<ExamTrainPracticeOptions>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
+ var trainPracticeOptionsRepository = new ExamRepository<ExamTrainPracticeOptions>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
var trainRecordAnswerRepository = new ExamRepository<ExamTrainRecordAnswer>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
// TODO: 获取未阅卷的第一道题
|
|
|
- var trainPracticeOptions = trainPracticeRepository.Queryable().Where(x => x.TrainPracticeId == trainPracticeRequest.TrainPracticeId);
|
|
|
+ var trainPractices = GetTrainPractices(trainPracticeRequest);
|
|
|
+
|
|
|
+ var trainPracticeOptions = await trainPracticeOptionsRepository.Queryable()
|
|
|
+ .InnerJoin(trainPractices, (tpo, tp) => tpo.TrainPracticeId == tp.Id)
|
|
|
+ .Where((tpo, tp)=> tp.Id == trainPracticeRequest.TrainPracticeId)
|
|
|
+ .Select((tpo, tp) => tpo).ToListAsync();
|
|
|
|
|
|
var trainRecordOptions = await trainRecordAnswerRepository.Queryable()
|
|
|
.InnerJoin<ExamTrainRecord>((t,x)=>t.TrainRecordId == x.Id)
|