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()); } }
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)); }
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)); }
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); }
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)); }