/// <summary>
 /// Конвертировать из модели базы данных в запрос
 /// </summary>
 public static PackageDataRequestServer PackageDataToRequest(PackageDataEntity packageDataEntity) =>
 packageDataEntity != null
         ? new PackageDataRequestServer(Guid.Parse(packageDataEntity.Id),
                                        ConvertingSettingsToRequest(packageDataEntity.ConvertingSettings),
                                        packageDataEntity.FileDataEntities.Select(FileDataToRequest).ToList(),
                                        packageDataEntity.AttemptingConvertCount)
         : PackageDataRequestServer.EmptyPackage;
Exemple #2
0
        /// <summary>
        /// Обновить модель базы данных на основе промежуточного ответа с данными
        /// </summary>
        public static void UpdateFileDataFromIntermediateResponse(PackageDataEntity packageDataEntity,
                                                                  FileDataResponseServer fileDataResponseServer)
        {
            if (CheckStatusProcessing.CompletedStatusProcessingProject.
                Contains(packageDataEntity.StatusProcessingProject))
            {
                return;
            }

            var fileDataEntity = packageDataEntity.FileDataEntities.First(fileData => fileData.FilePath == fileDataResponseServer.FilePath);

            UpdateFileDataFromResponse(fileDataEntity, fileDataResponseServer);
        }
 /// <summary>
 /// Конвертировать пакет в архивную версию базы данных
 /// </summary>
 public static PackageDataEntity PackageDataToArchive(PackageDataEntity packageDataEntity)
 {
     packageDataEntity.StatusProcessingProject = StatusProcessingProject.Archived;
     foreach (var fileDataEntity in packageDataEntity.FileDataEntities)
     {
         fileDataEntity.StatusProcessing         = StatusProcessing.Archive;
         fileDataEntity.FileDataSource           = null;
         fileDataEntity.FileDataSourceAdditional = null;
         foreach (var fileDataSourceEntity in fileDataEntity.FileDataSourceServerEntities)
         {
             fileDataSourceEntity.FileDataSource = null;
         }
     }
     return(packageDataEntity);
 }
Exemple #4
0
        /// <summary>
        /// Обновить модель базы данных на основе промежуточного ответа
        /// </summary>
        public static PackageDataEntity UpdatePackageDataFromShortResponse(PackageDataEntity packageDataEntity,
                                                                           PackageDataShortResponseServer packageDataShortResponse)
        {
            packageDataEntity.StatusProcessingProject = packageDataShortResponse.StatusProcessingProject;

            var filesDataIntermediateEntity = packageDataEntity.FileDataEntities.
                                              Join(packageDataShortResponse.FilesData,
                                                   fileEntity => fileEntity.FilePath,
                                                   filesIntermediateResponse => filesIntermediateResponse.FilePath,
                                                   UpdateFileDataFromShortResponse).
                                              ToList();

            packageDataEntity.FileDataEntities = filesDataIntermediateEntity;

            return(packageDataEntity);
        }
Exemple #5
0
        /// <summary>
        /// Проверка правильности загружаемого пакета
        /// </summary>
        private void ValidatePackage(IResultValue <PackageDataRequestServer> packageDataRequest,
                                     PackageDataEntity packageDataEntity, string identityServerName)
        {
            const int attemptingConvertCount = 2;

            if (packageDataRequest.OkStatus && packageDataEntity?.AttemptingConvertCount <= attemptingConvertCount)
            {
                packageDataEntity?.StartConverting(identityServerName);
            }
            else if (packageDataRequest.HasErrors && packageDataEntity?.AttemptingConvertCount <= attemptingConvertCount)
            {
                packageDataEntity?.AddAttemptingCount();
            }
            else
            {
                packageDataEntity?.ErrorConverting(identityServerName);
            }
        }
Exemple #6
0
        /// <summary>
        /// Обновить модель базы данных на основе окончательного ответа
        /// </summary>
        public static PackageDataEntity UpdatePackageDataFromResponse(PackageDataEntity packageDataEntity,
                                                                      PackageDataResponseServer packageDataResponse)
        {
            if (CheckStatusProcessing.CompletedStatusProcessingProject.
                Contains(packageDataEntity.StatusProcessingProject))
            {
                return(packageDataEntity);
            }

            packageDataEntity.StatusProcessingProject = packageDataResponse.StatusProcessingProject;
            var fileDataEntities = packageDataEntity.FileDataEntities.
                                   Join(packageDataResponse.FilesData,
                                        fileEntity => fileEntity.FilePath,
                                        fileResponse => fileResponse.FilePath,
                                        UpdateFileDataFromResponse).
                                   ToList();

            packageDataEntity.FileDataEntities = fileDataEntities;
            return(packageDataEntity);
        }
        /// <summary>
        /// Получить данные о количестве пакетов и файлов в очереди на конвертирование
        /// </summary>
        private static async Task <FilesQueueInfo> GetQueueCount(IUnitOfWork unitOfWork, PackageDataEntity packageDataEntity)
        {
            var packageData = unitOfWork.Session.Query <PackageDataEntity>().
                              Where(package => !CheckStatusProcessing.CompletedStatusProcessingProject.Contains(package.StatusProcessingProject) &&
                                    package.CreationDateTime < packageDataEntity.CreationDateTime);

            int packagesInQueueCount = await packageData.CountAsync();

            int filesInQueueCount = await packageData.SelectMany(package => package.FileDataEntities).
                                    Where(file => !CheckStatusProcessing.CompletedStatusProcessing.Contains(file.StatusProcessing)).
                                    CountAsync();

            return(new FilesQueueInfo(filesInQueueCount, packagesInQueueCount));
        }
 /// <summary>
 /// Конвертировать из модели базы данных в основной ответ
 /// </summary>
 public static PackageDataResponseClient PackageDataAccessToResponse(PackageDataEntity packageDataEntity) =>
 new PackageDataResponseClient(Guid.Parse(packageDataEntity.Id),
                               packageDataEntity.StatusProcessingProject,
                               packageDataEntity.FileDataEntities.Select(FileDataAccessToResponse).ToList());
 /// <summary>
 /// Конвертировать из модели базы данных в промежуточную
 /// </summary>
 public static PackageDataShortResponseClient PackageDataToIntermediateResponse(PackageDataEntity packageDataEntity,
                                                                                FilesQueueInfo filesQueueInfo) =>
 new PackageDataShortResponseClient(Guid.Parse(packageDataEntity.Id),
                                    packageDataEntity.StatusProcessingProject,
                                    packageDataEntity.FileDataEntities.Select(FileDataAccessToIntermediateResponse).ToList(),
                                    FilesQueueInfoToResponse(filesQueueInfo));
 /// <summary>
 /// Преобразовать в транспортную модель
 /// </summary>
 public static HistoryDataResponse ToResponse(PackageDataEntity package) =>
 new HistoryDataResponse(Guid.Parse(package.Id), package.CreationDateTime, package.IdentityLocalName,
                         package.StatusProcessingProject, package.FileDataEntities.Count);
Exemple #11
0
 /// <summary>
 /// Проверить статус пакета. При отмене - удалить
 /// </summary>
 private static async Task <bool> DeleteFilesDataOnAbortionStatus(IUnitOfWork unitOfWork, PackageDataEntity packageDataEntity)
 {
     if (packageDataEntity.StatusProcessingProject == StatusProcessingProject.Abort)
     {
         await unitOfWork.Session.DeleteAsync(packageDataEntity);
     }
     return(packageDataEntity.StatusProcessingProject == StatusProcessingProject.Abort);
 }