Example #1
0
        // Todo Serviceに移動
        /// <summary>
        /// 予想一覧向け試合情報の取得
        /// </summary>
        /// <param name="memberId"></param>
        /// <param name="target_year"></param>
        /// <param name="target_month"></param>
        /// <param name="target_date"></param>
        /// <returns></returns>
        public static IEnumerable<GameInfoModel> GetGameInfo(Int64 memberId, int target_year, int target_month, int target_date = 0, int sportsId = 0)
        {
            bool articleDispFlg;

            List<GameInfoModel> result;

            OddsService oddsService = new OddsService();

            #region 情報取得する日付の開始と終了を取得し、投稿記事のリンク表示フラグを設定する
            DateTime startDate;
            DateTime endDate;
            switch (target_date)
            {
                // 日付指定がない場合
                case 0:
                    // 当月最初の日付を取得
                    startDate = Convert.ToDateTime(target_year + "/" + target_month + "/01 00:00:00");
                    // 当月の最後の日付を取得
                    endDate = Convert.ToDateTime(target_year + "/" + target_month + "/01 23:59:59").AddMonths(1).AddDays(-1);
                    // 投稿記事を表示
                    articleDispFlg = true;
                    break;
                // 日付指定の場合
                default:
                    // 指定日の前日を取得
                    startDate = Convert.ToDateTime(target_year + "/" + target_month + "/" + target_date + " 00:00:00");
                    // 指定日を取得
                    endDate = Convert.ToDateTime(target_year + "/" + target_month + "/" + target_date + " 23:59:59");
                    // 投稿記事を表示
                    articleDispFlg = false;
                    break;
            }

            int startDateInt = startDate.ParseToInt();
            int endDateInt = endDate.ParseToInt();
            #endregion

            //NPBゲームの取得
            List<GameInfoModel> nbpGames = null;
            IEnumerable<GameInfoViewModelForNBP> npbTmp = null;

            if (sportsId == 0 || sportsId == Constants.NPB_SPORT_ID)
            {
                //予想情報の取得
                var npbExpectTargets = GetPointOfUser(memberId, Constants.NPB_SPORT_ID, startDate, endDate);

                if (npbExpectTargets != null)
                {
                    var npbGameIds = (from t in npbExpectTargets select t.GameID).Distinct().ToList();
                    NpbTopController NpbCtl = new NpbTopController();
                    npbTmp = NpbCtl.GetGameInfo(null, startDateInt, endDateInt, null, null, npbGameIds);
                }

                //TODO GetGameInfoで日付を指定するからには、NULLだった場合の対処が必要ではないか?
                if (npbTmp != null)
                {
                    nbpGames = (from g in npbTmp.ToList()
                                join e in npbExpectTargets on g.GameID equals e.GameID
                                select new GameInfoModel
                                {
                                    TargetYear = target_year,
                                    TargetMonth = target_month,
                                    StartScheduleDate = e.StartScheduleDate,
                                    SportsID = e.SportsID,
                                    ExpectTargetID = e.ExpectTargetID,
                                    GameID = g.GameID,
                                    TeamName = e.BetSelectID == 1 ? g.HomeTeamName : e.BetSelectID == 2 ? g.VisitorTeamName : "引き分け",
                                    TeamNameS = e.BetSelectID == 1 ? g.HomeTeamNameS : e.BetSelectID == 2 ? g.VisitorTeamNameS : "引き分け",
                                    Url = "/npb/game/" + g.GameID + "",
                                    UrlArticle = "/mypage/article/",
                                    HomeTeamName = g.HomeTeamName,
                                    HomeTeamID = g.HomeTeamID,
                                    HomeTeamS = g.HomeTeamNameS,
                                    VisitorTeamName = g.VisitorTeamName,
                                    VisitorTeamS = g.VisitorTeamNameS,
                                    VisitorTeamID = g.VisitorTeamID,
                                    HomeTeamIcon = g.HomeTeamIcon,
                                    VisitorTeamIcon = g.VisitorTeamIcon,
                                    HomeTeamRanking = g.HomeTeamRanking,
                                    VisitorTeamRanking = g.VisitorTeamRanking,
                                    HomeTeamWin = g.HomeTeamWin,
                                    VisitorTeamWin = g.VisitorTeamWin,
                                    HomeTeamUrl = "/npb/teams/" + g.HomeTeamID + "",
                                    VisitorTeamUrl = "/npb/teams/" + g.VisitorTeamID + "",
                                    HomeScore = Convert.ToString(g.HomeTeamScore),
                                    VisitorScore = Convert.ToString(g.VisitorTeamScore),
                                    GameDateScheduled = g.GameDate,
                                    GameTimeScheduled = g.Time,
                                    OddsInfoModel = oddsService.GetOddsInfoByGameID(Constants.NPB_SPORT_ID, g.GameID, memberId),
                                    PreForeRunnerNameSH = g.PreForeRunnerNameSH,
                                    PreForeRunnerEraH = g.PreForeRunnerEraH,
                                    PreForeRunnerNameSV = g.PreForeRunnerNameSV,
                                    PreForeRunnerEraV = g.PreForeRunnerEraV,
                                    ForeRunnerNameSH = g.ForeRunnerNameSH,
                                    ForeRunnerEraH = g.ForeRunnerEraH,
                                    ForeRunnerNameSV = g.ForeRunnerNameSV,
                                    ForeRunnerEraV = g.ForeRunnerEraV,
                                    WinLoseNameSH = g.WinLoseNameSH,
                                    WinLoseEraH = g.WinLoseEraH,
                                    WinLoseNameSV = g.WinLoseNameSV,
                                    WinLoseEraV = g.WinLoseEraV,
                                    IsWinH = g.IsWinH,
                                    IsWinV = g.IsWinV,
                                    WinLoseTextH = g.WinLoseTextH,
                                    WinLoseTextV = g.WinLoseTextV,

                                    WinLose = Convert.ToInt16(e.VorD), //勝敗1:勝ち 2:負け,
                                    BetSelectID = e.BetSelectID,
                                    SituationStatus = e.SituationStatus,
                                    ExpectPoint1 = e.ExpectPoint,
                                    StartDt = startDate

                                }).ToList();
                }
            }

            //MLBゲームの取得
            List<GameInfoModel> mlbGames = null;
            IEnumerable<GameInfoViewModelForMLB> mlbTmp = null;

            if (sportsId == 0 || sportsId == Constants.MLB_SPORT_ID)
            {
                var mlbExpectTargets = GetPointOfUser(memberId, Constants.MLB_SPORT_ID, startDate, endDate);

                if (mlbExpectTargets != null)
                {
                    MlbTopController MlbCtl = new MlbTopController();
                    var mlbGameIds = (from t in mlbExpectTargets select t.GameID).Distinct().ToList();

                    if (mlbGameIds != null)
                        mlbTmp = MlbCtl.GetGameInfo(null, startDateInt, endDateInt, null, null, mlbGameIds);
                }

                //TODO GetGameInfoで日付を指定するからには、NULLだった場合の対処が必要ではないか?
                if (mlbTmp != null)
                {
                    mlbGames = (from g in mlbTmp.ToList()
                                join e in mlbExpectTargets on g.GameID equals e.GameID
                                select new GameInfoModel
                                {
                                    TargetYear = target_year,
                                    TargetMonth = target_month,
                                    StartScheduleDate = e.StartScheduleDate,
                                    SportsID = e.SportsID,
                                    ExpectTargetID = e.ExpectTargetID,
                                    GameID = g.GameID,
                                    TeamName = e.BetSelectID == 1 ? g.HomeTeamName : e.BetSelectID == 2 ? g.VisitorTeamName : "引き分け",
                                    TeamNameS = e.BetSelectID == 1 ? g.HomeTeamNameS : e.BetSelectID == 2 ? g.VisitorTeamNameS : "引き分け",
                                    Url = "/mlb/game/" + g.GameID + "",
                                    UrlArticle = "/mypage/article/",
                                    HomeTeamName = g.HomeTeamName,
                                    HomeTeamID = g.HomeTeamID,
                                    HomeTeamS = g.HomeTeamNameS,
                                    VisitorTeamName = g.VisitorTeamName,
                                    VisitorTeamS = g.VisitorTeamNameS,
                                    VisitorTeamID = g.VisitorTeamID,
                                    HomeTeamIcon = g.HomeTeamIcon,
                                    VisitorTeamIcon = g.VisitorTeamIcon,
                                    HomeTeamRanking = g.HomeTeamRanking,
                                    VisitorTeamRanking = g.VisitorTeamRanking,
                                    HomeTeamWin = g.HomeTeamWin,
                                    VisitorTeamWin = g.VisitorTeamWin,
                                    HomeTeamUrl = "/mlb/teams/" + g.HomeTeamID + "",
                                    VisitorTeamUrl = "/mlb/teams/" + g.VisitorTeamID + "",
                                    HomeScore = Convert.ToString(g.HomeTeamScore),
                                    VisitorScore = Convert.ToString(g.VisitorTeamScore),
                                    GameDateScheduled = g.GameDate,
                                    GameTimeScheduled = g.Time,
                                    OddsInfoModel = oddsService.GetOddsInfoByGameID(Constants.MLB_SPORT_ID, g.GameID, memberId),
                                    PreForeRunnerNameSH = g.PreForeRunnerNameSH,
                                    PreForeRunnerNameSV = g.PreForeRunnerNameSV,
                                    ForeRunnerNameSH = g.ForeRunnerNameSH,
                                    ForeRunnerNameSV = g.ForeRunnerNameSV,

                                    WinLose = Convert.ToInt16(e.VorD), //勝敗1:勝ち 2:負け,
                                    BetSelectID = e.BetSelectID,
                                    SituationStatus = e.SituationStatus,
                                    ExpectPoint1 = e.ExpectPoint,
                                    StartDt = startDate

                                }).ToList();
                }
            }

            //JLGゲームの取得
            List<GameInfoModel> jlgGames = null;
            IEnumerable<JlgGameInfos> jlgTmp = null;

            if (sportsId == 0 || sportsId == Constants.JLG_SPORT_ID)
            {
                var jlgExpectTargets = GetPointOfUser(memberId, Constants.JLG_SPORT_ID, startDate, endDate);

                if (jlgExpectTargets != null)
                {
                    JlgTopController jlgCtl = new JlgTopController();
                    var jlgGameIds = (from t in jlgExpectTargets select t.GameID).Distinct().ToList();

                    if (jlgGameIds != null)
                        jlgTmp = jlgCtl.GetGameInfoByDate(null, startDateInt, endDateInt, null, null, jlgGameIds);
                }

                //TODO GetGameInfoで日付を指定するからには、NULLだった場合の対処が必要ではないか?
                if (jlgTmp != null)
                {
                    jlgGames = (from g in jlgTmp.ToList()
                                join e in jlgExpectTargets on g.GameID equals e.GameID
                                select new GameInfoModel
                                {
                                    TargetYear = target_year,
                                    TargetMonth = target_month,
                                    StartScheduleDate = e.StartScheduleDate,
                                    SportsID = e.SportsID,
                                    ExpectTargetID = e.ExpectTargetID,
                                    GameID = g.GameID,
                                    TeamName = e.BetSelectID == 1 ? g.HomeTeamName : e.BetSelectID == 2 ? g.AwayTeamName : "引き分け",
                                    TeamNameS = e.BetSelectID == 1 ? g.HomeTeamNameS : e.BetSelectID == 2 ? g.AwayTeamNameS : "引き分け",
                                    Url = "/jleague/game/" + g.GameID + "",
                                    UrlArticle = "/mypage/article/",
                                    HomeTeamName = g.HomeTeamName,
                                    HomeTeamID = Convert.ToInt32(g.HomeTeamID),
                                    HomeTeamS = g.HomeTeamNameS,
                                    VisitorTeamName = g.AwayTeamName,
                                    VisitorTeamS = g.AwayTeamNameS,
                                    VisitorTeamID = g.AwayTeamID,
                                    HomeTeamIcon = g.HomeTeamIcon,
                                    VisitorTeamIcon = g.AwayTeamIcon,
                                    HomeTeamRanking = g.HomeTeamRanking,
                                    VisitorTeamRanking = g.AwayTeamRanking,
                                    HomeTeamWin = g.HomeTeamWin,
                                    VisitorTeamWin = g.AwayTeamWin,
                                    HomeTeamUrl = "/jleague/teams/" + g.HomeTeamID + "",
                                    VisitorTeamUrl = "/jleague/teams/" + g.AwayTeamID + "",
                                    HomeScore = g.HomeTeamScore.ToString(),
                                    VisitorScore = g.AwayTeamScore.ToString(),
                                    GameDateScheduled = g.GameDate,
                                    GameTimeScheduled = g.Time,
                                    OddsInfoModel = oddsService.GetOddsInfoByGameID(Constants.JLG_SPORT_ID, g.GameID, memberId),

                                    WinLose = Convert.ToInt16(e.VorD), //勝敗1:勝ち 2:負け,
                                    BetSelectID = e.BetSelectID,
                                    SituationStatus = e.SituationStatus,
                                    ExpectPoint1 = e.ExpectPoint,
                                    StartDt = startDate
                                }).ToList();
                }
            }

            ScoreGameInfo lstScoreHome;
            ScoreGameInfo lstScoreVisitor;

            if (nbpGames != null)
            {
                foreach (var g in nbpGames)
                {
                    // 投稿記事表示フラグ
                    g.ArticleDispFlg = articleDispFlg;

                    //実際の試合日時
                    var giSS = (from gameInfo in npb.GameInfoSS
                                where gameInfo.ID == g.GameID
                                select gameInfo).FirstOrDefault();
                    if (giSS != null)
                    {
                        g.GameDateActual = giSS.GameDate;
                        g.GameTimeActual = giSS.Time;
                    }

                    //スコア
                    lstScoreHome = NpbCommon.GetTeamInfoGTSByGameIDTeamID(g.GameID, g.HomeTeamID);
                    lstScoreVisitor = NpbCommon.GetTeamInfoGTSByGameIDTeamID(g.GameID, g.VisitorTeamID);
                    if (lstScoreHome != null && lstScoreVisitor != null)
                    {
                        g.BottomTop = Utils.GetRoundName(lstScoreHome.TB);
                        g.Inning = lstScoreHome.Inning == null ? 0 : (int)lstScoreHome.Inning;
                    }

                    g.GameStatus = NpbCommon.GetStatusMatch(g.GameID, memberId.ToString());
                    //g.GameStatusSimple = NpbCommon.GetStatusMatch(g.GameID.ToString());

                    if (g.GameStatus == 6 || g.GameStatus == 7)
                    {
                        g.GameDateTime = "試合中 " + g.Inning + g.BottomTop;

                    }

                    // 試合の勝利チーム
                    var winteam = (from gi in npb.GameInfoRGI
                                   join ri in npb.GameResultInfoRGI
                               on gi.RealGameInfoRootRGIId equals ri.RealGameInfoRootRGIId
                                   where
                                   gi.GameID == g.GameID   // 試合
                                   select ri).FirstOrDefault();
                    if (winteam != null)
                    {

                        var win_teamcd = winteam.WinTeamCD;
                        if (win_teamcd == g.HomeTeamID)
                        {
                            // g.TeamName = g.HomeTeamName;
                            // g.TeamNameS = g.HomeTeamS;
                            g.WinnerTeam = 1;
                        }
                        else if (win_teamcd == g.VisitorTeamID)
                        {
                            // g.TeamName = g.VisitorTeamName;
                            // g.TeamNameS = g.VisitorTeamS;
                            g.WinnerTeam = 2;
                        }
                    }
                }
            }

            if (mlbGames != null)
            {
                foreach (var g in mlbGames)
                {
                    // 投稿記事表示フラグ
                    g.ArticleDispFlg = articleDispFlg;

                    //実際の試合日時
                    var ssi = (from ss in mlb.SeasonSchedule
                               join dg in mlb.DayGroup on ss.DayGroupId equals dg.DayGroupId
                               where ss.GameID == g.GameID
                               select new
                               {
                                   GameDate = dg.GameDateJPN,
                                   Time = ss.Time
                               }).FirstOrDefault();

                    if (ssi != null)
                    {
                        g.GameDateActual = ssi.GameDate;
                        g.GameTimeActual = ssi.Time;
                    }

                    //イニング情報とスコアを得る
                    lstScoreHome = MlbCommon.GetTeamInfoGTSByGameIDTeamIDHome(g.GameID, g.HomeTeamID);
                    lstScoreVisitor = MlbCommon.GetTeamInfoGTSByGameIDTeamIDVisitor(g.GameID, g.VisitorTeamID);

                    if (lstScoreHome != null && lstScoreVisitor != null)
                    {
                        g.BottomTop = Utils.GetRoundName(lstScoreHome.TB);
                        g.Inning = lstScoreHome.Inning == null ? 0 : (int)lstScoreHome.Inning;
                    }

                    //ゲームの状態
                    g.GameStatus = MlbCommon.GetStatusMatch(g.GameID, memberId.ToString());
                    //g.GameStatusSimple = MlbCommon.GetStatusMatch(g.GameID.ToString());

                    if (g.GameStatus == 6 || g.GameStatus == 7)
                    {
                        g.GameDateTime = "試合中";

                    }
                    // 試合の勝利チームを得る
                    // MlbTeamInfoDailyResultController.csから引用
                    var query = from realGameInfo in mlb.RealGameInfo
                                join seasonSchedule in mlb.SeasonSchedule on realGameInfo.GameID equals seasonSchedule.GameID
                                join dayGroup in mlb.DayGroup on seasonSchedule.DayGroupId equals dayGroup.DayGroupId
                                where (dayGroup.GameDateJPN.Value == g.GameDateScheduled) && (realGameInfo.GameID == g.GameID && realGameInfo.HomeTeamID == g.HomeTeamID)
                                select new
                                {
                                    WinTeamCD = realGameInfo.HomeScore > realGameInfo.VisitorScore ? realGameInfo.HomeTeamID : (realGameInfo.HomeScore < realGameInfo.VisitorScore ? realGameInfo.VisitorTeamID : null),
                                    WinTeamName = realGameInfo.HomeScore > realGameInfo.VisitorScore ? realGameInfo.HomeTeamName : (realGameInfo.HomeScore < realGameInfo.VisitorScore ? realGameInfo.VisitorTeamName : null)
                                };
                    if (query != null)
                    {
                        if (query.FirstOrDefault() != null)
                        {
                            var mlb_winteam = query.FirstOrDefault().WinTeamCD;
                            if (mlb_winteam == g.HomeTeamID)
                            {
                                //  g.TeamName = g.HomeTeamName;
                                //  g.TeamNameS = g.HomeTeamS;
                                g.WinnerTeam = 1;
                            }
                            else if (mlb_winteam == g.VisitorTeamID)
                            {
                                //  g.TeamName = g.VisitorTeamName;
                                //  g.TeamNameS = g.VisitorTeamS;
                                g.WinnerTeam = 2;
                            }
                        }
                    }

                }
            }

            if (jlgGames != null)
            {
                foreach (var g in jlgGames)
                {
                    // 投稿記事表示フラグ
                    g.ArticleDispFlg = articleDispFlg;

                    //実際の試合日時
                    lstScoreHome = JlgCommon.GetTeamInfoGTSByGameIDTeamID(g.GameID, g.HomeTeamID);
                    lstScoreVisitor = JlgCommon.GetTeamInfoGTSByGameIDTeamID(g.GameID, g.VisitorTeamID);

                    var grlg = (from gameReportLG in jlg.GameReportLG
                                where gameReportLG.GameID == g.GameID
                                select gameReportLG).FirstOrDefault();

                    if (grlg != null)
                    {
                        g.GameDateActual = grlg.GameDate;
                        g.GameTimeActual = grlg.StartTime.ToString();
                    }

                    //ゲームの状態
                    g.GameStatus = JlgCommon.GetStatusMatch(g.GameID, memberId.ToString());
                    //g.GameStatusSimple = JlgCommon.GetStatusMatch(g.GameID.ToString());

                    if (g.GameStatus == 6 || g.GameStatus == 7)
                    {
                        g.GameDateTime = "試合中";
                    }

                    // 試合の勝利チームを得る
                    int WinTeamCD = lstScoreHome.R > lstScoreVisitor.R ? g.HomeTeamID : lstScoreHome.R < lstScoreVisitor.R ? g.VisitorTeamID : 0;
                    if (WinTeamCD == g.HomeTeamID) // Home勝ち点3
                    {
                        // ホーム勝ちののBetSelectID
                        g.WinnerTeam = (int)BetConst.BetSelectID.Home;
                    }
                    else if (WinTeamCD == g.VisitorTeamID)
                    {
                        // アウェー勝ちののBetSelectID
                        g.WinnerTeam = (int)BetConst.BetSelectID.Visitor;
                    }
                    else
                    {
                        // 引き分けのBetSelectID
                        g.WinnerTeam = (int)BetConst.BetSelectID.Draw;
                    }
                }
            }

            List<GameInfoModel> allGames = new List<GameInfoModel> { };

            if (nbpGames != null)
                allGames.AddRange(nbpGames);
            if (mlbGames != null)
                allGames.AddRange(mlbGames);
            if (jlgGames != null)
                allGames.AddRange(jlgGames);

            result = allGames.OrderByDescending(s => s.usingDate).ThenByDescending(t => t.usingTime).ToList();

            return result;
        }