/// <summary> /// 判断通道名称或通道号是否已经存在 /// </summary> public bool ExistsExEx(SmsServer.Model.SmsSpgate model) { int iRowCount = MyDataBase.db.Select(SmsPlatForm.SmsSpgate) .Where(SmsPlatForm.SmsSpgate.GateNumber == model.GateNumber || SmsPlatForm.SmsSpgate.GateName == model.GateName).ToDataSet().Tables[0].Rows.Count; return(iRowCount > 0 ? true : false); }
/// <summary> /// 更新一条数据 /// </summary> public bool Update(SmsServer.Model.SmsSpgate model) { try { MyDataBase.db.Update(SmsPlatForm.SmsSpgate) .AddColumn(SmsPlatForm.SmsSpgate.GateName, model.GateName) .AddColumn(SmsPlatForm.SmsSpgate.GateType, model.GateType) .AddColumn(SmsPlatForm.SmsSpgate.BusinessID, model.BusinessID) .AddColumn(SmsPlatForm.SmsSpgate.IsLong, model.IsLong) .AddColumn(SmsPlatForm.SmsSpgate.IsSubport, model.IsSubport) .AddColumn(SmsPlatForm.SmsSpgate.IsSurportMo, model.IsSurportMo) .AddColumn(SmsPlatForm.SmsSpgate.IsReport, model.IsReport) .AddColumn(SmsPlatForm.SmsSpgate.MsgLen, model.MsgLen) .AddColumn(SmsPlatForm.SmsSpgate.MaxPhoneNum, model.MaxPhoneNum) .AddColumn(SmsPlatForm.SmsSpgate.MobileLen, model.MobileLen) .AddColumn(SmsPlatForm.SmsSpgate.UnicomLen, model.UnicomLen) .AddColumn(SmsPlatForm.SmsSpgate.TeleComLen, model.TeleComLen) .AddColumn(SmsPlatForm.SmsSpgate.ChinaPhoneLen, model.ChinaPhoneLen) .AddColumn(SmsPlatForm.SmsSpgate.GateInfo, model.GateInfo) .AddColumn(SmsPlatForm.SmsSpgate.PortUrl, model.PortUrl) .AddColumn(SmsPlatForm.SmsSpgate.MoUrl, model.MoUrl) .AddColumn(SmsPlatForm.SmsSpgate.ReportUrl, model.ReportUrl) .AddColumn(SmsPlatForm.SmsSpgate.UseridParamString, model.UseridParamString) .AddColumn(SmsPlatForm.SmsSpgate.PwdParamString, model.PwdParamString) .AddColumn(SmsPlatForm.SmsSpgate.MobileParamString, model.MobileParamString) .AddColumn(SmsPlatForm.SmsSpgate.MsgParamString, model.MsgParamString) .AddColumn(SmsPlatForm.SmsSpgate.SubportParamString, model.SubportParamString) .AddColumn(SmsPlatForm.SmsSpgate.GateNoParamString, model.GateNoParamString) .AddColumn(SmsPlatForm.SmsSpgate.PhoneNumParamString, model.PhoneNumParamString) .AddColumn(SmsPlatForm.SmsSpgate.UserID, model.UserID) .AddColumn(SmsPlatForm.SmsSpgate.UserPwd, model.UserPwd) .AddColumn(SmsPlatForm.SmsSpgate.SendParams, model.SendParams) .AddColumn(SmsPlatForm.SmsSpgate.SendType, model.SendType) .AddColumn(SmsPlatForm.SmsSpgate.IsWebService, model.IsWebService) .AddColumn(SmsPlatForm.SmsSpgate.EncodeType, model.EncodeType) .AddColumn(SmsPlatForm.SmsSpgate.TimeOut, model.TimeOut) .AddColumn(SmsPlatForm.SmsSpgate.MtScriptID, model.MtScriptID) .AddColumn(SmsPlatForm.SmsSpgate.MoScriptID, model.MoScriptID) .AddColumn(SmsPlatForm.SmsSpgate.ReportScriptID, model.ReportScriptID) .Where(SmsPlatForm.SmsSpgate.GateNumber == model.GateNumber).Execute(); return(true); } catch (System.Exception e) { //记录日志 return(false); } }
/// <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="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); }