示例#1
0
        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);
        }