コード例 #1
0
        public void TryAndCreateOrderChannelAgentRebate(ChannelAgency channelAgency, Order order, ref float totalRebateRatio, int depth, ref List <ChannelAgentRebate> channelAgentRebates)
        {
            float rebateRatio = channelAgency.ChannelAgent.RebateRatio - totalRebateRatio;

            if (rebateRatio > 0)
            {
                ChannelAgentRebate channelAgentRebate = new ChannelAgentRebate()
                {
                    OrderId        = order.Id,
                    UserId         = channelAgency.UserId,
                    ChannelAgentId = channelAgency.ChannelAgentId,
                    ChannlAgencyId = channelAgency.Id,
                    RebateRatio    = rebateRatio,
                    Money          = order.PayMoney * (decimal)rebateRatio,
                    Depth          = depth
                };
                ChannelAgentRebateRepository.Insert(channelAgentRebate);
                CurrentUnitOfWork.SaveChanges();

                WalletManager.IncomeOfOrderRebate(channelAgency.GetUserIdentifier(), channelAgentRebate.Money, "ChannelAgentRebate", order);
                totalRebateRatio += rebateRatio;
            }

            if (channelAgency.User.ChannelAgencyId.HasValue)
            {
                depth += channelAgency.User.ChannelAgentDepth;
                ChannelAgency parentChannelAgency = ChannelAgencyRepository.Get(channelAgency.User.ChannelAgencyId.Value);
                TryAndCreateOrderChannelAgentRebate(parentChannelAgency, order, ref totalRebateRatio, depth, ref channelAgentRebates);
            }
        }
コード例 #2
0
        public ChannelAgency AddNewCustomer(int channelAgencyId, int depth)
        {
            ChannelAgency channelAgency = ChannelAgencyRepository.Get(channelAgencyId);

            channelAgency.ChildCount++;

            if (depth > channelAgency.Depth)
            {
                channelAgency.Depth = depth;
            }
            ChannelAgencyRepository.Update(channelAgency);
            return(channelAgency);
        }
コード例 #3
0
        public async Task <List <ChannelAgentRebate> > TryAndCreateOrderChannelAgentRebatesAsync(Order order)
        {
            using (CurrentUnitOfWork.SetTenantId(order.TenantId))
            {
                User user = order.User;
                List <ChannelAgentRebate> channelAgentRebates = new List <ChannelAgentRebate>();

                if (user.ChannelAgencyId.HasValue)
                {
                    ChannelAgency channelAgency    = ChannelAgencyRepository.Get(user.ChannelAgencyId.Value);
                    float         totalRebateRatio = 0;

                    await Task.Run(() =>
                    {
                        TryAndCreateOrderChannelAgentRebate(channelAgency, order, ref totalRebateRatio, user.ChannelAgentDepth, ref channelAgentRebates);
                    });
                }
                return(channelAgentRebates);
            }
        }
コード例 #4
0
        public ChannelAgency CreateChannelAgency(ChannelAgent channelAgent, User user)
        {
            using (CurrentUnitOfWork.SetTenantId(user.TenantId))
            {
                ChannelAgency channelAgency = new ChannelAgency()
                {
                    UserId         = user.Id,
                    ChannelAgentId = channelAgent.Id,
                    RebateRatio    = channelAgent.RebateRatio
                };
                ChannelAgencyRepository.Insert(channelAgency);
                CurrentUnitOfWork.SaveChanges();

                user.IsChannelAgency     = true;
                user.UserChannelAgencyId = channelAgency.Id;
                UserRepository.Update(user);

                ProcessChannlRelationChain(channelAgency);
                return(channelAgency);
            }
        }
コード例 #5
0
 public ChannelAgency GetChannelAgencyOfUser(long userId)
 {
     return(ChannelAgencyRepository.GetAll().Where(model => model.UserId == userId).FirstOrDefault());
 }