예제 #1
0
        public async Task <bool> TryToSaveOrderAsync(OrderInfo order)
        {
            if (order.SubOrders == null || order.SubOrders.Count == 0)
            {
                return(false);
            }
            // Try to change count of products
            if (!await TryToChangeCountOfProductsAsync(order.SubOrders.Select(s => Tuple.Create(s.ProductId, s.Count))))
            {
                return(false);
            }
            // Add order and get order id
            await Orders.AddAsync(order);

            await SaveChangesAsync();

            var id = Orders.Last().Id;

            // Order sub orders (to add relations)
            order.SubOrders = order.SubOrders
                              .OrderBy(s => s.ProductId)
                              .ToList();
            // Add relations and save sub orders
            for (int i = 0; i < order.SubOrders.Count; i++)
            {
                var subOrder = order.SubOrders[i];
                subOrder.OrderId = id;
                SubOrders.Add(subOrder);
                for (int j = i + 1; j < order.SubOrders.Count; j++)
                {
                    var relation = await GetRelationAsync(new object[] { subOrder.ProductId, order.SubOrders[j].ProductId });

                    if (relation == null)
                    {
                        await AddRelationAsync(new Relation()
                        {
                            LesserId = subOrder.ProductId,
                            BiggerId = order.SubOrders[j].ProductId,
                            Count    = 1
                        });
                    }
                    else
                    {
                        relation.Count += 1;
                    }
                }
            }
            await SaveChangesAsync();

            return(true);
        }
예제 #2
0
 /// <summary>
 /// 释放占用资源
 /// </summary>
 public override void Dispose()
 {
     SubOrders.Clear();
 }
예제 #3
0
 public async Task <List <SubOrder> > GetSubOrdersAsync(int orderId)
 {
     return(SubOrders
            .Where(or => or.OrderId == orderId)
            .ToList());
 }