Пример #1
0
        public ActionResult Notice(DateTime?BeginInDate, DateTime?EndInDate)
        {
            MessageCenter.Entity.QF_Message filter = new MessageCenter.Entity.QF_Message()
            {
                MasterName  = "SmokeDetector",
                EndInDate   = EndInDate,
                BeginInDate = BeginInDate,
                MsgReceiver = curentUser.AppCustomerID,
                MsgType     = MessageCenter.Entity.MsgType.WeiXin
            };
            if (BeginInDate == null && EndInDate == null)
            {
                filter.BeginInDate = DateTime.Now.AddDays(-30);
                filter.EndInDate   = DateTime.Now;
            }
            if (EndInDate != null)
            {
                filter.EndInDate = EndInDate.GetValueOrDefault().AddDays(1);
            }
            List <MessageCenter.Entity.QR_Message> list = SMSProcessor.LoadMessageByMasterIDAndMasterName(filter);
            NoticeModel model = new NoticeModel();

            model.MassageList = list;
            model.BeginInDate = BeginInDate;
            model.EndInDate   = EndInDate;
            return(View(model));
        }
        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 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;
            }
        }
Пример #4
0
 public void SendSMSAsync()
 {
     SMSProcessor.SendSMSAsync();
 }