示例#1
0
        public async Task <List <OrderDistribution> > TryAndCreateOrderDistributionAsync(ProductOrder order)
        {
            List <OrderDistribution> orderDistributions = new List <OrderDistribution>();

            using (CurrentUnitOfWork.SetTenantId(order.TenantId))
            {
                foreach (OrderItem orderItem in order.OrderItems)
                {
                    int count = _orderItemRepository.GetAll().Where(model => model.CreatorUserId == order.UserId &&
                                                                    model.SpecificationId == orderItem.SpecificationId &&
                                                                    model.Order.PaymentStatus == PaymentStatus.Payed).Count();

                    var orderItems = _orderItemRepository.GetAll().Where(model => model.CreatorUserId == order.UserId &&
                                                                         model.Order.PaymentStatus == PaymentStatus.Payed).ToList();

                    if (orderItem.Specification.Product.Distributions.Count() > 0)
                    {
                        foreach (Distribution distribution in orderItem.Specification.Product.Distributions)
                        {
                            if ((distribution.BuyWhen == BuyWhen.NoLimit) ||
                                (distribution.BuyWhen == BuyWhen.First && count <= 1) ||
                                (distribution.BuyWhen == BuyWhen.Next && count > 1))
                            {
                                User user = GetDistributionUser(order.User, distribution);

                                if (user != null)
                                {
                                    UserManager.IncreaseSales(user, order.Money);
                                    OrderDistribution orderDistribution = await CreateOrderDistributionAsync(user, distribution, orderItem, order);

                                    if (orderDistribution != null)
                                    {
                                        orderDistributions.Add(orderDistribution);
                                    }
                                }
                            }
                        }
                    }
                }
                return(orderDistributions);
            }
        }
示例#2
0
        public async Task <OrderDistribution> CreateOrderDistributionAsync(User user, Distribution distribution, OrderItem orderItem, ProductOrder order)
        {
            decimal money = GetDistributionMoney(distribution, order);

            if (money == 0)
            {
                return(null);
            }
            OrderDistribution orderDistribution = new OrderDistribution()
            {
                OrderId        = order.Id,
                Money          = money,
                OrderMoney     = order.PayMoney,
                OrderItemId    = orderItem.Id,
                UserId         = user.Id,
                DistributionId = distribution.Id
            };

            _orderDistributionRepository.Insert(orderDistribution);
            CurrentUnitOfWork.SaveChanges();
            await WalletManager.IncomeOfOrderRebate(user.ToUserIdentifier(), money, string.Format(L("DistributionOfLevel"), distribution.Level), order);

            return(orderDistribution);
        }