/// <summary> /// ○○さんへのお知らせのもっと見る取得 /// </summary> /// <param name="usernoticecount">現在表示しているレコード件数</param> /// <returns>Json形式のActionResult</returns> public ActionResult GetMoreUserNotices(int usernoticecount) { MyPageNoticeViewModel viewModel = new MyPageNoticeViewModel(); //ユーザーへのお知らせ if (usernoticecount == 0) SetUserNotices(viewModel, usernoticecount, MyPageNoticeViewModel.INITIAL_PAGE_SIZE); else SetUserNotices(viewModel, usernoticecount, MyPageNoticeViewModel.INITIAL_PAGE_SIZE); return Json(viewModel, JsonRequestBehavior.AllowGet); }
/// <summary> /// 運営からのお知らせのもっと見る取得 /// </summary> /// <param name="managementnoticecount">現在表示しているレコード件数</param> /// <returns>Json形式のActionResult</returns> public ActionResult GetMoreManagementNotices(int managementnoticecount) { MyPageNoticeViewModel viewModel = new MyPageNoticeViewModel(); //2015/5/21のリリース対応 return Json(viewModel, JsonRequestBehavior.AllowGet); //運営からのお知らせ if (managementnoticecount == 0) SetManagementNotices(viewModel, managementnoticecount, 3); else SetManagementNotices(viewModel, managementnoticecount, MyPageNoticeViewModel.INITIAL_PAGE_SIZE); return Json(viewModel, JsonRequestBehavior.AllowGet); }
/// <summary> /// GET: /mypage/notice/ /// </summary> public ActionResult Index() { //Todo:認証処理 AOPでやりたい。 一旦Session変数を参照し判定(フォーム認証部分も本来なら見るべき。) if (Session["CurrentUser"] == null) { return RedirectToActionPermanent("Login", "Member", new { area = "" }); } long memberId = 0; object currentUser = Session["CurrentUser"]; if (currentUser != null) memberId = Convert.ToInt64(currentUser.ToString()); MyPageNoticeViewModel viewModel = new MyPageNoticeViewModel(); Member member = Utils.GetMember(memberId); viewModel.Nickname = member.Nickname; //運営からのお知らせ //SetManagementNotices(viewModel, 0, MyPageNoticeViewModel.MANAGEMENT_NOTICE_INITIAL_SIZE); //ユーザーへのお知らせ //SetUserNotices(viewModel, 0, MyPageNoticeViewModel.USER_NOTICE_INITIAL_SIZE); return View(viewModel); }
/// <summary> /// ユーザーへのお知らせをDBから取得する処理 /// </summary> /// <param name="pageSize">1ページあたりのレコード件数</param> /// <returns>NoticeInfoのIEnumerableオブジェクト</returns> private IEnumerable<NoticeInfoForMyPage> SetUserNotices(MyPageNoticeViewModel viewModel, int skipCount, int retrieveCount) { IEnumerable<NoticeInfoForMyPage> result = new List<NoticeInfoForMyPage> { }; List<NoticeInfoForMyPage> result2 = new List<NoticeInfoForMyPage> { }; long loginMemberId = 0; object currentUser = Session["CurrentUser"]; if (currentUser != null) loginMemberId = Convert.ToInt64(currentUser.ToString()); try { if (loginMemberId > 0) { //CreatedDateを一か月みる。CreatedDateはレコードを作成するときは必ず入れる。 DateTime dt = DateTime.Now.AddMonths(-1); //NoticeDeliverySubjectテーブルからセッションから取得した自分のMemberIdで検索しリストを取得する。 //NoticeInfoテーブルを上記で取得したレコードで お知らせID(NoticeID)が同一 //かつ 現在日時 < 通知表示終了日時(NoticeDisplayEndTime) // 通知表示終了日時(NoticeDisplayEndTime) は本来NoticeDeliverySubject // 当面は上記CreatedDateで判定する //かつ NoticeClassが1か3のものを10件取得 //現在の取得件数をhtmlにdata-usernoticecount属性として保存する //例:<ul data-usernoticecount="10"> //var lines = from n in com.NoticeInfo // join d in com.NoticeDeliverySubject on n.NoticeId equals d.NoticeId // where d.CreatedDate >= dt // && (n.NoticeClass == 1 || n.NoticeClass == 3) // && d.MemberId == loginMemberId // //&& n.NoticeId <= 4 //PointsPtが付与の仕様確定待ちのため暫定で絞る // orderby d.CreatedDate descending // select new NoticeInfoForMyPage // { // NoticeId = n.NoticeId, // NoticeClass = n.NoticeClass, // NoticeDeliverySubjectId = d.NoticeDeliverySubjectId, // ClassClass = d.ClassClass, // MemberId = loginMemberId, // UniqueID = d.UniqueID, // UniqueID2 = d.UniqueID2, // //UniqueID3 = d.UniqueID3, // AlreadyReadFlg = d.AlreadyReadFlg, // Title = n.Title, // Body = n.Body, // //NoticeBody = n.NoticeBody, // DeliveryTime = n.DeliveryTime, //将来NoticeDeliverySubjectに移動(未使用) // NoticeDisplayEndTime = n.NoticeDisplayEndTime, //将来NoticeDeliverySubjectに移動(未使用) // TransitionsURL = n.TransitionsURL, // MailCC = n.MailCC, // MailBCC = n.MailBCC, // MailSendStatus = n.MailSendStatus, // CreatedAccountID = d.CreatedAccountID, // CreatedDate = d.CreatedDate, // ModifiedAccountID = d.ModifiedAccountID, // ModifiedDate = d.ModifiedDate // }; //ScheduleInfo 試合スケジュール_試合情報はHomeTeamIDがすでにわかっているので不要? System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("SELECT "); sb.Append("n.NoticeId,n.NoticeClass,d.NoticeDeliverySubjectId,d.ClassClass,d.MemberId,d.UniqueID,d.UniqueID2,d.UniqueID3,d.AlreadyReadFlg, "); sb.Append(" n.Title,n.Body,n.NoticeBody, n.DeliveryTime,n.NoticeDisplayEndTime,n.TransitionsURL,n.MailCC,n.MailBCC, n.MailSendStatus,d.CreatedAccountID, d.CreatedDate, d.ModifiedAccountID, d.ModifiedDate "); sb.Append("FROM "); sb.Append("[SPLG].[COM].[NOTICEINFO] n "); sb.Append(" JOIN [SPLG].[COM].[NOTICEDELIVERYSUBJECT] d "); sb.Append("ON n.NOTICEID = d.NOTICEID "); sb.Append("WHERE "); sb.Append("d.CreatedDate >= '" + dt + "' "); sb.Append("AND "); sb.Append("(n.NoticeClass = 1 OR n.NoticeClass = 3) "); sb.Append("AND "); sb.Append("d.MemberId = " + loginMemberId + " "); sb.Append("ORDER BY "); sb.Append("d.CreatedDate DESC "); string query = sb.ToString(); var lines = com.Database.SqlQuery<NoticeInfoForMyPage>(@query).ToList<NoticeInfoForMyPage>(); foreach (NoticeInfoForMyPage n in lines) { switch (n.ClassClass) { case NoticeInfoForMyPage.CLS_SPORTS: break; case NoticeInfoForMyPage.CLS_TEAM: break; case NoticeInfoForMyPage.CLS_PLAYER: break; case NoticeInfoForMyPage.CLS_GAME: setGameInfo(n); break; case NoticeInfoForMyPage.CLS_LEAGUE: break; case NoticeInfoForMyPage.CLS_FOLLOW: setFollowInfo(n); break; case NoticeInfoForMyPage.CLS_GROUP: setGroupInfo(n); break; case NoticeInfoForMyPage.CLS_POINT_GIVE: setPointGiveInfo(n); break; case NoticeInfoForMyPage.CLS_POINT_PAYOFF: setPointPayoffInfo(n); break; } n.Nickname = (from gm in com.Member where gm.MemberId == n.MemberId select gm.Nickname).FirstOrDefault(); n.setTitle(n.ClassClass, n.Title); n.setNoticeBody(n.ClassClass, n.NoticeBody); n.setBody(n.ClassClass, n.Body); result2.Add(n); } viewModel.UserNoticeTotalCount = lines.Count(); viewModel.UserNotices = result2.Skip(skipCount).Take(retrieveCount); } } catch (Exception ex) { throw ex; } return result; }
/// <summary> /// 運営からのお知らせをDBから取得する処理 /// </summary> /// <param name="pageSize">取得するレコード件数</param> /// <returns>NoticeInfoのIEnumerableオブジェクト</returns> private IEnumerable<NoticeInfoForMyPage> SetManagementNotices(MyPageNoticeViewModel viewModel, int skipCount, int retrieveCount) { IEnumerable<NoticeInfoForMyPage> result = new List<NoticeInfoForMyPage> { }; long memberId = 0; object currentUser = Session["CurrentUser"]; if (currentUser != null) memberId = Convert.ToInt64(currentUser.ToString()); try { if (memberId > 0) { //CreatedDateを一か月みる。CreatedDateはレコードを作成するときは必ず入れる。 DateTime dt = DateTime.Now.AddMonths(-1); //NoticeInfoテーブルから条件 現在日時 < 通知表示終了日時(NoticeDisplayEndTime) のものを配信日時の新しい順 // 通知表示終了日時(NoticeDisplayEndTime) は本来NoticeDeliverySubject // 当面は上記CreatedDateで判定する //かつ、NoticeClassフィールドが1か3、 //かつNoticeDeliverySubjectにレコードが存在しないものを3件表示する //現在の取得件数をhtmlにdata-managementnoticecount属性として保存する //例:<ul data-managementnoticecount="3"> var lines = from n in com.NoticeInfo from d in com.NoticeDeliverySubject.Where(x => x.NoticeId == n.NoticeId).DefaultIfEmpty() where d.CreatedDate > dt && (n.NoticeClass == 1 || n.NoticeClass == 3) && d == null orderby d.CreatedDate descending select new NoticeInfoForMyPage { AlreadyReadFlg = true, //NoticeDeliverySubjectが存在しないためtrueにセット NoticeId = n.NoticeId, NoticeClass = n.NoticeClass, //TODO NoticeBody = n.NoticeBody, Title = n.Title, Body = n.Body, DeliveryTime = n.DeliveryTime, //将来NoticeDeliverySubjectに移動(未使用) NoticeDisplayEndTime = n.NoticeDisplayEndTime, //将来NoticeDeliverySubjectに移動(未使用) TransitionsURL = n.TransitionsURL, MailCC = n.MailCC, MailBCC = n.MailBCC, MailSendStatus = n.MailSendStatus, CreatedAccountID = n.CreatedAccountID, CreatedDate = n.CreatedDate, ModifiedAccountID = n.ModifiedAccountID, ModifiedDate = n.ModifiedDate, }; viewModel.ManagementNoticeTotalCount = lines.Count(); viewModel.ManagementNotices = lines.Skip(skipCount).Take(retrieveCount); } } catch (Exception ex) { throw ex; } return result; }