public override SyncResult Sync(OrderSyncModes syncMode, CancellationToken?token) { _log.Info("Sync, syncMode=" + syncMode); var processedOrderIdList = new List <SyncResultOrderInfo>(); var isSuccess = true; _syncInfo.PingSync(); var syncResult = SyncAllNewOrders(token, _log, _api, _api.Market, GetOrderItemsFromMarket, _syncInfo, _rateProviders, _quantityManager, _settings, _emailService, _validatorService, _cacheService, _companyAddress, DateTime.UtcNow - _settings.GetOrdersSyncForMissedInterval(_api.Market, _api.MarketplaceId), _time); isSuccess = isSuccess && syncResult.IsSuccess; if (syncResult.ProcessedOrders != null) { processedOrderIdList.AddRange(syncResult.ProcessedOrders); } _syncInfo.PingSync(); syncResult = UpdateExistingUnshippedOrders(token, _log, _api, GetOrderItemsFromMarket, _syncInfo, _rateProviders, _quantityManager, _emailService, _validatorService, processedOrderIdList.Select(o => o.OrderId).ToList(), _companyAddress, _time); isSuccess = isSuccess && syncResult.IsSuccess; if (syncResult.ProcessedOrders != null) { processedOrderIdList.AddRange(syncResult.ProcessedOrders); } _syncInfo.PingSync(); return(new SyncResult() { ProcessedOrders = processedOrderIdList, IsSuccess = isSuccess }); }
public override SyncResult Sync(OrderSyncModes syncMode, CancellationToken?cancel) { var syncMissedFrom = DateTime.UtcNow - (syncMode == OrderSyncModes.Full ? _settings.GetOrdersSyncForMissedInterval(_api.Market, _api.MarketplaceId) : _settings.GetOrdersSyncForMissedShortInterval(_api.Market, _api.MarketplaceId)); _log.Info("Sync, syncMode=" + syncMode + ", from date=" + syncMissedFrom); var isSuccess = true; var processedOrderIdList = new List <SyncResultOrderInfo>(); var skippedOrderIdList = new List <SyncResultOrderInfo>(); _syncInfo.PingSync(); //STEP 1. SyncAllUnshippedOrders var stopWatch = Stopwatch.StartNew(); var syncResult = SyncAllUnshippedOrders( cancel, _log, _api, GetOrderItemsFromMarket, _syncInfo, _rateProviders, _quantityManager, _settings, _emailService, _validatorService, _cacheService, _companyAddress, syncMissedFrom, _time); isSuccess = isSuccess && syncResult.IsSuccess; if (syncResult.ProcessedOrders != null) { processedOrderIdList.AddRange(syncResult.ProcessedOrders); } if (syncResult.SkippedOrders != null) { skippedOrderIdList.AddRange(syncResult.SkippedOrders); } stopWatch.Stop(); _log.Info("STEP. SyncAllUnshippedOrders, duration=" + stopWatch.ElapsedMilliseconds); _syncInfo.PingSync(); //STEP 2. UpdateExistingOrders stopWatch.Start(); var excludedOrders = processedOrderIdList.Select(o => o.OrderId).ToList(); if (syncResult.SkippedOrders != null) { excludedOrders.AddRange(syncResult.SkippedOrders.Where(o => o.OrderStatus == OrderStatusEnumEx.Unshipped).Select(o => o.OrderId).ToList()); } //NOTE: exclude list contains orders that have unshipped status on Market (no need to update these, except if orders in DB have status Pending) syncResult = UpdateExistingOrders(cancel, _log, _api, GetOrderItemsFromMarket, _syncInfo, _rateProviders, _quantityManager, _emailService, _validatorService, syncMode == OrderSyncModes.Full, excludedOrders, _companyAddress, _time); isSuccess = isSuccess && syncResult.IsSuccess; if (syncResult.ProcessedOrders != null) { processedOrderIdList.AddRange(syncResult.ProcessedOrders); } if (syncResult.SkippedOrders != null) { skippedOrderIdList.AddRange(syncResult.SkippedOrders); } stopWatch.Stop(); _log.Info("STEP. UpdateExistingOrders, duration=" + stopWatch.ElapsedMilliseconds); _syncInfo.PingSync(); //STEP 3. StoreNewPendingOrders stopWatch.Start(); syncResult = StoreNewPendingOrders(cancel, _log, _api, GetOrderItemsFromMarket, _rateProviders, _validatorService, _emailService, _syncInfo, _settings, _quantityManager, _cacheService, _companyAddress, _time); isSuccess = isSuccess && syncResult.IsSuccess; if (syncResult.ProcessedOrders != null) { processedOrderIdList.AddRange(syncResult.ProcessedOrders); } if (syncResult.SkippedOrders != null) { skippedOrderIdList.AddRange(syncResult.SkippedOrders); } stopWatch.Stop(); _log.Info("STEP. StoreNewPendingOrders, duration=" + stopWatch.ElapsedMilliseconds); _syncInfo.PingSync(); return(new SyncResult() { IsSuccess = isSuccess, ProcessedOrders = processedOrderIdList, SkippedOrders = skippedOrderIdList, }); }