/// <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; }
/// <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分前以前、ベットあり }
/// <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; }