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 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); }
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); } }