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); } }
public async Task ProcessChannlRelationChain(ChannelAgency channelAgency) { using (CurrentUnitOfWork.SetTenantId(channelAgency.TenantId)) { User user = UserRepository.Get(channelAgency.UserId); await Task.Run(() => { ProcessChannlRelationChainRecursion(user, channelAgency); }); } }
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); }
private void ProcessChannlRelationChainRecursion(User user, ChannelAgency channelAgency, int depth = 1) { if (user.Children.Count > 0) { foreach (User childUser in user.Children) { childUser.ChannelAgentDepth = depth; childUser.ChannelAgencyId = channelAgency.Id; if (!childUser.IsChannelAgency) { ProcessChannlRelationChainRecursion(childUser, channelAgency, depth + 1); } } } }
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); } }
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); } }