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); }
private void Apply(OrderCompletedEvent @event) { if (status != OrderStatus.InProgress) { throw new Exception("Only processing orders could be completed"); } status = OrderStatus.Completed; }
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); }
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); } }
private void When(OrderCompletedEvent evt) { Status = OrderStatus.Done; }
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; } }
public void Apply(OrderCompletedEvent @event) { OrderAmount += @event.Amount; }
public static void OrderIntegral(OrderCompletedEvent orderCompleteEvent) { RunIntegral(orderCompleteEvent, 1); }