コード例 #1
0
        public void ignore_duplicate_OrderFailed()
        {
            Order order = new Order(this.sg1);

            this.tradingData.Get <ICollection <Order> >().Add(order);
            Assert.IsFalse(order.IsRejected);

            OrderFailed failed = new OrderFailed {
                OrderId = "111", Reason = "Failed", Cookie = order.Id
            };

            this.rawTradingData.GetData <OrderFailed>().Add(failed);

            Assert.IsTrue(order.IsRejected);
            Assert.AreEqual("Failed", order.RejectReason);
            Assert.IsTrue(order.RejectedDate <= BrokerDateTime.Make(DateTime.Now));

            OrderFailed failedTwice = new OrderFailed {
                OrderId = "111", Reason = "Failed twice", Cookie = order.Id
            };

            this.rawTradingData.GetData <OrderFailed>().Add(failedTwice);

            Assert.IsTrue(order.IsRejected);
            Assert.AreEqual("Failed", order.RejectReason);
            Assert.IsTrue(order.RejectedDate <= BrokerDateTime.Make(DateTime.Now));
        }
コード例 #2
0
        public void OrderFailed_constructor_test()
        {
            OrderFailed item = new OrderFailed(100, "255", "Reason");

            Assert.AreEqual(100, item.Cookie);
            Assert.AreEqual("255", item.OrderId);
            Assert.AreEqual("Reason", item.Reason);
        }
コード例 #3
0
 internal void OnOrderFailed(int cookie, string smartOrderId, string reason)
 {
     OrderFailed.SafeInvoke(cookie, smartOrderId, reason);
 }
コード例 #4
0
        private void OnReservedCustomerCredit(
            object o,
            Message <string, ReservedCustomerCredit> e,
            Producer <string, OrderFailed> producer,
            Producer <string, OrderState> orderStateProducer)
        {
            using (var orderOrchestraDbContext = new OrderOrchestraDbContext())
            {
                IUnitOfWork unitOfWork = new UnitOfWork <Infrastructure.OrderOrchestraDbContext>(orderOrchestraDbContext);
                IRepository <Entities.Order> orderRepository = unitOfWork.GetRepository <Entities.Order>();

                var specification = new Specification <Entities.Order>();
                specification.Include(x => x.Products);
                var order = orderRepository.FirstOrDefault(x => x.OrderId == e.Value.OrderId, specification).Result;

                if (e.Value.Status.Equals("success"))
                {
                    order.Status = Entities.Order.OrderStatus.Success;
                }
                else
                {
                    order.Status = Entities.Order.OrderStatus.Failed;
                }

                var result = unitOfWork.SaveChanges().Result;

                if (!result.IsSuccessfull())
                {
                    throw new Exception();
                }

                var orderState = new OrderState()
                {
                    id         = order.OrderId,
                    customerId = order.CustomerId,
                    date       = order.Date.ToString(),
                    status     = order.Status.ToString(),
                    total      = order.Total,
                    products   = order.Products.Select(x => new OrderProduct()
                    {
                        id       = x.ProductId,
                        Quantity = x.Quantity
                    }).ToList()
                };

                var orderStateResult = orderStateProducer.ProduceAsync(
                    "order-state",
                    Guid.NewGuid().ToString(),
                    orderState).Result;

                if (e.Value.Status.Equals("success"))
                {
                    // TODO:
                }
                else
                {
                    var orderFailed = new OrderFailed()
                    {
                        OrderId = e.Value.OrderId
                    };

                    var p = producer.ProduceAsync(
                        "order-failed",
                        Guid.NewGuid().ToString(),
                        orderFailed).Result;
                }
            }
        }
コード例 #5
0
        private void OnReservedOrder(
            object o,
            Message <string, ReservedOrder> e,
            Producer <string, ReserveCustomerCredit> reserveCustomerCreditProducer,
            Producer <string, OrderFailed> orderFailedProducer,
            Producer <string, OrderState> orderStateProducer)
        {
            using (var orderOrchestraDbContext = new OrderOrchestraDbContext())
            {
                IUnitOfWork unitOfWork = new UnitOfWork <Infrastructure.OrderOrchestraDbContext>(orderOrchestraDbContext);
                IRepository <Entities.Order> orderRepository = unitOfWork.GetRepository <Entities.Order>();

                // Get the Order from the repository.
                var order = orderRepository.FirstOrDefault(x => x.OrderId == e.Value.OrderId).Result;

                if (order == null)
                {
                    throw new Exception();
                }

                if (e.Value.Status.Equals("success"))
                {
                    order.Status = Entities.Order.OrderStatus.WaitingForPayment;
                    order.Total  = e.Value.Total;
                }
                else if (e.Value.Status.Equals("outofstock"))
                {
                    order.Status = Entities.Order.OrderStatus.Failed;
                }

                // Save the order entity to the repository.
                orderRepository.Update(order);
                var result = unitOfWork.SaveChanges().Result;

                // If save fails, throw an exception.
                if (!result.IsSuccessfull())
                {
                    throw new Exception();
                }

                var orderState = new OrderState()
                {
                    customerId = order.CustomerId,
                    date       = order.Date.ToString(),
                    status     = order.Status.ToString(),
                    total      = order.Total,
                    products   = order.Products.Select(x => new OrderProduct()
                    {
                        id       = x.ProductId,
                        Quantity = x.Quantity
                    }).ToList()
                };

                var orderStateResult = orderStateProducer.ProduceAsync(
                    "order-state",
                    Guid.NewGuid().ToString(),
                    orderState).Result;

                if (e.Value.Status.Equals("success"))
                {
                    var reserveCustomerCredit = new ReserveCustomerCredit()
                    {
                        OrderId    = e.Value.OrderId,
                        Amount     = e.Value.Total,
                        CustomerId = order.CustomerId
                    };

                    var r = reserveCustomerCreditProducer.ProduceAsync(
                        "reserve-customer-credit",
                        Guid.NewGuid().ToString(),
                        reserveCustomerCredit).Result;
                }
                else if (e.Value.Status.Equals("outofstock"))
                {
                    var orderFailed = new OrderFailed()
                    {
                        OrderId = e.Value.OrderId
                    };

                    var r = orderFailedProducer.ProduceAsync(
                        "order-failed", Guid.NewGuid().ToString(), orderFailed).Result;
                }
            }
        }