www.pudn.com > UDS1.1_51aspx.rar > SMS.cs


using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Collections; 
using System.Runtime.InteropServices; 
 
namespace UDS.Components 
{ 
	///  
	/// SMS  
	///  
	public class SMS 
	{ 
		 
		 
		int CommIndex = 1; 
 
		/* 
		#region 引用组件 
		[DllImport("../bin/AscendSMS.dll")] 
		public static extern int OpenComm(int CommIndex); 
		[DllImport("../bin/AscendSMS.dll")] 
		public static extern int CloseComm(int CommIndex); 
		[DllImport("../bin/AscendSMS.dll")] 
		public static extern int ForceCloseComm(int CommIndex); 
		[DllImport("../bin/AscendSMS.dll")] 
		public static extern int SendMsg(int CommIndex,string Msg,string MobileNo,int Msg_Index,bool Chinese); 
		[DllImport("../bin/AscendSMS.dll")] 
		public static extern int GetUnSendCount(int CommIndex); 
		[DllImport("../bin/AscendSMS.dll")] 
		public static extern bool GetNextSendMsg(int CommIndex, string Msg,bool DeleteAfterRead); 
		[DllImport("../bin/AscendSMS.dll")] 
		public static extern bool GetNewMsg(int CommIndex,  string Msg); 
		#endregion 
		 
	 
		///  
		/// 发送短消息 
		/// 返回操作码 0 成功 -2 消息超过长度 -3 手机号码不正确 -4 发送阵列已满 -8 模块未打开 -1 串口未打开 
		///  
		/// 短消息内容 
		/// 目标端手机号码,包括一般号码及特殊号码 
		/// 短消息标志位 
		/// 是否中文(中文为True,否则为False) 
		/// 操作码 
		public int SendMobileMsg(string Msg, string MobileNo, int MsgIndex,bool IsZh)  
		{ 
			CloseComm(CommIndex); 
			OpenComm(CommIndex);  
			String[] MoA = MobileNo.Split(','); 
			String[] RtnCodeA = MoA; 
			for(int i=0;i 
		/// 得到在线人数 
		///  
		/// 返回int 
		public int GetOnlineCount() 
		{ 
			Database data = new Database(); 
			SqlDataReader dataReader = null; 
			try  
			{ 
				data.RunProc("SP_SMS_GetOnlineCount",out dataReader); 
				if(dataReader.Read()) return Int32.Parse(dataReader[0].ToString()); 
				else return 0; 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("读取在线人数出错!",ex); 
			} 
			finally 
			{ 
				data	   = null; 
				dataReader = null; 
			} 
		} 
 
		///  
		/// 得到新消息总数 
		///  
		/// 返回int 
		public int GetNewMsgCount(string Username) 
		{ 
			Database data = new Database(); 
			SqlDataReader dataReader = null; 
			SqlParameter[] prams = { 
									   data.MakeInParam("@username",    SqlDbType.VarChar, 50, Username) 
								   }; 
			try  
			{ 
				data.RunProc("SP_SMS_GetNewMsgCount",prams,out dataReader); 
				if(dataReader.Read()) return Int32.Parse(dataReader[0].ToString()); 
				else return 0; 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("得到新消息总数出错!",ex); 
			} 
			finally 
			{ 
				data	   = null; 
				dataReader = null; 
			} 
		} 
 
		///  
		/// 读消息 
		///  
		public bool ReadMsg(string MsgIDS,string Username) 
		{ 
			Database data = new Database(); 
			SqlParameter[] prams = { 
									   data.MakeInParam("@MsgIDS",    SqlDbType.VarChar, 2000, MsgIDS), 
									   data.MakeInParam("@Username",    SqlDbType.VarChar, 20, Username), 
								   }; 
			try  
			{ 
				data.RunProc("SP_SMS_ReadMsg",prams); 
				return true; 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
			//	throw new Exception("读消息出错!",ex); 
				return false; 
			} 
			finally 
			{ 
				data	   = null; 
			} 
		} 
 
 
		///  
		/// 更新在线记录表.添加新的在线人员 
		///  
		public void UpdateOnlineInfo(string Username,string HostAddr,string SessionID) 
		{ 
			Database data = new Database(); 
			SqlParameter[] prams = { 
									   data.MakeInParam("@username",    SqlDbType.VarChar, 50, Username), 
									   data.MakeInParam("@hostaddr",    SqlDbType.VarChar, 50, HostAddr), 
									   data.MakeInParam("@sessionid",   SqlDbType.VarChar, 50, SessionID) 
								   }; 
			try  
			{ 
				data.RunProc("SP_SMS_UpdateOnlineInfo",prams); 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("更新在线记录表出错!",ex); 
			} 
			finally 
			{ 
				data	   = null; 
			} 
		} 
 
		///  
		/// 更新活动记录及检测未活动人员 
		///  
		public string CheckUpdate(string Username,string SessionID,int ActiveNodeID) 
		{ 
			string ReturnStr = ""; 
			int ReturnID = 0; 
			int NewMsgFlag = 0; 
			Database data = new Database(); 
			SqlParameter[] prams = { 
									   data.MakeInParam("@username",    SqlDbType.VarChar, 100, Username), 
									   data.MakeInParam("@sessionid",   SqlDbType.VarChar, 100, SessionID), 
									   data.MakeInParam("@ActiveNodeID",   SqlDbType.Int, 4, ActiveNodeID), 
									   data.MakeOutParam("@ReturnID", SqlDbType.Int, 4), 
									   data.MakeOutParam("@NewMsgFlag", SqlDbType.Int, 4) 
			}; 
			try  
			{ 
				data.RunProc("SP_SMS_CheckUpdate",prams); 
				ReturnID =  Int32.Parse(prams[3].Value.ToString());  
				if(ReturnID==-1) 
					NewMsgFlag = 0; 
				else 
                    NewMsgFlag =  Int32.Parse(prams[4].Value.ToString());  
				ReturnStr = ReturnID.ToString()+"|"+NewMsgFlag.ToString(); 
				data = null; 
				return ReturnStr; 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("更新活动记录及检测未活动人员出错!",ex); 
			} 
			finally 
			{ 
				data	   = null; 
			} 
		} 
 
		///  
		/// 得到所有在线人员 
		///  
		///  
		public SqlDataReader GetOnlinePerson() 
		{ 
			Database data = new Database(); 
			SqlDataReader dr = null; 
			try  
			{ 
				data.RunProc("sp_SMS_GetOnlinePerson",out dr); 
				return dr; 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("读取在线人员数据出错!",ex); 
			} 
			finally 
			{ 
				data	   = null; 
				dr		   = null; 
			} 
		} 
 
		///  
		/// 得到聊天记录 
		///  
		///  
		public SqlDataReader GetHistory(string Receiver,string Sender) 
		{ 
			Database data = new Database(); 
			SqlDataReader dr = null; 
			SqlParameter[] prams = { 
									   data.MakeInParam("@Sender",    SqlDbType.VarChar, 50, Sender), 
									   data.MakeInParam("@Receiver",   SqlDbType.VarChar, 50, Receiver) 
			}; 
			try  
			{ 
				data.RunProc("SP_SMS_GetHistory",prams,out dr); 
				return dr; 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("得到聊天记录出错!",ex); 
			} 
			finally 
			{ 
				data	   = null; 
				dr		   = null; 
			} 
		} 
 
		///  
		/// 得到我所接收的所有短讯 
		///  
		///  
		public SqlDataReader GetMyReceive(string Username) 
		{ 
			Database data = new Database(); 
			SqlDataReader dr = null; 
			SqlParameter[] prams = { 
									   data.MakeInParam("@Username",    SqlDbType.VarChar, 50, Username) 
								    }; 
			try  
			{ 
				data.RunProc("SP_SMS_GetMyAllMsg",prams,out dr); 
				return dr; 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("得到我所接收的所有短讯出错!",ex); 
			} 
			finally 
			{ 
				data	   = null; 
				dr		   = null; 
			} 
		} 
 
		///  
		/// 得到我所发送的所有短讯 
		///  
		///  
		public SqlDataReader GetMySent(string Username) 
		{ 
			Database data = new Database(); 
			SqlDataReader dr = null; 
			SqlParameter[] prams = { 
									   data.MakeInParam("@Username",    SqlDbType.VarChar, 50, Username) 
								   }; 
			try  
			{ 
				data.RunProc("SP_SMS_GetMySent",prams,out dr); 
				return dr; 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("得到我所接收的所有短讯出错!",ex); 
			} 
			finally 
			{ 
				data	   = null; 
				dr		   = null; 
			} 
 
		} 
		///  
		/// 得到某个人的最新一条消息 
		///  
		///  
		public SqlDataReader GetNewLocalMsg(string Username) 
		{ 
			Database data = new Database(); 
			SqlDataReader dr = null; 
			SqlParameter[] prams = { 
									   data.MakeInParam("@username",    SqlDbType.VarChar, 50, Username) 
									}; 
			try  
			{ 
				data.RunProc("sp_SMS_GetNewMsg",prams,out dr); 
				return dr; 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("得到某个人的最新一条消息出错!",ex); 
			} 
			finally 
			{ 
				data	   = null; 
				dr		   = null; 
			} 
		} 
 
 
		///  
		/// 发送站内短消息 
		///  
		/// 发送者用户名 
		/// 接受者用户名,可用逗号相隔多人 
		/// 短消息内容 
		/// 短消息发送时间 
		/// 无返回值 
		public void SendLocalMsg(string sender,string receivers,string msg,DateTime sendtime) 
		{ 
			string newmsgid = "0"; 
			Database data = new Database(); 
			 
			#region 存消息至数据库,返回MsgID 
			SqlParameter[] prams1 = { 
									   data.MakeInParam("@sender",    SqlDbType.VarChar, 50, sender), 
									   data.MakeInParam("@content",   SqlDbType.VarChar, 255, msg), 
									   data.MakeInParam("@type",   SqlDbType.Int, 1, 1),	 
									   data.MakeInParam("@sendtime",   SqlDbType.DateTime, 30, sendtime), 
									   data.MakeOutParam("@newmsgid", SqlDbType.Int, 4)									 
								   }; 
			try  
			{ 
				data.RunProc("SP_SMS_SendLocalMsg",prams1); 
				newmsgid =  prams1[4].Value.ToString();    
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("存消息至数据库出错!",ex); 
			} 
			#endregion 
 
			#region 将消息与接收者关联 
			SqlParameter[] prams2 = { 
									   data.MakeInParam("@MsgID",    SqlDbType.Int, 4, Int32.Parse(newmsgid)), 
									   data.MakeInParam("@Receivers",SqlDbType.VarChar, 5000, receivers), 
									   data.MakeInParam("@MobileNo",   SqlDbType.VarChar, 4, ""),	 
									  data.MakeInParam("@type",   SqlDbType.Int, 1, 1) 
								   }; 
			try  
			{ 
				data.RunProc("SP_SMS_SetMsgReceiver",prams2); 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("将消息与接收者关联出错!",ex); 
			} 
			#endregion 
 
 
		} 
 
	 
		///  
		///  发站用户站内手机短消息 
		///  
		/// 发送者用户名 
		/// 接受者手机号码,可用逗号相隔多人 
		/// 短消息内容 
		/// 短消息发送时间 
		/// 短消息重复发送次数 
		/// 重复发送周期,以分钟为单位 
		/// 返回执行代码 1 正常 2 错误 
		public static int SaveMobileMsgToBuffer(string Sender,string RecipientMobileNo,string Content,DateTime Sendtime,int RepeatTimes,int RepeatPeriod) 
		{ 
			Database data = new Database(); 
			#region 存消息至数据库,返回MsgID 
			SqlParameter[] prams1 = { 
										data.MakeInParam("@Sender",    SqlDbType.VarChar, 50, Sender), 
										data.MakeInParam("@RecipientMobileNo",   SqlDbType.VarChar, 255, RecipientMobileNo), 
										data.MakeInParam("@Content",   SqlDbType.VarChar, 255, Content),	 
										data.MakeInParam("@Sendtime",   SqlDbType.DateTime, 30, Sendtime), 
										data.MakeInParam("@RepeatTimes", SqlDbType.Int, 4,RepeatTimes), 
										data.MakeInParam("@RepeatPeriod", SqlDbType.Int, 4,RepeatPeriod)						 
									}; 
			try  
			{ 
				data.RunProc("SP_SMS_SaveMobileMsgToBuffer",prams1); 
				return 1; 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("存消息至数据库出错!",ex); 
			} 
			#endregion 
 
		} 
 
 
 
		 
		///  
		/// 发送短消息 
		///  
		/// 发送者用户名 
		/// 接受者用户名,可用逗号相隔多人 
		/// 短消息内容 
		/// 短消息类型 1为站内消息 2为手机短讯 3为站外手机(取mobileno) 
		/// 短消息发送时间 
		/// 如果是站外用户时用。表示站外用户的手机号 
		/// 如果是手机短讯时用。表示此条讯息的重复发送次数 
		/// 如果是手机短讯时用。表示此条讯息的重复发送时间间隔(以分钟为单位) 
		/// 返回操作结束代码 
		public int SendMsg(string sender,string recipients,string msg,int type,DateTime sendtime,string mobileno,int repeattimes,int repeatperiod) 
		{ 
			int RtnCode = 1; 
			//去除最后一位的逗号,并替换全角至半角 
			if(recipients.EndsWith(",")) recipients = recipients.Substring(0,recipients.Length-1); 
			recipients = recipients.Replace(",",","); 
			 
			switch (type) 
			{ 
				case 1://站内用户的站内短讯 
					SendLocalMsg(sender,recipients,msg,sendtime); 
					return RtnCode; 
					 
				case 2: //站内用户的手机短讯 
					string MobileNoStr = GetMobileNoByUsername(recipients); 
					RtnCode =  SaveMobileMsgToBuffer(sender,MobileNoStr,msg,sendtime,repeattimes,repeatperiod); 
					return RtnCode; 
					 
				case 3: //站外用户的手机短讯 
					RtnCode = SaveMobileMsgToBuffer(sender,mobileno,msg,sendtime,repeattimes,repeatperiod); 
					return RtnCode; 
					 
				default: 
					return RtnCode; 
					 
			} 
			 
			 
			 
		} 
 
		#region 根据用户名字符串获取手机号码字符串 
		///  
		/// 根据用户名字符串获取手机号码字符串 
		/// 用户名字符串,用逗号相隔 
		/// 返回手机字符串 
		///  
		public string GetMobileNoByUsername(string Username) 
		{ 
			string MobileNoStr = ""; 
			Database data = new Database(); 
			SqlParameter[] prams = { 
									   data.MakeInParam("@UserNameStr",    SqlDbType.VarChar, 3000, Username), 
									   data.MakeOutParam("@MobileNoStr", SqlDbType.VarChar, 3000) 
			}; 
			try  
			{ 
				data.RunProc("SP_SMS_GetMobileNoByUsername",prams); 
				MobileNoStr =  prams[1].Value.ToString();    
				return MobileNoStr; 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				throw new Exception("根据用户名字符串获取手机号码字符串出错!",ex); 
			} 
			finally 
			{ 
				data	   = null; 
			} 
		} 
		#endregion 
 
 
		 
		///  
		/// 删除一组短讯 
		///  
		/// 消息ID的连接字符串,用逗号相隔开 
		public bool MsgDelete(string MsgIDS) 
		{ 
			Database data = new Database(); 
			SqlParameter[] prams = { 
									   data.MakeInParam("@MsgIDS",   SqlDbType.VarChar,4000, MsgIDS) 
								   }; 
			try 
			{ 
				data.RunProc("SP_SMS_DelMsg",prams); 
				data = null; 
				return true; 
			} 
			catch(Exception ex) 
			{ 
				Error.Log(ex.ToString()); 
				return false; 
			} 
 
		} 
		 
 
	} 
}