/// <summary> /// 生成奖金 /// </summary> /// <param name="pk"></param> public void GenerateBonus(PK pk) { using (var db = new RacingDbContext()) { var betService = new BetService(); var bets = betService.ConvertRanksToBets(pk.Ranks); var pkRates = new PKRateService().GetPKRates(pk.PKId); // 按 名次/大小单双+车号 循环 foreach (var bet in bets) { // 奖金 var bonuses = new List <PKBonus>(); // 名次+车号 的下注数据 var dbBets = betService.GetBets(pk.PKId, bet.Rank, bet.Num); foreach (var dbBet in dbBets) { var pkRate = pkRates.Where(r => r.Rank == dbBet.Rank && r.Num == dbBet.Num).First(); bonuses.Add(new PKBonus { BetId = dbBet.BetId, PKId = pk.PKId, UserId = dbBet.UserId, Rank = dbBet.Rank, Num = dbBet.Num, BonusType = Data.Enums.BonusType.Bonus, Amount = Math.Round(dbBet.Amount * pkRate.Rate, 4), IsSettlementDone = true // 直接设置成已结算 }); } if (bonuses.Count > 0) { // 保存奖金 db.PKBonus.AddRange(bonuses); db.SaveChanges(); // 奖金加到余额 var userExtensionService = new UserExtensionService(); foreach (var bonus in bonuses) { userExtensionService.AddAmount(bonus.UserId, bonus.Amount); } } } } }
/// <summary> /// 生成退水 /// </summary> /// <param name="pk"></param> public void GenerateRebate(PK pk) { var userExtensionService = new UserExtensionService(); using (var db = new RacingDbContext()) { // 按下注用户生成 var userIds = db.Bet.Where(b => b.PKId == pk.PKId).Select(b => b.UserId).Distinct().ToList(); foreach (var userId in userIds) { var user = db.User.Where(u => u.UserId == userId).First(); var userRebates = db.UserRebate.Where(r => r.UserId == userId).ToList(); if (userRebates.Count > 0) { var bonuses = new List <PKBonus>(); // 会员退水奖金 var agentBonuses = new List <PKBonus>(); // 代理退水奖金 var generalAgentBonuses = new List <PKBonus>(); // 总代理退水奖金 var dbBets = db.Bet.Where(bi => bi.PKId == pk.PKId && bi.UserId == userId).ToList(); foreach (var dbBet in dbBets) { #region 会员退水 var userRebate = userRebates.Where(e => e.RebateNo == dbBet.Num).FirstOrDefault(); var rebate = UserRebateService.GetDefaultRebate(userRebate, user.DefaultRebateType); bonuses.Add(new PKBonus { BetId = dbBet.BetId, PKId = pk.PKId, UserId = dbBet.UserId, Rank = dbBet.Rank, Num = dbBet.Num, BonusType = Data.Enums.BonusType.Rebate, Amount = Math.Round(dbBet.Amount * rebate, 4), IsSettlementDone = true // 直接设置成已结算 }); #endregion if (user.ParentUserId.HasValue) { #region 代理退水 var agentUser = db.User.Where(u => u.UserId == user.ParentUserId).First(); var agentUserRebate = db.UserRebate .Where(r => r.UserId == user.ParentUserId && r.RebateNo == dbBet.Num).FirstOrDefault(); var agentRebate = UserRebateService.GetDefaultRebate(agentUserRebate, user.DefaultRebateType); // 使用下注用户的默认盘 if (agentRebate - rebate > 0) { agentBonuses.Add(new PKBonus { BetId = dbBet.BetId, PKId = pk.PKId, UserId = userRebate.User.ParentUserId.Value, ChildUserId = user.UserId, Rank = dbBet.Rank, Num = dbBet.Num, BonusType = Data.Enums.BonusType.Rebate, Amount = Math.Round(dbBet.Amount * (agentRebate - rebate), 4), //代理退水 - 给会员的退水 IsSettlementDone = true // 直接设置成已结算 }); } #endregion if (agentUser.ParentUserId.HasValue) { #region 总代理退水 var generalAgentUserRebate = db.UserRebate .Where(r => r.UserId == agentUser.ParentUserId && r.RebateNo == dbBet.Num).FirstOrDefault(); var generalAgentRebate = UserRebateService.GetDefaultRebate(generalAgentUserRebate, user.DefaultRebateType); // 使用下注用户的默认盘 if (generalAgentRebate - agentRebate > 0) { generalAgentBonuses.Add(new PKBonus { BetId = dbBet.BetId, PKId = pk.PKId, UserId = agentUser.ParentUserId.Value, ChildUserId = agentUser.UserId, Rank = dbBet.Rank, Num = dbBet.Num, BonusType = Data.Enums.BonusType.Rebate, Amount = Math.Round(dbBet.Amount * (generalAgentRebate - agentRebate), 4), //总代理退水 - 给代理的退水 IsSettlementDone = true // 直接设置成已结算 }); } #endregion } } } if (bonuses.Count > 0) { // 保存会员退水奖金 db.PKBonus.AddRange(bonuses); db.SaveChanges(); // 奖金加到余额 foreach (var bonus in bonuses) { userExtensionService.AddAmount(bonus.UserId, bonus.Amount); } } if (agentBonuses.Count > 0) { // 保存会员退水奖金 db.PKBonus.AddRange(agentBonuses); db.SaveChanges(); // 奖金加到余额 foreach (var bonus in agentBonuses) { userExtensionService.AddAmount(bonus.UserId, bonus.Amount); } } if (generalAgentBonuses.Count > 0) { // 保存会员退水奖金 db.PKBonus.AddRange(generalAgentBonuses); db.SaveChanges(); // 奖金加到余额 foreach (var bonus in generalAgentBonuses) { userExtensionService.AddAmount(bonus.UserId, bonus.Amount); } } } } } }