public void Update(BetUpperLimit upperLimit)
 {
     string sql = string.Format(@"UPDATE {0} SET {1}=@{1},{2}=@{2},{3}=@{3},{4}=@{4},{5}=@{5} WHERE {6}=@{6}", BetUpperLimit.TABLENAME,
         BetUpperLimit.DROPVALUE, BetUpperLimit.NEXTLIMIT, BetUpperLimit.UPPERLLIMIT, BetUpperLimit.TOTALBETAMOUNT, BetUpperLimit.STOPBET, BetUpperLimit.LIMITID);
     base.ExecuteNonQuery(sql, new SqlParameter(BetUpperLimit.DROPVALUE, upperLimit.DropValue),
         new SqlParameter(BetUpperLimit.NEXTLIMIT, upperLimit.NextLimit),
         new SqlParameter(BetUpperLimit.UPPERLLIMIT, upperLimit.UpperLlimit),
         new SqlParameter(BetUpperLimit.TOTALBETAMOUNT, upperLimit.TotalBetAmount),
         new SqlParameter(BetUpperLimit.STOPBET, upperLimit.StopBet),
         new SqlParameter(BetUpperLimit.LIMITID, upperLimit.LimitId));
 }
 public void Insert(BetUpperLimit upperLimit)
 {
     string sql = string.Format(@"INSERT INTO {0} ({1},{2},{3},{4},{5},{6},{7}) VALUES (@{1},@{2},@{3},@{4},@{5},@{6},@{7})
     SELECT SCOPE_IDENTITY()", BetUpperLimit.TABLENAME, BetUpperLimit.NUM, BetUpperLimit.COMPANYID, BetUpperLimit.GAMEPLAYWAYID, BetUpperLimit.DROPVALUE,
                     BetUpperLimit.NEXTLIMIT, BetUpperLimit.UPPERLLIMIT, BetUpperLimit.TOTALBETAMOUNT);
     object id = base.ExecuteScalar(sql, new SqlParameter(BetUpperLimit.NUM, upperLimit.Num),
         new SqlParameter(BetUpperLimit.COMPANYID, upperLimit.CompanyId),
         new SqlParameter(BetUpperLimit.GAMEPLAYWAYID, upperLimit.GamePlayWayId),
         new SqlParameter(BetUpperLimit.DROPVALUE, upperLimit.DropValue),
         new SqlParameter(BetUpperLimit.NEXTLIMIT, upperLimit.NextLimit),
         new SqlParameter(BetUpperLimit.UPPERLLIMIT, upperLimit.UpperLlimit),
         new SqlParameter(BetUpperLimit.TOTALBETAMOUNT, upperLimit.TotalBetAmount));
     upperLimit.LimitId = Convert.ToInt32(id);
 }
示例#3
0
        private void UpdateUpperLimit(BetUpperLimit upperLimit)
        {
            var dropWaters = GetDropWater(upperLimit.Num, upperLimit.CompanyId, upperLimit.GamePlayWayId);
            var updropWaters = dropWaters.Where(it => it.Amount == upperLimit.NextLimit);   //获取下一个跌水限制
            DropWater updrop = null;
            //查找本次跌水
            foreach (var drop in updropWaters)
            {
                if (updrop != null && updrop.DropType == DropType.Manual) continue;
                updrop = drop;
            }
            if (updrop == null) LogConsole.Error(string.Format("号码:{0} 不存在金额为{1}的跌水限制!CompanyId:{2} , GamePlayWayId:{3}",
                upperLimit.Num, upperLimit.NextLimit, upperLimit.CompanyId, upperLimit.GamePlayWayId));
            else
                upperLimit.DropValue += updrop.DropValue;       //累加跌水值

            var minDrops = dropWaters.Where(it => it.Amount > upperLimit.NextLimit).GroupBy(it => it.Amount).OrderBy(it => it.Key).FirstOrDefault();
            int minDropCount = 0;
            DropWater dropWater = null;
            if (minDrops != null)
            {
                foreach (var drop in minDrops)
                {
                    minDropCount++;
                    if (dropWater != null && dropWater.DropType == DropType.Manual) continue;
                    dropWater = drop;
                }
                if (minDropCount > 2)
                    throw new ApplicationException(string.Format("号码:{0}的跌水记录大于2!CompanyId:{1} , GamePlayWayId:{2}",
                        upperLimit.Num, upperLimit.CompanyId, upperLimit.GamePlayWayId));
            }

            if (minDropCount == 0 || dropWater == null)
                upperLimit.NextLimit = upperLimit.UpperLlimit;
            else
                upperLimit.NextLimit = dropWater.Amount;
        }
示例#4
0
 private void TransformOrder(BetOrder order, BetUpperLimit upperLimit)
 {
     if (upperLimit.DropValue > 0)
     {
         IsDrop = true;
         order.DropWater += upperLimit.DropValue;
         order.Net += upperLimit.DropValue;
         double memberComm = (100 - order.Net).PercentageToDecimal(4);
         order.Commission = order.Turnover * (decimal)memberComm;
         order.NetAmount = order.Turnover - order.Commission;
         order.AncestorCommission.ForEach(it =>
         {
             if (it.Role == Role.Company)
             {
                 it.Commission += upperLimit.DropValue;
             }
             else
             {
                 it.Commission -= upperLimit.DropValue;
             }
             it.CommAmount = (decimal)it.Commission.PercentageToDecimal(4) * order.Turnover;
         });
     }
 }
示例#5
0
        /// <summary>
        /// 检查该注单是否可下.
        /// </summary>
        /// <param name="order">The order.</param>
        /// <param name="upperLimit">The upper limit.</param>
        /// <returns></returns>
        protected bool Check(BetOrder order, BetUpperLimit upperLimit)
        {
            decimal totalBetAmount = order.Amount + upperLimit.TotalBetAmount;
            if (totalBetAmount > upperLimit.UpperLlimit)        //最终投注金额大于投注上限金额
            {
                //TODO:错误信息呈现设计,存在多个插入失败
                //ErrorMessage = "Can't Bet!";
                return false;
            }
            while (totalBetAmount > upperLimit.NextLimit)          //总投注金额小于投注上限,大于本次跌水金额限制(增加跌水)
            {
                UpdateUpperLimit(upperLimit);

                //本次跌水限制金额==总下注金额时则说明没有跌水限制了
                if (upperLimit.NextLimit == upperLimit.TotalBetAmount) break;
            }

            return true;
        }
        public void UpdateLimit(BetUpperLimit limit)
        {
            var limitContext = GetLimitContext(limit.CompanyId, limit.GamePlayWayId);
            BetUpperLimit upperlimit;
            if (!limitContext.TryGetValue(limit.Num, out upperlimit))
            {
                limit.IsChange = true;
                limitContext.Add(limit.Num, limit);
            }
            else
            {
                lock (upperlimit)        //对象写锁
                {
                    upperlimit.IsChange = true;     //表示对象已经被修改
                    upperlimit.DropValue = limit.DropValue;
                    upperlimit.NextLimit = limit.NextLimit;
                    upperlimit.UpperLlimit = limit.UpperLlimit;
                    upperlimit.TotalBetAmount = limit.TotalBetAmount;
                    upperlimit.StopBet = limit.StopBet;
                }
            }
            //更新上限上下文
            var key = GetCacheKey(limit.CompanyId, limit.GamePlayWayId);
            if (!ContextDic[key])
                ContextDic[key] = true;

            var _limit = limitContext[limit.Num];
            //if (_limit != null)
            //    LogConsole.Debug(string.Format("LimitContext Num:{0} CompanyId:{1} GPW:{2} TotalAmount:{3} IsChange:{4} ContextSize:{5}", _limit.Num, _limit.CompanyId, _limit.GamePlayWayId, _limit.TotalBetAmount, _limit.IsChange, limitContext.Count));
            //else
            //    LogConsole.Debug(string.Format("LimitContext IsNull Num:{0} CompanyId:{1} GPW:{2} TotalAmount:{3}", limit.Num, limit.CompanyId, limit.GamePlayWayId, limit.TotalBetAmount));
        }
 public void UpdateLimit(BetUpperLimit limit, decimal amount)
 {
     if (amount < limit.UpperLlimit)
     {
         if (amount < limit.TotalBetAmount)
             throw new BusinessException(string.Format(ModelResource.MustGreatThan, Resource.Amount, limit.TotalBetAmount));
     }
     limit.UpperLlimit = amount;
     UpdateLimit(limit);
 }
 public void RefreshLimitNextLimit(BetUpperLimit limit)
 {
     LotteryCompany company = TodayLotteryCompany.Instance.GetTodayCompany().Find(it => it.CompanyId == limit.CompanyId);
     var dropWater = DwManager.GetTodayNumsDropWater(limit.Num, limit.GamePlayWayId, company);
     var drop = dropWater.Where(it => it.Amount >= limit.TotalBetAmount).OrderBy(it => it.Amount).FirstOrDefault();
     if (drop != null)
     {
         limit.NextLimit = drop.Amount;
         UpdateLimit(limit);
     }
 }
示例#9
0
        public BetUpperLimit GetDefaultUpperLimit(string num, int companyId, int gameplaywayId)
        {
            CheckNum(num);
            var company = TodayLotteryCompany.Instance.GetTodayCompany().Find(it => it.CompanyId == companyId);
            if (company == null)
                throw new ApplicationException("今日不存在公司!CompanyId:" + companyId);

            var defaultUpplerLimit = GetDefaultUpperLimit(company, gameplaywayId);
            var limitAmount = defaultUpplerLimit != null ? defaultUpplerLimit.LimitAmount : LotterySystem.Current.DefaultUpperLimit;

            var minDropWaters =GetMininumDropWater(num, gameplaywayId, company);//最小金额跌水
            int minDropCount = 0;
            DropWater dropWater = null;
            if (minDropWaters != null)
            {
                foreach (var drop in minDropWaters)
                {
                    minDropCount++;
                    if (dropWater != null && dropWater.DropType == DropType.Manual) continue;
                    dropWater = drop;
                }
                if (minDropCount > 2)
                    throw new ApplicationException(string.Format("号码:{0}的跌水记录大于2!CompanyId:{1} , GamePlayWayId:{2}", num, companyId, gameplaywayId));
            }

            var limit = new BetUpperLimit
            {
                Num = num,
                CompanyId = companyId,
                GamePlayWayId = gameplaywayId,
                DropValue = 0,
                NextLimit = dropWater == null ? limitAmount : dropWater.Amount,
                UpperLlimit = limitAmount,
                TotalBetAmount = 0
            };
            return limit;
        }
示例#10
0
 public void AddLimit(BetUpperLimit limit)
 {
     DaUpperLimit.Insert(limit);
 }
示例#11
0
 public void UpdateLimit(BetUpperLimit limit)
 {
     DaUpperLimit.Update(limit);
 }