示例#1
0
        private async Task <bool> HandlePackagesAsync(DayHasBegun e)
        {
            Console.WriteLine($"Day Has Begun " + e);

            using (var db = GetShippingDb())
            {
                try
                {
                    var packageToShip = await db.Package.Where(p => p.TimeOfRecieve.Date == DateTime.Now.Date.AddDays(-1) && p.Shipped == false).ToListAsync();;
                    var orders        = await db.Order.ToListAsync();

                    if (packageToShip != null && orders != null)
                    {
                        //var shippedOrders = new List<Order>();

                        foreach (var pp in packageToShip)
                        {
                            var packageOrders = await db.Order.Where(o => o.PackageId == pp.PackageId).ToListAsync();

                            foreach (var ppOrder in packageOrders)
                            {
                                var trackingCode = _logisticsService.GenerateTrackingCode();
                                var ordersToShip = new Order {
                                    OrderId = ppOrder.OrderId, TrackingCode = trackingCode
                                };

                                //shippedOrders.Add(ordersToShip);
                                // send event
                                await _messagePublisher.PublishMessageAsync(MessageTypes.OrderShipped, ordersToShip, "");

                                Console.WriteLine($"Order is shipped: " + ordersToShip);
                            }

                            var package = await db.Package.FirstOrDefaultAsync(t => t.PackageId == pp.PackageId);

                            package.Shipped = true;

                            db.Package.Update(package);

                            await db.SaveChangesAsync();
                        }
                    }
                }
                catch (DbUpdateException)
                {
                    Console.WriteLine($"Failed to ship order");
                }
            }

            return(true);
        }
示例#2
0
        private async void Worker()
        {
            while (true)
            {
                TimeSpan now = DateTime.Now.TimeOfDay;

                if (start == now)
                {
                    Console.WriteLine($"Day has begun!");
                    DayHasBegun e = new DayHasBegun(Guid.NewGuid());
                    await _messagePublisher.PublishMessageAsync(MessageTypes.DayHasBegun, e, "");
                }

                Thread.Sleep(10000);
            }
        }