public async Task AddBalanceAsync(PlaceOrderPushlishParams parameters) { if (parameters == null) { throw new ArgumentException(nameof(parameters) + "为空"); } var account = await _dbContext.BusineAccounts.FirstAsync(); account.Balance += parameters.TotalPrice; await _dbContext.SaveChangesAsync(); }
public async Task UpdateProductStoreNumAsync(PlaceOrderPushlishParams parameters) { if (parameters == null) { throw new ArgumentException(nameof(parameters) + "为空"); } var warehouses = await _dbContext.Warehouses.Where(i => parameters.ProductIds.Contains(i.ProductId)) .ToListAsync(); warehouses.ForEach(i => i.StoreNum--); await _dbContext.SaveChangesAsync(); }
/// <summary> /// 下单 /// </summary> /// <param name="userId"></param> /// <param name="productIds"></param> /// <returns></returns> public async Task <Guid> AddOrderAsync(Guid userId, IEnumerable <Guid> productIds) { //下单过程: //1.下单,写入订单表 //2.用户支付,用户账户扣款 //3.商品库存减一 //4.企业账户加款 if (userId == Guid.Empty || !productIds.Any()) { throw new ArgumentException("参数为空"); } using (var trans = _dbContext.Database.BeginTransaction()) { var client = _httpClient.CreateClient(); string paramss = string.Join("|", productIds); //下单 var order = new Order() { UserId = userId, TotalPrices = Convert.ToDecimal(await client.GetStringAsync("http://localhost:5001/api/Warehouse/getTotalPrice?productIds=" + paramss))//await _dbContext.Products.Where(i => productIds.Contains(i.Id)).SumAsync(i => i.Price) }; await _dbContext.Orders.AddAsync(order); var orderProducts = productIds.Select(i => new OrderProduct() { OrderId = order.Id, ProductId = i }); await _dbContext.OrderProducts.AddRangeAsync(orderProducts); await _dbContext.SaveChangesAsync(); //下单成功,发布消息 var parameters = new PlaceOrderPushlishParams { UserId = userId, OrderId = order.Id, TotalPrice = order.TotalPrices, ProductIds = productIds }; await _publisher.PublishAsync(Constants.AddOrder, parameters, Constants.UserPaymentSuccess); trans.Commit(); return(order.Id); } }
public async Task <Guid> UserPaymentAsync(PlaceOrderPushlishParams parameters) { if (parameters == null) { throw new ArgumentException(nameof(parameters) + "为空"); } using (var trans = _dbContext.Database.BeginTransaction()) { var user = await _dbContext.Users.FindAsync(parameters.UserId); user.Balance -= parameters.TotalPrice; await _dbContext.SaveChangesAsync(); //发布消息,库存商品减1,企业账户加款 await _publisher.PublishAsync(Constants.UserPayment, parameters); //支付成功,更新订单支付状态为“已支付”,通过mq回调方法 trans.Commit(); } return(parameters.OrderId); }