Example #1
0
 /// <summary>
 /// 异步发送短信
 /// </summary>
 public static void SendSMSAsync()
 {
     //非休息时间
     if (!IsNowDuringTheBreakTime())
     {
         int maxSmsCount = Convert.ToInt32(ConfigurationManager.AppSettings["TopSelectNumber"] ?? "50");
         var smsList     = MessageDA.SelectSMSNotHandledDuringOneHour(maxSmsCount);
         if (smsList != null && smsList.Count > 0)
         {
             smsList.ForEach(sms =>
             {
                 var timeSpanSecond = Convert.ToInt32(ConfigurationManager.AppSettings["TimeSpanSecond"] ?? "30");
                 //检验手机号是否合法
                 if (CheckCellPhoneNumber(sms.MsgReceiver) && !MessageDA.CheckSendSMSTimespan(sms.MsgReceiver, timeSpanSecond))
                 {
                     var paras = from p in sms.TemplateParmaters orderby p.Name ascending select p.Value;
                     try
                     {
                         var result = SMSSenderService.SendSMS(sms.MsgReceiver, sms.ExternalTemplateID, paras.ToArray());
                         MessageDA.UpdateSmsStatusAfterHandled(sms.SysNo, result);
                     }
                     catch (Exception ex)
                     {
                         Logger.WriteLog(ex.ToString(), "SMS_Exception");
                         MessageDA.UpdateSmsStatusAfterHandled(sms.SysNo, false);
                     }
                 }
             });
         }
     }
 }
        public void ProcessWXMessage()
        {
            Stream reqstream = Request.InputStream;

            reqstream.Seek(0, SeekOrigin.Begin);
            string body      = new StreamReader(reqstream).ReadToEnd();
            var    echostr   = Request["echostr"];
            var    signature = Request["signature"];
            var    timestamp = Request["timestamp"];
            var    nonce     = Request["nonce"];
            string resp      = "success";

            if (CheckSignature(signature, timestamp, nonce))
            {
                if (!string.IsNullOrEmpty(echostr))
                {
                    resp = echostr;
                }
                else
                {
                    WXTextMessage wxresult    = null;
                    var           result      = WechatSenderService.GetWXMsgEntity(body);
                    var           textmessage = result is WXTextMessage;
                    if (textmessage)
                    {
                        wxresult = result as WXTextMessage;
                        if (wxresult.Content.Equals(IgnoreMessage, StringComparison.CurrentCultureIgnoreCase))
                        {
                            var lastmsg = SMSProcessor.LoadLastMessageByMsgReceiver(wxresult.FromUserName);
                            if (lastmsg != null)
                            {
                                MessageDA.UpdateSmsStatusAfterHandled(lastmsg.SysNo, true, true);
                                if (wxresult != null)
                                {
                                    WXTextMessage wXText = new WXTextMessage
                                    {
                                        ToUserName   = wxresult.FromUserName,
                                        FromUserName = wxresult.ToUserName,
                                        CreateTime   = WebPortalHelper.GetTimeStamp(),
                                        Content      = "忽略当前报警信息成功!\n正在等待服务器响应!",
                                        MsgId        = WebPortalHelper.GetGuidToLongID()
                                    };
                                    resp = WechatSenderService.OpeationWXEntity(wXText);
                                    Logger.WriteLog(resp);
                                }
                            }
                        }
                    }
                }
            }
            Response.Write(resp);
            Response.End();
            Response.Close();
        }
        public static void SendMsg(MessageEntity msg)
        {
            bool result = false;

            try
            {
                if (msg.MsgType == MsgType.SMS)
                {
                    var paras = from p in msg.TemplateParmaters orderby p.Name ascending select p.Value;
                    result = SMSSenderService.SendSMS(msg.MsgReceiver, msg.ExternalTemplateID, paras.ToArray());
                }
                else
                {
                    WechatMessage wechatMsg = new WechatMessage()
                    {
                        ToUser     = msg.MsgReceiver,
                        TemplateId = msg.ExternalTemplateID,
                        Url        = msg.Url
                    };

                    msg.TemplateParmaters.ForEach(item =>
                    {
                        wechatMsg.Data.Add(item.Name, new WeiXinParam()
                        {
                            Value = item.Value,
                            Color = item.Color
                        });
                    });
                    WechatSenderService.PushMessage(wechatMsg);
                }
            }
            catch (Exception ex)
            {
                result = false;
                throw ex;
            }
            finally
            {
                if (msg.SysNo > 0)
                {
                    MessageDA.UpdateSmsStatusAfterHandled(msg.SysNo, result);
                }
            }
        }
Example #4
0
        /// <summary>
        /// 预加载消息
        /// </summary>
        private void PreLoadMessages(List <MessageEntity> newMsgList)
        {
            lock (PerLoadMessageLocker)
            {
                if (newMsgList == null)
                {
                    newMsgList = MessageDA.WillBeSendMessgesBySpanSeconds(null, PerLoadMessagesTimerInterval);
                }
                if (newMsgList == null || newMsgList.Count == 0)
                {
                    // 不在newMsgList列表中的数据表示不需要发送,则将此数据设置为“客户拒收”(注意,这里不能直接删除,可以与发送短信的线程同时操作WaitingToSendMessageList,从而引起错误),在下面发送时会直接排除。
                    for (int i = 0; i < WaitingToSendMessageList.Count; i++)
                    {
                        var msg = WaitingToSendMessageList[i];
                        msg.Status = MessageStatus.CustomerReject;
                    }
                    return;
                }
                ;

                for (int i = 0; i < WaitingToSendMessageList.Count; i++)
                {
                    // 不在newMsgList列表中的数据表示不需要发送,则将此数据设置为“客户拒收”(注意,这里不能直接删除,可以与发送短信的线程同时操作WaitingToSendMessageList,从而引起错误),在下面发送时会直接排除。
                    var msg = WaitingToSendMessageList[i];
                    if (!newMsgList.Exists(o => o.SysNo == msg.SysNo))
                    {
                        msg.Status = MessageStatus.CustomerReject;
                    }
                }

                foreach (var nmsg in newMsgList)
                {
                    var omsg = WaitingToSendMessageList.Find(o => o.SysNo == nmsg.SysNo);
                    if (omsg == null)
                    {
                        WaitingToSendMessageList.Add(nmsg);
                    }
                    else
                    {
                        omsg.Status = nmsg.Status;
                    }
                }
            }
        }
 private static void SendSMSImmediately(string cellPhoneNumber, string templateID, List <string> paras, bool bl, int smsSysNo = 0)
 {
     if (bl)
     {
         var timeSpanSecond = Convert.ToInt32(ConfigurationManager.AppSettings["TimeSpanSecond"] ?? "30");
         //检验手机号是否合法
         if (!CheckCellPhoneNumber(cellPhoneNumber))
         {
             throw new BusinessException("手机号码格式不正确!");
         }
         else if (MessageDA.CheckSendSMSTimespan(cellPhoneNumber, timeSpanSecond))
         {
             throw new BusinessException("验证码发送失败,请在一分钟后重试!");
         }
         else
         {
             var result = SMSSenderService.SendSMS(cellPhoneNumber, templateID, paras.ToArray());
             if (result == false)
             {
                 throw new BusinessException("验证码发送失败!");
             }
             if (smsSysNo != 0)
             {
                 MessageDA.UpdateSmsStatusAfterHandled(smsSysNo, result);
             }
         }
     }
     else
     {
         var result = SMSSenderService.SendSMS(cellPhoneNumber, templateID, paras.ToArray());
         if (smsSysNo != 0)
         {
             MessageDA.UpdateSmsStatusAfterHandled(smsSysNo, result);
         }
     }
 }
Example #6
0
 public static List <QR_Message> LoadMessageByMasterIDAndMasterName(QF_Message filter)
 {
     return(MessageDA.LoadMessageByMasterIDAndMasterName(filter));
 }
Example #7
0
 public static List <MessageEntity> LoadMessageReSendCount(int CompanySysNo, string msgReceiver, int msgType)
 {
     return(MessageDA.LoadMessageReSendCount(CompanySysNo, msgReceiver, msgType));
 }
Example #8
0
 public static MessageEntity LoadLastMessageByMsgReceiver(string MsgReceiver)
 {
     return(MessageDA.LoadLastMessageByMsgReceiver(MsgReceiver));
 }
 private static void SendMsgToDB(MessageEntity entity, Action <int> action)
 {
     MessageDA.InsertMessage(ref entity);
     action(entity.SysNo);
 }
 private static void SendMsgToDB(ref List <MessageEntity> list)
 {
     MessageDA.InsertMessage(ref list);
 }
        public static int SendMsg <ParmaterTemplate>(int companySysNo, List <ReceiverInfo> receiverList, ParmaterTemplate parmater, bool bl) where ParmaterTemplate : BaseMsgTemplate
        {
            try
            {
                var msgList = GetMessageEntityList(companySysNo, receiverList, parmater, MessageStatus.Sent);
                if (msgList.Count == 0)
                {
                    return(1);//未检测到匹配的消息模版!
                }

                if (parmater.RetryCount == 0)
                {
                    foreach (var m in msgList)
                    {
                        m.Status = MessageStatus.Sent;
                    }
                }
                if (msgList.Any())
                {
                    foreach (var msg in msgList)
                    {
                        //msg.Url = parmater.GetRealUrl();
                        if (msg.MsgType == MsgType.WeiXin)
                        {
                            WechatMessage wechatMsg = new WechatMessage()
                            {
                                ToUser     = msg.MsgReceiver,
                                TemplateId = msg.ExternalTemplateID,
                                Url        = msg.Url
                            };

                            msg.TemplateParmaters.ForEach(item =>
                            {
                                wechatMsg.Data.Add(item.Name, new WeiXinParam()
                                {
                                    Value = item.Value,
                                    Color = item.Color
                                });
                            });
                            SendMsgToDB(msg, (sysno) =>
                            {
                                try
                                {
                                    WechatSenderService.PushMessage(wechatMsg);
                                    MessageDA.UpdateSmsStatusAfterHandled(sysno, true);
                                    msg.SysNo = sysno;
                                    if (msg.LimitCount > 1)
                                    {
                                        FirstSendSucess(msg);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    MessageDA.UpdateSmsStatusAfterHandled(sysno, false);
                                    throw ex;
                                }
                            });
                        }
                        else if (msg.MsgType == MsgType.SMS)
                        {
                            if (parmater.SendCount > 0)
                            {
                                //从数据库检测同模版发送且发送成功的条数
                                var sendedList = SMSProcessor.LoadMessageReSendCount(companySysNo, msg.MsgReceiver, (int)MsgType.SMS) ?? new List <MessageEntity>();
                                if (sendedList.Any())
                                {
                                    //SendCount < 0 不做限制   modify  by vickytang
                                    if (parmater.SendCount > 0 && sendedList.Count() >= parmater.SendCount) //在过去24小时内发送短信的次数超过模版限制,不用判断IP,因短信模版自身含有限制
                                    {
                                        return(2);                                                          //当前操作在过去24小时内发送短信的次数超过系统限制!
                                    }
                                    //从数据库获取接受者最后一条发送的验证码,1分钟之内不能重复发送
                                    var      t  = sendedList.OrderByDescending(x => x.SysNo).First();
                                    TimeSpan ts = DateTime.Now - t.InDate;
                                    if (ts.Minutes <= 1)
                                    {
                                        return(3);                                                 //当前接受者1分钟之类不能发送超过两条的验证码
                                    }
                                    var clist = sendedList.Where(x => x.ClientIP == msg.ClientIP); //同IP

                                    //SendCount < 0 不做限制   modify  by vickytang
                                    if (parmater.SendCount > 0 && clist.Count() > parmater.SendCount)
                                    {
                                        return(2);//当前操作在过去24小时内发送短信的次数超过系统限制!
                                    }
                                }
                            }
                            ////检测24小时同IP同模版只能发送x条
                            //if (parmater.SendCount > 0 && sendedList.Any())
                            //{
                            //    var clist = sendedList.Where(x => x.ClientIP == msg.ClientIP);//同IP
                            //    if (sendedList.Count() > parmater.SendCount || clist.Count() >= parmater.SendCount)
                            //    {
                            //        return 2;//当前操作在过去24小时内发送短信的次数超过系统限制!
                            //    }
                            //    else
                            //    {
                            //        //从数据库获取最后一条发送的验证码
                            //        var t = sendedList.OrderByDescending(x => x.SysNo).First();
                            //        TimeSpan ts = DateTime.Now - t.InDate;
                            //        if (ts.Minutes <= 1)
                            //        {
                            //            return 3;//当前接受者1分钟之类不能发送超过两条的验证码
                            //        }
                            //    }
                            //}
                            var paras = from p in msg.TemplateParmaters orderby p.Name ascending select p.Value;

                            SendMsgToDB(msg, (sysno) =>
                            {
                                SendSMSImmediately(msg.MsgReceiver, msg.ExternalTemplateID, paras.ToList(), bl, sysno);
                                msg.SysNo = sysno;
                                if (msg.LimitCount > 1)
                                {
                                    FirstSendSucess(msg);
                                }
                            });
                        }
                    }
                }
                return(0);
            }
            catch (Exception ex)
            {
                Logger.WriteLog(ex.ToString(), "SMS_EXception");
                throw ex;
            }
        }
Example #12
0
        public List <MessageModel> Get(PagerModel pager, MessageModel filter)
        {
            MessageDA DA = new MessageDA();

            return(DA.Get(pager, filter));
        }
Example #13
0
        public RequestResult <MessageModel> MarkAsReaded(MessageModel model)
        {
            MessageDA DA = new MessageDA();

            return(DA.MarkAsReaded(model));
        }
Example #14
0
        public RequestResult <MessageModel> InsUpd(MessageModel model)
        {
            MessageDA DA = new MessageDA();

            return(DA.InsUpd(model));
        }