public static void UpdateMsgStatus()
        {
            Logger.Debug("开始每日定时刷新消息列表任务");
            //获取当日发送的消息批次、渠道和SendId
            List <RecurringUpdateModel> list = MessageSysBLL.GetUpdateModel();

            if (list == null)
            {
                Logger.Debug("获取待更新状态的消息列表为Null,结束刷新任务");
            }
            else
            {
                foreach (var item in list)
                {
                    try
                    {
                        //遍历当日发送的数据并更新状态
                        UpadateSendingStatus(item.BatchId, item.ChannelId, item.SendId);
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("更新消息" + item.BatchId + "," + item.ChannelId + "," + "," + item.SendId + "时出错!", ex);
                        continue;
                    }
                }
            }
        }
        /// <summary>
        /// 按渠道自动发送消息
        /// </summary>
        /// <param name="batchId"></param>
        /// <param name="uid"></param>
        /// <param name="uName"></param>
        public static string SendMsgAuto(string batchId, int uid, string uName)
        {
            List <int> channelList = MessageSysBLL.GetBatchChannel(batchId);

            foreach (var item in channelList)
            {
                UpdateOperator(uid, batchId, item);

                switch (item)
                {
                case 1:
                    return(SendingSms(batchId));

                //break;
                case 2:
                    SendingWebNotify(batchId, uid, uName);
                    break;

                case 3:
                    SendingAppNotify(batchId, uid, uName);
                    break;

                case 4:
                    //Logger.Debug("发送");
                    SendingEmail(batchId);
                    break;

                default:
                    break;
                }
            }

            return("1");
            //Logger.Error();
        }
        /// <summary>
        ///  获取站内信推送Model
        /// </summary>
        /// <param name="batchId"></param>
        /// <returns></returns>
        public static WebMessageRequest GetWebBatch(string batchId)
        {
            List <MessageDetail> webBatch = MessageSysBLL.GetBatchForSend(batchId, 2);
            WebMessageRequest    webModel = new WebMessageRequest();

            string accidList = "";

            if (webBatch != null && webBatch.Count > 0)
            {
                webModel.msgContent = webBatch[0].Content;
                webModel.msgTitle   = webBatch[0].Title;
            }
            else
            {
                return(null);
            }

            foreach (var item in webBatch)
            {
                accidList += item.AccId.ToString() + ",";
            }
            accidList          = accidList.Substring(0, accidList.LastIndexOf(','));
            webModel.accIdList = accidList;

            return(webModel);
        }
        /// <summary>
        /// 更新发送后状态
        /// </summary>
        /// <param name="batchId"></param>
        /// <param name="channelId"></param>
        /// <returns></returns>
        public static int UpadateSendingStatus(string batchId, int channelId, string sendId)
        {
            string postStr = "";
            ////获取批次信息
            //MessageBatch batchModel = MessageSysBLL.GetSingleBatchInfo(batchId, channelId);

            ////获取批次详情
            //List<MessageDetail> detailList=MessageSysBLL.GetBatchForSend(batchId, channelId);

            //从接口获取发送状态信息
            string urlAddress = ConfigurationManager.AppSettings["GeneralMessage"].ToString();

            Dictionary <string, string> parameters = CreateHeader();

            try
            {
                switch (channelId)
                {
                case 1:
                    postStr = CommonLib.Helper.SendHttpGet(smsUrl + "/" + sendId, null, parameters);
                    break;

                case 2:
                    postStr = CommonLib.Helper.SendHttpGet(webUrl + "/" + sendId, null, parameters);
                    break;

                case 3:
                    postStr = CommonLib.Helper.SendHttpGet(mobUrl + "/" + sendId, null, parameters);
                    break;

                case 4:
                    postStr = CommonLib.Helper.SendHttpGet(webUrl + "/" + sendId, null, parameters);
                    break;
                }


                SendStatus resModel = CommonLib.Helper.JsonDeserializeObject <SendStatus>(postStr);
                //Logger.Debug("得到返回值");

                int reVal = MessageSysBLL.UpdateDetailSendingStatus(batchId, channelId, resModel);
                if (reVal == 0)
                {
                    return(MessageSysBLL.UpdateBatchSendingStatus(batchId, channelId));
                }
                else
                {
                    return(reVal);
                }
                //return
            }
            catch (Exception ex)
            {
                Logger.Error("转换接口返回数据出错~", ex);
                return(0);
            }


            //更新批次详情
            //更新批次信息
        }
        /// <summary>
        /// 获取移动端推送Model
        /// </summary>
        /// <param name="batchId"></param>
        /// <returns></returns>
        public static MobMessageRequest GetAppBatch(string batchId)
        {
            List <MessageDetail> appBatch = MessageSysBLL.GetBatchForSend(batchId, 3);
            MobMessageRequest    appModel = new MobMessageRequest();

            string accidList = "";

            if (appBatch != null && appBatch.Count > 0)
            {
                appModel.msgContent  = appBatch[0].Content;
                appModel.msgTitle    = appBatch[0].Title;
                appModel.ContentType = appBatch[0].ContentType;
                appModel.ContentUrl  = appBatch[0].ContentUrl;
            }
            else
            {
                return(null);
            }

            foreach (var item in appBatch)
            {
                accidList += item.AccId.ToString() + ",";
            }
            accidList          = accidList.Substring(0, accidList.LastIndexOf(','));
            appModel.accIdList = accidList;

            return(appModel);
        }
        public static Dictionary <string, object> GetBatchList(int pageIndex, string stDate, string edDate, string batchId,
                                                               string remark, string content, int sourceType, int channel)
        {
            Dictionary <string, object> dicData = MessageSysBLL.GetBatchList(pageIndex, stDate, edDate, batchId, remark, content, sourceType, channel);;

            if (dicData != null)
            {
                int rowCount = Convert.ToInt32(dicData["count"]);
                int maxPage  = rowCount % 15 == 0 ? rowCount / 15 : (rowCount / 15 + 1);

                dicData["maxPage"] = maxPage;

                List <MessageBatch> list = (List <MessageBatch>)dicData["data"];

                foreach (var item in list)
                {
                    if (item.FeedBackArrive != 0)
                    {
                        item.OpenRatio = (Convert.ToDouble(item.FeedBackOpen) / item.FeedBackArrive * 100).ToString("F2") +
                                         "%";
                    }
                    else
                    {
                        item.OpenRatio = "无数据";
                    }

                    item.OperatorName = Sys_Manage_UserBLL.GetManageUserNameById(item.Operator);
                }
            }

            return(dicData);
        }
        /// <summary>
        /// 获取对应条件的用户
        /// 群发消息用以切分消息批次
        /// 限定500条为一批
        /// </summary>
        /// <param name="remark"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static Dictionary <string, List <string> > GetConditionUser(string remark, int id)
        {
            Dictionary <string, List <string> > dic = new Dictionary <string, List <string> >();

            List <string> userList = MessageSysBLL.GetPushUserList(id);

            //在结果集中添加两个测试账号
            if (!userList.Contains("79672"))
            {
                userList.Add("79672");//田震
            }
            if (!userList.Contains("397"))
            {
                userList.Add("397");//田震
            }

            int j = 500;

            for (int i = 0; i < userList.Count; i += 500)
            {
                List <string> cList = new List <string>();
                cList = userList.Take(j).Skip(i).ToList();
                j    += 500;
                dic.Add(remark + "_" + (i / 500 + 1).ToString(), cList);
            }

            return(dic);
        }
        public static Dictionary <string, object> GetBatchDetailList(int pageIndex, string batchId, int channelId, int arrived = 0)
        {
            Dictionary <string, object> dicData = MessageSysBLL.GetBatchDetail(pageIndex, batchId, channelId, arrived);;

            if (dicData != null)
            {
                int rowCount = Convert.ToInt32(dicData["count"]);
                int maxPage  = rowCount % 15 == 0 ? rowCount / 15 : (rowCount / 15 + 1);

                dicData["maxPage"] = maxPage;
            }

            return(dicData);
        }
        public static Dictionary <string, object> GetBatchSummaryInfo(int pageIndex, string stDate, string edDate, string batchId,
                                                                      string remark, int sourceType, int channel)
        {
            Dictionary <string, object> dicData = MessageSysBLL.GetBatchSummaryInfo(pageIndex, stDate, edDate, batchId, remark, sourceType, channel);

            if (dicData != null)
            {
                int rowCount = Convert.ToInt32(dicData["count"]);
                int maxPage  = rowCount % 15 == 0 ? rowCount / 15 : (rowCount / 15 + 1);

                dicData["maxPage"] = maxPage;
            }

            return(dicData);
        }
        /// <summary>
        /// 获取邮件发送Model
        /// </summary>
        /// <param name="batchId"></param>
        /// <returns></returns>
        public static EmailRequest GetEmailBatch(string batchId)
        {
            List <MessageDetail> emailBatch = MessageSysBLL.GetBatchForSend(batchId, 4);
            EmailRequest         emailModel = new EmailRequest();

            List <string> tmpList = new List <string>();

            if (emailBatch != null && emailBatch.Count > 0)
            {
                emailModel.EmailChannel  = 2;
                emailModel.EmailContent  = emailBatch[0].Content;
                emailModel.TemplateIndex = 4;
                emailModel.SendType      = 8;
                emailModel.Remark        = emailBatch[0].Remark;
                emailModel.EmailTitle    = emailBatch[0].Title;
            }
            else
            {
                return(null);
            }

            foreach (var item in emailBatch)
            {
                if (!string.IsNullOrEmpty(item.AccIdNumber))
                {
                    tmpList.Add(item.AccIdNumber);
                }
                else
                {
                    UpdateDetailUnableMark(item.Id);
                }
            }

            if (tmpList.Count <= 0)
            {
                UpdateAllowCount(batchId, 4, 0, "err");

                tmpList.Add("000");
            }

            emailModel.AddressList = tmpList.ToArray();

            return(emailModel);
        }
        public static string GenerateBatchByChannel(int channelId, string accIdSet, int accIdCount, int sourceType, string filterVerify, string title, string content, string remark, string batchId, string contentType = "", string contentUrl = "")
        {
            MessageBatch batchModel = new MessageBatch();

            batchModel.AccIdCount      = accIdCount;
            batchModel.AccIdSet        = accIdSet;
            batchModel.BatchId         = batchId;
            batchModel.ChannelId       = channelId;
            batchModel.Content         = content;
            batchModel.CreateTime      = DateTime.Now;
            batchModel.Remark          = remark;
            batchModel.Title           = title;
            batchModel.ReviewState     = 0;
            batchModel.SendingStatus   = 0;
            batchModel.SourceType      = sourceType;
            batchModel.FilterLogVerify = filterVerify;
            batchModel.ContentType     = contentType;
            batchModel.ContentUrl      = contentUrl;

            return(MessageSysBLL.AddMessageBatch(batchModel));
        }
        /// <summary>
        /// 获取短信发送Model
        /// </summary>
        /// <param name="batchId"></param>
        /// <returns></returns>
        public static SmsRequest GetSmsBatch(string batchId)
        {
            List <MessageDetail> smsBatch = MessageSysBLL.GetBatchForSend(batchId, 1);
            SmsRequest           smsModel = new SmsRequest();

            List <string> tmpList = new List <string>();

            if (smsBatch != null && smsBatch.Count > 0)
            {
                smsModel.smsContent = smsBatch[0].Content;
                smsModel.smsType    = 1;
            }
            else
            {
                return(null);
            }

            foreach (var item in smsBatch)
            {
                if (!string.IsNullOrEmpty(item.AccIdNumber))
                {
                    tmpList.Add(item.AccIdNumber);
                }
                else
                {
                    UpdateDetailUnableMark(item.Id);
                }
            }
            if (tmpList.Count <= 0)
            {
                UpdateAllowCount(batchId, 1, 0, "err");

                tmpList.Add("000");
            }

            smsModel.phoneList = tmpList.ToArray();
            return(smsModel);
        }
 public static int UpdateOperator(int operId, string batchId, int channelId)
 {
     return(MessageSysBLL.UpdateOperator(operId, batchId, channelId));
 }
 public static int GetBatchCount(string batchId, int channelId)
 {
     return(MessageSysBLL.GetBatchCount(batchId, channelId));
 }
 /// <summary>
 /// 更新没有联系方式用户的标记
 /// </summary>
 /// <param name="id"></param>
 /// <returns></returns>
 public static int UpdateDetailUnableMark(int id)
 {
     return(MessageSysBLL.UpdateDetailUnableMark(id));
 }
 /// <summary>
 /// 更新批次表的发送数和发送表关联ID
 /// </summary>
 /// <param name="batchId"></param>
 /// <param name="channelId"></param>
 /// <param name="count"></param>
 /// <param name="sendId"></param>
 /// <returns></returns>
 public static int UpdateAllowCount(string batchId, int channelId, int count, string sendId)
 {
     return(MessageSysBLL.UpdateAllowCount(batchId, channelId, count, sendId));
 }
        public static string PreparePushingMsg(string accidSet, int accIdCount, int sourceType, string MobileTitle = "", string PubTitle = "", string EmailTitle = "",
                                               string SmsContent = "", string MobileContent = "", string PubContent = "", string EmailContent = "", string remark = "", string verif = "", string taskMark = "", string contentType = "", string contentUrl = "")
        {
            MessageSending msgSendingModel = new MessageSending();
            //生成批次Id
            string batchId = System.Guid.NewGuid().ToString();
            string reMsg   = "";

            msgSendingModel.BatchId    = batchId;
            msgSendingModel.AccIdSet   = accidSet;
            msgSendingModel.AccIdCount = accIdCount;
            msgSendingModel.Remark     = remark;

            string channelSet = "";

            if (!string.IsNullOrEmpty(SmsContent))
            {
                channelSet += "1,";
                string smsMsg = GenerateBatchByChannel(1, accidSet, accIdCount, sourceType, verif, "", SmsContent,
                                                       remark, batchId);

                if (smsMsg.IndexOf(batchId) >= 0)
                {
                    reMsg += smsMsg;
                }
            }
            if (!(string.IsNullOrEmpty(MobileTitle) || string.IsNullOrEmpty(MobileContent)))
            {
                channelSet += "3,";
                string mMsg = GenerateBatchByChannel(3, accidSet, accIdCount, sourceType, verif, MobileTitle, MobileContent,
                                                     remark, batchId, contentType, contentUrl);

                if (mMsg.IndexOf(batchId) >= 0)
                {
                    reMsg += mMsg;
                }
            }
            if (!(string.IsNullOrEmpty(PubTitle) || string.IsNullOrEmpty(PubContent)))
            {
                channelSet += "2,";
                //PubContent = Server.UrlDecode(PubContent);
                string pMsg = GenerateBatchByChannel(2, accidSet, accIdCount, sourceType, verif, PubTitle, PubContent,
                                                     remark, batchId);

                if (pMsg.IndexOf(batchId) >= 0)
                {
                    reMsg += pMsg;
                }
            }
            if (!(string.IsNullOrEmpty(EmailTitle) || string.IsNullOrEmpty(EmailContent)))
            {
                channelSet += "4,";
                //EmailContent = Server.UrlDecode(EmailContent);
                string eMsg = GenerateBatchByChannel(4, accidSet, accIdCount, sourceType, verif, EmailTitle, EmailContent,
                                                     remark, batchId);

                if (eMsg.IndexOf(batchId) >= 0)
                {
                    reMsg += eMsg;
                }
            }
            msgSendingModel.ChannelSet = channelSet;
            if (string.IsNullOrEmpty(channelSet))
            {
                reMsg = "没有获取到发送渠道!请联系技术~";
            }
            else
            {
                if (MessageSysBLL.AddMsgSendingInfo(msgSendingModel) < 1)
                {
                    reMsg += "添加消息概览信息失败!";
                }
            }


            if (string.IsNullOrEmpty(reMsg))
            {
                if (string.IsNullOrEmpty(taskMark))
                {
                    return("消息提交成功!");
                }
                else
                {
                    return(batchId);
                }
                //return "消息提交成功!";
            }
            else
            {
                return(reMsg);
            }
        }
        /// <summary>
        /// 根据服务Id推送内容
        /// </summary>
        /// <param name="id"></param>
        public static void MsgManageByService(int id)
        {
            //批次Id列表
            List <string> batchIdList = new List <string>();
            //用于生成同样内容的公告分批字典
            Dictionary <string, List <string> > accParts = new Dictionary <string, List <string> >();
            //用于自定义内容的单店消息对象列表
            List <SingleShopInfoForMsg> singleList = new List <SingleShopInfoForMsg>();

            //推送备注
            string remark = "";

            switch (id)
            {
            case 1:    //经营分析报表推送(批量用户)
                remark = DateTime.Now.Date.ToShortDateString() + "-" + "经营分析日报";
                #region 群发共享型消息测试逻辑
                //test
                //List<string> test = new List<string>();
                //test.Add(397.ToString());
                //test.Add(79672.ToString());
                //foreach (var part in accParts)
                //{
                //    batchIdList.Add(PreparePushingMsg(JsonConvert.SerializeObject(part.Value), part.Value.Count, 4, "您" + DateTime.Now.Date.ToShortDateString() + "日的经营日报已经出炉,点击查看详情!", "", "",
                //                                    "", "您" + DateTime.Now.Date.ToShortDateString() + "日的经营日报已经出炉,点击下方按钮看看自己昨天的经营效率吧!", "", "",
                //                                    part.Key, "", "service", "view", "dailyReport"));
                //}
                #endregion
                accParts = GetConditionUser(remark, id);

                foreach (var part in accParts)
                {
                    batchIdList.Add(PreparePushingMsg(CommonLib.Helper.JsonSerializeObject(part.Value), 1, 4, "您昨天的经营日报已经出炉,点击查看详情!", "", "",
                                                      "", "您" + DateTime.Now.Date.AddDays(-1).ToShortDateString() + "日的经营日报已经出炉,点击下方按钮看看自己昨天的经营效率吧!", "", "",
                                                      part.Key, "", "service", "view", "dailyReport"));
                }

                break;

            case 2:    //付费到期提醒推送(单个用户)
                //不做Remark特殊处理
                singleList = MessageSysBLL.GetSingleUserMsgBatch(id);

                break;

            case 3:    //优惠券到期提醒(单个用户)
                singleList = MessageSysBLL.GetSingleUserMsgBatch(id);

                //不做Remark特殊处理
                break;

            case 4:    //周年答谢(批量用户)
                remark = DateTime.Now.Date.ToShortDateString() + "-" + "周年答谢";

                singleList = MessageSysBLL.GetSingleUserMsgBatch(id);

                break;

            default:
                break;
            }

            foreach (var str in batchIdList)
            {
                MessageSysControl.SendMsgAuto(str, 0, "系统");
            }
        }