예제 #1
0
 /// <summary>
 /// 对信息进行拆分发送
 /// </summary>
 /// <param name="objSmsTask"></param>
 /// <param name="strMsgArray"></param>
 /// <param name="iSingleFeenum"></param>
 /// <param name="iArrayLen"></param>
 /// <param name="iBusinessID"></param>
 private void SendMessageQueue(SmsTaskEx objSmsTask, string[] strMsgArray, int[][] iSingleFeenum, int iArrayLen, int iBusinessID)
 {
     for (int i = 0; i < iArrayLen; i++)
     {
         objSmsTask.MsgContent       = strMsgArray[i];
         objSmsTask.MsgLen           = strMsgArray[i].Length;
         objSmsTask.SingleMobileFee  = iSingleFeenum[0][i];
         objSmsTask.SingleUnicomFee  = iSingleFeenum[1][i];
         objSmsTask.SingleTelecomFee = iSingleFeenum[2][i];
         objSmsTask.SingleChinaFee   = iSingleFeenum[3][i];
         SendMessageQueueEx(objSmsTask, iBusinessID);
     }
 }
예제 #2
0
 /// <summary>
 /// 往发送队列或者中转表中存储
 /// </summary>
 /// <param name="objSmsTask"></param>
 /// <param name="iBusinessID"></param>
 private void SendMessageQueueEx(SmsTaskEx objSmsTask, int iBusinessID)
 {
     if (iBusinessID != 1 || QueueManage <SmsTaskEx> .IsOverSelectLen(SmsSetIni.TaskQueuePath, SmsSetIni.QueueMaxlen))//如果不是HTTP类型或者消息队列已满
     {
         //添加进等待发送表
         if (objTaskBll.Add(objSmsTask))
         {
             //添加成功
         }
         else
         {
             //添加失败
         }
     }
     else   //添加进消息队列
     {
         QueueManage <SmsTaskEx> .SendQueue(SmsSetIni.TaskQueuePath, objSmsTask);
     }
 }
예제 #3
0
 /// <summary>
 /// 增加一条数据
 /// </summary>
 public bool Add(SmsServer.Model.SmsTaskA model)
 {
     //return 0;
     try
     {
         MyDataBase.db.Insert(SmsPlatForm.SmsTaskA)
         .AddColumn(SmsPlatForm.SmsTaskA.PhoneList, model.PhoneList)
         .AddColumn(SmsPlatForm.SmsTaskA.MsgContent, model.MsgContent)
         .AddColumn(SmsPlatForm.SmsTaskA.SubTime, model.SubTime)
         .AddColumn(SmsPlatForm.SmsTaskA.SendTime, model.SendTime)
         .AddColumn(SmsPlatForm.SmsTaskA.UserID, model.UserID)
         .AddColumn(SmsPlatForm.SmsTaskA.ParentID, model.ParentID)
         .AddColumn(SmsPlatForm.SmsTaskA.SpgateNo, model.SpgateNo)
         .AddColumn(SmsPlatForm.SmsTaskA.SubPort, model.SubPort)
         .AddColumn(SmsPlatForm.SmsTaskA.SubPortEx, model.SubPortEx)
         .AddColumn(SmsPlatForm.SmsTaskA.FeeNum, model.FeeNum)
         .AddColumn(SmsPlatForm.SmsTaskA.PhoneNum, model.PhoneNum)
         .AddColumn(SmsPlatForm.SmsTaskA.MsgLen, model.MsgLen)
         .AddColumn(SmsPlatForm.SmsTaskA.HasIndex, model.HasIndex)
         .AddColumn(SmsPlatForm.SmsTaskA.SendType, model.SendType)
         .AddColumn(SmsPlatForm.SmsTaskA.SendFlag, model.SendFlag)
         .AddColumn(SmsPlatForm.SmsTaskA.SaveType, model.SaveType)
         .AddColumn(SmsPlatForm.SmsTaskA.MobileNum, model.MobileNum)
         .AddColumn(SmsPlatForm.SmsTaskA.UnicomNum, model.UnicomNum)
         .AddColumn(SmsPlatForm.SmsTaskA.TelecomNum, model.TelecomNum)
         .AddColumn(SmsPlatForm.SmsTaskA.ChinaNum, model.ChinaNum)
         .AddColumn(SmsPlatForm.SmsTaskA.SingleMobileFee, model.SingleMobileFee)
         .AddColumn(SmsPlatForm.SmsTaskA.SingleUnicomFee, model.SingleUnicomFee)
         .AddColumn(SmsPlatForm.SmsTaskA.SingleTelecomFee, model.SingleTelecomFee)
         .AddColumn(SmsPlatForm.SmsTaskA.SingleChinaFee, model.SingleChinaFee).Execute();
         return(true);
     }
     catch (System.Exception e)
     {
         throw new Exception(e.Message);
         // return false;
     }
 }
예제 #4
0
        private string SendMessage(SmsUserData objUser, SmsMsgSendStr objMsg, string strSubport, int iTotalCount)
        {
            //1。根据审核标识来判断是写入审核表,还是进行发送处理
//             if (objUser.IsAudit == 1)
//             {
//                 if (iTotalCount >= objUser.AuditNum)
//                 {
//                     //插入等待审核表
//                     return "12";//发送成功
//                 }
//             }

            //以上判断是否插入审核表
            SmsTaskEx objSmsTask = new SmsTaskEx();

            objSmsTask.SendFlag = 0;        //标识是否号码是正确的
            objSmsTask.SaveType = objUser.HistoryType;
            //objSmsTask.SubPort = strSubport;
            objSmsTask.SubPortEx = strSubport;
            objSmsTask.SendTime  = DateTime.Now;
            objSmsTask.SubTime   = DateTime.Now;
            objSmsTask.UserID    = objUser.UserID;
            objSmsTask.ParentID  = objUser.ParentID;
            for (int i = 0; i < 4; i++)       //发送真实信息
            {
                if (objMsg.PhoneCount[i] > 0) //如果有号码需要发送
                {
                    objSmsTask.SpgateNo  = objMsg.PhoneSpgate[i].GateNumber;
                    objSmsTask.PhoneList = objMsg.PhoneList[i].ToString();
                    objSmsTask.PhoneNum  = objMsg.PhoneCount[i];
                    switch (i)
                    {
                    case 0:
                        objSmsTask.SubPort = objUser.MobileSubport;
                        break;

                    case 1:
                        objSmsTask.SubPort = objUser.UnicomSubport;
                        break;

                    case 2:
                        objSmsTask.SubPort = objUser.TelecomSubport;
                        break;

                    case 3:
                        objSmsTask.SubPort = objUser.ChinaPhoneSubport;
                        break;
                    }
                    for (int j = 0; j < 4; j++)
                    {
                        if (objMsg.FeeMap[j] == i)      //如果j号段映射到了i号段上,那么在i通道上的j号段号码数为j号段扣费号码数,i通道上j号段的拆分扣费数
                        {
                            switch (j)
                            {
                            case 0:
                                objSmsTask.SubPort   = objUser.MobileSubport;
                                objSmsTask.MobileNum = objMsg.FeePhoneCount[j];
                                break;

                            case 1:
                                objSmsTask.SubPort   = objUser.UnicomSubport;
                                objSmsTask.UnicomNum = objMsg.FeePhoneCount[j];
                                break;

                            case 2:
                                objSmsTask.SubPort    = objUser.TelecomSubport;
                                objSmsTask.TelecomNum = objMsg.FeePhoneCount[j];
                                break;

                            case 3:
                                objSmsTask.SubPort  = objUser.ChinaPhoneSubport;
                                objSmsTask.ChinaNum = objMsg.FeePhoneCount[j];
                                break;
                            }
                        }
                    }
                    SendMessageQueue(objSmsTask, objMsg.MessageArray[i], objMsg.SingleMsgFeeNum, objMsg.MsgArrayLen[i], objMsg.PhoneSpgate[i].BusinessID);
                }
            }
            //发送错误号码的信息,统一流程
            if (objMsg.PhoneCount[4] > 0)
            {
                objSmsTask.SendFlag   = 1;
                objSmsTask.SubPort    = objUser.MobileSubport;
                objSmsTask.SpgateNo   = objMsg.PhoneSpgate[0].GateNumber;
                objSmsTask.PhoneList  = objMsg.PhoneList[4].ToString();
                objSmsTask.PhoneNum   = objMsg.PhoneCount[4];
                objSmsTask.MobileNum  = objMsg.FeePhoneCount[4]; //将扣费不发送号码全分到移动上
                objSmsTask.UnicomNum  = 0;
                objSmsTask.TelecomNum = 0;
                objSmsTask.ChinaNum   = 0;
                SendMessageQueue(objSmsTask, objMsg.MessageArray[0], objMsg.SingleMsgFeeNum, objMsg.MsgArrayLen[0], objMsg.PhoneSpgate[0].BusinessID);
            }
            return("1");
        }
예제 #5
0
        /// <summary>
        /// 发送线程执行函数
        /// </summary>
        /// <param name="iThreadNumber"></param>
        private static void SendProc(object iThreadNumber)
        {
            string strShow = string.Format("线程:{0}启动", iThreadNumber.ToString( ));

            ShowInfo(strShow);
            Thread.Sleep(500);
            SmsTaskEx        objSmsTask = new SmsTaskEx();
            SmsSpgateEx      objSpgate  = new SmsSpgateEx();
            string           strContent = string.Empty;
            string           strParams  = string.Empty;
            string           strPortUrl = string.Empty;
            string           strRet     = string.Empty;
            MapScriptEx      objMap     = new MapScriptEx();
            DataAdapterClass objAdapter = new DataAdapterClass();

            Model.SendRetValue objRetValue = new Model.SendRetValue();
            SmsHistory         objHist     = new SmsHistory();
            DateTime           oldLogTime  = DateTime.Now;

            while (!m_bExit)
            {
                if ((int)iThreadNumber == 0)
                {
                    TimeSpan tSpan     = DateTime.Now - oldLogTime;
                    int      iInterval = SmsSetIni.QueryInterval;
                    if (tSpan.TotalSeconds > iInterval)
                    {
                        strPortUrl = SmsSetIni.KeepQueryUrl + "OnlineQuery.aspx?";
                        oldLogTime = DateTime.Now;
                        strParams  = "url=" + HttpUtility.UrlEncode(SmsSetIni.KeepOnlineUrl) + "&" + DateTime.Now.ToString("yyyyMMddhhmmss");
                        strRet     = SmsHttpSend.HttpSendMessge(ref strPortUrl, ref strParams, 30000, 0, 2);
                    }
                }
                Thread.Sleep(SmsSetIni.SendThreadInterval);
                try
                {
                    objSmsTask = QueueManage <SmsTaskEx> .GetSingleMessage(SmsSetIni.TaskQueuePath);

                    if (objSmsTask == null)
                    {
                        //Thread.Sleep(100);
                        continue;
                    }
                    //strShow = string.Format("线程:{0}从消息队列中读取到数据。 。 。", iThreadNumber.ToString());
                    //ShowInfo(strShow);
                    //拿到后,从缓存中获取通道信息,获取通道各参数后发送
                    if (!DataCache.GetCacheSpgate(objSmsTask.SpgateNo, ref objSpgate))
                    {
                        //通道不存在,保存失败历史
                        continue;
                    }
                    strContent = ConvertString(objSmsTask.MsgContent, objSpgate.EncodeType);
                    strParams  = string.Format(objSpgate.SendParams, objSmsTask.PhoneList.Substring(0, objSmsTask.PhoneList.Length - 1),
                                               strContent, objSmsTask.PhoneNum, objSmsTask.SubPort + objSmsTask.SubPortEx, objSmsTask.SpgateNo);
                    strPortUrl = objSpgate.PortUrl;
                    //发送
                    strRet = SmsHttpSend.HttpSendMessge(ref strPortUrl, ref strParams, objSpgate.TimeOut, objSpgate.EncodeType, objSpgate.SendType);
                    //先处理PostError[-1111]返回值
                    if (strRet.IndexOf("PostError[-1111]") == 0)
                    {
                        //POST异常,重发
                        objHist.Add(objSmsTask, 1, "", strRet);
                        continue;
                    }
                    string strPtMsgID = string.Empty;
                    //拿到结果后,匹配返回值
                    if (!DataCache.GetCacheMapScript(objSpgate.MtScriptID, ref objMap))   //如果没有匹配到映射脚本
                    {
                        //无映射脚本,默认成功
                        objHist.Add(objSmsTask, 0, strPtMsgID, "无映射脚本,默认成功");
                        continue;
                    }
                    //找到了脚本
                    if (!objAdapter.AdapterSendResult(objMap.ScriptCode, strRet, ref objRetValue))
                    {
                        //映射异常,算成功
                        objHist.Add(objSmsTask, 0, strPtMsgID, objRetValue.RetInfo);
                        continue;
                    }
                    if (objRetValue.RetValue == 0) //发送成功了
                    {
                        objHist.Add(objSmsTask, objRetValue.RetValue, strPtMsgID, objRetValue.RetInfo);
                    }
                    else
                    {
                        if (objRetValue.IsNeedResend != 1)  //需要重发
                        {
                            //处理重发
                            //objHist.Add(objSmsTask, objRetValue.RetValue, strPtMsgID, objRetValue.RetInfo);
                        }
                        else
                        {
                            //保存失败历史
                            //objHist.Add(objSmsTask, objRetValue.RetValue, strPtMsgID, objRetValue.RetInfo);
                        }
                        objHist.Add(objSmsTask, objRetValue.RetValue, strPtMsgID, objRetValue.RetInfo);
                    }
                    //根据匹配到的返回值决定是否需要重发此数据,如果不重发,则保存至历史表中
                    //保存发送历史
                    ShowInfo(strRet);
                }
                catch (Exception e)
                {
                    ShowInfo(e.Message);
                    Thread.Sleep(2000);
                }
            }
            strShow = string.Format("线程:{0}退出", iThreadNumber.ToString());
            ShowInfo(strShow);
        }
 /// <summary>
 /// 往发送队列或者中转表中存储
 /// </summary>
 /// <param name="objSmsTask"></param>
 /// <param name="iBusinessID"></param>
 private void SendMessageQueueEx(SmsTaskEx objSmsTask,int iBusinessID)
 {
     if (iBusinessID != 1 || QueueManage<SmsTaskEx>.IsOverSelectLen(SmsSetIni.TaskQueuePath, SmsSetIni.QueueMaxlen))//如果不是HTTP类型或者消息队列已满
     {
         //添加进等待发送表
         if( objTaskBll.Add(objSmsTask))
         {
             //添加成功
         }
         else
         {
             //添加失败
         }
     }
     else   //添加进消息队列
     {
         QueueManage<SmsTaskEx>.SendQueue(SmsSetIni.TaskQueuePath, objSmsTask);
     }
 }
 /// <summary>
 /// 对信息进行拆分发送
 /// </summary>
 /// <param name="objSmsTask"></param>
 /// <param name="strMsgArray"></param>
 /// <param name="iSingleFeenum"></param>
 /// <param name="iArrayLen"></param>
 /// <param name="iBusinessID"></param>
 private void SendMessageQueue(SmsTaskEx objSmsTask, string[] strMsgArray, int[][] iSingleFeenum, int iArrayLen, int iBusinessID)
 {
     for (int i=0;i<iArrayLen;i++)
     {
         objSmsTask.MsgContent = strMsgArray[i];
         objSmsTask.MsgLen = strMsgArray[i].Length;
         objSmsTask.SingleMobileFee = iSingleFeenum[0][i];
         objSmsTask.SingleUnicomFee = iSingleFeenum[1][i];
         objSmsTask.SingleTelecomFee = iSingleFeenum[2][i];
         objSmsTask.SingleChinaFee = iSingleFeenum[3][i];
         SendMessageQueueEx(objSmsTask, iBusinessID);
     }
 }
        private string SendMessage(SmsUserData objUser,SmsMsgSendStr objMsg,string strSubport,int iTotalCount)
        {
            //1。根据审核标识来判断是写入审核表,还是进行发送处理
            //             if (objUser.IsAudit == 1)
            //             {
            //                 if (iTotalCount >= objUser.AuditNum)
            //                 {
            //                     //插入等待审核表
            //                     return "12";//发送成功
            //                 }
            //             }

            //以上判断是否插入审核表
            SmsTaskEx objSmsTask = new SmsTaskEx();
            objSmsTask.SendFlag = 0;        //标识是否号码是正确的
            objSmsTask.SaveType = objUser.HistoryType;
            //objSmsTask.SubPort = strSubport;
            objSmsTask.SubPortEx = strSubport;
            objSmsTask.SendTime = DateTime.Now;
            objSmsTask.SubTime = DateTime.Now;
            objSmsTask.UserID = objUser.UserID;
            objSmsTask.ParentID = objUser.ParentID;
            for (int i = 0; i < 4;i++ )     //发送真实信息
            {
                if (objMsg.PhoneCount[i] > 0)   //如果有号码需要发送
                {
                    objSmsTask.SpgateNo = objMsg.PhoneSpgate[i].GateNumber;
                    objSmsTask.PhoneList = objMsg.PhoneList[i].ToString();
                    objSmsTask.PhoneNum = objMsg.PhoneCount[i];
                    switch (i)
                    {
                        case 0:
                            objSmsTask.SubPort = objUser.MobileSubport;
                            break;
                        case 1:
                            objSmsTask.SubPort = objUser.UnicomSubport;
                            break;
                        case 2:
                            objSmsTask.SubPort = objUser.TelecomSubport;
                            break;
                        case 3:
                            objSmsTask.SubPort = objUser.ChinaPhoneSubport;
                            break;
                    }
                    for (int j = 0; j < 4;j++ )
                    {
                        if (objMsg.FeeMap[j] == i)      //如果j号段映射到了i号段上,那么在i通道上的j号段号码数为j号段扣费号码数,i通道上j号段的拆分扣费数
                        {
                            switch (j)
                            {
                                case 0:
                                    objSmsTask.SubPort = objUser.MobileSubport;
                                    objSmsTask.MobileNum = objMsg.FeePhoneCount[j];
                                    break;
                                case 1:
                                    objSmsTask.SubPort = objUser.UnicomSubport;
                                    objSmsTask.UnicomNum = objMsg.FeePhoneCount[j];
                                    break;
                                case 2:
                                    objSmsTask.SubPort = objUser.TelecomSubport;
                                    objSmsTask.TelecomNum = objMsg.FeePhoneCount[j];
                                    break;
                                case 3:
                                    objSmsTask.SubPort = objUser.ChinaPhoneSubport;
                                    objSmsTask.ChinaNum = objMsg.FeePhoneCount[j];
                                    break;
                            }
                        }
                    }
                    SendMessageQueue(objSmsTask, objMsg.MessageArray[i], objMsg.SingleMsgFeeNum, objMsg.MsgArrayLen[i], objMsg.PhoneSpgate[i].BusinessID);
                }
            }
            //发送错误号码的信息,统一流程
            if (objMsg.PhoneCount[4] > 0)
            {
                objSmsTask.SendFlag = 1;
                objSmsTask.SubPort = objUser.MobileSubport;
                objSmsTask.SpgateNo = objMsg.PhoneSpgate[0].GateNumber;
                objSmsTask.PhoneList = objMsg.PhoneList[4].ToString();
                objSmsTask.PhoneNum = objMsg.PhoneCount[4];
                objSmsTask.MobileNum = objMsg.FeePhoneCount[4]; //将扣费不发送号码全分到移动上
                objSmsTask.UnicomNum = 0;
                objSmsTask.TelecomNum = 0;
                objSmsTask.ChinaNum = 0;
                SendMessageQueue(objSmsTask, objMsg.MessageArray[0], objMsg.SingleMsgFeeNum, objMsg.MsgArrayLen[0], objMsg.PhoneSpgate[0].BusinessID);
            }
            return "1";
        }
 /// <summary>
 /// 发送线程执行函数
 /// </summary>
 /// <param name="iThreadNumber"></param>
 private static void SendProc(object iThreadNumber)
 {
     string strShow = string.Format("线程:{0}启动", iThreadNumber.ToString( ));
     ShowInfo(strShow);
     Thread.Sleep(500);
     SmsTaskEx objSmsTask = new SmsTaskEx();
     SmsSpgateEx objSpgate = new SmsSpgateEx();
     string strContent = string.Empty;
     string strParams = string.Empty;
     string strPortUrl = string.Empty;
     string strRet = string.Empty;
     MapScriptEx objMap = new MapScriptEx();
     DataAdapterClass objAdapter = new DataAdapterClass();
     Model.SendRetValue objRetValue = new Model.SendRetValue();
     SmsHistory objHist = new SmsHistory();
     DateTime oldLogTime = DateTime.Now;
     while (!m_bExit)
     {
         if ((int)iThreadNumber == 0 )
         {
             TimeSpan tSpan = DateTime.Now - oldLogTime ;
             int iInterval = SmsSetIni.QueryInterval;
             if (tSpan.TotalSeconds > iInterval)
             {
                 strPortUrl = SmsSetIni.KeepQueryUrl  + "OnlineQuery.aspx?";
                 oldLogTime = DateTime.Now;
                 strParams = "url="+HttpUtility.UrlEncode(SmsSetIni.KeepOnlineUrl) + "&" + DateTime.Now.ToString("yyyyMMddhhmmss");
                 strRet = SmsHttpSend.HttpSendMessge(ref strPortUrl, ref strParams, 30000, 0, 2);
             }
         }
         Thread.Sleep(SmsSetIni.SendThreadInterval);
         try
         {
             objSmsTask = QueueManage<SmsTaskEx>.GetSingleMessage(SmsSetIni.TaskQueuePath);
             if (objSmsTask == null)
             {
                 //Thread.Sleep(100);
                 continue;
             }
             //strShow = string.Format("线程:{0}从消息队列中读取到数据。 。 。", iThreadNumber.ToString());
             //ShowInfo(strShow);
             //拿到后,从缓存中获取通道信息,获取通道各参数后发送
             if (!DataCache.GetCacheSpgate(objSmsTask.SpgateNo, ref objSpgate))
             {
                 //通道不存在,保存失败历史
                 continue;
             }
             strContent = ConvertString(objSmsTask.MsgContent, objSpgate.EncodeType);
             strParams = string.Format(objSpgate.SendParams, objSmsTask.PhoneList.Substring(0, objSmsTask.PhoneList.Length - 1),
                 strContent, objSmsTask.PhoneNum, objSmsTask.SubPort + objSmsTask.SubPortEx, objSmsTask.SpgateNo);
             strPortUrl = objSpgate.PortUrl;
             //发送
             strRet = SmsHttpSend.HttpSendMessge(ref strPortUrl, ref strParams, objSpgate.TimeOut, objSpgate.EncodeType, objSpgate.SendType);
             //先处理PostError[-1111]返回值
             if (strRet.IndexOf("PostError[-1111]") == 0)
             {
                 //POST异常,重发
                 objHist.Add(objSmsTask, 1, "", strRet);
                 continue;
             }
             string strPtMsgID = string.Empty;
             //拿到结果后,匹配返回值
             if (!DataCache.GetCacheMapScript(objSpgate.MtScriptID, ref objMap))   //如果没有匹配到映射脚本
             {
                 //无映射脚本,默认成功
                 objHist.Add(objSmsTask, 0, strPtMsgID, "无映射脚本,默认成功");
                 continue;
             }
             //找到了脚本
             if (!objAdapter.AdapterSendResult(objMap.ScriptCode, strRet, ref objRetValue))
             {
                 //映射异常,算成功
                 objHist.Add(objSmsTask, 0, strPtMsgID, objRetValue.RetInfo);
                 continue;
             }
             if (objRetValue.RetValue == 0) //发送成功了
             {
                 objHist.Add(objSmsTask, objRetValue.RetValue, strPtMsgID, objRetValue.RetInfo);
             }
             else
             {
                 if (objRetValue.IsNeedResend != 1)  //需要重发
                 {
                     //处理重发
                     //objHist.Add(objSmsTask, objRetValue.RetValue, strPtMsgID, objRetValue.RetInfo);
                 }
                 else
                 {
                     //保存失败历史
                     //objHist.Add(objSmsTask, objRetValue.RetValue, strPtMsgID, objRetValue.RetInfo);
                 }
                 objHist.Add(objSmsTask, objRetValue.RetValue, strPtMsgID, objRetValue.RetInfo);
             }
             //根据匹配到的返回值决定是否需要重发此数据,如果不重发,则保存至历史表中
             //保存发送历史
             ShowInfo(strRet);
         }
         catch (Exception e)
         {
             ShowInfo(e.Message);
             Thread.Sleep(2000);
         }
     }
     strShow = string.Format("线程:{0}退出", iThreadNumber.ToString());
     ShowInfo(strShow);
 }
예제 #10
0
 /// <summary>
 /// 更新一条数据
 /// </summary>
 public void Update(SmsServer.Model.SmsTaskA model)
 {
 }