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];
 }
예제 #2
0
 /// <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);
 }
예제 #3
0
 /// <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;
 }