/// <summary>
 /// 处理视频请求
 /// </summary>
 /// <param name="requestMessage"></param>
 /// <returns></returns>
 public override IResponseMessageBase OnVideoRequest(RequestMessageVideo requestMessage)
 {
     try
     {
         var opid      = requestMessage.FromUserName;
         var entitymsg = new MpEventRequestMsgLog();
         entitymsg.ID         = Formula.FormulaHelper.CreateGuid();
         entitymsg.MpID       = account.ID;
         entitymsg.OpenID     = opid;
         entitymsg.MsgType    = requestMessage.MsgType.ToString();
         entitymsg.MsgId      = requestMessage.MsgId.ToString();
         entitymsg.MediaId    = requestMessage.MediaId;
         entitymsg.CreateDate = System.DateTime.Now;
         entities.Set <MpEventRequestMsgLog>().Add(entitymsg);
         entities.SaveChanges();
     }
     catch (Exception ex)
     {
         LogWriter.Info(string.Format("MPID{0}记录视频回复信息出错:原因{1}", account.ID, ex.Message));
     }
     return(DefaultResponseMessage(requestMessage));
 }
        /// <summary>
        /// 处理文字请求
        /// </summary>
        /// <returns></returns>
        public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
        {
            var defaultMessage = DefaultResponseMessage(requestMessage);

            if (string.IsNullOrEmpty(requestMessage.Content))
            {
                return(defaultMessage);
            }
            #region 记录日志
            try
            {
                var opid      = requestMessage.FromUserName;
                var entitymsg = new MpEventRequestMsgLog();
                entitymsg.ID         = Formula.FormulaHelper.CreateGuid();
                entitymsg.MpID       = account.ID;
                entitymsg.OpenID     = opid;
                entitymsg.MsgType    = requestMessage.MsgType.ToString();
                entitymsg.MsgId      = requestMessage.MsgId.ToString();
                entitymsg.Content    = requestMessage.Content;
                entitymsg.CreateDate = System.DateTime.Now;
                entities.Set <MpEventRequestMsgLog>().Add(entitymsg);
                entities.SaveChanges();
            }
            catch (Exception ex)
            {
                LogWriter.Info(string.Format("MPID{0}记录文本回复信息出错:原因{1}", account.ID, ex.Message));
            }
            #endregion
            var rs     = CacheHelper.Get(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content));
            var rstype = CacheHelper.Get(string.Format("TextRequest_{0}_{1}_Type", account.AppID, requestMessage.Content));
            if (rs == null || rstype == null)
            {
                //关键字回复
                var entity = entities.Set <MpKeyWordReply>().Where(c => c.MpID == account.ID && c.IsDelete == 0 && c.KeyWord == requestMessage.Content).FirstOrDefault();
                if (entity != null)
                {
                    CacheHelper.Set(string.Format("TextRequest_{0}_{1}_Type", account.AppID, requestMessage.Content), entity.ReplyType, cachesecond);
                    if (entity.ReplyType == MpMessageType.none.ToString())
                    {
                        return(defaultMessage);
                    }
                    else if (entity.ReplyType == MpMessageType.image.ToString())
                    {
                        var responseMessage = base.CreateResponseMessage <ResponseMessageImage>();
                        responseMessage.Image.MediaId = entity.ImageMediaID;
                        CacheHelper.Set(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content), responseMessage, cachesecond);
                        return(responseMessage);
                    }
                    else if (entity.ReplyType == MpMessageType.text.ToString())
                    {
                        var responseMessage = base.CreateResponseMessage <ResponseMessageText>();
                        responseMessage.Content = entity.Content;
                        CacheHelper.Set(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content), responseMessage, cachesecond);
                        return(responseMessage);
                    }
                    else if (entity.ReplyType == MpMessageType.voice.ToString())
                    {
                        var responseMessage = base.CreateResponseMessage <ResponseMessageVoice>();
                        responseMessage.Voice.MediaId = entity.VoiceMediaID;
                        CacheHelper.Set(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content), responseMessage, cachesecond);
                        return(responseMessage);
                    }
                    else if (entity.ReplyType == MpMessageType.video.ToString())
                    {
                        var responseMessage = base.CreateResponseMessage <ResponseMessageVideo>();
                        var video           = entities.Set <MpMediaVideo>().Where(c => c.MpID == account.ID && c.IsDelete == 0 && c.ID == entity.VideoID).FirstOrDefault();
                        if (video == null)
                        {
                            return(defaultMessage);
                        }
                        responseMessage.Video.MediaId     = video.MediaID;
                        responseMessage.Video.Title       = video.Title;
                        responseMessage.Video.Description = video.Description;
                        CacheHelper.Set(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content), responseMessage, cachesecond);
                        return(responseMessage);
                    }
                    else if (entity.ReplyType == MpMessageType.mpnews.ToString())
                    {
                        var responseMessage = base.CreateResponseMessage <ResponseMessageNews>();
                        var article         = entities.Set <MpSelfArticle>().Where(c => c.MpID == account.ID && c.IsDelete == 0 && c.ID == entity.ArticleID).FirstOrDefault();
                        if (article == null)
                        {
                            return(defaultMessage);
                        }
                        responseMessage.Articles.Add(new Article()
                        {
                            Title       = article.Title,
                            Description = article.Description,
                            Url         = article.Url,
                            PicUrl      = string.Format("http://{0}/wechatservice/api/Image/Get/{1}", domain, article.PicFileID),
                        });
                        CacheHelper.Set(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content), responseMessage, cachesecond);
                        return(responseMessage);
                    }
                    else if (entity.ReplyType == MpMessageType.mpmultinews.ToString())
                    {
                        var responseMessage = base.CreateResponseMessage <ResponseMessageNews>();
                        var article         = entities.Set <MpSelfArticleGroup>().Where(c => c.MpID == account.ID && c.IsDelete == 0 && c.ID == entity.ArticleGroupID).FirstOrDefault();
                        if (article == null || article.MpSelfArticleGroupItem == null || article.MpSelfArticleGroupItem.Count(c => c.MpSelfArticle != null) < 2)
                        {
                            return(defaultMessage);
                        }
                        foreach (var item in article.MpSelfArticleGroupItem.Where(c => c.MpSelfArticle != null))
                        {
                            responseMessage.Articles.Add(new Article()
                            {
                                Title       = item.MpSelfArticle.Title,
                                Description = item.MpSelfArticle.Description,
                                Url         = item.MpSelfArticle.Url,
                                PicUrl      = string.Format("http://{0}/wechatservice/api/Image/Get/{1}", domain, item.MpSelfArticle.PicFileID),
                            });
                        }
                        CacheHelper.Set(string.Format("TextRequest_{0}_{1}", account.AppID, requestMessage.Content), responseMessage, cachesecond);
                        return(responseMessage);
                    }
                    else
                    {
                        return(defaultMessage);
                    }
                }
                //其他回复
                else
                {
                    return(defaultMessage);
                }
            }
            else
            {
                var rstp = rstype.ToString();
                if (rstp == MpMessageType.image.ToString())
                {
                    return(rs as ResponseMessageImage);
                }
                else if (rstp == MpMessageType.mpmultinews.ToString())
                {
                    return(rs as ResponseMessageNews);
                }
                else if (rstp == MpMessageType.mpnews.ToString())
                {
                    return(rs as ResponseMessageNews);
                }
                else if (rstp == MpMessageType.text.ToString())
                {
                    return(rs as ResponseMessageText);
                }
                else if (rstp == MpMessageType.video.ToString())
                {
                    return(rs as ResponseMessageVideo);
                }
                else if (rstp == MpMessageType.voice.ToString())
                {
                    return(rs as ResponseMessageVoice);
                }
                return(rs as IResponseMessageBase);
            }
        }