示例#1
0
        private ShippingDto CreateShippingAsync(ShippingDtoMessage message)
        {
            var bus = BusPublisherStub.Create();

            var service = new ProcessDtoService(Db, bus);

            service.CreateShippingAsync(message).Wait();

            return(bus.DequeueExchange <ShippingDto>(ExchangeNames.DTO));
        }
示例#2
0
        protected override async Task InternalRunAsync(IServiceProvider provider)
        {
            List <Order> orders = null;

            using (var context = provider.GetService <DbBookstore>())
            {
                orders = await context.Orders.ToListAsync();
            }

            foreach (var order in orders)
            {
                var message = new ShippingDtoMessage()
                {
                    OrderId = order.Id
                };

                var bus = provider.GetService <IBusPublisher>();
                await bus.PublishAsync(QueueNames.Bookstore, message);
            }
        }
        public async Task CreateShippingAsync(ShippingDtoMessage message)
        {
            var order = await _db.Orders
                        .Include(x => x.Items)
                        .Include(x => x.Customer)
                        .FirstOrDefaultAsync(x => x.Id == message.OrderId);

            var dto = new ShippingDto
            {
                Id         = order.Id,
                Number     = order.Number,
                Status     = order.Status,
                CreateDate = order.CreateDate,
                Customer   = new ShippingDto.CustomerDetail()
                {
                    Id      = order.Customer.Id,
                    Name    = order.Customer.Name,
                    Address = order.Customer.Address
                }
            };

            foreach (var item in order.Items)
            {
                var itemDto = new ShippingDto.OrderItemDetail()
                {
                    Id       = item.Id,
                    Name     = item.Name,
                    Price    = item.Price,
                    Quantity = item.Quantity,
                    Total    = item.Total
                };

                dto.Items.Add(itemDto);
            }

            await _bus.PublishAsync(ExchangeNames.DTO, dto);
        }
示例#4
0
        public async Task CreateAsync(PurchaseMessage message)
        {
            var numbersDropped = new List <DropCopyNumberMessage>();

            var order = await _db.Orders
                        .Include(x => x.Items)
                        .ThenInclude(x => x.Book)
                        .Include(x => x.Customer)
                        .FirstOrDefaultAsync(x => x.Number == message.Number);

            if (order == null)
            {
                order = new Order
                {
                    Number     = message.Number,
                    Status     = StatusOrder.Opened,
                    CreateDate = DateTime.UtcNow,
                    Customer   = await _db.Customers.FirstOrDefaultAsync(x => x.DocumentId == message.CustomerId)
                };

                if (order.Customer == null)
                {
                    order.Customer = new Customer
                    {
                        DocumentId = message.CustomerId,
                        Name       = message.CustomerName
                    };
                }

                order.Items = new List <OrderItem>();

                foreach (var item in message.Items)
                {
                    var orderItem = await GetItemAsync(_db, item);

                    if (IntegrationWithLibrary.Get())
                    {
                        numbersDropped.Add(new DropCopyNumberMessage()
                        {
                            Number = item.Number
                        });
                    }

                    order.Items.Add(orderItem);
                }

                await _db.AddAsync(order);
            }
            else
            {
                order.Items = new List <OrderItem>();

                foreach (var item in message.Items)
                {
                    var orderItem = await GetItemAsync(_db, item);

                    if (IntegrationWithLibrary.Get())
                    {
                        numbersDropped.Add(new DropCopyNumberMessage()
                        {
                            Number = item.Number
                        });
                    }

                    order.Items.Add(orderItem);
                }

                _db.Update(order);
            }

            await _db.SaveChangesAsync();

            if (IntegrationWithLibrary.Get())
            {
                await _bus.PublishAllAsync(QueueNames.Library, numbersDropped);
            }

            var dto = new ShippingDtoMessage
            {
                OrderId = order.Id
            };

            await _bus.PublishAsync(QueueNames.Bookstore, dto);
        }