コード例 #1
0
        public ActionResult WxDetail(int id, bool isPreview = false)
        {
            //由于存在重复的App(58与10为同一个App),此处将58替换为10
            //暂时保证 PRD环境可运行
            //此代码可在稳定运行数月后删除
            int appId = AppId == 58 ? 10 : AppId;

            _Logger.Debug("app id :{0}", appId);
            var article = _objService.Repository.Entities.FirstOrDefault(a => a.Id == id && a.AppId == appId && !a.IsDeleted.Value);

            if (article == null || (!isPreview && article.ArticleStatus != ConstData.STATUS_PUBLISH))
            {
                ///return Redirect("../invalid");
                ///
                return(View(new ArticleInfoView()
                {
                    ArticleTitle = "错误!", ArticleContent = "文章不存在!可能已经删除或者未发布!"
                }));
            }
            //var list = _articleThumbsUpService.Repository.Entities.Where(x => x.ArticleID == id && x.Type == ThumbupType.Article.ToString()).Select(x => new { articleId = x.ArticleID, userId = x.UserID, x.IsDeleted }).ToList();

            //article.ThumbsUpCount = list.Count(x => x.IsDeleted != true);

            //第一次跳转到该Action 后需要再次跳转到OAuth
            //第二次跳转到该Action 后再进行验证
            //当redirectUrl 为string.empty 时, 认为验证通过
            string redirecturl = base.ExecuteAuthorityFilterForNews(article, true);

            if (!string.IsNullOrEmpty(redirecturl))
            {
                return(Redirect(redirecturl));
            }
            //if (article.ArticleType == 1 && isPreview)
            //{
            //    article = null;
            //}

            if (isPreview)
            {
                var      dateOfUpdate          = (DateTime)article.PreviewStartDate;
                TimeSpan timeBetweenNowPreview = DateTime.Now.Subtract(dateOfUpdate);
                int      sumHours = timeBetweenNowPreview.Hours;

                if (sumHours > 12)
                {
                    return(RedirectToAction("overtime", new { wechatid = appId }));
                }
            }

            if (article.PublishDate == null)
            {
                article.PublishDate = article.CreatedDate;
            }

            //有异步
            ExecuteBehavior(article.AppId.Value, 1, "", id.ToString());

            //勉强异步一下吧
            Task.Run(() =>
            {
                if (!string.IsNullOrEmpty(ViewBag.WeChatUserID))
                {
                    _Logger.Debug("begin to check has readed :{0}, {1}", article.Id, ViewBag.WeChatUserID);
                    if (!_articleInfoReadHistoryService.HasReaded(article.Id, ViewBag.WeChatUserID))
                    {
                        _articleInfoReadHistoryService.InsertView(new ArticleInfoReadHistoryView()
                        {
                            UserId = ViewBag.WeChatUserID, ArticleInfoId = article.Id
                        });
                        _Logger.Debug("begin to add read count");
                        new ArticleInfoService().Repository.SqlExcute("update articleinfo set ReadCount=ReadCount+1 where id=" + article.Id.ToString());
                    }
                }
                else
                {
                    new ArticleInfoService().Repository.SqlExcute("update articleinfo set ReadCount=ReadCount+1 where id=" + article.Id.ToString());
                }
            });

            if (!string.IsNullOrEmpty(article.ArticleURL))
            {
                if (!article.IsPassingWeChatUserID.GetValueOrDefault())
                {
                    return(Redirect(article.ArticleURL));
                }

                var builder = new UriBuilder(article.ArticleURL);
                var query   = HttpUtility.ParseQueryString(builder.Query);
                query.Add("WeChatUserID", _objService.EncryptorWeChatUserID(ViewBag.WeChatUserID));
                _Logger.Debug(string.Format("url {0}", builder.ToString()));
                builder.Query = query.ToString();
                return(Redirect(builder.ToString()));
            }

            var articleView = new ArticleInfoView().ConvertAPIModel(article);

            var    view         = (ArticleInfoView)articleView;
            string WeChatUserID = ViewBag.WeChatUserID;

            view.IsThumbuped = _articleThumbsUpService.Repository.Entities.Any(x => x.UserID == WeChatUserID && x.ArticleID == id && x.IsDeleted != true);

            var appName = WeChatCommonService.lstSysWeChatConfig.Find(a => a.Id == appId);

            if (appName != null)
            {
                view.APPName = appName.AppName;
            }
            else
            {
                view.APPName = string.Empty;
            }
            //此处需要添加判断
            //判断文章允许支持点赞
            if (view.ShowComment.HasValue && view.ShowComment.Value)
            {
                var user = _addressBookService.GetMemberByUserId(WeChatUserID);
                if (null != user)
                {
                    ViewBag.UserInfoId  = user.Id;
                    view.CanReadComment = true;
                    if (user.Status != null && user.Status.Value == 1 && //关注
                        "A".Equals(user.EmployeeStatus, StringComparison.OrdinalIgnoreCase))    //在职
                    {
                        view.CanAddComment = true;
                    }
                }
            }
            return(View(view));
        }
コード例 #2
0
        public ActionResult WxDetail(int id, bool isPreview = false)
        {
            var article = _objService.Repository.Entities.FirstOrDefault(a => a.Id == id && a.AppId == AppId && !a.IsDeleted.Value);

            if (article == null || (!isPreview && article.ArticleStatus != ConstData.STATUS_PUBLISH))
            {
                return(View(new ArticleInfoView()
                {
                    ArticleTitle = "错误!", ArticleContent = "文章不存在!可能已经删除或者未发布!"
                }));
            }
            _Logger.Debug("article id:{0}, appid:{1}", id, AppId);

            //第一次跳转到该Action 后需要再次跳转到OAuth
            //第二次跳转到该Action 后再进行验证
            //当redirectUrl 为string.empty 时, 认为验证通过
            //服务号不需要权限控制
            //string redirectUrl = base.ExecuteAuthorityFilterForNews(article, false);
            //if (!string.IsNullOrEmpty(redirectUrl))
            //{
            //    return Redirect(redirectUrl);
            //}
            //if (!base.ValidateNewsVisibleScope(article, true))
            //{
            //    return Redirect("/notauthed.html");
            //}

            //if (article.ArticleType == 1 && isPreview)
            //{
            //    article = null;
            //}
            //var list = _articleThumbsUpService.Repository.Entities.Where(x => x.ArticleID == id && x.Type == ThumbupType.Article.ToString()).Select(x => new { articleId = x.ArticleID, userId = x.UserID, x.IsDeleted }).ToList();

            //article.ThumbsUpCount = list.Count(x => x.IsDeleted != true);

            if (isPreview)
            {
                var      dateOfUpdate          = (DateTime)article.PreviewStartDate;
                TimeSpan timeBetweenNowPreview = DateTime.Now.Subtract(dateOfUpdate);
                int      sumHours = timeBetweenNowPreview.Hours;

                if (sumHours > 12)
                {
                    return(RedirectToAction("overtime", new { wechatid = AppId }));
                }
            }

            if (article.PublishDate == null)
            {
                article.PublishDate = article.CreatedDate;
            }

            //ExecuteBehavior(article.AppId.Value, 1, "", id.ToString());

            //article.ReadCount++;
            //_objService.Repository.Update(article, new List<string>() { "ReadCount" });


            ExecuteBehavior(article.AppId.Value, 1, "", id.ToString());

            //勉强异步一下吧
            Task.Run(() => {
                if (!string.IsNullOrEmpty(ViewBag.WeChatUserID))
                {
                    _Logger.Debug("begin to check has readed :{0}, {1}", article.Id, ViewBag.WeChatUserID);
                    if (!_articleInfoReadHistoryService.HasReaded(article.Id, ViewBag.WeChatUserID))
                    {
                        _articleInfoReadHistoryService.InsertView(new ArticleInfoReadHistoryView()
                        {
                            UserId = ViewBag.WeChatUserID, ArticleInfoId = article.Id
                        });
                        _Logger.Debug("begin to add read count");
                        new ArticleInfoService().Repository.SqlExcute("update articleinfo set ReadCount=ReadCount+1 where id=" + article.Id.ToString());
                    }
                }
                else
                {
                    new ArticleInfoService().Repository.SqlExcute("update articleinfo set ReadCount=ReadCount+1 where id=" + article.Id.ToString());
                }
            });

            if (!string.IsNullOrEmpty(article.ArticleURL))
            {
                if (!article.IsPassingWeChatUserID.GetValueOrDefault())
                {
                    return(Redirect(article.ArticleURL));
                }

                var builder = new UriBuilder(article.ArticleURL);
                var query   = HttpUtility.ParseQueryString(builder.Query);
                query.Add("WeChatUserID", _objService.EncryptorWeChatUserID(ViewBag.WeChatUserID));
                _Logger.Debug(string.Format("url {0}", builder.ToString()));
                builder.Query = query.ToString();
                return(Redirect(builder.ToString()));
            }

            var articleView = new ArticleInfoView().ConvertAPIModel(article);

            var    view         = (ArticleInfoView)articleView;
            string WeChatUserID = ViewBag.WeChatUserID;

            view.IsThumbuped = _articleThumbsUpService.Repository.Entities.Any(x => x.UserID == WeChatUserID && x.ArticleID == id && x.IsDeleted != true);
            _Logger.Debug("WeChatUserID:{0}", WeChatUserID);

            //服务号不需要评论+点赞功能
            //var user = _wechatMPUserService.GetUserByOpenId(WeChatUserID);
            //if (null != user)
            //{
            //    ViewBag.UserInfoId = user.Id;
            //    view.CanReadComment = true;
            //    if (user.IsCanceled == false)
            //    {
            //        view.CanAddComment = true;
            //    }
            //}

            int wechatId = System.Convert.ToInt32(Request["wechatid"]);

            _Logger.Debug("GetJSSDKConfig:{0}", wechatId);
            var newUrl = Request.Url.AbsoluteUri.ToString().Replace(":5001", "");

            _Logger.Debug("Remove 5001 :{0}", newUrl);
            var wxConfig = WeChatCommonService.GetJSSDKConfig(wechatId, newUrl);

            _Logger.Debug("GetJSSDKConfig Signature:{0} URL:{1}", wxConfig.Signature, newUrl);
            ViewBag.SdkAppId  = wxConfig.AppId;
            ViewBag.Timestamp = wxConfig.Timestamp;
            ViewBag.NonceStr  = wxConfig.NonceStr;
            ViewBag.Signature = wxConfig.Signature;


            return(View(view));
        }