private async Task <Tuple <IList <Merchant>, IList <Merchant> > > ProcessMerchantFileAsync(MemoryStream memoryStream) { IList <Merchant> lstImportedMerchants = null; Log.Info($"Importing data from {merchantFileType.ToString()}"); MerchantFileProcessor merchantFileProcessor = MerchantProcessorFactory.GetMerchantFileProcessor(merchantFileName); if (merchantFileType == MerchantFileType.MasterCardAuth) { lstImportedMerchants = await Task.Run(() => merchantFileProcessor.ImportMasterCardAuthFile(memoryStream)).ConfigureAwait(false); } else if (merchantFileType == MerchantFileType.MasterCardClearing) { lstImportedMerchants = await Task.Run(() => merchantFileProcessor.ImportMasterCardClearingFile(memoryStream)).ConfigureAwait(false); } if (lstImportedMerchants == null || !lstImportedMerchants.Any()) { throw new Exception($"Error in processing the {merchantFileType.ToString()} file."); } Log.Info($"Total unique records imported from {merchantFileType.ToString()} is {lstImportedMerchants.Count}"); Log.Info($"Getting all merchants for provider {provider.Id} from db"); merchantsInDb = await EarnRepository.Instance.GetMerchantsForProviderAsync(provider.Id).ConfigureAwait(false); Log.Info($"Got {merchantsInDb.Count()} merchant entries for provider {provider.Id} from db"); Tuple <IList <Merchant>, IList <Merchant> > lstMerchants = await Task.Run(() => AddOrUpdateMerchant(lstImportedMerchants)).ConfigureAwait(false); return(lstMerchants); }
private async Task <Tuple <IList <Merchant>, IList <Merchant> > > ProcessMerchantFileAsync(MemoryStream memoryStream) { IList <Merchant> importedMerchants = null; MerchantFileProcessor merchantFileProcessor = MerchantProcessorFactory.GetMerchantFileProcessor(merchantFileName); importedMerchants = merchantFileProcessor.ImportAmexMidFile(memoryStream); if (importedMerchants == null || !importedMerchants.Any()) { throw new Exception($"ProvisionAmexMidsJob: An error occurred while processing Amex import file - No Data"); } Log.Info($"ProvisionAmexMidsJob: Getting all merchants for provider {provider.Id} from db"); merchantsInDb = await EarnRepository.Instance.GetMerchantsForProviderAsync(provider.Id).ConfigureAwait(false); Log.Info($"ProvisionAmexMidsJob: Got {merchantsInDb.Count()} merchant entries for provider {provider.Id} from db"); // list of merchants to add and merchants to update Tuple <IList <Merchant>, IList <Merchant> > sortedMerchants = AddOrUpdateMerchant(importedMerchants); return(sortedMerchants); }
private async Task <IList <Merchant> > ProcessMerchantFileAsync(MemoryStream memoryStream) { IList <Merchant> lstImportedMerchants = null; MerchantFileProcessor merchantFileProcessor = MerchantProcessorFactory.GetMerchantFileProcessor(merchantFileName); lstImportedMerchants = await Task.Run(() => merchantFileProcessor.ImportVisaMidFile(memoryStream)).ConfigureAwait(false); if (lstImportedMerchants == null || !lstImportedMerchants.Any()) { throw new Exception($"Error in processing the visa mid file."); } Log.Info($"Total unique records imported from the visa mid file is {lstImportedMerchants.Count}"); Log.Info($"Getting all merchants for provider {provider.Id} from db"); merchantsInDb = await EarnRepository.Instance.GetMerchantsForProviderAsync(provider.Id).ConfigureAwait(false); Log.Info($"Got {merchantsInDb.Count()} merchant entries for provider {provider.Id} from db"); IList <Merchant> lstMerchants = await Task.Run(() => UpdateVisaPayment(lstImportedMerchants)).ConfigureAwait(false); return(lstMerchants); }
public async Task ExecuteAsync(ScheduledJobInfo scheduledJobInfo) { await ValidatePayload(scheduledJobInfo).ConfigureAwait(false); IDictionary <string, string> payload = scheduledJobInfo.JobPayload; string merchantFileName = payload[JobConstants.BlobName]; string blobContainer = payload[JobConstants.ContainerName]; string providerId = payload[JobConstants.ProviderId]; MemoryStream ms = await GetMerchantsFromBlobAsync(merchantFileName, blobContainer).ConfigureAwait(false); MerchantFileProcessor merchantFileProcessor = MerchantProcessorFactory.GetMerchantFileProcessor(merchantFileName); Tuple <string, IList <Merchant> > provisioningData = merchantFileProcessor.ImportMasterCardProvisioningFile(ms); if (provisioningData == null) { throw new Exception("Error in processing the mastercard provisioning file. Unable to provision merchants"); } string masterCardMerchantsProvisioningDate = provisioningData.Item1; IList <Merchant> lstProvisionedMerchants = provisioningData.Item2; if (lstProvisionedMerchants.Any()) { //Update the provider with the MasterCard merchant provisioning file date info. This is needed //at the time of exporting the file back to MasterCard. if (provider.ExtendedAttributes == null) { provider.ExtendedAttributes = new Dictionary <string, string>(); } if (!provider.ExtendedAttributes.ContainsKey(MerchantConstants.MCProvisioningDate)) { provider.ExtendedAttributes.Add(MerchantConstants.MCProvisioningDate, masterCardMerchantsProvisioningDate); } else { provider.ExtendedAttributes[MerchantConstants.MCProvisioningDate] = masterCardMerchantsProvisioningDate; } await EarnRepository.Instance.UpdateAsync <Provider>(new List <Provider> { provider }); Log.Info($"Updated the provider {providerId} with the MasterCard provisioning date"); //Add the new merchants to db. //TODO: As of now, the code can handle only new merchant additions from the MC file. //Need to add support to handle updates and deletes foreach (Merchant merchant in lstProvisionedMerchants) { merchant.Id = Guid.NewGuid().ToString(); merchant.ProviderId = provider.Id; GeoCodeMerchantLocation(merchant); if (merchant.ExtendedAttributes == null) { merchant.ExtendedAttributes = new Dictionary <string, string>(); } string masterCardId = MasterCardIdGenerator.GetUniqueId(provider, merchant, "P"); Log.Info($"Generated mastercardid {masterCardId} for merchant {merchant.Name}"); merchant.ExtendedAttributes.Add(MerchantConstants.MCID, masterCardId); } Log.Info($"Total Merchants to add to db {lstProvisionedMerchants.Count}"); await EarnRepository.Instance.AddMerchantsInBatchAsync(lstProvisionedMerchants); Log.Info($"Successfully added {lstProvisionedMerchants.Count} merchants to db"); scheduledJobInfo.JobCompletedTime = DateTime.UtcNow; } else { Log.Warn("Provisioning file from MasterCard has 0 merchants"); } }