コード例 #1
0
ファイル: MlbCommon.cs プロジェクト: kin0428/Splg
        /// <summary>
        /// 試合状況を取得
        /// </summary>
        /// <param name="gameId">試合ID</param>
        /// <param name="strMemberId">会員ID</param>
        /// <returns>
        ///  0: 試合情報なし?
        ///  1: 受付前
        ///  2: 5分前以前、ベットなし
        ///  3: 5分前以前、ベットあり
        ///  4: 5分前以降、ベットなし
        ///  5: 5分前以降、ベットあり
        ///  6: 試合中、ベットなし
        ///  7: 試合中、ベットあり
        ///  8: 試合終了、ベットなし
        ///  9: 試合終了、ベットあり
        /// 10: 試合中止
        /// </returns>
        public static int GetStatusMatch(int gameId, string strMemberId)
        {
            //Todo:判定が煩雑なので、ロジック整理の必要有り

            var memberId = !string.IsNullOrEmpty(strMemberId) ? Convert.ToInt64(strMemberId) : 0;

            if (memberId > 0)
            {
                // ポイントテーブル存在判定
                var systemDatetimeService = new SystemDatetimeService();
                var pointInfoService = new PointInfoService(new ComEntities());
                var isExist = pointInfoService.IsExistsPoint(memberId, systemDatetimeService.SystemDate);
                if (!isExist) return 1;
            }

            // BET情報を取得
            var oddsService = new OddsService();
            var oddinfo = oddsService.GetOddsInfoByGameID(Constants.MLB_SPORT_ID, gameId, memberId);
            if (oddinfo.ExpectTargetID == 0) return 1;

            var checkBet = oddinfo.BetSelectedID != null;  // BET有無

            var mlb = new MlbEntities();
            var gameInfos = (from ss in mlb.SeasonSchedule //年間試合スケジュール_試合情報
                             join dg in mlb.DayGroup on ss.DayGroupId equals dg.DayGroupId
                             where ss.GameID == gameId
                             select new MlbGameInfos
                             {
                                 GameDateJPN = dg.GameDateJPN,
                                 Time = ss.Time
                             }).First();

            if (gameInfos == null) return 0;

            var gameDate = Utils.ConvertStrToDatetime(gameInfos.GameDateJPN.ToString());
            var gameStartDateAndTime = DateTime.MaxValue; // 未定
            int hours = 0;
            int minute = 0;

            string time = gameInfos.Time.Trim();
            //When   time.ToString().Length <2  then  error
            //When time is 0930-> Int32.TryParse  to 900 then error because hours:90 and minute:0
            if (time.Length > 1)
                hours = Convert.ToInt32(time.Substring(0, 2));
            //When   time.ToString().Length <4  then  error
            if (time.Length > 2)
                minute = Convert.ToInt32(time.Substring(2, time.Length - 2));
            //End edit
            gameStartDateAndTime = new DateTime(gameDate.Year, gameDate.Month, gameDate.Day, hours, minute, 0);

            //予想可能日付閾値(今日日付基準の月末日取得)
            var expectableEnd = DateTime.Now.EndOfTheMonthWithTime();

            if (DateTime.MaxValue.Equals(gameStartDateAndTime) || DateTime.Now < gameStartDateAndTime)
            {
                //Case 1:Can not bet
                if (gameStartDateAndTime > expectableEnd)
                {
                    return  1;  // 1:ベット不可
                }

                var limitTime = gameStartDateAndTime.AddMinutes(-5);

                if (DateTime.Now < limitTime)
                {
                    return !checkBet ? 2 : 3;   // 2:5分前以前、ベットなし  3:5分前以前、ベットあり
                }

                return !checkBet ? 4 : 5;   // 3:5分前以降、ベットなし  4:5分前以前、ベットあり
            }

            var realGameInfos = from rgi in mlb.RealGameInfo where rgi.GameID == gameId select rgi;

            if (realGameInfos != null)
            {
                if (realGameInfos.FirstOrDefault() != null)
                {
                    //空白:試合中または試合前 2=正常終了 7=サスペンデッド 9=中止(試合中)
                    string gameSetSituationCd = GetNpbGameSetSituationCode((short)realGameInfos.FirstOrDefault().GameStateID);

                    //"0=試合前、1=試合中、2=試合後
                    int gameStatus = GetStatusMatch(gameId.ToString());

                    //int inning = realGameInfos.FirstOrDefault().Inning.HasValue ? realGameInfos.FirstOrDefault().Inning.Value : default(short);
                    if ( (!string.IsNullOrEmpty(gameSetSituationCd)) && ((gameSetSituationCd == "8") ||(gameSetSituationCd == "9")))
                    {
                        return 10;
                    }

                    if (gameSetSituationCd == "2")
                    {
                        return !checkBet ? 8 : 9;   // 8:試合終了、ベットなし 9:試合終了、ベットあり
                    }

                    if (string.IsNullOrEmpty(gameSetSituationCd) && gameStatus > 0   /*inning >= 1*/)
                    {
                        return !checkBet ? 6 : 7;   // 6:試合中、ベットなし 7:試合中、ベットあり
                    }

                    return 10;                      // 10:試合中止
                }

                return !checkBet ? 6 : 7;           // 6:試合中、ベットなし 7:試合中、ベットあり
            }

            return 0;
        }
コード例 #2
0
ファイル: JlgCommon.cs プロジェクト: kin0428/Splg
        /// <summary>
        /// 試合状況を取得
        /// </summary>
        /// <param name="gameId">試合ID</param>
        /// <param name="strMemberId">会員ID</param>
        /// <returns>
        ///  0: 試合情報なし?
        ///  1: 受付前
        ///  2: 5分前以前、ベットなし
        ///  3: 5分前以前、ベットあり
        ///  4: 5分前以降、ベットなし
        ///  5: 5分前以降、ベットあり
        ///  6: 試合中、ベットなし
        ///  7: 試合中、ベットあり
        ///  8: 試合終了、ベットなし
        ///  9: 試合終了、ベットあり
        /// 10: 試合中止
        /// </returns>
        public static int GetStatusMatch(int gameId, string strMemberId)
        {
            //Todo:判定が煩雑なので、ロジック整理の必要有り

            var memberId = !string.IsNullOrEmpty(strMemberId) ? Convert.ToInt64(strMemberId) : 0;

            if (memberId > 0)
            {
                // ポイントテーブル存在判定
                var systemDatetimeService = new SystemDatetimeService();
                var pointInfoService = new PointInfoService(new ComEntities());
                var isExist = pointInfoService.IsExistsPoint(memberId, systemDatetimeService.SystemDate);
                if (!isExist) return 1;
            }

            // BET情報を取得
            var oddsService = new OddsService();
            var oddinfo = oddsService.GetOddsInfoByGameID(Constants.JLG_SPORT_ID, gameId, memberId);
            if (oddinfo.ExpectTargetID == 0) return 1;

            var checkBet = oddinfo.BetSelectedID != null;  // BET有無

            var jlg = new JlgEntities();
            var gameInfos = (from si in jlg.ScheduleInfo //年間試合スケジュール_試合情報
                             where si.GameID == gameId
                             select new JlgGameInfoByCondidtion
                             {
                                ScheduleInfoJlg = si,
                                GameTimetoStr = si.GameTime.ToString()
                             }).First();

            int result = 0;

            if (gameInfos == null) return result;

            var gameDate = Utils.ConvertStrToDatetime(gameInfos.ScheduleInfoJlg.GameDate.ToString());

            var gameStartDateAndTime = DateTime.MaxValue; // "未定"やnullがありうる
            int time;
            if (int.TryParse(gameInfos.GameTimetoStr, out time))
            {
                var hours = Convert.ToInt32(time.ToString().Substring(0, 2));
                var minute = Convert.ToInt32(time.ToString().Substring(2, 2));

                gameStartDateAndTime = new DateTime(gameDate.Year, gameDate.Month, gameDate.Day, hours, minute, 0);
            }

            //予想可能日付閾値(今日日付基準の月末日取得)
            var expectableEnd = DateTime.Now.EndOfTheMonthWithTime();

            if (DateTime.Now < gameStartDateAndTime)
            {
                //Case 1:Can not bet
                if (gameStartDateAndTime > expectableEnd)
                {
                    return 1;                             // 1:ベット不可
                }

                DateTime limitTime = gameStartDateAndTime.AddMinutes(-5);

                if (DateTime.Now < limitTime)
                {
                    return !checkBet ? 2 : 3;         // 2:5分前以前、ベットなし  3:5分前以前、ベットあり
                }

                return !checkBet ? 4 : 5;         // 3:5分前以降、ベットなし  4:5分前以前、ベットあり
            }

            // 一試合個人スタッツ_ヘッダー情報
            var realGameInfos = from sr in jlg.StatsReportLS where sr.GameID == gameId select sr;

            if (realGameInfos != null)
            {
                if (realGameInfos.FirstOrDefault() != null)
                {
                    //空白:試合中または試合前 2=正常終了 7=サスペンデッド 9=中止(試合中)
                    string gameSetSituationCd = GetNpbGameStateID((short)realGameInfos.FirstOrDefault().SituationID);

                    if ((!string.IsNullOrEmpty(gameSetSituationCd)) && ((gameSetSituationCd == "8") ||(gameSetSituationCd == "9")))
                    {
                        return 10;
                    }

                    switch (gameSetSituationCd)
                    {
                        case "0":
                            return !checkBet ? 4 : 5;         // 4:試合前、ベットなし 5:試合前、ベットあり
                        case "1":
                            return !checkBet ? 6 : 7;         // 8:試合中、ベットなし 7:試合中、ベットあり
                        case "4":
                            return !checkBet ? 8 : 9;         // 8:試合終了、ベットなし 9:試合終了、ベットあり
                    }

                    return 10;                    // 10:試合中止
                }

                return !checkBet ? 4 : 5;         // 3:5分前以降、ベットなし  4:5分前以前、ベットあり
            }

            return !checkBet ? 4 : 5;         // 3:5分前以降、ベットなし  4:5分前以前、ベットあり
        }
コード例 #3
0
ファイル: NpbCommon.cs プロジェクト: kin0428/Splg
        /// <summary>
        /// 試合状況を取得
        /// </summary>
        /// <param name="gameId">試合ID</param>
        /// <param name="strMemberId">会員ID</param>
        /// <returns>
        ///  0: 試合情報なし?
        ///  1: 受付前
        ///  2: 5分前以前、ベットなし
        ///  3: 5分前以前、ベットあり
        ///  4: 5分前以降、ベットなし
        ///  5: 5分前以降、ベットあり
        ///  6: 試合中、ベットなし
        ///  7: 試合中、ベットあり
        ///  8: 試合終了、ベットなし
        ///  9: 試合終了、ベットあり
        /// 10: 試合中止
        /// </returns>
        public static int GetStatusMatch(int gameId, string strMemberId)
        {
            //Todo:判定が煩雑なので、ロジック整理の必要有り

            var memberId = !string.IsNullOrEmpty(strMemberId) ? Convert.ToInt64(strMemberId) : 0;

            if (memberId > 0)
            {
                // ポイントテーブル存在判定
                var systemDatetimeService = new SystemDatetimeService();
                var pointInfoService = new PointInfoService(new ComEntities());
                var isExist = pointInfoService.IsExistsPoint(memberId, systemDatetimeService.SystemDate);
                if (!isExist) return 1;
            }

            // BET情報を取得
            var oddsService = new OddsService();
            var oddinfo = oddsService.GetOddsInfoByGameID(Constants.NPB_SPORT_ID, gameId, memberId);
            if (oddinfo.ExpectTargetID == 0) return 1;

            var isBet = oddinfo.BetSelectedID != null; // BET有無

            var npb = new NpbEntities();

            // 年間試合スケジュール_試合情報 を取得
            var gameInfoSS = npb.GameInfoSS.FirstOrDefault(x => x.ID == gameId);

            if (gameInfoSS == null) return 0;

            // 全試合情報を取得
            string gameSetSituationCd = null; // 試合終了状況コード
            var gameInfoRGI = npb.GameInfoRGI.FirstOrDefault(x => x.GameID == gameId);
            if (gameInfoRGI != null)
            {
                gameSetSituationCd = gameInfoRGI.GameSetSituationCD;
            }

            if (!string.IsNullOrEmpty(gameSetSituationCd) && (gameSetSituationCd == "0")) // 中止(試合前)
            {
                return 10;
            }

            var gameDate = Utils.ConvertStrToDatetime(gameInfoSS.GameDate.ToString());
            var hours = Convert.ToInt32(gameInfoSS.Time.Substring(0, 2));
            var minute = Convert.ToInt32(gameInfoSS.Time.Substring(2, 2));

            var gameStartDateAndTime = new DateTime(gameDate.Year, gameDate.Month, gameDate.Day, hours, minute, 0);

            //予想可能日付閾値(今日日付基準の月末日取得)
            var expectableEnd = DateTime.Now.EndOfTheMonthWithTime();

            // 試合開始時間前
            if (DateTime.Now < gameStartDateAndTime)
            {
                //Case 1:Can not bet
                if (gameStartDateAndTime > expectableEnd)
                {
                    return 1;
                }

                //予想可能限界日付時間(Todo:5分前の定義が、マジックナンバー)
                var limitTime = gameStartDateAndTime.AddMinutes(-5);

                if (DateTime.Now < limitTime)   //締切時間前
                {
                    return !isBet ? 2 : 3;
                }

                return !isBet ? 4 : 5;  // 締切時間以降
            }

            // 試合開始時間以降
            if (gameInfoRGI == null)
            {
                return !isBet ? 4 : 5;
            }

            if (!string.IsNullOrEmpty(gameSetSituationCd) && (gameSetSituationCd == "9")) // 中止(試合中)
            {
                return 10;
            }

            if (gameSetSituationCd == "2" ||
                gameSetSituationCd == "4" ||
                gameSetSituationCd == "5" ||
                gameSetSituationCd == "8" ||
                gameSetSituationCd == "A" ||
                gameSetSituationCd == "B" ||
                gameSetSituationCd == "C" ||
                gameSetSituationCd == "D")
            {
                return !isBet ? 8 : 9;
            }

            if (!string.IsNullOrEmpty(gameSetSituationCd))
            {
                return 10;
            }

            int inning = gameInfoRGI.Inning ?? default(short);   // 現イニング

            if (inning == 0)    // 試合前
            {
                return !isBet ? 4 : 5;
            }

            if (inning >= 1)    // 試合中
            {
                return !isBet ? 6 : 7;
            }

            return 0;
        }