Ejemplo n.º 1
0
 public static MarketOrder Map(MarketOrders.MarketOrder source, MarketOrder target)
 {
     target.OrderId         = source.OrderId;
     target.ApiKeyEntityId  = (int)source.CharacterId;
     target.StationId       = source.StationId;
     target.VolumeEntered   = source.VolumeEntered;
     target.VolumeRemaining = source.VolumeRemaining;
     target.MinVolume       = source.MinVolume;
     target.OrderState      = (OrderState)source.OrderState;
     target.TypeId          = source.TypeId;
     target.Range           = source.Range;
     target.AccountKey      = source.AccountKey;
     target.Duration        = source.Duration;
     target.Escrow          = source.Escrow;
     target.Price           = source.Price;
     target.Bid             = source.Bid != 0;
     target.Issued          = source.IssuedDate;
     return(target);
 }
Ejemplo n.º 2
0
        public async Task <int> UpdateMarketOrdersAsync()
        {
            MarketOrders result =
                await
                _eveApiService.GetMarketOrdersAsync(ApplicationHelper.ActiveEntity.ApiKeys.First(),
                                                    ApplicationHelper.ActiveEntity)
                .ConfigureAwait(false);

            long minOrderId = result.Orders.Any() ? result.Orders.MinBy(order => order.OrderId).OrderId : 0;

            using (EveProfiteerRepository db = CreateDb()) {
                db.Context.Configuration.ValidateOnSaveEnabled    = false;
                db.Context.Configuration.AutoDetectChangesEnabled = false;
                List <MarketOrders.MarketOrder> newOrders = result.Orders.ToList();
                List <MarketOrder> orders =
                    await
                    db.MyMarketOrders()
                    .Where(order => order.OrderId >= minOrderId || order.OrderState == OrderState.Open)
                    .ToListAsync()
                    .ConfigureAwait(false);

                ILookup <long, MarketOrders.MarketOrder> resultLookup = result.Orders.ToLookup(f => f.OrderId);
                foreach (MarketOrder order in orders)
                {
                    MarketOrders.MarketOrder marketOrder = resultLookup[order.OrderId].SingleOrDefault();
                    if (marketOrder != null)
                    {
                        ApiEntityMapper.Map(marketOrder, order);
                        newOrders.Remove(marketOrder);
                    }
                    else if (order.OrderState == OrderState.Open)
                    {
                        order.Escrow = 0;
                        if (order.Duration < DateTime.UtcNow.Subtract(order.Issued).Days)
                        {
                            order.OrderState = OrderState.Expired;
                        }
                        else
                        {
                            order.OrderState = OrderState.Closed;
                        }
                    }
                }
                foreach (MarketOrders.MarketOrder marketOrder in newOrders)
                {
                    MarketOrder order = db.Context.MarketOrders.Create();
                    ApiEntityMapper.Map(marketOrder, order);
                    db.Context.MarketOrders.Add(order);
                }


                List <Asset> assets = await db.Context.Assets.ToListAsync().ConfigureAwait(false);

                foreach (Asset asset in assets)
                {
                    List <MarketOrders.MarketOrder> order =
                        result.Orders.Where(
                            e => e.TypeId == asset.InvTypes_TypeId && e.StationId == asset.StationId && e.OrderState == 0 && e.Bid == 0 && e.VolumeRemaining != 0)
                        .ToList();
                    asset.MarketQuantity = order.Any() ? order.Sum(e => e.VolumeRemaining) : 0;
                }
                db.Context.ChangeTracker.DetectChanges();
                return(await db.Context.SaveChangesAsync().ConfigureAwait(false));
            }
        }