async Task <bool> UnDeductionGoodsStock(CreateOrderDeductionGoodsStockDto input) { var data = input.CopyTo <CreateOrderDeductionGoodsStockDto, DeductionStockDto>(); data.ActorId = input.GoodsId.ToString(); return((await goodsActorService.UnDeductionGoodsStock(data)).GetData <bool>()); }
public async Task <bool> Cancel(Order order) { if (order.OrderState == Enums.OrderState.Create) { foreach (var item in order.OrderItems) { var deductstock = new CreateOrderDeductionGoodsStockDto(item.GoodsId, item.Count); await undeductionGoodsStock(deductstock); } order.OrderState = Enums.OrderState.Cancel; return(true); } else { return(false); } }
public async Task <Order> CreateOrder(Guid userId, string consigneeName, string consigneeAddress, string consigneeTel, List <OrderItem> orderItems) { var order = new Order(); if (orderItems == null || !orderItems.Any()) { throw new DomainException("订单明细不能为空!"); } orderItems = orderItems.GroupBy(x => x.GoodsId).Select(x => new OrderItem() { GoodsId = x.Key, Count = x.Sum(y => y.Count) }).ToList(); //rpc获取商品基本信息 var goodslist = await getGoodsList(orderItems.Select(x => x.GoodsId)); //填充订单明细 foreach (var item in orderItems) { var goods = goodslist.FirstOrDefault(x => x.GoodsId == item.GoodsId); if (goods == null) { throw new DomainException($"订单创建失败,商品不存在或已下架!"); } var deductstock = new CreateOrderDeductionGoodsStockDto(item.GoodsId, item.Count); if (!await deductionGoodsStock(deductstock)) { throw new DomainException($"订单创建失败,商品{goods.GoodsName}库存不足!"); } else { succGoodsIds.Add(deductstock); } item.Create(order.Id, goods); } //创建订单实体 order.CreateOrder(userId, consigneeName, consigneeAddress, consigneeTel, orderItems); return(order); }