Пример #1
0
        public async Task <int> Handle(CreateOrderRequest request, CancellationToken cancellationToken)
        {
            var strategy = dbContext.Database.CreateExecutionStrategy();
            await strategy.ExecuteAsync(async() =>
            {
                using (var trans = dbContext.Database.BeginTransaction(capBus, autoCommit: true))
                {
                    //业务代码
                    var query = dbContext.Products.FirstOrDefault(p => p.ProductCode == request.Model.ProductCode);
                    if (query == null)
                    {
                        throw new FriendlyException()
                        {
                            ExceptionCode    = 404,
                            ExceptionMessage = $"The product: {request.Model.ProductCode} does not exists."
                        };
                    }
                    query.ProductAmount--;

                    string orderNO = DateTime.Now.ToString("yyyyMMddHHmmssfff").ToString();

                    string accessToken = await httpContextAccessor.HttpContext.GetTokenAsync("access_token");
                    CreateOrderCapMessage capMessage = new CreateOrderCapMessage()
                    {
                        AccessToken = accessToken, OrderNO = orderNO, ProductCode = query.ProductCode
                    };
                    capBus.Publish("productservice.orderingservice.createorder", capMessage);

                    await dbContext.SaveChangesAsync(cancellationToken);
                }
            });

            return(1);
        }
Пример #2
0
 public async Task CreateOrder(CreateOrderCapMessage capMessage)
 {
     ISubscriberCallApi callApi = RestService.For <ISubscriberCallApi>(Configuration["ApiGatewayService:Url"],
                                                                       new RefitSettings()
     {
         AuthorizationHeaderValueGetter = () => Task.FromResult <string>(capMessage.AccessToken)
     });
     await callApi.AddOrder(new AddOrderModel()
     {
         OrderNO = capMessage.OrderNO, ProductCode = capMessage.ProductCode
     });
 }