/// <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); } }
/// <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> 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; } }
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); }
/// <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); }
/// <summary> /// 更新一条数据 /// </summary> public void Update(SmsServer.Model.SmsTaskA model) { }