/// <summary> /// 按wechat单号生成奖金+退水 /// </summary> /// <param name="orderNo"></param> /// <returns></returns> public decimal GetBonusAndRebateAmount(long orderNo) { var rebateAmount = 0M; //退水 var bonusAmount = 0M; //奖金 var dbBetItems = new BetItemService().GetBetItemsByOrderNo(orderNo); // 计算退水 var userIds = dbBetItems.Select(bi => bi.Bet.UserId).Distinct().ToList(); var users = new UserService().GetUsers(userIds); var userRebates = new UserRebateService().GetUserRebates(userIds); foreach (var userId in userIds) { var user = users.Where(u => u.UserId == userId).First(); var userBetItems = dbBetItems.Where(bi => bi.Bet.UserId == userId).ToList(); foreach (var userBetItem in userBetItems) { var userRebate = userRebates.Where(e => e.UserId == userId && e.RebateNo == userBetItem.Num).FirstOrDefault(); if (userRebate != null) { var rebate = UserRebateService.GetDefaultRebate(userRebate, user.DefaultRebateType); rebateAmount += Math.Round(userBetItem.Amount * rebate, 4); } } } // 计算奖金 var betService = new BetService(); var pkIds = dbBetItems.Select(bi => bi.Bet.PKId).Distinct().ToList(); var pks = new PKService().GetPKs(pkIds); var dbPKRates = new PKRateService().GetPKRates(pkIds); foreach (var pk in pks) { var bets = betService.ConvertRanksToBets(pk.Ranks); foreach (var bet in bets) { var pkRate = dbPKRates.Where(r => r.PKId == pk.PKId && r.Rank == bet.Rank && r.Num == bet.Num).First(); var betAmount = dbBetItems.Where(bi => bi.Bet.PKId == pk.PKId && bi.Rank == bet.Rank && bi.Num == bet.Num).Sum(bi => (decimal?)bi.Amount ?? 0); bonusAmount += Math.Round(betAmount * pkRate.Rate, 4); } } return(rebateAmount + bonusAmount); }