public override async Task Process(Message message) { JobParameters parameters = message; string specificationId = parameters.SpecificationId; string fundingLineCode = parameters.FundingLineCode; string fundingStreamId = parameters.FundingStreamId; string fundingPeriodId = parameters.FundingPeriodId; FundingLineCsvGeneratorJobType jobType = parameters.JobType; CsvFileInfo fileInfo = new CsvFileInfo(_fileSystemCacheSettings.Path, jobType, specificationId, fundingLineCode, fundingStreamId, fundingPeriodId); string temporaryPath = fileInfo.TemporaryPath; EnsureFileIsNew(temporaryPath); IFundingLineCsvTransform fundingLineCsvTransform = _transformServiceLocator.GetService(jobType); IFundingLineCsvBatchProcessor fundingLineCsvBatchProcessor = _batchProcessorServiceLocator.GetService(jobType); fundingLineCsvTransform.FundingLineCode = fundingLineCode; bool processedResults = await fundingLineCsvBatchProcessor.GenerateCsv(jobType, specificationId, fundingPeriodId, temporaryPath, fundingLineCsvTransform, fundingLineCode, fundingStreamId); if (!processedResults) { _logger.Information( $"Did not create a new csv report as no providers matched for the job type {jobType} in the specification {specificationId}" + $" and funding line code {fundingLineCode} and funding stream id {fundingStreamId}"); return; } ICloudBlob blob = _blobClient.GetBlockBlobReference(fileInfo.FileName, PublishedFundingReportContainerName); blob.Properties.ContentDisposition = fileInfo.ContentDisposition; await using (Stream csvFileStream = _fileSystemAccess.OpenRead(temporaryPath)) { await _blobClientPolicy.ExecuteAsync(() => UploadBlob(blob, csvFileStream, parameters.ToDictionary())); } }