void SendMessage(Guid msgId, Guid appId, Guid userId, DateTime?endTime, ShareRedMessageDTO content)
        {
            //给邀请人发送系统消息
            //调用消息中心发消息
            //定义消息内容
            MobileMessageDTO messageDTO = new MobileMessageDTO();

            messageDTO.MessageType = JAP.BaseApp.MessageCenter.Deploy.Enum.MessageType.BUSI_MSG;

            messageDTO.AppId                = appId.ToString().ToLower();
            messageDTO.BasicContentDTO      = new BasicContentDTO();
            messageDTO.BasicContentDTO.Code = "AdDividend";//"BTPShareRedEnvelope";

            messageDTO.ProductType       = JAP.BaseApp.MessageCenter.Deploy.Enum.ProductType.BTP;
            messageDTO.ProductSecondType = 3;//新红包

            DataContractJsonSerializer json = new DataContractJsonSerializer(content.GetType());
            string szJson = "";

            //序列化
            using (MemoryStream stream = new MemoryStream())
            {
                json.WriteObject(stream, content);
                szJson = Encoding.UTF8.GetString(stream.ToArray());
            }

            messageDTO.BasicContentDTO.Content = szJson.Replace("\"", "\\\"");
            //messageDTO.Content = szJson.Replace("\"", "\\\""); ;

            if (endTime != null)
            {
                messageDTO.EndTime = (DateTime)endTime;
            }
            //接收人邀请人Id
            string strRelation = "[";

            strRelation += "\"" + userId.ToString() + "\",";

            strRelation  = strRelation.Substring(0, strRelation.Length - 1);
            strRelation += "]";

            messageDTO.UserIds = strRelation;
            try
            {
                Jinher.AMP.BTP.TPS.MessageCenter.Instance.AddMessage(messageDTO);
                JAP.Common.Loging.LogHelper.Info("红包消息内容:" + userId.ToString() + ":" + ":" + messageDTO.AppId.ToString() + ":" + messageDTO.BasicContentDTO.Content);
            }
            catch (Exception ex)
            {
                JAP.Common.Loging.LogHelper.Error("Error_LogKey:RedEnvelopesProcessor.SendMessage:BaseApp.MessageCenter.ISV.Facade.PublishMobileMessageFacade.AddMessage", ex);
            }
        }
        /// <summary>
        /// 发送众筹红包
        /// </summary>
        public void SendCfRedEnvelopeExt()
        {
            int pageIndex = 0;
            int pageSize  = 500;

            DateTime       today      = DateTime.Now.Date;
            ContextSession session    = ContextFactory.CurrentThreadContext;
            bool           isContinue = true;

            do
            {
                var userDividents = (from s in CfDividend.ObjectSet()
                                     where s.SettlementDate < today && s.State == 0
                                     group s by s.UserId into g
                                     select g
                                     ).OrderBy(a => a.Key).Take(pageSize).Skip(pageIndex)
                                    .ToDictionary(x => x.Key, y => y.ToList());


                foreach (Guid userId in userDividents.Keys)
                {
                    StringBuilder strDescription = new StringBuilder(50);
                    foreach (CfDividend userDivident in userDividents[userId])
                    {
                        userDivident.State       = 1;
                        userDivident.EntityState = System.Data.EntityState.Modified;

                        strDescription.Append(userDivident.AppName);
                        strDescription.Append("  持股");
                        strDescription.Append(userDivident.ShareCount);
                        strDescription.Append("股  获得分红");
                        strDescription.Append(userDivident.Gold);
                        strDescription.Append("个金币").Append(",");
                    }
                    strDescription.Remove(strDescription.Length - 1, 1);
                    var             goldNum     = userDividents[userId].Sum(x => x.Gold);
                    UserRedEnvelope redEnvelope = UserRedEnvelope.CreateUserRedEnvelope();
                    redEnvelope.EntityState = System.Data.EntityState.Added;
                    redEnvelope.AppId       = userDividents[userId][0].AppId;
                    redEnvelope.Content     = CustomConfig.SaleShare.DividentContent;
                    redEnvelope.Description = strDescription.ToString();
                    double dueDateAdd = CustomConfig.CrowdfundingConfig.DividentDue;
                    redEnvelope.DueDate         = DateTime.Now.AddHours(dueDateAdd);
                    redEnvelope.GoldCount       = goldNum;
                    redEnvelope.UserId          = userId;
                    redEnvelope.RedEnvelopeType = 1;

                    session.SaveObject(redEnvelope);

                    ShareRedMessageDTO contentCDTO = new ShareRedMessageDTO();
                    contentCDTO.message  = redEnvelope.Content;
                    contentCDTO.userName = redEnvelope.Content;
                    contentCDTO.msgId    = redEnvelope.Id;
                    contentCDTO.url      = string.Format("{0}ShareRedEnvelope/ShareRedEnvelopesDetail?msgId={1}", CustomConfig.BtpDomain, redEnvelope.Id);

                    double dueMessDateAdd = CustomConfig.CrowdfundingConfig.DividentMessageDue;
                    SendMessage(redEnvelope.Id, redEnvelope.AppId, redEnvelope.UserId, DateTime.Now.AddHours(dueMessDateAdd), contentCDTO);
                }

                try
                {
                    session.SaveChanges();
                    if (userDividents.Count < pageSize)
                    {
                        isContinue = false;
                    }
                    LogHelper.Info(string.Format("发送众筹红包Job处理了CfDividend表{0}条记录", userDividents.Count));
                }
                catch (Exception ex)
                {
                    LogHelper.Error("发送众筹红包Job服务异常。", ex);
                    isContinue = false;
                }
            }while (isContinue);
        }
        /// <summary>
        /// 发送红包
        /// </summary>
        public void SendRedEnvelopeExt()
        {
            int pageIndex = 0;
            int pageSize  = 500;

            DateTime       today      = DateTime.Now.Date;
            ContextSession session    = ContextFactory.CurrentThreadContext;
            bool           isContinue = true;

            do
            {
                var userDividents = (from s in ShareDividendDetail.ObjectSet()
                                     where s.SettlementDate < today && s.State == 0
                                     group s by s.UserId into g
                                     select g
                                     ).OrderBy(a => a.Key).Take(pageSize).Skip(pageIndex)
                                    .ToDictionary(x => x.Key, y => y.ToList());


                foreach (Guid userId in userDividents.Keys)
                {
                    StringBuilder strDescription = new StringBuilder(50);
                    foreach (ShareDividendDetail userDivident in userDividents[userId])
                    {
                        userDivident.State       = 1;
                        userDivident.EntityState = System.Data.EntityState.Modified;

                        strDescription.Append(userDivident.Description).Append(",");
                    }
                    strDescription.Remove(strDescription.Length - 1, 1);
                    var             goldNum     = userDividents[userId].Sum(x => x.Money);
                    UserRedEnvelope redEnvelope = UserRedEnvelope.CreateUserRedEnvelope();
                    redEnvelope.EntityState = System.Data.EntityState.Added;
                    redEnvelope.AppId       = userDividents[userId][0].AppId;
                    redEnvelope.Content     = CustomConfig.SaleShare.DividentContent;
                    redEnvelope.Description = strDescription.ToString();
                    double dueDateAdd = 24;
                    double.TryParse(CustomConfig.SaleShare.DividentDue, out dueDateAdd);
                    redEnvelope.DueDate   = DateTime.Now.AddHours(dueDateAdd);
                    redEnvelope.GoldCount = goldNum;
                    redEnvelope.UserId    = userId;
                    redEnvelope.RoleType  = userDividents[userId][0].RoleType;

                    ShareRedMessageDTO contentCDTO = new ShareRedMessageDTO();
                    contentCDTO.message  = redEnvelope.Content;
                    contentCDTO.userName = redEnvelope.Content;
                    contentCDTO.msgId    = redEnvelope.Id;
                    contentCDTO.url      = string.Format("{0}ShareRedEnvelope/ShareRedEnvelopesDetail?msgId={1}", CustomConfig.BtpDomain, redEnvelope.Id);

                    double dueMessDateAdd = 48;
                    double.TryParse(CustomConfig.SaleShare.DividentMessageDue, out dueMessDateAdd);

                    if (userDividents[userId][0].RoleType == 2)
                    {
                        try
                        {
                            List <Guid> userIds  = Jinher.AMP.BTP.TPS.EBCSV.Instance.GetUserIdsByOrgIdAndCode(userId, "ReceiveRed");
                            int         msgCount = 0;
                            foreach (Guid id in userIds)
                            {
                                SendMessage(redEnvelope.Id, redEnvelope.AppId, id, DateTime.Now.AddHours(dueMessDateAdd), contentCDTO);
                                //最多选择20个代领者
                                msgCount += 1;
                                if (msgCount > 20)
                                {
                                    break;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            LogHelper.Error("发送红包Job服务异常:EBC.ISV.Facade.OrganizationQueryFacade。", ex);

                            continue;
                        }
                    }
                    else
                    {
                        SendMessage(redEnvelope.Id, redEnvelope.AppId, redEnvelope.UserId, DateTime.Now.AddHours(dueMessDateAdd), contentCDTO);
                    }

                    session.SaveObject(redEnvelope);
                }

                try
                {
                    session.SaveChanges();
                    if (userDividents.Count < pageSize)
                    {
                        isContinue = false;
                    }
                    LogHelper.Info(string.Format("发送红包Job处理了ShareDividendDetail表{0}条记录", userDividents.Count));
                }
                catch (Exception ex)
                {
                    LogHelper.Error("发送红包Job服务异常。", ex);
                    isContinue = false;
                }
            }while (isContinue);
        }