예제 #1
0
        private void CreateOrder(IDeliveryOrder order, AggregatorCell cell)
        {
            var paymentUnit    = Extensions.GetPaymentTuple(order, cell.Converter, cell.PaymentTypes);
            var createRequest  = cell.Converter.ToCreateOrderRequest(order, paymentUnit.Item1, paymentUnit.Item2);
            var createResponse = cell.ApiClient.CreateOrder(createRequest);

            var getRequest  = cell.Converter.ToGetOrderRequest(createResponse);
            var getResponse = cell.ApiClient.GetOrder(getRequest);

            if (getResponse == null)
            {
                PluginContext.Log.Info($"Could not get order {order.Number} (aggregator api does not support GetOrder request)");
            }

            var toCache = cell.Converter.ToCommonCache(createResponse);

            toCache.OrderId     = order.Id;
            toCache.OrderNumber = order.Number;
            toCache.Status      = cell.Converter.ToCommonStatus(order.DeliveryStatus);
            _cache.AddOrUpdate(order.Id, cell.Converter.ToCommonCache(createResponse));

            PluginContext.Log.Info($"Order with courier {order.Courier.Name} and #{order.Number} created: {createResponse.Message}");
        }
예제 #2
0
        private void OnDeliveryOrderChanged(IDeliveryOrder order)
        {
            try
            {
                if (order.Courier == null)
                {
                    return;
                }
                AggregatorCell currAggregator = _service.Get(order.Courier.Name.ToLower());
                if (currAggregator == null)
                {
                    return;
                }

                if (!_cache.Contains(order.Id))
                {
                    CreateOrder(order, currAggregator);
                }
            }
            catch (Exception ex)
            {
                PluginContext.Log.Error($"Failed to create or update Order {order.Number}", ex);
            }
        }