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();
             }
         }
     });
 }
Beispiel #2
0
        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
                    });
                }
            }));
        }
Beispiel #3
0
 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;
         }
     }));
 }