/// <summary> /// Отправить файлы для конвертации /// </summary> private async Task <IResultError> SendFilesToConverting(PackageDataRequestClient packageDataRequest) => await _wcfClientServiceFactory.ConvertingClientServiceFactory.UsingService(service => service.Operations.SendFiles(packageDataRequest)). WhereContinueAsyncBind(packageResult => packageResult.OkStatus, okFunc: packageResult => Task.FromResult(SendFilesToConvertingConnect(packageDataRequest, packageResult.Value)), badFunc: packageResult => packageResult. ResultVoidAsyncBind(_ => AbortPropertiesCommunication()). MapAsync(package => package.ToResult()));
/// <summary> /// Отправить файлы для конвертации после подтверждения сервера /// </summary> private IResultError SendFilesToConvertingConnect(PackageDataRequestClient packageDataRequest, PackageDataShortResponseClient packageDataResponse) => packageDataResponse. Void(_ => _loggerService.LogByObjects(LoggerLevel.Info, LoggerAction.Upload, ReflectionInfo.GetMethodBase(this), packageDataRequest.FilesData, packageDataRequest.Id.ToString())). Map(_ => _fileDataProcessingStatusMark.GetPackageStatusAfterSend(packageDataRequest, packageDataResponse)). Void(filesStatusAfterSending => _packageData.ChangeFilesStatus(filesStatusAfterSending)). Map(_ => new ResultError());
/// <summary> /// Пометить неотправленные файлы ошибкой и изменить статус отправленных файлов /// </summary> public PackageStatus GetPackageStatusAfterSend(PackageDataRequestClient packageDataRequest, PackageDataShortResponseClient packageDataShortResponse) { var filesNotFound = GetFilesNotFound(packageDataRequest?.FilesData); var filesChangedStatus = GetPackageStatusIntermediateResponse(packageDataShortResponse); var filesDataUnion = filesNotFound.FileStatus.UnionNotNull(filesChangedStatus.FileStatus); return(new PackageStatus(filesDataUnion, packageDataShortResponse?.StatusProcessingProject ?? StatusProcessingProject.Sending, filesChangedStatus.QueueStatus)); }
/// <summary> /// Добавить пакет в очередь на конвертирование в базу /// </summary> public async Task <Unit> QueueFilesData(PackageDataRequestClient packageDataRequest, string identityName) { using var unitOfWork = _container.Resolve <IUnitOfWork>(); await _accessService.UpdateLastClientAccess(identityName); var packageDataEntity = ConverterFilesDataEntitiesFromDtoClient.ToPackageData(packageDataRequest, identityName); await unitOfWork.Session.SaveAsync(packageDataEntity); await unitOfWork.CommitAsync(); return(Unit.Value); }
/// <summary> /// Конвертер пакета информации из трансферной модели в модель базы данных /// </summary> public static PackageDataEntity ToPackageData(PackageDataRequestClient packageData, string identityName) => new PackageDataEntity(packageData.Id.ToString(), StatusProcessingProject.InQueue, DateTimeService.GetDateTimeNow(), identityName, String.Empty, 0, packageData.FilesData.Select(ToFileData).ToList(), ConvertingSettingsToRequest(packageData.ConvertingSettings)). Void(package => { foreach (var fileData in package.FileDataEntities) { fileData.PackageDataEntity = package; } });
/// <summary> /// Проверить подпись /// </summary> public static IResultError ValidateSignature(PackageDataRequestClient packageDataRequestClient) => !String.IsNullOrWhiteSpace(packageDataRequestClient.ConvertingSettings.PersonId) ? new ResultError() : new ResultError(new ErrorCommon(ErrorConvertingType.SignatureNotFound, "Необходимо выбрать подпись в параметрах"));
/// <summary> /// Проверить файлы перед отправкой на корректность /// </summary> public static IResultError ValidatePackageData(PackageDataRequestClient packageDataRequestClient) => ValidateSignature(packageDataRequestClient);
/// <summary> /// Поставить файлы в очередь для обработки /// </summary> private async Task <Unit> QueueFilesData(PackageDataRequestClient packageDataRequest, string identityName) => await _filesDataClientService.QueueFilesData(packageDataRequest, identityName);
/// <summary> /// Сохранить файлы для конвертации в системе и отправить отчет /// </summary> public async Task <PackageDataShortResponseClient> SendFiles(PackageDataRequestClient packageDataRequest) => await QueueFilesData(packageDataRequest, Authentication.GetIdentityName()). MapBindAsync(_ => CheckFilesStatusProcessing(packageDataRequest.Id));