private void ExportCustomers() { try { SynchronizeStampEntity synchronizeStamp = null; DateTime stampTo = DateTime.Now; using (var uow = unitOfWorkProvider.CreateReadOnly()) { synchronizeStamp = synchronizeStampRepository.Get(SynchronizeCodes.Customer, SynchronizeDirectionType.Export); } DateTime stampFrom = synchronizeStamp?.DateTimeStamp ?? DateTime.MinValue; IReadOnlyCollection <int> customerIds = null; using (var uow = unitOfWorkProvider.CreateReadOnly()) { customerIds = customerRepository.GetModifiedCustomersIdsWithWebAccount(stampFrom, stampTo); } if (Enumerable.Any(customerIds)) { logger.LogDebug($"Starting synchronize {customerIds.Count} customers"); var parallelOptions = new ParallelOptions { MaxDegreeOfParallelism = 1 }; Parallel.ForEach(customerIds, parallelOptions, x => ProcessCustomerId(x, stampTo)); if (synchronizeStamp == null) { synchronizeStamp = SynchronizeStampFactory.Create(SynchronizeCodes.Customer, SynchronizeDirectionType.Export); } synchronizeStamp.DateTimeStamp = stampTo; using (var uow = unitOfWorkProvider.Create()) { synchronizeStampRepository.SaveOrUpdate(synchronizeStamp); uow.Commit(); } } } catch (Exception ex) { logger.LogError($"Synchronize customers to PrestaShop error: {ex.ToString()}"); } }
private void SynchronizeSuppliers() { SynchronizeStampEntity synchronizeStamp = null; long stampFrom = 0; long stampTo = 0; using (var uow = unitOfWorkProvider.CreateReadOnly()) { synchronizeStamp = synchronizeStampRepository.Get(SynchronizeCodes.Supplier, SynchronizeDirectionType.Export); stampTo = supplierRepository.GetDbtsAsync().Result; } stampFrom = synchronizeStamp?.Stamp ?? 0; if (stampFrom < stampTo) { DateTime startDt = DateTime.Now; logger.LogDebug("Starting synchronize suppliers"); IReadOnlyCollection <SupplierEntity> suppliers = null; using (var uow = unitOfWorkProvider.CreateReadOnly()) { suppliers = supplierRepository.GetAllModified(stampFrom, stampTo); } if (suppliers.Any()) { foreach (var supplier in suppliers) { ProcessSupplier(supplier); } } if (synchronizeStamp == null) { synchronizeStamp = SynchronizeStampFactory.Create(SynchronizeCodes.Supplier, SynchronizeDirectionType.Export); } synchronizeStamp.Stamp = stampTo; using (var uow = unitOfWorkProvider.Create()) { synchronizeStampRepository.SaveOrUpdate(synchronizeStamp); uow.Commit(); } logger.LogDebug($"Synchronize suppliers finished at {(DateTime.Now - startDt).TotalSeconds} sec."); } }
private void ImportCustomers() { logger.LogDebug("Starting import custopers from PrestaShop"); try { SynchronizeStampEntity synchronizeStamp = null; DateTime stampTo = DateTime.Now; using (var uow = unitOfWorkProvider.CreateReadOnly()) { synchronizeStamp = synchronizeStampRepository.Get(SynchronizeCodes.Customer, SynchronizeDirectionType.Import); } DateTime stampFrom = synchronizeStamp?.DateTimeStamp ?? DateTime.MinValue; IReadOnlyCollection <long> psCustomerIds = psCustomerRepository.GetAllModifiedBetween(stampFrom, stampTo); if (Enumerable.Any(psCustomerIds)) { logger.LogDebug($"Starting synchronize {psCustomerIds.Count} orders"); var parallelOptions = new ParallelOptions { MaxDegreeOfParallelism = 1 }; Parallel.ForEach(psCustomerIds, parallelOptions, x => ProcessPsCustomerId(x, stampTo)); if (synchronizeStamp == null) { synchronizeStamp = SynchronizeStampFactory.Create(SynchronizeCodes.Order, SynchronizeDirectionType.Import); } synchronizeStamp.DateTimeStamp = stampTo; using (var uow = unitOfWorkProvider.Create()) { synchronizeStampRepository.SaveOrUpdate(synchronizeStamp); uow.Commit(); } } } catch (Exception ex) { logger.LogError($"Synchronize orders from PrestaShop error: {ex}"); } }
private void SynchronizeProduct() { SynchronizeStampEntity synchronizeStamp = null; DateTime stampTo = DateTime.Now; using (var uow = unitOfWorkProvider.CreateReadOnly()) { synchronizeStamp = synchronizeStampRepository.Get(SynchronizeCodes.Product, SynchronizeDirectionType.Export); } DateTime stampFrom = synchronizeStamp?.DateTimeStamp ?? DateTime.MinValue; IReadOnlyCollection <ProductEntity> products = null; using (var uow = unitOfWorkProvider.CreateReadOnly()) { products = productRepository.GetAllReady(); } if (products.Any()) { logger.LogDebug("Starting synchronize products"); foreach (var product in products) { ProcessProduct(product); } if (synchronizeStamp == null) { synchronizeStamp = SynchronizeStampFactory.Create(SynchronizeCodes.Product, SynchronizeDirectionType.Export); } synchronizeStamp.DateTimeStamp = products.Max(x => x.ModificationDate); using (var uow = unitOfWorkProvider.Create()) { synchronizeStampRepository.SaveOrUpdate(synchronizeStamp); uow.Commit(); } logger.LogDebug($"Synchronize products finished at {(DateTime.Now - stampTo).TotalSeconds} sec."); } }
private void SynchronizeCategories() { SynchronizeStampEntity synchronizeStamp = null; DateTime stampTo = DateTime.Now; using (var uow = unitOfWorkProvider.CreateReadOnly()) { synchronizeStamp = synchronizeStampRepository.Get(SynchronizeCodes.Category, SynchronizeDirectionType.Export); } DateTime stampFrom = synchronizeStamp?.DateTimeStamp ?? DateTime.MinValue; IReadOnlyCollection <CategoryEntity> categories = null; using (var uow = unitOfWorkProvider.CreateReadOnly()) { categories = categoryRepository.GetAllModified(stampFrom, null); } if (categories.Any()) { logger.LogDebug("Starting synchronize categories"); foreach (var category in categories) { ProcessCategory(category); } if (synchronizeStamp == null) { synchronizeStamp = SynchronizeStampFactory.Create(SynchronizeCodes.Category, SynchronizeDirectionType.Export); } synchronizeStamp.DateTimeStamp = stampTo; using (var uow = unitOfWorkProvider.Create()) { synchronizeStampRepository.SaveOrUpdate(synchronizeStamp); uow.Commit(); } logger.LogDebug($"Synchronize categories finished at {(DateTime.Now - stampTo).TotalSeconds} sec."); } }