public override async Task Handle(CancelOrderDto input) { await HandleAsync(input, async() => { using (var tran = transaction.BeginTransaction()) { var order = await orderRepository.GetAsync(input.OrderId); if (order == null) { throw new ApplicationException("订单没有找到!"); } //取消订单操作 order.CancelOrder(); //创建订单记录 var log = new OrderHandleLogFactory().Create(order.OrderNo, order.Id, order.State, input.UserId, input.Account, "", true); //规约检查 if (await new CancelOrderSpecification(input.UserId).SatisfiedBy(order)) { //持久化 orderRepository.Update(order); orderHandleLogRepository.Add(log); //发起取消订单成功事件 await eventBus.PublishAsync("EshopSample.CancelOrderSuccessEvent", new CancelOrderEvent(order.Id, globalTool.MapList <OrderItemEntity, OrderGoodsEvent>(order.OrderItems)) { }); await orderRepository.SaveAsync(); tran.Commit(); } } }); }
public async Task <BaseApiResult <bool> > Excute(OrderPayReq input) { bool needPublishEvent = false; OrderEntity order = default; return(await HandleAsync(input, async() => { //获取订单状态 order = await orderRepository.GetAsync(x => x.UserId == currentUserInfo.UserId && x.Id == input.OrderId); if (order == null) { throw new ApplicationException("订单错误,无法进行支付!"); } //支付成功修改订单状态 order.PayOrder(); //创建订单记录 var log = new OrderHandleLogFactory().Create(order.OrderNo, order.Id, order.State, input.UserId, input.Account, "", true); //规约检查 if (await new PayOrderSpecification(input.UserId).SatisfiedBy(order)) { //rpc调用支付 var payResult = await accountRecharge.Excute(new AccountRechargeDto() { RechargeBalance = -order.TotalPrice, UserId = input.UserId, Account = input.Account }); if (payResult.IsError()) { throw new ApplicationException(payResult.ErrMessage); } needPublishEvent = true; //持久化 using (var tran = transaction.BeginTransaction()) { orderRepository.Update(order); orderHandleLogRepository.Add(log); await orderRepository.SaveAsync(); tran.Commit(); return true; } } else { return false; } }, async (e) => { //当支付成功且修改订单状态失败则发布事件回滚支付 if (needPublishEvent) { await eventBus.PublishAsync("EshopSample.PayOrderFailEvent", new PayOrderFailEvent() { TotalPrice = order.TotalPrice }); } })); }
public async Task <BaseApiResult <bool> > Excute(OrderCreateReq input) { return(await HandleAsync(input, async() => { using (var tran = transaction.BeginTransaction()) { //创建订单 var order = new OrderFactory().Create(input.UserId, input.GoodsList.SetDto <OrderCreateGoodsReq, OrderItemEntity>()); orderRepository.Add(order); //创建订单记录 var log = new OrderHandleLogFactory().Create(order.OrderNo, order.Id, order.State, input.UserId, input.Account, ""); orderHandleLogRepository.Add(log); //持久化 await orderRepository.SaveAsync(); //发起订单创建成功事件 await eventBus.PublishAsync("EshopSample.CreateOrderSuccessEvent", new CreateOrderEvent(order.Id)); tran.Commit(); return true; } })); }