123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663 |
- using DocumentFormat.OpenXml.Office2010.Excel;
- using Exam.Infrastructure.Data.Entity;
- using Exam.Infrastructure.Enums;
- using Exam.Infrastructure.Extensions;
- using Exam.Insfrastructure.Service.Service;
- using Exam.Repository.Sqlsugar.Repositories;
- using Exam.Share.ViewResponses.Train;
- using Hotline.Application.Exam.Core.Constants;
- using Hotline.Application.Exam.Core.Extensions;
- using Hotline.Application.Exam.Core.Utilities;
- using Hotline.Application.Exam.Extensions;
- using Hotline.Application.Exam.Interface.Train;
- using Hotline.Application.Exam.QueryExtensions.Trains;
- using Hotline.Exams.Questions;
- using Hotline.Exams.TestPapers;
- using Hotline.Exams.Trains;
- using Hotline.Repository.SqlSugar;
- using Hotline.Repository.SqlSugar.DataPermissions;
- using Hotline.Repository.SqlSugar.Exam.Core.Constants;
- using Hotline.Repository.SqlSugar.Exam.Interfaces.Questions;
- using Hotline.Repository.SqlSugar.Exam.Interfaces.Trains;
- using Hotline.Repository.SqlSugar.Extensions;
- using Hotline.Repository.SqlSugar.Interface;
- using Hotline.Share.Dtos.Questions;
- using Hotline.Share.Dtos.Trains;
- using Hotline.Share.Requests.Train;
- using JiebaNet.Segmenter.Common;
- using MapsterMapper;
- using SqlSugar;
- using XF.Domain.Authentications;
- using XF.Domain.Dependency;
- namespace Hotline.Application.Exam.Service.Trains
- {
- public class TrainTemplateService : ApiService<ExamTrainTemplate, AddTrainTemplateDto, UpdateTrainTemplateDto, HotlineDbContext>, ITrainTemplateService, IScopeDependency
- {
- private readonly ITrainTemplateRepository _repository;
- private readonly ITrainKnowladgeRepository _trainKnowladgeRepository;
- private readonly ITrainPracticeRepository _trainPracticeRepository;
- private readonly ITrainPracticeOptionsRepository _trainPracticeOptionsRepository;
- private readonly ITrainPracticeSourcewareRepository _trainPracticeSourcewareRepository;
- private readonly ITrainPracticeKnowladgeRepository _trainPracticeKnowladgeRepository;
- private readonly IDataPermissionFilterBuilder _dataPermissionFilterBuilder;
- private readonly IServiceProvider _serviceProvider;
- private readonly ISessionContext _sessionContext;
- private readonly IMapper _mapper;
- private AddTrainTemplateDto _addTrainTemplateDto;
- public TrainTemplateService(ITrainTemplateRepository repository,
- ITrainKnowladgeRepository trainKnowladgeRepository,
- ITrainPracticeRepository trainPracticeRepository,
- ITrainPracticeOptionsRepository trainPracticeOptionsRepository,
- ITrainPracticeSourcewareRepository trainPracticeSourcewareRepository,
- ITrainPracticeKnowladgeRepository trainPracticeKnowladgeRepository,
- IDataPermissionFilterBuilder dataPermissionFilterBuilder, IServiceProvider serviceProvider,
- ISessionContext sessionContext,
- IMapper mapper) : base(repository, mapper)
- {
- _repository = repository;
- this._trainKnowladgeRepository = trainKnowladgeRepository;
- this._trainPracticeRepository = trainPracticeRepository;
- this._trainPracticeOptionsRepository = trainPracticeOptionsRepository;
- this._trainPracticeSourcewareRepository = trainPracticeSourcewareRepository;
- this._trainPracticeKnowladgeRepository = trainPracticeKnowladgeRepository;
- this._dataPermissionFilterBuilder = dataPermissionFilterBuilder;
- this._serviceProvider = serviceProvider;
- this._sessionContext = sessionContext;
- this._mapper = mapper;
- }
- #region public method
- public async Task<TrainTemplateDto> GetAsync(EntityQueryRequest entityQueryRequest)
- {
- var trainTemplate = await _repository.GetAsync(entityQueryRequest.Id);
- var trainTemplateDto = _mapper.Map<TrainTemplateDto>(trainTemplate);
- trainTemplateDto.TrainKnowladges = await GetKnowladges(entityQueryRequest);
- trainTemplateDto.TrainPracticeDtos = await GetTrainPractices(entityQueryRequest);
- return trainTemplateDto;
- }
- public async Task<(int, List<TrainTemplateViewResponse>)> GetListAsync(TrainTemplatePagedRequest queryRequest)
- {
- SqlSugar.ISugarQueryable<TrainTemplateViewResponse> queryResult = QueryRequest(queryRequest);
- var total = await queryResult.CountAsync();
- var items = await queryResult.ToListAsync();
- return (total, items);
- }
- public async Task<PageViewResponse<TrainTemplateViewResponse>> GetPagedListAsync(TrainTemplatePagedRequest queryRequest)
- {
- SqlSugar.ISugarQueryable<TrainTemplateViewResponse> queryResult = QueryRequest(queryRequest);
- var total = await queryResult.CountAsync();
- var items = await queryResult.ToPageListAsync(queryRequest.PageIndex, queryRequest.PageSize);
- return new TrainTemplatePageViewResponse
- {
- Items = items,
- Pagination = new Pagination(queryRequest.PageIndex, queryRequest.PageSize, total)
- };
- }
- public override async Task<string> AddAsync(AddTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- base.StartTran();
- actionRequest.Code = await GenerateCode(ExamBusiConstants.TrainTemplateCode,3);
- var id = await base.AddAsync(actionRequest, cancellationToken);
- ResolveTemplateId(actionRequest, id);
- base.Entity.TrainKnowladges = await AddTrainKnowladgesAsync(actionRequest, cancellationToken);
- base.Entity.TrainPractices = await AddTrainPracticesAsync(actionRequest, cancellationToken);
- var trainPracticeOptions = await AddTrainPracticeOptionsAsync(actionRequest, cancellationToken);
- var trainPracticeKnowladges = await AddTrainPracticeKnowladgeAsync(actionRequest, cancellationToken);
- base.Entity.TrainPractices.ForEach(item =>
- {
- item.TrainPracticeKnowladges = trainPracticeKnowladges.Where(x => item.Id == x.TrainPracticeId).ToList();
- });
- var trainPracticeSourcewares = await AddTrainPracticeSourcewareAsync(actionRequest, cancellationToken);
- base.Entity.TrainPractices.ForEach(item =>
- {
- item.TrainPracticeKnowladges = trainPracticeKnowladges.Where(x => item.Id == x.TrainPracticeId).ToList();
- item.TrainPracticeOptionses = trainPracticeOptions.Where(x => item.Id == x.TrainPracticeId).ToList();
- item.TrainPracticeSourcewares = trainPracticeSourcewares.Where(x => item.Id == x.TrainPracticeId).ToList();
- });
- await base.Complete(base.Entity, OperationConstant.Create);
- return id;
- }
- public override async Task UpdateAsync(UpdateTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- base.StartTran();
- await base.UpdateAsync(actionRequest, cancellationToken);
- _addTrainTemplateDto = _mapper.Map<AddTrainTemplateDto>(actionRequest);
- base.Entity.TrainKnowladges = await ModifyTrainKnowladgeAsync(actionRequest, cancellationToken);
- base.Entity.TrainPractices = await ModifyTrainPracticesAsync(actionRequest, cancellationToken);
- var trainPracticeOptions = await ModifyTrainPracticeOptionsAsync(actionRequest, cancellationToken);
- var trainPracticeKnowladges = await ModifyTrainPracticeKnowladgeAsync(actionRequest, cancellationToken);
- var trainPracticeSourcewares = await ModifyTrainPracticeSourcewareAsync(actionRequest, cancellationToken);
- base.Entity.TrainPractices.ForEach(item =>
- {
- item.TrainPracticeOptionses = trainPracticeOptions.Where(x => item.Id == x.TrainPracticeId).ToList();
- item.TrainPracticeKnowladges = trainPracticeKnowladges.Where(x => item.Id == x.TrainPracticeId).ToList();
- item.TrainPracticeSourcewares = trainPracticeSourcewares.Where(x => item.Id == x.TrainPracticeId).ToList();
- });
- await base.Complete(base.Entity, OperationConstant.Update);
- }
- public override async Task DeleteAsync(EntityQueryRequest entityQueryRequest, CancellationToken cancellationToken)
- {
- await base.DeleteAsync(entityQueryRequest, cancellationToken);
- var tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<ExamTrainKnowladge>()
- .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.TrainTemplateId == entityQueryRequest.Id)
- .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.TrainTemplateId))
- .ToEntityQueryRequest<ExamTrainKnowladge>();
- await DeleteTrainKnowladgesAsync(tmpEntityQueryRequest, cancellationToken);
- tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<ExamTrainPractice>()
- .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.TrainTemplateId == entityQueryRequest.Id)
- .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.TrainTemplateId))
- .ToEntityQueryRequest<ExamTrainPractice>();
- await DeleteTrainPracticeAsync(tmpEntityQueryRequest, cancellationToken);
- }
- #endregion
- #region private method
- private async Task<List<TrainKnowladgeDto>> GetKnowladges(EntityQueryRequest entityQueryRequest)
- {
- var trainKnowladgeTable = _trainKnowladgeRepository.Queryable().Where(x => x.TrainTemplateId == entityQueryRequest.Id);
- var knowledgeTable = new ExamRepository<KnowledgeBase.Knowledge>(_uow, _dataPermissionFilterBuilder, _serviceProvider).Queryable();
- var queseryResult = trainKnowladgeTable.InnerJoin(knowledgeTable, (t, k) => t.KnowladgeId == k.Id).Select((t, k) => new TrainKnowladgeDto
- {
- Id = t.Id,
- KnowladgeId = t.KnowladgeId,
- Title = k.Title
- });
- return await queseryResult.ToListAsync();
- }
- private async Task<List<ExamTrainPracticeOptions>> ModifyTrainPracticeOptionsAsync(UpdateTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- if (actionRequest.TrainPracticeDtos == null) return null;
- var questionIds = actionRequest.TrainPracticeDtos.Where(x => x.QuestionType.CheckSelectType()).Select(x => x.QuestionId).ToList();
- if (questionIds.IsNotNullOrEmpty())
- {
- var entityQueryRequest = new EntityQueryRequest
- {
- Expression = ExpressionableUtility.CreateExpression<ExamTrainPracticeOptions>()
- .AndIF(questionIds.IsNotNullOrEmpty(), x => questionIds.Contains(x.QuestionId)).ToExpression()
- };
- await DeleteTrainPracticeOptionsAsync(entityQueryRequest, cancellationToken);
- }
- return await AddTrainPracticeOptionsAsync(_addTrainTemplateDto, cancellationToken);
- }
- private async Task DeleteTrainPracticeOptionsAsync(EntityQueryRequest entityQueryRequest, CancellationToken cancellationToken)
- {
- await _trainPracticeOptionsRepository.DeleteWithValidateAsync(entityQueryRequest, cancellationToken);
- }
- private async Task<List<ExamTrainPracticeSourceware>> AddTrainPracticeSourcewareAsync(AddTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- var questionSourcewareRepository = new ExamRepository<ExamQuestionSourceware>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
- var quesitonIds = actionRequest.TrainPracticeDtos.Select(x => x.QuestionId);
- var questionSourceware = await questionSourcewareRepository.Queryable().Where(x => quesitonIds.Contains(x.QuestionId)).ToListAsync();
- var trainPracticeSourcewares = new List<ExamTrainPracticeSourceware>();
- actionRequest.TrainPracticeDtos.Where(x => x.QuestionType.CheckSelectType()).ToList().ForEach(x =>
- {
- var options = questionSourceware.Where(n => x.QuestionId == n.QuestionId).ToList();
- if (options != null)
- {
- options.ForEach(item =>
- {
- var trainPracticeSourceware = _mapper.Map<ExamQuestionSourceware, ExamTrainPracticeSourceware>(item);
- trainPracticeSourceware.ToInsert(_sessionContext);
- trainPracticeSourcewares.Add(trainPracticeSourceware);
- });
- }
- });
- await _trainPracticeSourcewareRepository.ValidateAddAsync(trainPracticeSourcewares, cancellationToken);
- return trainPracticeSourcewares;
- }
- private async Task<List<ExamTrainPracticeKnowladge>> AddTrainPracticeKnowladgeAsync(AddTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- var questionKnowladgeRepository = new ExamRepository<ExamQuestionKnowladge>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
- var quesitonIds = actionRequest.TrainPracticeDtos.Select(x => x.QuestionId);
- var questionKnowladge = await questionKnowladgeRepository.Queryable().Where(x => quesitonIds.Contains(x.QuestionId)).ToListAsync();
- var trainPracticeKnowladges = new List<ExamTrainPracticeKnowladge>();
- actionRequest.TrainPracticeDtos.Where(x => x.QuestionType.CheckSelectType()).ToList().ForEach(x =>
- {
- var trainPractice = base.Entity?.TrainPractices.FirstOrDefault(n => n.QuestionId == x.QuestionId) ?? null;
- var options = questionKnowladge.Where(n => x.QuestionId == n.QuestionId).ToList();
- if (options != null)
- {
- options.ForEach(item =>
- {
- var trainPracticeKnowladge = _mapper.Map<ExamQuestionKnowladge, ExamTrainPracticeKnowladge>(item);
- trainPracticeKnowladge.TrainPracticeId = trainPractice?.Id;
- trainPracticeKnowladge.ToInsert(_sessionContext);
- trainPracticeKnowladges.Add(trainPracticeKnowladge);
- });
- }
- });
- await _trainPracticeKnowladgeRepository.ValidateAddAsync(trainPracticeKnowladges, cancellationToken);
- return trainPracticeKnowladges;
- }
- private async Task<List<ExamTrainPracticeSourceware>> ModifyTrainPracticeSourcewareAsync(UpdateTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- if (actionRequest.TrainPracticeDtos == null) return null;
- var questionIds = actionRequest.TrainPracticeDtos.Where(x => x.QuestionType.CheckSelectType()).Select(x => x.QuestionId).ToList();
- if (questionIds.IsNotNullOrEmpty())
- {
- var entityQueryRequest = new EntityQueryRequest
- {
- Expression = ExpressionableUtility.CreateExpression<ExamTrainPracticeSourceware>()
- .AndIF(questionIds.IsNotNullOrEmpty(), x => questionIds.Contains(x.QuestionId)).ToExpression()
- };
- await DeleteTrainPracticeSourcewareAsync(entityQueryRequest, cancellationToken);
- }
- return await AddTrainPracticeSourcewareAsync(_addTrainTemplateDto, cancellationToken);
- }
- private async Task DeleteTrainPracticeSourcewareAsync(EntityQueryRequest entityQueryRequest, CancellationToken cancellationToken)
- {
- await _trainPracticeSourcewareRepository.DeleteWithValidateAsync(entityQueryRequest, cancellationToken);
- }
- private async Task<List<ExamTrainPracticeKnowladge>> ModifyTrainPracticeKnowladgeAsync(UpdateTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- if (actionRequest.TrainPracticeDtos == null) return null;
- var questionIds = actionRequest.TrainPracticeDtos.Where(x => x.QuestionType.CheckSelectType()).Select(x => x.QuestionId).ToList();
- if (questionIds.IsNotNullOrEmpty())
- {
- var entityQueryRequest = new EntityQueryRequest
- {
- Expression = ExpressionableUtility.CreateExpression<ExamTrainPracticeKnowladge>()
- .AndIF(questionIds.IsNotNullOrEmpty(), x => questionIds.Contains(x.QuestionId)).ToExpression()
- };
- await DeleteTrainPracticeKnowladgeAsync(entityQueryRequest, cancellationToken);
- }
- return await AddTrainPracticeKnowladgeAsync(_addTrainTemplateDto, cancellationToken);
- }
- private async Task DeleteTrainPracticeKnowladgeAsync(EntityQueryRequest entityQueryRequest, CancellationToken cancellationToken)
- {
- await _trainPracticeKnowladgeRepository.DeleteWithValidateAsync(entityQueryRequest, cancellationToken);
- }
- private async Task<List<ExamTrainPracticeOptions>> AddTrainPracticeOptionsAsync(AddTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- var questionOptionRepository = new ExamRepository<ExamQuestionOptions>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
- var quesitonIds = actionRequest.TrainPracticeDtos.Select(x => x.QuestionId);
- var questionOptions = await questionOptionRepository.Queryable().Where(x => quesitonIds.Contains(x.QuestionId)).ToListAsync();
- var trainPracticeOptions = new List<ExamTrainPracticeOptions>();
- actionRequest.TrainPracticeDtos.Where(x => x.QuestionType.CheckSelectType()).ToList().ForEach(x =>
- {
- var trainPractice = base.Entity?.TrainPractices.FirstOrDefault(n => n.QuestionId == x.QuestionId) ?? null;
- var options = questionOptions.Where(n => x.QuestionId == n.QuestionId).ToList();
- if (options != null)
- {
- options.ForEach(item =>
- {
- var trainPracticeOption = _mapper.Map<ExamQuestionOptions, ExamTrainPracticeOptions>(item);
- trainPracticeOption.TrainPracticeId = trainPractice?.Id;
- trainPracticeOption.QuestionOptionId = item.Id;
- trainPracticeOption.ToInsert(_sessionContext);
- trainPracticeOptions.Add(trainPracticeOption);
- });
- }
- });
- await _trainPracticeOptionsRepository.ValidateAddAsync(trainPracticeOptions, cancellationToken);
- return trainPracticeOptions;
- }
- private void ResolveTemplateId(AddTrainTemplateDto actionRequest, string id)
- {
- if (actionRequest.TrainKnowladges != null)
- {
- actionRequest.TrainKnowladges.ForEach(x => x.TrainTemplateId = id);
- }
- if (actionRequest.TrainPracticeDtos != null)
- {
- actionRequest.TrainPracticeDtos.ForEach(x => x.TrainTemplateId = id);
- }
- }
- private async Task<List<TrainPracticeDto>> GetTrainPractices(EntityQueryRequest entityQueryRequest)
- {
- var questionTable = new ExamRepository<ExamQuestion>(_uow, _dataPermissionFilterBuilder, _serviceProvider).Queryable();
- var trainPracticeTable = _trainPracticeRepository.Queryable().Where(x => x.TrainTemplateId == entityQueryRequest.Id);
- var trainPractices = trainPracticeTable.InnerJoin(questionTable, (t, q) => t.QuestionId == q.Id).Select((t, q) => new TrainPracticeDto
- {
- Id = t.Id,
- QuestionId = t.QuestionId,
- QuestionType = q.QuestionType,
- DifficultyLevel = q.DifficultyLevel,
- Title = q.Title
- });
- return await trainPractices.ToListAsync();
- }
- private SqlSugar.ISugarQueryable<TrainTemplateViewResponse> QueryRequest(TrainTemplatePagedRequest queryRequest)
- {
- var expression = queryRequest.GetExpression();
- var queryable = _repository.Queryable().Where(expression);
- var queryResult = queryable.Select(m => new TrainTemplateViewResponse
- {
- Id = m.Id,
- Code = m.Code,
- Name = m.Name,
- IsContainsPractice = m.IsContainsPractice,
- SortIndex = m.SortIndex,
- Status = m.Status,
- CreationTime = m.CreationTime,
- CreatorName = m.CreatorName,
- CreatorOrgName = m.CreatorOrgName
- });
- return queryResult;
- }
- private async Task<List<ExamTrainPractice>> AddTrainPracticesAsync(AddTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- if (actionRequest.TrainPracticeDtos != null)
- {
- actionRequest.TrainPracticeDtos.ResolveOperationStatus();
- var trainPracticeDtos = actionRequest.TrainPracticeDtos.Where(x => x.OperationStatus == EEOperationStatus.Add).ToList();
- var trainPractices = _mapper.Map<List<ExamTrainPractice>>(trainPracticeDtos);
- //TODO:排序
- var sortIndex = 0;
- trainPractices.ForEach(x =>
- {
- x.SortIndex = sortIndex + 1;
- });
- trainPractices.ToInsert(_sessionContext);
- await _trainPracticeRepository.ValidateAddAsync(trainPractices, cancellationToken);
- return trainPractices;
- }
- return null;
- }
- private async Task<List<ExamTrainKnowladge>> AddTrainKnowladgesAsync(AddTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- if (actionRequest.TrainKnowladges != null)
- {
- actionRequest.TrainKnowladges.ResolveOperationStatus();
- var trainKnowladgeDtos = actionRequest.TrainKnowladges.Where(x => x.OperationStatus == EEOperationStatus.Add).ToList();
- var trainKnowladges = _mapper.Map<List<ExamTrainKnowladge>>(trainKnowladgeDtos);
- trainKnowladges.ToInsert(_sessionContext);
- await _trainKnowladgeRepository.ValidateAddAsync(trainKnowladges, cancellationToken);
- return trainKnowladges;
- }
- return null;
- }
- private async Task<List<ExamTrainPractice>> ModifyTrainPracticesAsync(UpdateTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- var trainPractices = new List<ExamTrainPractice>();
- trainPractices.AddRangeExt(await AddTrainPracticesAsync(_addTrainTemplateDto, cancellationToken));
- trainPractices.AddRangeExt(await UpdateTrainPracticesAsync(actionRequest, cancellationToken));
- if (actionRequest.TrainPracticeDtos != null)
- {
- var ids = actionRequest.TrainPracticeDtos.Where(x => x.OperationStatus == EEOperationStatus.Delete).Select(x => x.Id).ToList();
- if (ids.IsNotNullOrEmpty())
- {
- var entityQueryRequest = new EntityQueryRequest
- {
- Expression = ExpressionableUtility.CreateExpression<ExamTrainPractice>()
- .AndIF(ids.IsNotEmpty(), x => ids.Contains(x.Id))
- .ToExpression()
- };
- await DeleteTrainPracticeAsync(entityQueryRequest, cancellationToken);
- }
- }
- return trainPractices;
- }
- private async Task DeleteTrainPracticeAsync(EntityQueryRequest entityQueryRequest, CancellationToken cancellationToken)
- {
- await _trainPracticeRepository.DeleteWithValidateAsync(entityQueryRequest, cancellationToken);
- }
- private async Task<List<ExamTrainPractice>> UpdateTrainPracticesAsync(UpdateTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- if (actionRequest.TrainPracticeDtos == null) return null;
- actionRequest.TrainPracticeDtos.ResolveOperationStatus();
- var trainPracticeDtos = actionRequest.TrainPracticeDtos.Where(x => x.OperationStatus == EEOperationStatus.Update).ToList();
- var ids = trainPracticeDtos.Select(x => x.Id);
- var trainPractices = await _trainPracticeRepository.Queryable().Where(x => ids.Contains(x.Id)).ToListAsync();
- trainPractices = _mapper.Map<List<UpdateTrainPracticeDto>, List<ExamTrainPractice>>(trainPracticeDtos, trainPractices);
- trainPractices.ToUpdate(_sessionContext);
- await _trainPracticeRepository.ValidateUpdateAsync(trainPractices, cancellationToken);
- return trainPractices;
- }
- private async Task<List<ExamTrainKnowladge>> ModifyTrainKnowladgeAsync(UpdateTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- var trainKnowladges = new List<ExamTrainKnowladge>();
- trainKnowladges.AddRangeExt(await AddTrainKnowladgesAsync(_addTrainTemplateDto, cancellationToken));
- trainKnowladges.AddRangeExt(await UpdateTrainKnowladgesAsync(actionRequest, cancellationToken));
- if (actionRequest.TrainKnowladges != null)
- {
- var ids = actionRequest.TrainKnowladges.Where(x => x.OperationStatus == EEOperationStatus.Delete).Select(x => x.Id).ToList();
- if (ids.IsNotNullOrEmpty())
- {
- var entityQueryRequest = new EntityQueryRequest
- {
- Expression = ExpressionableUtility.CreateExpression<ExamTrainKnowladge>()
- .AndIF(ids.IsNotEmpty(), x => ids.Contains(x.Id))
- .ToExpression()
- };
- await DeleteTrainKnowladgesAsync(entityQueryRequest, cancellationToken);
- }
-
- }
- return trainKnowladges;
- }
- private async Task DeleteTrainKnowladgesAsync(EntityQueryRequest entityQueryRequest, CancellationToken cancellationToken)
- {
- await _trainKnowladgeRepository.DeleteWithValidateAsync(entityQueryRequest, cancellationToken);
- }
- private async Task<List<ExamTrainKnowladge>> UpdateTrainKnowladgesAsync(UpdateTrainTemplateDto actionRequest, CancellationToken cancellationToken)
- {
- if (actionRequest.TrainKnowladges == null) return null;
- actionRequest.TrainKnowladges.ResolveOperationStatus();
- var trainKnowladgeDtos = actionRequest.TrainKnowladges.Where(x => x.OperationStatus == EEOperationStatus.Update).ToList();
- var ids = trainKnowladgeDtos.Select(x => x.Id);
- var trainKnowladges = await _trainKnowladgeRepository.Queryable().Where(x => ids.Contains(x.Id)).ToListAsync();
- trainKnowladges = _mapper.Map<List<UpdateTrainKnowladgeDto>, List<ExamTrainKnowladge>>(trainKnowladgeDtos, trainKnowladges);
- trainKnowladges.ToUpdate(_sessionContext);
- await _trainKnowladgeRepository.ValidateUpdateAsync(trainKnowladges, cancellationToken);
- return trainKnowladges;
- }
- private async Task<string> GenerateCode(string codePrefix, int length)
- {
- var trainTemplate = await _repository.Queryable().Where(x => x.CreationTime.Date == DateTime.Now.Date).OrderByDescending(x=>x.CreationTime).FirstAsync();
- var code = string.Empty;
- if (trainTemplate != null)
- {
- code = trainTemplate.Code;
- }
- code = CodeUtility.GenerateCode(codePrefix,length,code);
- return code;
- }
- #endregion
- #region protected method
- protected override async Task CompleteAdd(ExamTrainTemplate entity)
- {
- await base.AddNav(entity)
- .Include(x => x.TrainKnowladges)
- .Include(x => x.TrainPractices)
- .ThenInclude(x => x.TrainPracticeKnowladges)
- .Include(x => x.TrainPractices, new InsertNavOptions
- {
- OneToManyIfExistsNoInsert = true
- })
- .ThenInclude(x => x.TrainPracticeOptionses)
- .Include(x => x.TrainPractices, new InsertNavOptions
- {
- OneToManyIfExistsNoInsert = true
- })
- .ThenInclude(x => x.TrainPracticeSourcewares).ExecuteCommandAsync();
- }
- protected override async Task CompleteUpdate(ExamTrainTemplate entity)
- {
- await base.UpdateNav(entity)
- .Include(x => x.TrainKnowladges)
- .Include(x => x.TrainPractices)
- .ThenInclude(x => x.TrainPracticeKnowladges)
- .Include(x => x.TrainPractices, new UpdateNavOptions
- {
- OneToManyInsertOrUpdate = true
- })
- .ThenInclude(x => x.TrainPracticeOptionses)
- .Include(x => x.TrainPractices, new UpdateNavOptions
- {
- OneToManyInsertOrUpdate = true
- })
- .ThenInclude(x => x.TrainPracticeSourcewares).ExecuteCommandAsync();
- }
- #endregion
- }
- }
|