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