public MyPageGroupDetailsService(ComEntities dbContext)
 {
     // todo インスタンス管理
     this.dbContext = dbContext;
     this.groupInfoService = new GroupInfoService(this.dbContext);
     this.pointInfoService = new PointInfoService(this.dbContext);
     this.systemDatetimeService = new SystemDatetimeService();
 }
Example #2
0
        /// <summary>
        /// 会員IDで今月の予想情報を取得する。
        /// もともとNPBエリア(NpbRightContentController)にあった共通メソッドだが、
        /// Phase1,2仕様どちらでも予想した試合を本日日付からで判定できない。
        /// そのため、下記に変更する。
        /// ※ExpectTargetを基点にSituationStatus=1のその会員の試合をすべて表示する。
        /// 最初に試合表示パネルから予想する時点では、パラメータのGameIDから試合日時が取れるので
        /// バッチ処理で更新されたPointテーブルのデータに従う形でPointテーブルのレコードは正確に特定できる。
        /// そのため、ExpectTargetを基点にすべて表示でPhase2切り替え時も問題ない。
        /// </summary>
        /// <returns>List Game predicted.</returns>
        public PointInfoViewModel GetExpectedPointInfo(int memberID, bool showCurrentPointInfoOnly = false)
        {
            PointInfoViewModel result = new PointInfoViewModel();

            SystemDatetimeService systemDatetimeService = new SystemDatetimeService();

            var memberPoint = this.GetMemberWithOnlinePoints(memberID,systemDatetimeService.TargetYear,systemDatetimeService.TargetMonth);

            if (memberPoint == null)
                return null;

            result.PointInfoModel = new Models.PointInfo.InfoModel.PointInfoModel();
            result.PointInfoModel.PointID = (int)memberPoint.PointId;
            result.PointInfoModel.PossesionPoint = memberPoint.PossesionPoint;
            result.PointInfoModel.FundsPoint = memberPoint.FundsPoint;
            result.PointInfoModel.PayOffPoints = memberPoint.PayOffPoints;
            result.PointInfoModel.BetStartDate = memberPoint.BetStartDate;
            result.PointInfoModel.BetEndDate = memberPoint.BetEndDate;

            //Get these games that not end : not start or ongoing.
            if (!showCurrentPointInfoOnly)
            {
                var expectations = from et in DbContext.ExpectTarget
                                   join ep in DbContext.ExpectPoint on et.ExpectTargetID equals ep.ExpectTargetID
                                   join p in DbContext.Point on ep.PointID equals p.PointID
                                   where
                                   (et.FixBetSelectID == 0 || et.FixBetSelectID == null)
                                   && ep.SituationStatus == 1 //TODO SituationStatus 要確認(終了していない試合のみ対象で良い?)
                                   && p.MemberID == memberID
                                   orderby et.StartScheduleDate, et.SportsID
                                   select new ExpectationInfoModel
                              {
                                  SportID = et.SportsID == null ? 0 : et.SportsID,
                                  PointID = (ep.PointID == null ? 0 : ep.PointID),
                                  ExpectPointID = (ep.ExpectPointID == null ? 0 : ep.ExpectPointID),
                                  ExpectPoint = (ep.ExpectPoint1 == null ? 0 : ep.ExpectPoint1),
                                  BetStartDate = p.BetStartDate,  //Phase2では不要
                                  GiveTargetMonth = p.GiveTargetMonth,
                                  BetSelectID = (ep.BetSelectID.Value == null ? 0 : ep.BetSelectID.Value),
                                  GameID = (et.UniqueID == null ? 0 : et.UniqueID),
                                  Odds = (from odds in DbContext.OddsInfo
                                          join bsm in DbContext.BetSelectMaster on odds.BetSelectMasterID equals bsm.BetSelectMasterID
                                          where
                                          ep.BetSelectID.ToString() == bsm.BetSelectID.ToString()
                                          && odds.ClassificationType == 2
                                          && odds.ExpectTargetID == et.ExpectTargetID
                                          select odds.Odds).FirstOrDefault(),

                                  StartScheduleDate = et.StartScheduleDate.Value == null ? DateTime.MinValue : et.StartScheduleDate.Value
                              };
                result.ExpectationInfoModels = expectations;

            }

            return result;
        }
Example #3
0
 public UserFollowersController()
 {
     // todo インスタンス管理
     this.workerService = new UserFollowersService(this.com);
     this.systemDatetimeService = new SystemDatetimeService();
 }
Example #4
0
        /// <summary>
        /// 会員IDでオンラインな所持ポイントを取得する。
        /// </summary>
        /// <returns>List Game predicted.</returns>
        public string GetOnlinePointStr(int memberId)
        {
            SystemDatetimeService systemDatetimeService = new SystemDatetimeService();

            var point = (from p in this.DbContext.Point
                          where p.MemberID == memberId
                          && p.GiveTargetYear == (short)systemDatetimeService.TargetYear
                          && p.GiveTargetMonth == (short)systemDatetimeService.TargetMonth
                          orderby p.GiveTargetWeek descending, p.CreatedDate descending
                          select new MemberModel
                          {
                              MemberId = p.MemberID,
                              PossesionPoint = p.PossesionPoint,
                              FundsPoint = p.FundsPoint,
                              PayOffPoints = p.PayOffPoints
                          }
                        ).FirstOrDefault();

            if (point == null)
                return "0";

            return point.FormattedDisplayPoints;
        }
Example #5
0
 public MyPageGroupNewController()
 {
     // todo インスタンス管理
     this.workerService = new MyPageGroupNewService(this.com);
     this.systemDatetimeService = new SystemDatetimeService();
 }
Example #6
0
 public JlgTopController()
 {
     this.systemDatetimeService = new SystemDatetimeService();
 }
Example #7
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分前以前、ベットあり
        }
Example #8
0
        public JsonResult IsExistsFinishedGame()
        {
            bool result = false;
            var memberId = this.GetMemberId();
            var systemDatetimeService = new SystemDatetimeService();
            var noticeService = new NoticeService(this.com, systemDatetimeService);
            var fromDate = Utils.GetStartOfDay(systemDatetimeService.SystemDate.AddDays(-1));
            var toDate = Utils.GetEndOfDay(systemDatetimeService.SystemDate);

            result = noticeService.NoticeExpectedGameInfo(memberId, fromDate, toDate, memberId);

            return Json(result, JsonRequestBehavior.AllowGet);
        }
Example #9
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.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;
        }
Example #10
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.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;
        }
Example #11
0
 public GroupInfoService(ComEntities dbContext)
 {
     this.dbContext = dbContext;
     this.pointInfoService = new PointInfoService(this.dbContext);
     this.systemDatetimeService = new SystemDatetimeService();
 }
Example #12
0
 public MyPageFollowingController()
 {
     // todo インスタンス管理
     this.workerService = new MyPageFollowingService(this.com);
     this.systemDatetimeService = new SystemDatetimeService();
 }