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);
        }
Beispiel #3
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);
            }
        }
Beispiel #4
0
        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";
                    }
                }
            }
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
        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");
                }
            }
        }
Beispiel #7
0
        /// <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));
                }
            }
        }
Beispiel #8
0
        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>";
                            }
                        }
                    }
                }
            }
        }
Beispiel #9
0
        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;
                            }
                        }
                    }
                }
            }
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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);
                }
            }
        }
Beispiel #14
0
        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") : "/";
                    }
                }
            }
        }
Beispiel #15
0
        /// <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);
            }
        }