private Queue <BetDetail> mQueue = new Queue <BetDetail>();//队列 public void Put(BetDetail detail) { lock (LockObject) { mQueue.Enqueue(detail); } }
/// <summary> /// 修改状态 /// </summary> /// <param name="detail"></param> /// <returns></returns> public static bool UpdateOpenState(BetDetail detail) { string sql = "update BetDetails set IsMatch='" + detail.IsMatch + "',WinMoney=" + detail.WinMoney + ",Stauts=" + ((int)detail.Stauts) + ",OpenResult='" + detail.OpenResult + "' where id=" + detail.Id + ""; //return this.mRepo.GetDbContext.Database.ExecuteSqlCommand(sql, detail.IsMatch, detail.WinMoney, detail.Stauts, detail.OpenResult, detail.Id); return(SqlHelper.ExecteNonQuery(System.Data.CommandType.Text, sql, null) > 0); }
public void ArsenalServiceRefreshCache_Test() { try { Config.Cache.RefreshCache(); RelationLeagueTeam.Clean(); RelationLeagueTeam.Cache.RefreshCache(); League.Cache.RefreshCache(); Match.Cache.RefreshCache(); Player.Cache.RefreshCache(); Team.Cache.RefreshCache(); Video.Cache.RefreshCache(); //AcnCasino CasinoItem.Clean(); ChoiceOption.Clean(); Bet.Clean(); BetDetail.Clean(); // Clean Log Log.Clean(); } catch (Exception ex) { Assert.Fail(ex.Message); } }
protected void gvBet_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { var ltrlResult = e.Row.FindControl("ltrlResult") as Literal; var ltrlBetRate = e.Row.FindControl("ltrlBetRate") as Literal; var ltrlBonusCalc = e.Row.FindControl("ltrlBonusCalc") as Literal; if (ltrlResult != null && ltrlBetRate != null && ltrlBonusCalc != null) { var bet = e.Row.DataItem as Bet; if (bet != null) { var item = CasinoItem.GetCasinoItem(bet.CasinoItemGuid); switch (item.ItemType) { case CasinoType.SingleChoice: var dt = BetDetail.GetBetDetailByBetId(bet.ID); foreach (DataRow dr in dt.Rows) { if (dr["DetailName"].ToString() == MatchChoiceOption.HomeWinValue) { ltrlResult.Text = "主队胜"; } else if (dr["DetailName"].ToString() == MatchChoiceOption.DrawValue) { ltrlResult.Text = "双方平"; } else if (dr["DetailName"].ToString() == MatchChoiceOption.AwayWinValue) { ltrlResult.Text = "客队胜"; } } break; case CasinoType.MatchResult: var matchResult = new MatchResultBetDetail(BetDetail.GetBetDetailByBetId(bet.ID)); ltrlResult.Text = $"{matchResult.Home} : {matchResult.Away}"; break; } } if (bet?.BetRate != null) { ltrlBetRate.Text = Convert.ToSingle(bet.BetRate).ToString("f2"); ltrlBonusCalc.Text = "+" + ((Convert.ToSingle(bet.BetRate) - 1) * Convert.ToSingle(bet.BetAmount)) .ToString("N2"); } else { ltrlBetRate.Text = "/"; ltrlBonusCalc.Text = "RP+1"; } } } }
public void Execute(object state) { var logInfo = new LogInfo { MethodInstance = MethodBase.GetCurrentMethod(), ThreadInstance = Thread.CurrentThread }; //string _scheduleType = this.GetType().DeclaringType.FullName; try { log.Info("Scheduler Start: (RefreshCache)", logInfo); Config.UpdateAssemblyInfo(Assembly.GetExecutingAssembly(), ConfigSystem.Arsenal); ConfigGlobal_Arsenal.Refresh(); RelationLeagueTeam.Clean(); RelationLeagueTeam.Cache.RefreshCache(); RelationGroupTeam.Clean(); RelationLeagueTeam.Cache.RefreshCache(); League.Cache.RefreshCache(); Match.Cache.RefreshCache(); Player.Cache.RefreshCache(); Team.Cache.RefreshCache(); Video.Cache.RefreshCache(); //AcnCasino CasinoItem.Clean(); ChoiceOption.Clean(); Bet.Clean(); BetDetail.Clean(); // Clean Log Log.Clean(); log.Info("Scheduler End: (RefreshCache)", logInfo); } catch (Exception ex) { log.Warn(ex, logInfo); } }
protected void gvBetLog_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { var drv = e.Row.DataItem as DataRowView; if (drv != null) { var m = new Match((Guid)drv["MatchGuid"]); var hlHome = e.Row.FindControl("hlHome") as HyperLink; var hlAway = e.Row.FindControl("hlAway") as HyperLink; var hlVersus = e.Row.FindControl("hlVersus") as HyperLink; if (hlHome != null && hlAway != null && hlVersus != null) { var tHome = Team.Cache.Load(m.Home); var tAway = Team.Cache.Load(m.Away); hlHome.Text = tHome.TeamDisplayName; hlHome.NavigateUrl = $"CasinoTeam.aspx?Team={m.Home}"; hlAway.Text = tAway.TeamDisplayName; hlAway.NavigateUrl = $"CasinoTeam.aspx?Team={m.Away}"; hlVersus.NavigateUrl = $"CasinoTeam.aspx?Match={m.MatchGuid}"; hlVersus.Text = $"<em title=\"{tHome.Ground}{(tHome.Capacity.HasValue ? ("(" + tHome.Capacity.Value + ")") : string.Empty)}\">vs</em>"; } } var ltrlResult = e.Row.FindControl("ltrlResult") as Literal; var ltrlBetResult = e.Row.FindControl("ltrlBetResult") as Literal; var ltrlBetRate = e.Row.FindControl("ltrlBetRate") as Literal; var btnReturnBet = e.Row.FindControl("btnReturnBet") as LinkButton; if (drv != null && ltrlResult != null && ltrlBetResult != null && ltrlBetRate != null && btnReturnBet != null) { var itemGuid = (Guid)drv["CasinoItemGuid"]; var item = CasinoItem.GetCasinoItem(itemGuid); var dt = BetDetail.GetBetDetailByBetId((int)drv["ID"]); if (dt != null) { var dr = dt.Rows[0]; switch (item.ItemType) { case CasinoType.SingleChoice: if (dr["DetailName"].ToString() == MatchChoiceOption.HomeWinValue) { ltrlResult.Text = "主队胜"; } else if (dr["DetailName"].ToString() == MatchChoiceOption.DrawValue) { ltrlResult.Text = "双方平"; } else if (dr["DetailName"].ToString() == MatchChoiceOption.AwayWinValue) { ltrlResult.Text = "客队胜"; } break; case CasinoType.MatchResult: var betDetail = new MatchResultBetDetail(dt); ltrlResult.Text = $"{betDetail.Home}:{betDetail.Away}"; break; } } if (!Convert.IsDBNull(drv["IsWin"])) { ltrlBetResult.Visible = true; btnReturnBet.Visible = false; if (Convert.ToBoolean(drv["IsWin"])) { if (item.ItemType == CasinoType.SingleChoice) { ltrlBetResult.Text = "<span class=\"CasinoSys_True\" title=\"猜对输赢\"></span>"; } else if (item.ItemType == CasinoType.MatchResult) { ltrlBetResult.Text = "<span class=\"CasinoSys_Good\" title=\"猜对比分\"></span>"; } e.Row.CssClass = "RowCasinoSys_True"; } else { ltrlBetResult.Text = "<span class=\"CasinoSys_False\" title=\"失败\"></span>"; } } else if (Convert.IsDBNull(drv["IsWin"]) && (CurrentUserId == userid) && (item.CloseTime > DateTime.Now)) { btnReturnBet.Visible = true; btnReturnBet.CommandArgument = drv["ID"].ToString(); } else { ltrlBetResult.Visible = false; btnReturnBet.Visible = false; } } if (drv != null && ltrlBetRate != null) { ltrlBetRate.Text = Convert.IsDBNull(drv["BetRate"]) ? "/" : Convert.ToSingle(drv["BetRate"]).ToString("f2"); } } }
/// <summary> /// 计算投注结果 /// </summary> /// <param name="issueCode">当前开奖期号</param> /// <param name="openResult">当前开奖结果</param> private void CalculateCatchNums(string lotteryCode, string issueCode, string openResult) { //获取所有未完成的追号记录 var source = this.mSysCatchNumService.GetNotCompledCatchNumList(lotteryCode, issueCode); if (null == source) { return; } //循环进行计算 foreach (var item in source) { int code = item.PalyRadioCode; try { ICalculate calculate = RadioContentFactory.CreateInstance(code); var betDetail = new BetDetail() { BackNum = item.BackNum, BetContent = item.BetContent, BetCount = item.BetCount, BonusLevel = item.BonusLevel, IsMatch = item.IsMatch, IssueCode = item.IssueCode, Model = item.Model, Multiple = item.Multiple, OpenResult = item.OpenResult, PalyRadioCode = item.PalyRadioCode, PrizeType = item.PrizeType, TotalAmt = item.TotalAmt, UserId = item.UserId, WinMoney = item.WinMoney, }; calculate.Calculate(issueCode, openResult, betDetail); //获取追号当期信息 var catchNumItem = this.mSysCatchNumIssueService.Get(item.CuiId); if (betDetail.IsMatch) { catchNumItem.Stauts = BasicModel.BetResultType.Winning; catchNumItem.WinMoney = betDetail.WinMoney; string content = string.Format("\t恭喜您,编号为【{0}】的追号方案已中奖,期号为{1},中奖金额为 <span style=\"color:red;\">{1}</span> 元,请注意查看您的帐变信息,如果有任何疑问请联系在线客服。\t\n", item.CatchNumCode, issueCode, catchNumItem.WinMoney); this.mMessageService.Create(CreateMsg(content, 0, item.UserId, 1)); this.mMessageService.Save(); } else { catchNumItem.Stauts = BasicModel.BetResultType.NotWinning; } //计算返点 游戏返点 //if ( == 1) this.mRebateHelper.BettingCalculate(item.PrizeType, item.UserId, item.TotalAmt, catchNumItem.CatchNumIssueCode, mRebateHelper.GetRadioMaxRemo(item.PalyRadioCode, item.BonusLevel)); // catchNumItem.IsMatch = betDetail.IsMatch; catchNumItem.OpenResult = openResult; //获取追号信息 var catchItem = this.mSysCatchNumService.Get(item.Id); if (betDetail.IsMatch && item.IsAutoStop)//中奖,并且设置为中奖后自动结束 { catchItem.Stauts = BasicModel.CatchNumType.Compled; } catchItem.WinMoney = catchItem.WinMoney + betDetail.WinMoney; catchItem.CompledIssue = catchItem.CompledIssue + 1; catchItem.CompledMonery = catchItem.CompledMonery + catchNumItem.TotalAmt; //修改信息 this.mSysCatchNumIssueService.Save(); this.mSysCatchNumService.Save(); if (catchItem.Stauts == CatchNumType.Compled) { //结束本次追号,对未完成追号的撤单 var exitNums = this.mSysCatchNumIssueService.GetLastCatchNum(item.CatchNumCode, catchNumItem.IssueCode); if (null == exitNums) { return; } //用户余额 int exitCount = exitNums.Count; catchItem.SysCannelIssue = exitCount;//保存中奖后结束期数 this.mSysCatchNumService.Save(); for (var i = 0; i < exitCount; i++) { var exit = exitNums[i]; if (catchItem.PrizeType == 1) { mRebateHelper.BettingCannelIssue(item.UserId, exit.TotalAmt, exit.CatchNumIssueCode, mRebateHelper.GetRadioMaxRemo(item.PalyRadioCode, item.BonusLevel));//处理返点 } else { this.mRebateHelper.UpdateUserBanance(item.UserId, item.TotalAmt, TradeType.追号返款, exit.CatchNumIssueCode, 0); } } } } catch (Exception ex) { LogManager.Error(string.Format("第{0}期,追号项id为{1} 计算过程中发生异常;Exception={2}", issueCode, item.Id, ex.Message)); } } }
protected void gvBet_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { var bet = e.Row.DataItem as Bet; if (bet != null) { var item = CasinoItem.GetCasinoItem(bet.CasinoItemGuid); var ltrlClub = e.Row.FindControl("ltrlClub") as Literal; if (ltrlClub != null) { var pathAcnClub = ConfigGlobal.PluginAcnClubPath; if ((!string.IsNullOrEmpty(pathAcnClub)) && (pathAcnClub != bool.FalseString.ToLower())) { var drClub = UserClub.GetUserClubHistoryInfo(bet.UserID, bet.BetTime); if ((drClub != null) && ((drClub["ClubUid"].ToString() == ddlClub.SelectedValue) || (ddlClub.SelectedValue == "0"))) { ltrlClub.Text = $"<a href=\"/{pathAcnClub}/ClubView.aspx?ClubID={drClub["ClubUid"]}\" target=\"_blank\">{drClub["ClubName"]}</a>"; } else if ((drClub == null) && (ddlClub.SelectedValue == "0")) { ltrlClub.Text = "/"; } else { e.Row.Visible = false; return; } } else { Response.Redirect($"CasinoBetLog.aspx?Match={CurrentMatch}"); } } var ltrlResult = e.Row.FindControl("ltrlResult") as Literal; var dt = BetDetail.GetBetDetailByBetId(bet.ID); if (dt != null && ltrlResult != null) { var dr = dt.Rows[0]; switch (item.ItemType) { case CasinoType.SingleChoice: if (dr["DetailName"].ToString() == MatchChoiceOption.HomeWinValue) { ltrlResult.Text = "主队胜"; } else if (dr["DetailName"].ToString() == MatchChoiceOption.DrawValue) { ltrlResult.Text = "双方平"; } else if (dr["DetailName"].ToString() == MatchChoiceOption.AwayWinValue) { ltrlResult.Text = "客队胜"; } break; case CasinoType.MatchResult: var betDetail = new MatchResultBetDetail(dt); ltrlResult.Text = $"{betDetail.Home}:{betDetail.Away}"; break; } } var ltrlBetResult = e.Row.FindControl("ltrlBetResult") as Literal; if (ltrlBetResult != null) { if (!bet.IsWin.HasValue) { ltrlBetResult.Text = string.Empty; } else { if (bet.IsWin.Value) { if (item.ItemType == CasinoType.SingleChoice) { ltrlBetResult.Text = "<span class=\"CasinoSys_True\" title=\"猜对输赢\"></span>"; } else if (item.ItemType == CasinoType.MatchResult) { ltrlBetResult.Text = "<span class=\"CasinoSys_Good\" title=\"猜对比分\"></span>"; } e.Row.CssClass = "RowCasinoSys_True"; } else { ltrlBetResult.Text = "<span class=\"CasinoSys_False\" title=\"失败\"></span>"; } } } } } }
protected void gvMatch_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { var drv = e.Row.DataItem as DataRowView; if (drv != null) { var m = new Match((Guid)drv["MatchGuid"]); var ltrlLeagueInfo = e.Row.FindControl("ltrlLeagueInfo") as Literal; if (ltrlLeagueInfo != null) { var strLeague = "<a href=\"CasinoGame.aspx?League={0}\" title=\"{1}\"><img src=\"{2}\" alt=\"{1}\" class=\"CasinoSys_CategoryImg\" /></a>"; var strLeagueName = $"{m.LeagueName}{(m.Round.HasValue ? $" 第{m.Round}轮" : string.Empty)}"; ltrlLeagueInfo.Text = string.Format(strLeague, m.LeagueGuid, strLeagueName, League.Cache.Load(m.LeagueGuid).LeagueLogo); } var lblHome = e.Row.FindControl("lblHome") as Label; var lblAway = e.Row.FindControl("lblAway") as Label; var hlVersus = e.Row.FindControl("hlVersus") as HyperLink; if (lblHome != null && lblAway != null && hlVersus != null) { var tHome = Team.Cache.Load(m.Home); var tAway = Team.Cache.Load(m.Away); var strTeamName = "<a class=\"StrongLink\" href=\"CasinoTeam.aspx?Team={0}\" title=\"{1}\">{2}</a> "; var strTeamLogo = "<img src=\"{3}\" alt=\"{1}\" /> "; lblHome.Text = string.Format(strTeamName + strTeamLogo, tHome.ID, tHome.TeamEnglishName, tHome.TeamDisplayName, tHome.TeamLogo); lblAway.Text = string.Format(strTeamLogo + strTeamName, tAway.ID, tAway.TeamEnglishName, tAway.TeamDisplayName, tAway.TeamLogo); hlVersus.NavigateUrl = $"CasinoTeam.aspx?Match={m.MatchGuid}"; hlVersus.Text = $"<em title=\"{tHome.Ground}{(tHome.Capacity.HasValue ? ("(" + tHome.Capacity.Value + ")") : string.Empty)}\">vs</em>"; } var guid = CasinoItem.GetCasinoItemGuidByMatch(m.MatchGuid, CasinoType.SingleChoice); if (guid.HasValue) { var item = CasinoItem.GetCasinoItem(guid.Value); if (item != null) { var options = ((SingleChoice)item).Options; var winOption = options.Find(option => option.OptionValue == MatchChoiceOption.HomeWinValue); var drawOption = options.Find(option => option.OptionValue == MatchChoiceOption.DrawValue); var loseOption = options.Find(option => option.OptionValue == MatchChoiceOption.AwayWinValue); if (!string.IsNullOrEmpty(winOption.OptionValue) && !string.IsNullOrEmpty(drawOption.OptionValue) && !string.IsNullOrEmpty(loseOption.OptionValue) && winOption.OptionRate.HasValue && drawOption.OptionRate.HasValue && loseOption.OptionRate.HasValue) { var ltrlWinRate = e.Row.FindControl("ltrlWinRate") as Literal; var ltrlDrawRate = e.Row.FindControl("ltrlDrawRate") as Literal; var ltrlLoseRate = e.Row.FindControl("ltrlLoseRate") as Literal; if (ltrlWinRate != null) { ltrlWinRate.Text = Convert.ToSingle(winOption.OptionRate.Value).ToString("f2"); } if (ltrlDrawRate != null) { ltrlDrawRate.Text = Convert.ToSingle(drawOption.OptionRate.Value).ToString("f2"); } if (ltrlLoseRate != null) { ltrlLoseRate.Text = Convert.ToSingle(loseOption.OptionRate.Value).ToString("f2"); } } } } //bet for match result guid = CasinoItem.GetCasinoItemGuidByMatch(m.MatchGuid, CasinoType.MatchResult); if (guid.HasValue) { var item = CasinoItem.GetCasinoItem(guid.Value); if (item?.ItemGuid != null) { var bets = Bet.GetUserCasinoItemAllBet(userid, item.ItemGuid.Value); if (bets.Count != 0) { var betDetail = new MatchResultBetDetail(BetDetail.GetBetDetailByBetId(bets[0].ID)); var tbHomeScore = e.Row.FindControl("tbHomeScore") as TextBox; var tbAwayScore = e.Row.FindControl("tbAwayScore") as TextBox; if (tbHomeScore != null) { tbHomeScore.Text = betDetail.Home.ToString(); tbHomeScore.ReadOnly = true; tbHomeScore.Style.Add("border", "none"); tbHomeScore.Style.Add("font-weight", "bold"); tbHomeScore.Style.Add("background", "none"); tbHomeScore.Style.Add("color", "#aa0000"); } if (tbAwayScore != null) { tbAwayScore.Text = betDetail.Away.ToString(); tbAwayScore.ReadOnly = true; tbAwayScore.Style.Add("border", "none"); tbAwayScore.Style.Add("font-weight", "bold"); tbAwayScore.Style.Add("background", "none"); tbAwayScore.Style.Add("color", "#aa0000"); } } else { _itemAvailable = true; } } } } } }
private bool DefaultDetails(SysUser user, List <BetDetailDTO> details, ref ApiCode errorType, int lotteryid, bool ishtml = false) { int index = 0; //获取用户余额 //decimal userAmt = 0; //var userbalance = this.mSysUserBalanceService.GetUserBalance(user.Id); //if (null != userbalance) // userAmt = userbalance.UserAmt;//获取用户余额 foreach (var detail in details) { var radioContent = Ytg.Scheduler.Comm.Bets.RadioContentFactory.CreateInstance(detail.PalyRadioCode); if (null == radioContent) { errorType = ApiCode.Exception;//服务器错误 } if (ishtml) { detail.BetContent = radioContent.HtmlContentFormart(detail.BetContent); } if (string.IsNullOrEmpty(detail.BetContent)) { continue; } //验证投注时间和当前投注期数的时间差,不在时间内,不允许投注 //var issueInfo=this.mLotteryIssueService.Get(lotteryid,detail.IssueCode); //if (issueInfo == null // || issueInfo.EndSaleTime.Value < DateTime.Now) //{ // errorType = ApiCode.Empty; // return false; //} // //计算总注数 int betCount = radioContent.TotalBetCount(new BetDetail() { BetContent = detail.BetContent }); if (betCount < 0) //超过指定注数,不允许投注 { errorType = ApiCode.Fail; //服务器错误 非法请求 return(false); } //var playRadio = Ytg.Service.Lott.BaseDataCatch.GetPalyTypeRadio().Where(radio => radio.RadioCode == detail.PalyRadioCode).FirstOrDefault(); //if (playRadio == null) //{ // errorType = ApiCode.Fail;//服务器错误 // return false; //} //计算本注需用金额 decimal sumMonery = CalculateMonery(betCount, detail.Model, (int)detail.Multiple, lotteryid); if (lotteryid == 21)//六合彩 { detail.Multiple = 1; } //验证可能中奖的最大金额,若超过该限制,则不允许投注 if (WinMoneryHelper.GetAutoWinMonery(detail, this.LoginUser) > WinMoneryHelper.GetMaxReboMonery()) { errorType = ApiCode.NotScope;//超过限额 return(false); } //if (userAmt < sumMonery)//余额不够本次 //{ // errorType = ApiCode.NotEnough;//余额不够本次 // return false; //} //userAmt -= sumMonery; var bet = new BetDetail() { BetCode = "b" + Utils.BuilderNum(), IsMatch = false, IssueCode = detail.IssueCode, BetContent = detail.BetContent, Model = detail.Model, Multiple = (int)detail.Multiple, PalyRadioCode = detail.PalyRadioCode, PrizeType = detail.PrizeType, UserId = user.Id, TotalAmt = sumMonery, LotteryCode = this.LotteryCode, BetCount = betCount, BackNum = (decimal)(detail.PrizeType == 0 ? user.Rebate : 0), BonusLevel = LoginUser.PlayType == UserPlayType.P1800 ? 1800 : 1700, PostionName = detail.PostionName, HasState = betCount <= detail.MaxBetCount ? 1 : 0 }; /**最新投注方法 提高性能*/ int state = 0; var userAmt = this.mBetDetailService.AddBetting(bet, CreateUserBalanceDetial(user.Id, -sumMonery, TradeType.投注扣款, 0, bet.BetCode), lotteryid, ref state); if (state == 1) {//超过投注时间,不允许投注 errorType = ApiCode.Empty; return(false); } else if (state == 2) { //用户余额不够 errorType = ApiCode.NotEnough;//余额不够本次 return(false); } else { //提交成功 } /**最新投注方法*/ //this.mBetDetailService.Create(bet); //保存用户余额 // userbalance.UserAmt = userAmt - sumMonery; //投注消费记录s // this.mSysUserBalanceDetailService.Create(CreateUserBalanceDetial(user.Id, -sumMonery, TradeType.投注扣款, userAmt, bet.BetCode)); //返点消费记录 //不在投注时计算返点,hqh 2015/04/17 by update //if (bet.PrizeType == 1) // this.mRebateHelper.BettingCalculate(userId, sumMonery, bet.BetCode); //this.mSysUserBalanceService.UpdateUserBalance(CreateUserBalanceDetial(user.Id, -sumMonery, TradeType.投注扣款, userAmt, bet.BetCode), -sumMonery); //this.mBetDetailService.Save(); index++; } return(true); }
protected void gvBet_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { var bet = e.Row.DataItem as Bet; var ltrlHome = e.Row.FindControl("ltrlHome") as Literal; var ltrlAway = e.Row.FindControl("ltrlAway") as Literal; var btnReturnBet = e.Row.FindControl("btnReturnBet") as LinkButton; if (bet != null) { var item = CasinoItem.GetCasinoItem(bet.CasinoItemGuid); if (item.MatchGuid != null) { var m = new Match(item.MatchGuid.Value); { var homeT = Team.Cache.Load(m.Home); var awayT = Team.Cache.Load(m.Away); if (ltrlHome != null) { ltrlHome.Text = homeT.TeamDisplayName; } if (ltrlAway != null) { ltrlAway.Text = awayT.TeamDisplayName; } } } var ltrlResult = e.Row.FindControl("ltrlResult") as Literal; var dt = BetDetail.GetBetDetailByBetId(bet.ID); if (dt != null && ltrlResult != null) { var dr = dt.Rows[0]; switch (item.ItemType) { case CasinoType.SingleChoice: if (dr["DetailName"].ToString() == MatchChoiceOption.HomeWinValue) { ltrlResult.Text = "主队胜"; } else if (dr["DetailName"].ToString() == MatchChoiceOption.DrawValue) { ltrlResult.Text = "双方平"; } else if (dr["DetailName"].ToString() == MatchChoiceOption.AwayWinValue) { ltrlResult.Text = "客队胜"; } break; case CasinoType.MatchResult: var betDetail = new MatchResultBetDetail(dt); ltrlResult.Text = $"{betDetail.Home}:{betDetail.Away}"; break; } } } var ltrlBetRate = e.Row.FindControl("ltrlBetRate") as Literal; if (bet != null) { if (ltrlBetRate != null) { ltrlBetRate.Text = bet.BetRate.HasValue ? Convert.ToSingle(bet.BetRate).ToString("f2") : "/"; } if (btnReturnBet != null) { btnReturnBet.Visible = true; btnReturnBet.CommandArgument = bet.ID.ToString(); } } } }
/// <summary> /// 分分彩必须保证利润,目前的做法是随机五个号码,计算中奖金额然后保证利润后才开指定数字 /// </summary> /// <param name="lotteryType"></param> /// <param name="issueCode"></param> /// <param name="openResult"></param> public override string Calculate(string lotteryType, string issueCode, string openResult) { //获取本期所有投注数据,进行计算 var source = this.mBetDetailService.GetIssuesBetDetail(lotteryType, issueCode); //获取追号数据,进行计算 var zhuiHaoSource = this.mSysCatchNumService.GetNotCompledCatchNumList(lotteryType, issueCode); if ((source == null || source.Count < 1) && (zhuiHaoSource == null || zhuiHaoSource.Count < 1)) { //没有投注,随机开 openResult = RandomResult(lotteryType); LogManager.Info(string.Format("自主开奖=====没有投注和追号项,随机开奖={0}", openResult)); return(openResult); } int sourceCount = source.Count + zhuiHaoSource.Count; bool isMaxBaseAmt = false;//投注金额是否大于奖金 decimal[] models = { 1M, 0.1M, 0.01M, 0.001M }; //计算本期最低保证利润 var sum = source.Sum(c => c.TotalAmt) + zhuiHaoSource.Sum(c => c.TotalAmt); var total = sum * (1 - ConfigHelper.ProfitMargin) + OpendHistoryLogic.CreateInstance().GetWinMonery(lotteryType);//当期可以释放的金额 LogManager.Error(lotteryType + "利润空间:" + total); List <string> openHistory = new List <string>();//开奖历史记录,开过的不冲去计算 string bettMsg = ""; /***检测代码,正式上线注释**/ Stopwatch stopwatch = new Stopwatch(); //计时 stopwatch.Start(); // 开始监视代码运行时间 /***检测代码,正式上线注释**/ int whileCount = 0; while (true) { string randomOpen = RandomResult(lotteryType); if (openHistory.Contains(randomOpen)) { continue; } openHistory.Add(randomOpen); //投注中奖金额 var bettingWinTotal = 0m; openResult = randomOpen; //string.Join(",", randomOpen.Select(c => c.ToString())); //循环进行计算普通投注中奖金额 foreach (var item in source) { int code = item.PalyRadioCode; item.WinMoney = 0; item.IsMatch = false; Ytg.Scheduler.Comm.Bets.ICalculate calculate = Ytg.Scheduler.Comm.Bets.RadioContentFactory.CreateInstance(code); calculate.Calculate(issueCode, openResult, item); item.OpenResult = openResult; if (item.IsMatch) { item.Stauts = BasicModel.BetResultType.Winning; bettingWinTotal += item.WinMoney; } else { item.Stauts = BasicModel.BetResultType.NotWinning; } isMaxBaseAmt = item.TotalAmt >= calculate.GetBaseAmt(item) * models[item.Model]; } //追号 foreach (var item in zhuiHaoSource) { var betDetail = new BetDetail() { BackNum = item.BackNum, BetContent = item.BetContent, BetCount = item.BetCount, BonusLevel = item.BonusLevel, IsMatch = item.IsMatch, IssueCode = item.IssueCode, Model = item.Model, Multiple = item.Multiple, OpenResult = item.OpenResult, PalyRadioCode = item.PalyRadioCode, PrizeType = item.PrizeType, TotalAmt = item.TotalAmt, UserId = item.UserId, WinMoney = item.WinMoney, }; ICalculate calculate = RadioContentFactory.CreateInstance(betDetail.PalyRadioCode); calculate.Calculate(issueCode, openResult, betDetail); item.OpenResult = openResult; item.WinMoney = betDetail.WinMoney; if (betDetail.IsMatch) { bettingWinTotal += betDetail.WinMoney; } isMaxBaseAmt = item.TotalAmt >= calculate.GetBaseAmt(betDetail); } LogManager.Error(string.Format("尝试自主开奖 issueCode:{0} bettingWinTotal:{1} total:{2} isMaxBaseAmt:{3} sourceCount:{4} whileCount:{5} lotteryType:{6}", issueCode, bettingWinTotal, total, isMaxBaseAmt, source, whileCount, lotteryType)); whileCount++; if ( (total - bettingWinTotal > 0) || (isMaxBaseAmt && sourceCount < 1) || (whileCount > 50 && sum >= bettingWinTotal)) //符合指定利润,开奖 { //=开奖信息=返钱:33218.00000000RMB 投注总额:4250.0000RMB 最低40%利润:-21768.00000000RMB bettMsg = "返钱:" + bettingWinTotal + "RMB 投注总额:" + sum + "RMB 最低40%利润:" + (total - bettingWinTotal) + "RMB wileCount" + whileCount + " " + lotteryType + " \t\n"; //修改期数 //处理开奖逻辑 普通投注 CalculateBetting(source, issueCode, openResult); //追号 CalculateCatchNums(zhuiHaoSource, issueCode, openResult); OpendHistoryLogic.CreateInstance().PutLotteryData(lotteryType, sum, bettingWinTotal); LogManager.Error(string.Format("自主开奖成功,开奖结果={0}=========开奖信息={1}", openResult, bettMsg)); break; } if (whileCount > 50) { sum += 500; } } /***检测代码,正式上线注释**/ TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间 double milliseconds = timespan.TotalMilliseconds; // 总毫秒数 stopwatch.Stop(); /***检测代码,正式上线注释**/ //bettMsg += "分分彩:" + lotteryType + " 期数:" + issueCode + " 总毫秒数:" + milliseconds; // LogManager.Error(bettMsg); return(openResult); }
/// <summary> /// 计算投注结果 /// </summary> /// <param name="issueCode">当前开奖期号</param> /// <param name="openResult">当前开奖结果</param> private void CalculateCatchNums(List <NotCompledCatchNumListDTO> source, string issueCode, string openResult) { //循环进行计算 foreach (var item in source) { try { item.WinMoney = 0; var betDetail = new BetDetail() { BackNum = item.BackNum, BetContent = item.BetContent, BetCount = item.BetCount, BonusLevel = item.BonusLevel, IsMatch = item.IsMatch, IssueCode = item.IssueCode, Model = item.Model, Multiple = item.Multiple, OpenResult = item.OpenResult, PalyRadioCode = item.PalyRadioCode, PrizeType = item.PrizeType, TotalAmt = item.TotalAmt, UserId = item.UserId, // WinMoney = item.WinMoney, }; ICalculate calculate = RadioContentFactory.CreateInstance(betDetail.PalyRadioCode); calculate.Calculate(issueCode, openResult, betDetail); item.OpenResult = openResult; item.WinMoney = betDetail.WinMoney; item.IsMatch = betDetail.IsMatch; //获取追号信息 var catchItem = this.mSysCatchNumService.Get(item.Id); // //获取追号当期信息 var catchNumItem = this.mSysCatchNumIssueService.Get(item.CuiId); if (item.IsMatch) { catchNumItem.Stauts = BasicModel.BetResultType.Winning; catchNumItem.WinMoney = item.WinMoney; catchItem.WinIssue += 1; this.mRebateHelper.UpdateUserBanance(item.UserId, item.WinMoney, TradeType.奖金派送, catchNumItem.CatchNumIssueCode, 0); string content = string.Format("\t编号为【{0}】的方案已中奖 <span style=\"color:red;\">{1}</span> 元,请注意查看您的帐变信息,如有任何疑问请联系在线客服。\t\n", item.CatchNumCode, string.Format("{0:N}", catchNumItem.WinMoney)); this.mMessageService.Create(CreateMsg(content, 0, item.UserId, 1)); this.mMessageService.Save(); } else { catchNumItem.Stauts = BasicModel.BetResultType.NotWinning; } //计算返点 游戏返点 //if (item.PrizeType == 1) this.mRebateHelper.BettingCalculate(item.PrizeType, item.UserId, item.TotalAmt, catchNumItem.CatchNumIssueCode, mRebateHelper.GetRadioMaxRemo(item.PalyRadioCode, item.BonusLevel)); // //catchNumItem.OccDate = DateTime.Now; catchNumItem.IsMatch = item.IsMatch; catchNumItem.OpenResult = item.OpenResult; if (item.IsMatch && item.IsAutoStop)//中奖,并且设置为中奖后自动结束 { catchItem.Stauts = BasicModel.CatchNumType.Compled; } catchItem.WinMoney = catchItem.WinMoney + item.WinMoney; catchItem.CompledIssue = catchItem.CompledIssue + 1; catchItem.CompledMonery = catchItem.CompledMonery + catchNumItem.TotalAmt; //修改信息 this.mSysCatchNumIssueService.Save(); //修改未开奖追号期数occdate时间 this.mSysCatchNumIssueService.UpdateNoOpenOccDateTime(item.CatchNumCode); if (catchItem.Stauts == CatchNumType.Compled) { //结束本次追号,对未完成追号的撤单 var exitNums = this.mSysCatchNumIssueService.GetLastCatchNum(item.CatchNumCode, catchNumItem.IssueCode); if (null == exitNums) { return; } int exitCount = exitNums.Count; catchItem.SysCannelIssue = exitCount;//保存中奖后结束期数 //this.mSysCatchNumService.Save(); for (var i = 0; i < exitCount; i++) { var exit = exitNums[i]; exit.Stauts = BetResultType.SysCancel; catchItem.UserCannelMonery += exit.TotalAmt; this.mRebateHelper.UpdateUserBanance(item.UserId, exit.TotalAmt, TradeType.追号返款, exit.CatchNumIssueCode, 0); } } else if ((catchItem.CompledIssue + catchItem.SysCannelIssue + catchItem.UserCannelIssue) >= catchItem.CatchIssue) { //验证是否有剩余期数,若无剩余期数,本次追号完成 catchItem.Stauts = CatchNumType.Compled; } mSysCatchNumIssueService.Save();//保存状态 this.mSysCatchNumService.Save(); } catch (Exception ex) { LogManager.Error("分分彩异常" + ex.Message); } } }
protected void gvBet_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { var bet = e.Row.DataItem as Bet; var ltrlHome = e.Row.FindControl("ltrlHome") as Literal; var ltrlAway = e.Row.FindControl("ltrlAway") as Literal; var ltrlVs = e.Row.FindControl("ltrlVS") as Literal; if (bet != null && ltrlHome != null && ltrlAway != null && ltrlVs != null) { var item = CasinoItem.GetCasinoItem(bet.CasinoItemGuid); if (CurrentMatch != Guid.Empty) { ltrlHome.Text = _home; ltrlAway.Text = _away; } else { if (item.MatchGuid != null) { var m = new Match(item.MatchGuid.Value); var homeT = Team.Cache.Load(m.Home); var awayT = Team.Cache.Load(m.Away); ltrlHome.Text = $"<a class=\"StrongLink\" href=\"CasinoTeam.aspx?Team={homeT.ID}\">{homeT.TeamDisplayName}</a>"; ltrlAway.Text = $"<a class=\"StrongLink\" href=\"CasinoTeam.aspx?Team={awayT.ID}\">{awayT.TeamDisplayName}</a>"; ltrlVs.Text = $"<a href=\"CasinoTeam.aspx?Match={m.MatchGuid}\"><em title=\"{homeT.Ground}({homeT.Capacity})\">vs</em></a>"; } } var ltrlResult = e.Row.FindControl("ltrlResult") as Literal; var dt = BetDetail.GetBetDetailByBetId(bet.ID); if (dt != null && ltrlResult != null) { var dr = dt.Rows[0]; switch (item.ItemType) { case CasinoType.SingleChoice: if (dr["DetailName"].ToString() == MatchChoiceOption.HomeWinValue) { ltrlResult.Text = "主队胜"; } else if (dr["DetailName"].ToString() == MatchChoiceOption.DrawValue) { ltrlResult.Text = "双方平"; } else if (dr["DetailName"].ToString() == MatchChoiceOption.AwayWinValue) { ltrlResult.Text = "客队胜"; } break; case CasinoType.MatchResult: var betDetail = new MatchResultBetDetail(dt); ltrlResult.Text = $"{betDetail.Home}:{betDetail.Away}"; break; } } var ltrlBetResult = e.Row.FindControl("ltrlBetResult") as Literal; if (ltrlBetResult != null) { if (!bet.IsWin.HasValue) { ltrlBetResult.Text = string.Empty; } else { if (bet.IsWin != null && bet.IsWin.Value) { if (item.ItemType == CasinoType.SingleChoice) { ltrlBetResult.Text = "<span class=\"CasinoSys_True\" title=\"猜对输赢\"></span>"; } else if (item.ItemType == CasinoType.MatchResult) { ltrlBetResult.Text = "<span class=\"CasinoSys_Good\" title=\"猜对比分\"></span>"; } e.Row.CssClass = "RowCasinoSys_True"; } else { ltrlBetResult.Text = "<span class=\"CasinoSys_False\" title=\"失败\"></span>"; } } } var ltrlBetRate = e.Row.FindControl("ltrlBetRate") as Literal; if (ltrlBetRate != null) { ltrlBetRate.Text = bet.BetRate.HasValue ? Convert.ToSingle(bet.BetRate).ToString("f2") : "/"; } } } }
/// <summary> /// 追号处理模块 /// </summary> /// <param name="obj"></param> protected void CalculateCatchPage(object obj) { PoolCatchParam param = obj as PoolCatchParam; if (param.WhileIndex > 3) { string betCodes = ""; param.Details.ForEach(x => betCodes += x.CatchNumCode); LogManager.Error("追号超过三次计算,结束计算:" + betCodes); return; } string issueCode = param.Issue; string openResult = param.openResult; string key = param.lotteryCode + "_" + param.Issue; List <BasicModel.LotteryBasic.DTO.NotCompledCatchNumListDTO> source = param.Details; List <BasicModel.LotteryBasic.DTO.NotCompledCatchNumListDTO> errorSource = new List <NotCompledCatchNumListDTO>(); IDbContextFactory factory = new DbContextFactory(); var sysCatchNumIssueService = new SysCatchNumIssueService(new Repo <CatchNumIssue>(factory)); var sysCatchNumService = new SysCatchNumService(new Repo <CatchNum>(factory)); foreach (var item in source) { int code = item.PalyRadioCode; try { ICalculate calculate = RadioContentFactory.CreateInstance(code); var betDetail = new BetDetail() { BackNum = item.BackNum, BetContent = item.BetContent, BetCount = item.BetCount, BonusLevel = item.BonusLevel, IsMatch = item.IsMatch, IssueCode = item.IssueCode, Model = item.Model, Multiple = item.Multiple, OpenResult = item.OpenResult, PalyRadioCode = item.PalyRadioCode, PrizeType = item.PrizeType, TotalAmt = item.TotalAmt, UserId = item.UserId, // WinMoney = item.WinMoney, }; calculate.Calculate(issueCode, openResult, betDetail); //获取追号信息 var catchItem = sysCatchNumService.Get(item.Id); //获取追号当期信息 var catchNumItem = sysCatchNumIssueService.Get(item.CuiId); if (betDetail.IsMatch) { catchNumItem.Stauts = BasicModel.BetResultType.Winning; catchNumItem.WinMoney = betDetail.WinMoney; catchItem.WinIssue += 1; string content = string.Format("\t编号为【{0}】的方案已中奖 <span style=\"color:red;\">{1}</span> 元,请注意查看您的帐变信息,如有任何疑问请联系在线客服。\t\n", item.CatchNumCode, string.Format("{0:N}", catchNumItem.WinMoney)); //messageService.Create(); //messageService.Save(); LotteryIssuesData.CreateMessage(CreateMsg(content, 0, item.UserId, 1)); } else { catchNumItem.Stauts = BasicModel.BetResultType.NotWinning; } // //catchNumItem.OccDate = DateTime.Now; catchNumItem.IsMatch = betDetail.IsMatch; catchNumItem.OpenResult = openResult; if (betDetail.IsMatch && item.IsAutoStop)//中奖,并且设置为中奖后自动结束 { catchItem.Stauts = BasicModel.CatchNumType.Compled; } catchItem.WinMoney = catchItem.WinMoney + betDetail.WinMoney; catchItem.CompledIssue = catchItem.CompledIssue + 1; catchItem.CompledMonery = catchItem.CompledMonery + catchNumItem.TotalAmt; //修改信息 sysCatchNumIssueService.Save(); // sysCatchNumService.Save(); //修改未开奖追号期数occdate时间 sysCatchNumIssueService.UpdateNoOpenOccDateTime(item.CatchNumCode); OpenOfficialCatchQueueParam queqeParam = new OpenOfficialCatchQueueParam(); //处理队列 queqeParam.CatchDetail = item; queqeParam.CatchNumIssue = catchNumItem; //当前追号期数 if (catchItem.Stauts == CatchNumType.Compled) { //结束本次追号,对未完成追号的撤单 var exitNums = sysCatchNumIssueService.GetLastCatchNum(item.CatchNumCode, catchNumItem.IssueCode); if (null == exitNums) { return; } int exitCount = exitNums.Count; catchItem.SysCannelIssue = exitCount;//保存中奖后结束期数 //修改结束期数状态 foreach (var exit in exitNums) { exit.Stauts = BetResultType.SysCancel; catchItem.UserCannelMonery += exit.TotalAmt; } sysCatchNumIssueService.Save(); //保存状态 queqeParam.ExitCatNumIssues = exitNums; //终止追号期数 } else if ((catchItem.CompledIssue + catchItem.SysCannelIssue + catchItem.UserCannelIssue) >= catchItem.CatchIssue) { //验证是否有剩余期数,若无剩余期数,本次追号完成 catchItem.Stauts = CatchNumType.Compled; } sysCatchNumService.Save(); //添加至队列 OpenOfficialCatchQueue.CreateInstance().Put(queqeParam); } catch (Exception ex) { LogManager.Error(string.Format("第{0}期,追号项id为{1} 计算过程中发生异常;", issueCode, item.Id), ex); errorSource.Add(item); } int errorCount = errorSource.Count; if (errorCount > 0) { param.Details = errorSource; //继续计算 param.WhileIndex += 1; CalculatePage(param); LogManager.Info("追号计算失败项总数为" + errorCount + " 系统将继续计算!"); } //完成计算 IssueCatchNumsing.CreateInstance().CompledRunning(key, param.pageIndex); } }