コード例 #1
0
        public OrderDataFixture()
        {
            var _lineItems = new List <InputOrderProduct>();
            var date       = DateTime.Now;
            var guid1      = Guid.NewGuid();
            var guid2      = Guid.NewGuid();
            var carrierId  = Guid.NewGuid();
            var guid1tanks = new List <Tank> {
                new Tank(1, guid1, 1, new Measurement(TankMeasurement.Gallons, 100, 100, 800), 1000),
                new Tank(2, guid1, 2, new Measurement(TankMeasurement.Gallons, 100, 100, 800), 1500)
            };

            _gasStation1 = new GasStation(guid1, guid1tanks,
                                          new TimeRange(new TimeSpan(12, 0, 0), new TimeSpan(23, 59, 0))
                                          , Guid.NewGuid());

            var guid2tanks = new List <Tank> {
                new Tank(1, guid2, 1, new Measurement(TankMeasurement.Gallons, 100, 100, 800), 500),
                new Tank(2, guid2, 2, new Measurement(TankMeasurement.Gallons, 100, 100, 800), 2000)
            };

            _gasStation2 = new GasStation(guid2, guid2tanks,
                                          new TimeRange(new TimeSpan(12, 0, 0), new TimeSpan(23, 59, 0))
                                          , Guid.NewGuid());

            _lineItems.Add(new InputOrderProduct
            {
                TankId   = 1,
                Quantity = 100
            });
            _inputOrder = new InputOrder
            {
                Comments     = "New Order",
                GasStationId = Guid.NewGuid(),
                FromTime     = date,
                ToTime       = date.AddHours(8),
                LineItems    = _lineItems
            };

            _gasStation1Schedule = new GasStationSchedule(_gasStation1.Id,
                                                          ScheduleType.ByDay);

            _gasStation2Schedule = new GasStationSchedule(_gasStation2.Id,
                                                          ScheduleType.ByTime);

            _gasStation1Tank1Schedule = new GasStationTankSchedule(1, 500);

            _gasStation1Tank2Schedule = new GasStationTankSchedule(2, 500);

            _gasStation2Tank1Schedule = new GasStationTankSchedule(3, 500);

            _gasStation2Tank2Schedule = new GasStationTankSchedule(4, 500);

            _gasStation1SchedulesByDay = new List <GasStationScheduleByDay>
            {
                new GasStationScheduleByDay(_gasStation1.Id, DayOfWeek.Monday),
                new GasStationScheduleByDay(_gasStation1.Id, DayOfWeek.Thursday)
            };

            _gasStation2ScheduleByTime = new List <GasStationScheduleByTime>
            {
                new GasStationScheduleByTime(_gasStation2.Id, new TimeSpan(12))
            };

            _carriers = new List <Carrier>
            {
                new Carrier(carrierId, 5000, new TimeRange(new TimeSpan(6, 0, 0), new TimeSpan(18, 0, 0)))
            };

            _gasStation1Strategy = new OrderStrategy(_gasStation1.Id, OrderType.Schedule);

            _gasStation2Strategy = new OrderStrategy(_gasStation2.Id, OrderType.Schedule);

            var order1 = Order.Create(
                new InputOrder
            {
                Comments     = "Test Order",
                CarrierId    = Guid.NewGuid(),
                FromTime     = new DateTime(2020, 9, 8, 18, 0, 0),
                ToTime       = new DateTime(2020, 9, 9, 5, 0, 0),
                GasStationId = GasStations.FirstOrDefault().Id,
                LineItems    = GasStations.FirstOrDefault().Tanks.Select(x => new InputOrderProduct
                {
                    Quantity = x.Measurement.Quantity,
                    TankId   = x.Id
                }),
                OrderType = OrderType.Manual
            },
                GasStations.FirstOrDefault()
                ) !.Entity;

            var order2 = Order.Create(
                new InputOrder
            {
                Comments     = "Test Order",
                CarrierId    = Guid.NewGuid(),
                FromTime     = new DateTime(2020, 9, 8, 18, 0, 0),
                ToTime       = new DateTime(2020, 9, 9, 5, 0, 0),
                GasStationId = GasStations.LastOrDefault().Id,
                LineItems    = GasStations.LastOrDefault().Tanks.Select(x => new InputOrderProduct
                {
                    Quantity = x.Measurement.Quantity,
                    TankId   = x.Id
                }),
                OrderType = OrderType.Manual
            },
                GasStations.LastOrDefault()
                ) !.Entity;

            var order3 = Order.Create(
                new InputOrder
            {
                Comments     = "Test Order",
                CarrierId    = Guid.NewGuid(),
                FromTime     = new DateTime(2020, 11, 8, 6, 0, 0),
                ToTime       = new DateTime(2020, 11, 8, 9, 0, 0),
                GasStationId = GasStations.FirstOrDefault().Id,
                LineItems    = GasStations.FirstOrDefault().Tanks.Select(x => new InputOrderProduct
                {
                    Quantity = x.Measurement.Quantity,
                    TankId   = x.Id
                }),
                OrderType = OrderType.Manual
            },
                GasStations.FirstOrDefault()
                ) !.Entity;

            _orders = new List <Order> {
                order1 !,
                order2 !,
                order3 !
            };
        }
コード例 #2
0
        private static IOrderedEnumerable <Region> OrderRegions(this IEnumerable <Region> regions, OrderStrategy orderStrategy)
        {
            switch (orderStrategy)
            {
            default:
            case OrderStrategy.MostNumberOfArmies:
                return(regions.OrderByDescending(region => region.NbrOfArmies));

            case OrderStrategy.MostQualifiedArmiesNearby:
                return(regions.OrderByDescending(region =>
                                                 region.Neighbours
                                                 .Where(neighbour => neighbour.IsOccupiedBy(PlayerType.Me))
                                                 .Where(neighbor => neighbor.NbrOfArmies > 5)
                                                 .Where(neighbor => neighbor.NbrOfArmies > region.NbrOfArmies * 2)
                                                 .Select(reg => reg.NbrOfArmies).Sum()
                                                 ));

            case OrderStrategy.InternalFirst:
                return(regions.OrderBy(region => region.Neighbours.Any(neighbor => neighbor.SuperRegion != region.SuperRegion) ? 1 : 0));

            case OrderStrategy.NeutralNeighboursFirst:
                return(regions.OrderByDescending(region => region.Neighbours.Any(neighbor => neighbor.IsOccupiedBy(PlayerType.Neutral) && neighbor.SuperRegion == region.SuperRegion) ? 1 : 0));

            case OrderStrategy.EnemyNeighboursFirst:
                return(regions.OrderByDescending(region => region.Neighbours.Count(neighbor => neighbor.IsOccupiedBy(PlayerType.Opponent))));

            case OrderStrategy.MostArmiesNearby:
                return(regions.OrderByDescending(region => region.Neighbours.Where(neighbour => neighbour.IsOccupiedBy(PlayerType.Me)).Select(reg => reg.NbrOfArmies).Sum()));
            }
        }
コード例 #3
0
        private static IOrderedEnumerable <Region> ThenOrderRegions(this IOrderedEnumerable <Region> regions, OrderStrategy orderStrategy)
        {
            switch (orderStrategy)
            {
            default:
                return(regions);

            case OrderStrategy.MostNumberOfArmies:
                return(regions.ThenByDescending(region => region.NbrOfArmies));

            case OrderStrategy.VeryLargeRegionsLast:
                return(regions.ThenByDescending(region => region.NbrOfArmies < 100 ? 1 : 0));

            case OrderStrategy.SmallSuperRegionsFirst:
                return(regions.ThenBy(region => (region.SuperRegion.ChildRegions.OccupiedBy(PlayerType.Me).Count())));

            case OrderStrategy.NeutralNeighboursFirst:
                return(regions.ThenByDescending(region => region.Neighbours.Any(neighbor => neighbor.IsOccupiedBy(PlayerType.Neutral) && neighbor.SuperRegion == region.SuperRegion) ? 1 : 0));

            case OrderStrategy.NeutralNeighboursOnOtherSuperRegionsFirst:
                return(regions.ThenByDescending(region => region.Neighbours.Any(neighbor => neighbor.IsOccupiedBy(PlayerType.Neutral) && neighbor.SuperRegion != region.SuperRegion) ? 1 : 0));

            case OrderStrategy.EnemyNeighboursFirst:
                return(regions.ThenByDescending(region => region.Neighbours.Count(neighbor => neighbor.IsOccupiedBy(PlayerType.Opponent))));

            case OrderStrategy.MostArmiesNearby:
                return(regions.ThenByDescending(region => region.Neighbours.Where(neighbour => neighbour.IsOccupiedBy(PlayerType.Me)).Select(reg => reg.NbrOfArmies).Sum()));
            }
        }
コード例 #4
0
        public AdministrationDataFixture()
        {
            var _gasStationId = Guid.NewGuid();
            var _dateTime1    = new DateTime(2020, 8, 1, 9, 30, 0);
            var _dateTime2    = new DateTime(2020, 8, 2, 9, 30, 0);

            _gasStation = new GasStation(_gasStationId);
            var tank1   = new Tank();
            var product = new Product();

            _orderStrategy     = new OrderStrategy();
            _tanks             = new List <Tank>();
            _tankSales         = new List <TankSale>();
            tank1.GasStationId = _gasStationId;
            tank1.Number       = 1;
            tank1.ProductId    = 1;
            tank1.Name         = "Tank1";

            tank1.AddMeasurement(new Measurement(TankMeasurement.Gallons, 100, 100, 500));
            var tank2 = new Tank();

            tank2.GasStationId = _gasStationId;
            tank2.Number       = 1;
            tank2.Name         = "Tank2";
            tank2.AddMeasurement(new Measurement(TankMeasurement.Gallons, 100, 100, 500));
            var tank1Sale1 = new TankSale();

            tank1Sale1.Quantity = 100;
            tank1Sale1.SaleTime = _dateTime1;
            var tank1Sale2 = new TankSale();

            tank1Sale2.Quantity = 100;
            tank1Sale2.SaleTime = _dateTime2;
            var tank2Sale1 = new TankSale();

            tank2Sale1.Quantity = 100;
            tank2Sale1.SaleTime = _dateTime1;
            var tank2Sale2 = new TankSale();

            tank2Sale2.Quantity = 100;
            tank2Sale2.SaleTime = _dateTime2;
            var dispatcherGrp = new DispatcherGroup {
                Name = "DP1"
            };

            using (var context = new AdministrationContext())
            {
                _gasStation.Tanks.Add(tank1);
                _gasStation.Tanks.Add(tank2);
                context.DispatcherGroup.Add(dispatcherGrp);
                if (context.GasStations.Any())
                {
                    context.GasStations.RemoveRange(context.GasStations);
                    context.SaveChanges();
                }
                if (context.Products.Any())
                {
                    context.Products.RemoveRange(context.Products);
                    context.SaveChanges();
                }
                if (context.TankSales.Any())
                {
                    context.TankSales.RemoveRange(context.TankSales);
                    context.SaveChanges();
                }
                context.Products.Add(product);
                context.SaveChanges();
                tank1.ProductId = product.Id;
                tank2.ProductId = product.Id;
                _gasStation.DispatcherGroupId = dispatcherGrp.Id;
                context.GasStations.Add(_gasStation);
                context.SaveChanges();
                _tanks.AddRange(new[] { tank1, tank2 });
                tank1Sale1.TankId = tank1.Id;
                tank1Sale2.TankId = tank1.Id;
                tank2Sale1.TankId = tank2.Id;
                tank2Sale2.TankId = tank2.Id;
                context.TankSales.AddRange(new[] { tank1Sale1, tank1Sale2, tank2Sale1, tank2Sale2 });
                _orderStrategy.GasStationId = _gasStation.Id;
                _orderStrategy.OrderType    = OrderType.Schedule;
                context.OrderStrategies.Add(_orderStrategy);
                context.SaveChanges();
                _tankSales.AddRange(new[] { tank1Sale1, tank1Sale2, tank2Sale1, tank2Sale2 });
            }
        }