/// <summary> /// Create the task and invoke the orderClient /// </summary> /// <returns>Return true if there is more elements in the queue</returns> public async Task <bool> DequeueProcessAndCheckIfContinueAsync(CancellationToken cancellationToken) { List <Sar_Fcrmvh> ordersToInsert = new List <Sar_Fcrmvh>(); List <Usr_Dspeml> ordersToInsertDs = new List <Usr_Dspeml>(); IEnumerable <Usr_Vtexha> items = await _repository.OrderHandlerRepository.GetToHandle(cancellationToken); if (!items.Any()) { return(false); } foreach (Usr_Vtexha orderToHandle in items) { Sar_Fcrmvh orderCreada = await _repository.OrderHeaderRepository.Get(cancellationToken, new object[] { orderToHandle.Usr_Vtexha_Ordid }); if (orderCreada == null) { OrderDTO order = await _orderClient.DequeueOrderAsync(cancellationToken, orderToHandle.Usr_Vtexha_Ordid); ordersToInsert.Add(new SarFcrmvhBuilder() .setHeader(order) .addItems(order.orderId, order.items, order.shippingData) .Build()); ordersToInsertDs.Add(new UsrDspemlBuilder() .setHeader(order) .addContacts(order.clientProfileData, order.shippingData.address) .addPayments(order.paymentData.transactions) .Build()); _logger.Information($"Se recuperó la orden {order.orderId} y fue cargada para su procesamiento."); } } try { await _repository.OrderHeaderRepository.AddRange(cancellationToken, ordersToInsert); await _repository.OrderVtexRepository.AddRange(cancellationToken, ordersToInsertDs); await _repository.Complete(); } catch (Exception ex) { _logger.Fatal($"Error al insertar ordenes: {ex.InnerException.Message}"); } //await _orderClient.CommitAsync(items.Select(item => item.Handle), cancellationToken); return(items.Count() == MAX_ELEMENTS_IN_QUEUE); }