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); } } }
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; } }