示例#1
0
        public async Task <IActionResult> DraftOrderAsync([FromBody] CreateOrderInput input)
        {
            var sumamount          = input.ListItem.Sum(p => p.Amount);
            List <OrderItem> items = new List <OrderItem>();

            input.ListItem.ForEach(p =>
            {
                OrderItem temp     = new OrderItem();
                temp.Amount        = p.Amount;
                temp.Count         = p.Count;
                temp.OrderItemName = p.OrderItemName;
                items.Add(temp);
            });
            Address address = new Address {
                City = "南通", Country = "正余", State = "青正", Street = "测试", ZipCode = "20033"
            };

            MainOrder order = new MainOrder(input.OrderId, input.OrderName, sumamount, address, 0, 0, DateTime.Now, DateTime.MinValue, 1, items);


            using (var transaction = _orderDbContext.Database.BeginTransaction())
            {
                try
                {
                    OrderCreateEvent eventdata = new OrderCreateEvent
                    {
                        OrderId    = order.OrderId,
                        PayDecimal = order.OrderSumAmount,
                        PayedDesc  = "支付描述",
                        Payer      = "Shawn"
                    };
                    _capBus.Publish("Order.services.Payed", eventdata);


                    await _orderDbContext.AddAsync(order);

                    var result = await _orderDbContext.SaveChangesAsync();



                    transaction.Commit();
                }
                catch (Exception e)
                {
                    await transaction.RollbackAsync();

                    return(BadRequest());
                }

                return(Ok());
            }
        }
示例#2
0
        public async Task <IActionResult> AccountRegister(LoginViewModel model)
        {
            var res = new ResultModel();

            if (!Validate(model.UserName))
            {
                res.Code    = 102;
                res.Message = "请输入正确的手机号";
                return(Json(res));
            }

            var checkPhone = await _context.Shops.AnyAsync(s => s.Phone == model.UserName);

            if (checkPhone)
            {
                res.Code    = 103;
                res.Message = "手机号已存在";
                return(Json(res));
            }

            var password = Utils.MD5Encrypt(model.Password);

            var shop = new Shop
            {
                Phone    = model.UserName,
                Password = password,
                UserType = 0,
                Status   = AccountState.Uncertified,
                IsDelete = false,
                AddDate  = DateTime.Now
            };

            await _context.AddAsync(shop);

            await _context.SaveChangesAsync();

            res.Code    = 100;
            res.Message = "注册成功";
            res.Data    = new { id = shop.Id, username = shop.Phone, userType = shop.UserType, name = "" };

            return(Json(res));
        }
示例#3
0
        public async Task <CreateOrderResponseModel> Handle(CreateOrderCommand request, CancellationToken cancellationToken)
        {
            var order = _mapping.Map <CreateOrderRequestModel, Infrastructure.Entities.Order>(request.CreateOrderRequest);

            order.OrderStatus = (int)OrderStatus.Pending;

            var response = await _dbContext.AddAsync(order);

            if (await _dbContext.SaveChangesAsync() > 0)
            {
                await _bus.PubSub.PublishAsync(new UpdateStockEvent
                {
                    CorrelationId = Guid.NewGuid(),
                    ProductId     = order.ProductId,
                    Quantity      = order.Quantity,
                    OrderId       = order.Id
                });
            }

            return(_mapping.Map <Infrastructure.Entities.Order, CreateOrderResponseModel>(response.Entity));
        }
        public async Task <CreateOrderResponseModel> Handle(CreateOrderCommand request, CancellationToken cancellationToken)
        {
            var order = _mapping.Map <CreateOrderRequestModel, Infrastructure.Entities.Order>(request.CreateOrderRequest);

            order.OrderStatus = (int)OrderStatus.Pending;

            var response = await _dbContext.AddAsync(order);

            if (await _dbContext.SaveChangesAsync() > 0)
            {
                await _sendEndpoint.Send(new OrderSagaEventModel
                {
                    OrderId   = order.Id,
                    Quantity  = request.CreateOrderRequest.Quantity,
                    ProductId = request.CreateOrderRequest.ProductId
                });
            }
            else
            {
                throw new Exception("Create Order Failed!");
            }

            return(_mapping.Map <Infrastructure.Entities.Order, CreateOrderResponseModel>(response.Entity));
        }
示例#5
0
        public async Task <Order> AddItemToOrderAsync(int orderId, int itemId, int amount, string username)
        {
            if (string.IsNullOrWhiteSpace(username))
            {
                throw new ArgumentNullException("Username cannot be null.");
            }

            var order = new Order();

            using (var transaction = _orderDbContext.Database.BeginTransaction())
            {
                try
                {
                    if (amount < 1 || amount > 99)
                    {
                        throw new ArgumentOutOfRangeException("Amount should be from 1 to 99");
                    }

                    var warehouseItem = await _orderDbContext.WarehouseItems
                                        .Include(wi => wi.Item)
                                        .FirstOrDefaultAsync(wi => wi.Item.ItemId == itemId);

                    if (warehouseItem == null)
                    {
                        throw new ArgumentException("No warehouse item with such Id.");
                    }
                    if (warehouseItem.Amount < amount)
                    {
                        throw new ArgumentException("Not enough items in warehouse");
                    }

                    if (orderId == 0)
                    {
                        order = new Order
                        {
                            Username   = username,
                            StatusId   = OrderStatus.Collecting,
                            OrderItems = new List <OrderItem> {
                                new OrderItem
                                {
                                    Item   = warehouseItem.Item,
                                    Amount = amount
                                }
                            }
                        };
                        await _orderDbContext.AddAsync(order);

                        warehouseItem.Amount -= amount;
                    }
                    else
                    {
                        order = await GetOrderByIdAsync(orderId);

                        if (order.Status.StatusId != OrderStatus.Collecting)
                        {
                            throw new ArgumentException("Order status should be \"Collecting\".");
                        }

                        if (order.Username != username)
                        {
                            throw new ArgumentException("Username for existing order should be the same.");
                        }

                        var existingOrderItem = order.OrderItems
                                                .FirstOrDefault(oi => oi.Item.ItemId == itemId);

                        if (existingOrderItem == null)
                        {
                            order.OrderItems.Add(new OrderItem
                            {
                                Item   = warehouseItem.Item,
                                Amount = amount
                            });
                        }
                        else
                        {
                            existingOrderItem.Amount += amount;
                        }

                        warehouseItem.Amount -= amount;
                    }

                    if (!await SaveChangesAsync())
                    {
                        throw new DbUpdateException("Database failure");
                    }

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw e;
                }
            }

            return(order);
        }
示例#6
0
        public async Task <IActionResult> PreOrder([FromBody] ProOrderViewModel model)
        {
            var carts = await GetCartGoods(model.cartIds);

            var goodsIds  = carts.Select(c => c.GoodsId).ToArray();
            var priceList = await _context.GoodsPrices.Where(p => goodsIds.Contains(p.GoodsId)).ToListAsync();

            foreach (var item in carts)
            {
                var entity = priceList.FirstOrDefault(p => p.GoodsId == item.GoodsId && p.ShopId == item.ShopId && !p.IsDelete);
                if (entity != null)
                {
                    item.Price = entity.Price;
                    continue;
                }
                // 默认商品价格
                entity = priceList.FirstOrDefault(p => p.GoodsId == item.GoodsId && p.ShopId == 0);

                if (entity != null)
                {
                    item.Price = entity.Price;
                }
            }

            var now = DateTime.Now;

            OrderRecord order = new OrderRecord();

            order.ShopId      = Sid;
            order.Status      = 0;
            order.Num         = carts.Sum(c => c.Num);
            order.TotalAmount = carts.Sum(c => c.Num * c.Price);
            order.PayPrice    = order.TotalAmount;
            order.OrderDate   = now;

            await _context.AddAsync(order);

            await _context.SaveChangesAsync();

            foreach (var item in carts)
            {
                var orderGoods = new OrderRecordDetail
                {
                    OrderId = order.Id,
                    GoodsId = item.GoodsId,
                    Code    = item.GoodsCode,
                    Name    = item.GoodsName,
                    Img     = item.GoodsImg,
                    Num     = item.Num,
                    Price   = item.Price,
                    AddDate = now
                };
                await _context.AddAsync(orderGoods);
            }

            await _context.SaveChangesAsync();

            var result = new ResultModel();

            result.Code = 100;
            result.Data = new { oid = order.Id };
            return(Json(result));
        }