protected Func<string, int, int> TransToMethod(GamePlayWay gpw) { if (!CalFuncDic.ContainsKey(gpw.Id)) { string wayName = gpw.PlayWay.ToString().Replace("+", "And"); string methodName = "Calc" + wayName; var method = this.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance); ParameterExpression numExp = Expression.Parameter(typeof(string), "num"); ParameterExpression companyTypeExp = Expression.Parameter(typeof(int), "companyTypeId"); LambdaExpression lambda = LambdaExpression.Lambda<Func<string, int, int>>(Expression.Call(Expression.Constant(this), method, numExp, companyTypeExp), numExp, companyTypeExp); CalFuncDic.Add(gpw.Id, lambda.Compile() as Func<string, int, int>); } return CalFuncDic[gpw.Id]; }
/// <summary> /// 计算号码数量(不同玩法中号码所占数量,如2D HN公司4个,18A1个,3D又不同). /// </summary> /// <param name="num">The num.</param> /// <param name="gamePlayWay">The game play way.</param> /// <param name="companyType">Type of the company.</param> /// <param name="isFullPermutation">if set to <c>true</c> [is full permutation].</param> /// <returns></returns> private int CountNumQuantity(string num, GamePlayWay gamePlayWay, CompanyType companyType) { var counter = NumQuantityCounterFactory.GetFactory.GetCounter(gamePlayWay.GameType, companyType, LotterySystem.Current.GetNumLenSupport(companyType)); return counter.CountNumQuantity(num, gamePlayWay.PlayWay); }
/// <summary> /// 创建下注订单. /// </summary> /// <param name="num">The num.</param> /// <param name="numQuantity">The num quantity.</param> /// <param name="commModel">The comm model.</param> /// <param name="gamePlayWay">The game play way.</param> /// <param name="company">The company.</param> /// <param name="wager">The wager.</param> /// <returns></returns> private BetOrder BuildBetOrder(string num, int numQuantity, Pair<CommissionGroup, IEnumerable<ConcreteCommission>> memberComm, GamePlayWay gamePlayWay, LotteryCompany company, decimal wager, User user, bool isCon = false) { var commValue = memberComm.Value.Find(it => it.CompanyType == company.CompanyType && it.GameType == gamePlayWay.GameType); double percentComm = isCon ? commValue.Commission - LotterySystem.Current.AutoElectionCodeCommission : commValue.Commission; decimal comm = (decimal)MathHelper.PercentageToDecimal(percentComm, 4); decimal turnOver = wager * numQuantity; decimal commission = comm * turnOver; BetOrder order = new BetOrder { Num = num, GamePlayWayId = gamePlayWay.Id, CompanyId = company.CompanyId, Amount = wager, Odds = commValue.Odds, Commission = commission, Turnover = turnOver, Net = 100 - percentComm, NetAmount = turnOver - commission, Status = BetStatus.Valid, UserId = user.UserId, AncestorCommission = BuildAncestorCommission(turnOver, user, gamePlayWay.GameType, company.CompanyType, memberComm.Key.Specie, isCon) }; if (isCon) { order.DropWater += LotterySystem.Current.AutoElectionCodeCommission; } return order; }