コード例 #1
0
        public async Task WHEN_someNextEvent_THEN_sagaShouldBeInValidState()
        {
            // given
            ISaga newSagaState = await sagaCoordinator.
                                 Publish(new OrderCreatedEvent());

            ISagaEvent skompletowanoEvent = new OrderCompletedEvent()
            {
                ID = newSagaState.Data.ID
            };

            // then
            await sagaCoordinator.
            Publish(skompletowanoEvent);

            // then
            ISaga persistedSaga = await sagaPersistance.
                                  Get(newSagaState.Data.ID);

            persistedSaga.ShouldNotBeNull();
            persistedSaga.ExecutionState.CurrentState.ShouldBe(nameof(StateCompleted));
            persistedSaga.ExecutionState.CurrentStep.ShouldBe(null);
            persistedSaga.ExecutionState.History.ShouldNotContain(step => step.StepName == "OrderCreatedEventStep0" && step.CompensationData == null && step.HasSucceeded());
            persistedSaga.ExecutionState.History.ShouldNotContain(step => step.StepName == "OrderCreatedEventStep1" && step.CompensationData == null && step.HasSucceeded());
            persistedSaga.ExecutionState.History.ShouldContain(step => step.StepName == "OrderCompletedEventStep1" && step.CompensationData == null && step.HasSucceeded());
            persistedSaga.ExecutionState.History.ShouldContain(step => step.StepName == "email" && step.CompensationData == null && step.HasSucceeded());
            persistedSaga.ExecutionState.History.ShouldContain(step => step.StepName == "SendMessageToTheManagerEventStep" && step.CompensationData == null && step.HasSucceeded());
            persistedSaga.ExecutionState.History.ShouldContain(step => step.StepName == "OrderCourierEventStep" && step.CompensationData == null && step.HasSucceeded());
            persistedSaga.ExecutionState.History.Count.ShouldBe(6);
        }
コード例 #2
0
ファイル: OrderAggregate.cs プロジェクト: bohulenkov14/erden
 private void Apply(OrderCompletedEvent @event)
 {
     if (status != OrderStatus.InProgress)
     {
         throw new Exception("Only processing orders could be completed");
     }
     status = OrderStatus.Completed;
 }
コード例 #3
0
        public int Handle(CompleteOrderCommand command)
        {
            // command validation ommited
            var order = new Order(command.ProductId, command.Amount);

            _database.Orders.Add(order);
            _database.SaveChanges();

            var @event = new OrderCompletedEvent(order.Id, order.ProductId, order.Amount);

            _mediator.Publish(@event);

            return(order.Id);
        }
コード例 #4
0
        private static void Main()
        {
            Log.Assign(new ConsoleLog(typeof(Program))
            {
                LogLevel = LogLevel.Trace
            });

            ConnectionStrings.Approve();

            var subscriptionManager = SubscriptionManager.Default();

            subscriptionManager.Subscribe(new[] { typeof(WorkDoneEvent).FullName });

            var bus = ServiceBus
                      .Create()
                      .SubscriptionManager(subscriptionManager)
                      .Start();

            Console.WriteLine();
            ColoredConsole.WriteLine(ConsoleColor.Green, "Client bus started.  Press CTRL+C to stop.");
            Console.WriteLine();
            ColoredConsole.WriteLine(ConsoleColor.Green, "Press enter to publish an OrderCompleted event.");
            Console.WriteLine();

            while (true)
            {
                Console.ReadLine();

                var message = new OrderCompletedEvent
                {
                    OrderId = Guid.NewGuid()
                };

                bus.Publish(message);

                Console.WriteLine("Published OrderCompleted Id: {0}", message.OrderId);
            }
        }
コード例 #5
0
 private void When(OrderCompletedEvent evt)
 {
     Status = OrderStatus.Done;
 }
コード例 #6
0
        public void SaveOrder(Sale.ShoppingCart shoppingCart, string apiCodes, DateTime saveTime)
        {
            try
            {
                //SaleOrders SaleDetail SaleDetailsTotal
                var        saleOrders = shoppingCart.GetSaleStatistics();//销售清单
                SaleOrders _saleOrder = new SaleOrders()
                {
                    StoreId           = shoppingCart.MachineInformation.StoreId,    //门店id
                    MachineSN         = shoppingCart.MachineInformation.MachineSn,  //pos机号
                    PaySN             = shoppingCart.OrderSN,                       //订单流水号
                    CustomOrderSn     = shoppingCart.CustomOrderSN,                 //订单流水号
                    TotalAmount       = saleOrders.Receivable,                      //优惠后金额
                    PreferentialPrice = saleOrders.Preferential,                    //优惠金额
                    ApiCode           = apiCodes,                                   //支付方式  TODO:
                    CreateUID         = shoppingCart.MachineInformation.CashierUid, //收银员工号
                    CreateDT          = saveTime,
                    CompanyId         = CompanyId,
                    ProductCount      = saleOrders.Num,
                    Type          = 0,
                    State         = 0,
                    MemberId      = shoppingCart.MemberId,
                    ActivityId    = shoppingCart.ActivityId,
                    Salesman      = shoppingCart.SaleMan,
                    Receive       = shoppingCart.WipeZeroAfter,
                    IsTest        = IsSalesclerkTest,
                    InInventory   = 0,
                    IsProcess     = false,
                    OrderDiscount = shoppingCart.OrderDiscount
                };
                SaleOrdersService.CurrentRepository.Add(_saleOrder, false);

                var saleOrdersDetails = shoppingCart.GetOrdeList();//订单信息
                foreach (var item in saleOrdersDetails)
                {
                    SaleDetail _saleDetail = new SaleDetail()
                    {
                        PaySN           = _saleOrder.PaySN,
                        ProductCode     = item.ProductCode,
                        AveragePrice    = item.AveragePrice,//均价
                        CompanyId       = CompanyId,
                        Total           = item.Details.Total,
                        Barcode         = item.MainBarcode,         //商品条码
                        PurchaseNumber  = item.SaleNumber,          //销售数量
                        BuyPrice        = item.Details.BuyPrice,    //系统进价
                        SysPrice        = item.Details.SystemPrice, //系统售价
                        ActualPrice     = item.MarketingPrice,      //销售价
                        Title           = item.Details.Title,
                        ScanBarcode     = item.CurrentString,
                        SalesClassifyId = (int)item.Details.SaleStatus,//销售分类id
                    };
                    SaleDetailService.CurrentRepository.Add(_saleDetail, false);
                }
                SaleOrdersService.CurrentRepository.Update(_saleOrder);
                var orderEvent = new OrderCompletedEvent()
                {
                    MemberId           = shoppingCart.MemberId,
                    CompanyId          = CompanyId,
                    MachineSn          = MachineSN,
                    StoreId            = StoreId,
                    OrderAmount        = saleOrders.Receivable,
                    OrderProductCount  = saleOrders.Num,
                    SourceRecordId     = shoppingCart.OrderSN,
                    OrderReceiveAmount = shoppingCart.WipeZeroAfter,
                    OperatorUid        = shoppingCart.MachineInformation.CashierUid,
                    OrderDetails       = shoppingCart.GetOrdeList().Select(o =>
                                                                           new OrderDetail()
                    {
                        AveragePrice    = o.AveragePrice,
                        ActualPrice     = o.MarketingPrice,
                        Barcode         = o.MainBarcode,
                        PurchaseNumber  = o.SaleNumber,
                        BuyPrice        = o.Details.BuyPrice,
                        ProductCode     = o.ProductCode,
                        SalesClassifyId = (int)o.Details.SaleStatus,
                        ScanBarcode     = o.CurrentString,
                        SysPrice        = o.Details.SystemPrice,
                        Title           = o.Details.Title,
                        Total           = o.Details.Total,
                        Category        = o.Details.Category,
                        Size            = o.Details.Size
                    })
                };
                RedisManager.Publish <OrderCompletedEvent>("OrderCompleted", orderEvent);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
コード例 #7
0
 public void Apply(OrderCompletedEvent @event)
 {
     OrderAmount += @event.Amount;
 }
コード例 #8
0
 public static void OrderIntegral(OrderCompletedEvent orderCompleteEvent)
 {
     RunIntegral(orderCompleteEvent, 1);
 }