/// <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); } } }
/// <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); } } }
public static List <QR_Message> LoadMessageByMasterIDAndMasterName(QF_Message filter) { return(MessageDA.LoadMessageByMasterIDAndMasterName(filter)); }
public static List <MessageEntity> LoadMessageReSendCount(int CompanySysNo, string msgReceiver, int msgType) { return(MessageDA.LoadMessageReSendCount(CompanySysNo, msgReceiver, msgType)); }
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; } }
public List <MessageModel> Get(PagerModel pager, MessageModel filter) { MessageDA DA = new MessageDA(); return(DA.Get(pager, filter)); }
public RequestResult <MessageModel> MarkAsReaded(MessageModel model) { MessageDA DA = new MessageDA(); return(DA.MarkAsReaded(model)); }
public RequestResult <MessageModel> InsUpd(MessageModel model) { MessageDA DA = new MessageDA(); return(DA.InsUpd(model)); }