/// <summary>
        /// Event事件类型请求之CLICK
        /// </summary>
        public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
        {
            log.Debug("Entering Event事件类型请求之CLICK - " + requestMessage.EventKey);

            string errorMessage;

            if (!SmartphoneMenuPermissionManager.PermissionCheck(requestMessage.EventKey, requestMessage.FromUserName, requestMessage.AgentID, out errorMessage))
            {
                return(NoPermissionResponse(errorMessage));
            }

            // 记录用户行为
            _wr.CallUserBehavior(requestMessage.EventKey, requestMessage.FromUserName, requestMessage.AgentID.ToString(CultureInfo.InvariantCulture), "", "", 4);
            var objConfig = WeChatCommonService.GetWeChatConfig(requestMessage.AgentID);

            switch (requestMessage.AgentID)
            {
            default:
            {
                LogManager.GetLogger(this.GetType()).Debug("Entering default2");

                var menu = Infrastructure.Web.Domain.Service.CommonService.lstCategory.FirstOrDefault(a => a.CategoryCode == requestMessage.EventKey);
                if (menu == null)
                {
                    return(null);
                }

                LogManager.GetLogger(this.GetType()).Debug("menu is ready");

                AppMenuView appMenu = new AppMenuView();
                appMenu.ButtonReturnType = JsonHelper.FromJson <ButtonReturnType>(menu.Function);
                if (appMenu == null || appMenu.ButtonReturnType == null || string.IsNullOrEmpty(appMenu.ButtonReturnType.ResponseMsgType))
                {
                    LogManager.GetLogger(this.GetType()).Debug("appMenu parsed is NULL");
                    return(null);
                }

                switch (appMenu.ButtonReturnType.ResponseMsgType.ToLower())
                {
                case "text":
                    var textMessage = this.CreateResponseMessage <ResponseMessageText>();

                    LogManager.GetLogger(this.GetType()).Debug("appMenu.ButtonReturnType = " + appMenu.ButtonReturnType);
                    LogManager.GetLogger(this.GetType()).Debug("appMenu.ButtonReturnType.Content = " + appMenu.ButtonReturnType.Content);

                    textMessage.Content = appMenu.ButtonReturnType.Content;
                    return(textMessage);

                case "news":
                    LogManager.GetLogger(this.GetType()).Debug("appMenu.ButtonReturnType.NewsPushNumber= " + appMenu.ButtonReturnType.NewsPushNumber);
                    var articles = (appMenu.ButtonReturnType.NewsPushNumber != null && appMenu.ButtonReturnType.NewsPushNumber != 0) ?
                                   GetPushArticles(requestMessage.EventKey, appMenu.ButtonReturnType.NewsPushNumber) : GetPushArticles(requestMessage.EventKey);
                    return(CreateResponse(articles, objConfig.WXHost, "/News/ArticleInfo/wxdetail/"));
                }
                break;
            }
            }

            return(DefaultResponseMessage(requestMessage));
        }
        public int UpdateOrAdd(AppMenuView menu)
        {
            menu.Function = menu.ButtonReturnType == null ? null : JsonHelper.ToJson(menu.ButtonReturnType);
            //menu.Role = menu.SelecTagItems == null || menu.SelecTagItems.Count == 0
            //    ? null
            //    : menu.SelecTagItems.Select(x => x.tagname).Join(",");

            var count = 0;

            if (!menu.ParentCode.HasValue)
            {
                menu.ParentCode = 0;
            }

            if (menu.Id == 0)
            {
                count = base.InsertView((CategoryView)menu);
            }
            else
            {
                //删除菜单
                if (menu.IsDeleted.HasValue && menu.IsDeleted.Value)
                {
                    var menuGroup =
                        CommonService.lstCategory.Where(x => x.ParentCode == menu.Id || x.Id == menu.Id).ToList();


                    using (
                        var transactionscope = new TransactionScope(TransactionScopeOption.Required,
                                                                    new TransactionOptions {
                        IsolationLevel = IsolationLevel.RepeatableRead
                    }))
                    {
                        menuGroup.ForEach(x =>
                        {
                            x.IsDeleted = true;
                            Repository.Update(x);
                        });
                        transactionscope.Complete();
                    }
                }
                else
                {
                    count = base.UpdateView((CategoryView)menu, new List <string>
                    {
                        "CategoryCode", "AppId", "CategoryName", "CategoryDesc",
                        "ParentCode", "IsAdmin", "CategoryOrder", "Function", "NoRoleMessage", "Role"
                    });
                }
            }

            CommonService.RemoveCategoryFromCache();

            return(count);
        }