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