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); }
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; }
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; }); } }
/// <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); } }
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; }
public void AddLimit(BetUpperLimit limit) { DaUpperLimit.Insert(limit); }
public void UpdateLimit(BetUpperLimit limit) { DaUpperLimit.Update(limit); }