SMS.cs
上传用户:xgw_05
上传日期:2009-12-11
资源大小:20208k
文件大小:15k
源码类别:

OA系统

开发平台:

C#

  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. using System.Collections;
  5. using System.Runtime.InteropServices;
  6. namespace UDS.Components
  7. {
  8. /// <summary>
  9. /// SMS 
  10. /// </summary>
  11. public class SMS
  12. {
  13. int CommIndex = 1;
  14. /*
  15. #region 引用组件
  16. [DllImport("../bin/AscendSMS.dll")]
  17. public static extern int OpenComm(int CommIndex);
  18. [DllImport("../bin/AscendSMS.dll")]
  19. public static extern int CloseComm(int CommIndex);
  20. [DllImport("../bin/AscendSMS.dll")]
  21. public static extern int ForceCloseComm(int CommIndex);
  22. [DllImport("../bin/AscendSMS.dll")]
  23. public static extern int SendMsg(int CommIndex,string Msg,string MobileNo,int Msg_Index,bool Chinese);
  24. [DllImport("../bin/AscendSMS.dll")]
  25. public static extern int GetUnSendCount(int CommIndex);
  26. [DllImport("../bin/AscendSMS.dll")]
  27. public static extern bool GetNextSendMsg(int CommIndex, string Msg,bool DeleteAfterRead);
  28. [DllImport("../bin/AscendSMS.dll")]
  29. public static extern bool GetNewMsg(int CommIndex,  string Msg);
  30. #endregion
  31. /// <summary>
  32. /// 发送短消息
  33. /// 返回操作码 0 成功 -2 消息超过长度 -3 手机号码不正确 -4 发送阵列已满 -8 模块未打开 -1 串口未打开
  34. /// </summary>
  35. /// <param name="Msg">短消息内容</param>
  36. /// <param name="MobileNo">目标端手机号码,包括一般号码及特殊号码</param>
  37. /// <param name="MsgIndex">短消息标志位</param>
  38. /// <param name="IsZh">是否中文(中文为True,否则为False)</param>
  39. /// <returns>操作码</returns>
  40. public int SendMobileMsg(string Msg, string MobileNo, int MsgIndex,bool IsZh) 
  41. {
  42. CloseComm(CommIndex);
  43. OpenComm(CommIndex); 
  44. String[] MoA = MobileNo.Split(',');
  45. String[] RtnCodeA = MoA;
  46. for(int i=0;i<MoA.Length;i++)
  47. {
  48. int RtnCode = SendMsg(CommIndex,Msg,MoA[i],MsgIndex,IsZh);
  49. RtnCodeA[i] = RtnCode.ToString();
  50. }
  51. CloseComm(CommIndex);
  52. if(RtnCodeA[0]=="0")
  53. return 0;
  54. else
  55. return -1;
  56. }
  57. */
  58. public SMS()
  59. {
  60. //
  61. // TODO: 
  62. //
  63. }
  64. /// <summary>
  65. /// 得到在线人数
  66. /// </summary>
  67. /// <returns>返回int</returns>
  68. public int GetOnlineCount()
  69. {
  70. Database data = new Database();
  71. SqlDataReader dataReader = null;
  72. try 
  73. {
  74. data.RunProc("SP_SMS_GetOnlineCount",out dataReader);
  75. if(dataReader.Read()) return Int32.Parse(dataReader[0].ToString());
  76. else return 0;
  77. }
  78. catch(Exception ex)
  79. {
  80. Error.Log(ex.ToString());
  81. throw new Exception("读取在线人数出错!",ex);
  82. }
  83. finally
  84. {
  85. data    = null;
  86. dataReader = null;
  87. }
  88. }
  89. /// <summary>
  90. /// 得到新消息总数
  91. /// </summary>
  92. /// <returns>返回int</returns>
  93. public int GetNewMsgCount(string Username)
  94. {
  95. Database data = new Database();
  96. SqlDataReader dataReader = null;
  97. SqlParameter[] prams = {
  98.    data.MakeInParam("@username",    SqlDbType.VarChar, 50, Username)
  99.    };
  100. try 
  101. {
  102. data.RunProc("SP_SMS_GetNewMsgCount",prams,out dataReader);
  103. if(dataReader.Read()) return Int32.Parse(dataReader[0].ToString());
  104. else return 0;
  105. }
  106. catch(Exception ex)
  107. {
  108. Error.Log(ex.ToString());
  109. throw new Exception("得到新消息总数出错!",ex);
  110. }
  111. finally
  112. {
  113. data    = null;
  114. dataReader = null;
  115. }
  116. }
  117. /// <summary>
  118. /// 读消息
  119. /// </summary>
  120. public bool ReadMsg(string MsgIDS,string Username)
  121. {
  122. Database data = new Database();
  123. SqlParameter[] prams = {
  124.    data.MakeInParam("@MsgIDS",    SqlDbType.VarChar, 2000, MsgIDS),
  125.    data.MakeInParam("@Username",    SqlDbType.VarChar, 20, Username),
  126.    };
  127. try 
  128. {
  129. data.RunProc("SP_SMS_ReadMsg",prams);
  130. return true;
  131. }
  132. catch(Exception ex)
  133. {
  134. Error.Log(ex.ToString());
  135. // throw new Exception("读消息出错!",ex);
  136. return false;
  137. }
  138. finally
  139. {
  140. data    = null;
  141. }
  142. }
  143. /// <summary>
  144. /// 更新在线记录表.添加新的在线人员
  145. /// </summary>
  146. public void UpdateOnlineInfo(string Username,string HostAddr,string SessionID)
  147. {
  148. Database data = new Database();
  149. SqlParameter[] prams = {
  150.    data.MakeInParam("@username",    SqlDbType.VarChar, 50, Username),
  151.    data.MakeInParam("@hostaddr",    SqlDbType.VarChar, 50, HostAddr),
  152.    data.MakeInParam("@sessionid",   SqlDbType.VarChar, 50, SessionID)
  153.    };
  154. try 
  155. {
  156. data.RunProc("SP_SMS_UpdateOnlineInfo",prams);
  157. }
  158. catch(Exception ex)
  159. {
  160. Error.Log(ex.ToString());
  161. throw new Exception("更新在线记录表出错!",ex);
  162. }
  163. finally
  164. {
  165. data    = null;
  166. }
  167. }
  168. /// <summary>
  169. /// 更新活动记录及检测未活动人员
  170. /// </summary>
  171. public string CheckUpdate(string Username,string SessionID,int ActiveNodeID)
  172. {
  173. string ReturnStr = "";
  174. int ReturnID = 0;
  175. int NewMsgFlag = 0;
  176. Database data = new Database();
  177. SqlParameter[] prams = {
  178.    data.MakeInParam("@username",    SqlDbType.VarChar, 100, Username),
  179.    data.MakeInParam("@sessionid",   SqlDbType.VarChar, 100, SessionID),
  180.    data.MakeInParam("@ActiveNodeID",   SqlDbType.Int, 4, ActiveNodeID),
  181.    data.MakeOutParam("@ReturnID", SqlDbType.Int, 4),
  182.    data.MakeOutParam("@NewMsgFlag", SqlDbType.Int, 4)
  183. };
  184. try 
  185. {
  186. data.RunProc("SP_SMS_CheckUpdate",prams);
  187. ReturnID =  Int32.Parse(prams[3].Value.ToString()); 
  188. if(ReturnID==-1)
  189. NewMsgFlag = 0;
  190. else
  191.                     NewMsgFlag =  Int32.Parse(prams[4].Value.ToString()); 
  192. ReturnStr = ReturnID.ToString()+"|"+NewMsgFlag.ToString();
  193. data = null;
  194. return ReturnStr;
  195. }
  196. catch(Exception ex)
  197. {
  198. Error.Log(ex.ToString());
  199. throw new Exception("更新活动记录及检测未活动人员出错!",ex);
  200. }
  201. finally
  202. {
  203. data    = null;
  204. }
  205. }
  206. /// <summary>
  207. /// 得到所有在线人员
  208. /// </summary>
  209. /// <returns></returns>
  210. public SqlDataReader GetOnlinePerson()
  211. {
  212. Database data = new Database();
  213. SqlDataReader dr = null;
  214. try 
  215. {
  216. data.RunProc("sp_SMS_GetOnlinePerson",out dr);
  217. return dr;
  218. }
  219. catch(Exception ex)
  220. {
  221. Error.Log(ex.ToString());
  222. throw new Exception("读取在线人员数据出错!",ex);
  223. }
  224. finally
  225. {
  226. data    = null;
  227. dr    = null;
  228. }
  229. }
  230. /// <summary>
  231. /// 得到聊天记录
  232. /// </summary>
  233. /// <returns></returns>
  234. public SqlDataReader GetHistory(string Receiver,string Sender)
  235. {
  236. Database data = new Database();
  237. SqlDataReader dr = null;
  238. SqlParameter[] prams = {
  239.    data.MakeInParam("@Sender",    SqlDbType.VarChar, 50, Sender),
  240.    data.MakeInParam("@Receiver",   SqlDbType.VarChar, 50, Receiver)
  241. };
  242. try 
  243. {
  244. data.RunProc("SP_SMS_GetHistory",prams,out dr);
  245. return dr;
  246. }
  247. catch(Exception ex)
  248. {
  249. Error.Log(ex.ToString());
  250. throw new Exception("得到聊天记录出错!",ex);
  251. }
  252. finally
  253. {
  254. data    = null;
  255. dr    = null;
  256. }
  257. }
  258. /// <summary>
  259. /// 得到我所接收的所有短讯
  260. /// </summary>
  261. /// <returns></returns>
  262. public SqlDataReader GetMyReceive(string Username)
  263. {
  264. Database data = new Database();
  265. SqlDataReader dr = null;
  266. SqlParameter[] prams = {
  267.    data.MakeInParam("@Username",    SqlDbType.VarChar, 50, Username)
  268.     };
  269. try 
  270. {
  271. data.RunProc("SP_SMS_GetMyAllMsg",prams,out dr);
  272. return dr;
  273. }
  274. catch(Exception ex)
  275. {
  276. Error.Log(ex.ToString());
  277. throw new Exception("得到我所接收的所有短讯出错!",ex);
  278. }
  279. finally
  280. {
  281. data    = null;
  282. dr    = null;
  283. }
  284. }
  285. /// <summary>
  286. /// 得到我所发送的所有短讯
  287. /// </summary>
  288. /// <returns></returns>
  289. public SqlDataReader GetMySent(string Username)
  290. {
  291. Database data = new Database();
  292. SqlDataReader dr = null;
  293. SqlParameter[] prams = {
  294.    data.MakeInParam("@Username",    SqlDbType.VarChar, 50, Username)
  295.    };
  296. try 
  297. {
  298. data.RunProc("SP_SMS_GetMySent",prams,out dr);
  299. return dr;
  300. }
  301. catch(Exception ex)
  302. {
  303. Error.Log(ex.ToString());
  304. throw new Exception("得到我所接收的所有短讯出错!",ex);
  305. }
  306. finally
  307. {
  308. data    = null;
  309. dr    = null;
  310. }
  311. }
  312. /// <summary>
  313. /// 得到某个人的最新一条消息
  314. /// </summary>
  315. /// <returns></returns>
  316. public SqlDataReader GetNewLocalMsg(string Username)
  317. {
  318. Database data = new Database();
  319. SqlDataReader dr = null;
  320. SqlParameter[] prams = {
  321.    data.MakeInParam("@username",    SqlDbType.VarChar, 50, Username)
  322. };
  323. try 
  324. {
  325. data.RunProc("sp_SMS_GetNewMsg",prams,out dr);
  326. return dr;
  327. }
  328. catch(Exception ex)
  329. {
  330. Error.Log(ex.ToString());
  331. throw new Exception("得到某个人的最新一条消息出错!",ex);
  332. }
  333. finally
  334. {
  335. data    = null;
  336. dr    = null;
  337. }
  338. }
  339. /// <summary>
  340. /// 发送站内短消息
  341. /// </summary>
  342. /// <param name="sender">发送者用户名</param>
  343. /// <param name="receivers">接受者用户名,可用逗号相隔多人</param>
  344. /// <param name="msg">短消息内容</param>
  345. /// <param name="sendtime">短消息发送时间</param>
  346. /// <returns>无返回值</returns>
  347. public void SendLocalMsg(string sender,string receivers,string msg,DateTime sendtime)
  348. {
  349. string newmsgid = "0";
  350. Database data = new Database();
  351. #region 存消息至数据库,返回MsgID
  352. SqlParameter[] prams1 = {
  353.    data.MakeInParam("@sender",    SqlDbType.VarChar, 50, sender),
  354.    data.MakeInParam("@content",   SqlDbType.VarChar, 255, msg),
  355.    data.MakeInParam("@type",   SqlDbType.Int, 1, 1),
  356.    data.MakeInParam("@sendtime",   SqlDbType.DateTime, 30, sendtime),
  357.    data.MakeOutParam("@newmsgid", SqlDbType.Int, 4)
  358.    };
  359. try 
  360. {
  361. data.RunProc("SP_SMS_SendLocalMsg",prams1);
  362. newmsgid =  prams1[4].Value.ToString();   
  363. }
  364. catch(Exception ex)
  365. {
  366. Error.Log(ex.ToString());
  367. throw new Exception("存消息至数据库出错!",ex);
  368. }
  369. #endregion
  370. #region 将消息与接收者关联
  371. SqlParameter[] prams2 = {
  372.    data.MakeInParam("@MsgID",    SqlDbType.Int, 4, Int32.Parse(newmsgid)),
  373.    data.MakeInParam("@Receivers",SqlDbType.VarChar, 5000, receivers),
  374.    data.MakeInParam("@MobileNo",   SqlDbType.VarChar, 4, ""),
  375.   data.MakeInParam("@type",   SqlDbType.Int, 1, 1)
  376.    };
  377. try 
  378. {
  379. data.RunProc("SP_SMS_SetMsgReceiver",prams2);
  380. }
  381. catch(Exception ex)
  382. {
  383. Error.Log(ex.ToString());
  384. throw new Exception("将消息与接收者关联出错!",ex);
  385. }
  386. #endregion
  387. }
  388. /// <summary>
  389. ///  发站用户站内手机短消息
  390. /// </summary>
  391. /// <param name="Sender">发送者用户名</param>
  392. /// <param name="RecipientMobileNo">接受者手机号码,可用逗号相隔多人</param>
  393. /// <param name="Content">短消息内容</param>
  394. /// <param name="Sendtime">短消息发送时间</param>
  395. /// <param name="RepeatTimes">短消息重复发送次数</param>
  396. /// <param name="RepeatPeriod">重复发送周期,以分钟为单位</param>
  397. /// <returns>返回执行代码 1 正常 2 错误</returns>
  398. public static int SaveMobileMsgToBuffer(string Sender,string RecipientMobileNo,string Content,DateTime Sendtime,int RepeatTimes,int RepeatPeriod)
  399. {
  400. Database data = new Database();
  401. #region 存消息至数据库,返回MsgID
  402. SqlParameter[] prams1 = {
  403. data.MakeInParam("@Sender",    SqlDbType.VarChar, 50, Sender),
  404. data.MakeInParam("@RecipientMobileNo",   SqlDbType.VarChar, 255, RecipientMobileNo),
  405. data.MakeInParam("@Content",   SqlDbType.VarChar, 255, Content),
  406. data.MakeInParam("@Sendtime",   SqlDbType.DateTime, 30, Sendtime),
  407. data.MakeInParam("@RepeatTimes", SqlDbType.Int, 4,RepeatTimes),
  408. data.MakeInParam("@RepeatPeriod", SqlDbType.Int, 4,RepeatPeriod)
  409. };
  410. try 
  411. {
  412. data.RunProc("SP_SMS_SaveMobileMsgToBuffer",prams1);
  413. return 1;
  414. }
  415. catch(Exception ex)
  416. {
  417. Error.Log(ex.ToString());
  418. throw new Exception("存消息至数据库出错!",ex);
  419. }
  420. #endregion
  421. }
  422. /// <summary>
  423. /// 发送短消息
  424. /// </summary>
  425. /// <param name="sender">发送者用户名</param>
  426. /// <param name="receivers">接受者用户名,可用逗号相隔多人</param>
  427. /// <param name="msg">短消息内容</param>
  428. /// <param name="type">短消息类型 1为站内消息 2为手机短讯 3为站外手机(取mobileno)</param>
  429. /// <param name="sendtime">短消息发送时间</param>
  430. /// <param name="mobileno">如果是站外用户时用。表示站外用户的手机号</param>
  431. /// <param name="repeattimes">如果是手机短讯时用。表示此条讯息的重复发送次数</param>
  432. /// <param name="repeattimes">如果是手机短讯时用。表示此条讯息的重复发送时间间隔(以分钟为单位)</param>
  433. /// <returns>返回操作结束代码</returns>
  434. public int SendMsg(string sender,string recipients,string msg,int type,DateTime sendtime,string mobileno,int repeattimes,int repeatperiod)
  435. {
  436. int RtnCode = 1;
  437. //去除最后一位的逗号,并替换全角至半角
  438. if(recipients.EndsWith(",")) recipients = recipients.Substring(0,recipients.Length-1);
  439. recipients = recipients.Replace(",",",");
  440. switch (type)
  441. {
  442. case 1://站内用户的站内短讯
  443. SendLocalMsg(sender,recipients,msg,sendtime);
  444. return RtnCode;
  445. case 2: //站内用户的手机短讯
  446. string MobileNoStr = GetMobileNoByUsername(recipients);
  447. RtnCode =  SaveMobileMsgToBuffer(sender,MobileNoStr,msg,sendtime,repeattimes,repeatperiod);
  448. return RtnCode;
  449. case 3: //站外用户的手机短讯
  450. RtnCode = SaveMobileMsgToBuffer(sender,mobileno,msg,sendtime,repeattimes,repeatperiod);
  451. return RtnCode;
  452. default:
  453. return RtnCode;
  454. }
  455. }
  456. #region 根据用户名字符串获取手机号码字符串
  457. /// <summary>
  458. /// 根据用户名字符串获取手机号码字符串
  459. /// <param name="Username">用户名字符串,用逗号相隔</param>
  460. /// <returns>返回手机字符串</returns>
  461. /// </summary>
  462. public string GetMobileNoByUsername(string Username)
  463. {
  464. string MobileNoStr = "";
  465. Database data = new Database();
  466. SqlParameter[] prams = {
  467.    data.MakeInParam("@UserNameStr",    SqlDbType.VarChar, 3000, Username),
  468.    data.MakeOutParam("@MobileNoStr", SqlDbType.VarChar, 3000)
  469. };
  470. try 
  471. {
  472. data.RunProc("SP_SMS_GetMobileNoByUsername",prams);
  473. MobileNoStr =  prams[1].Value.ToString();   
  474. return MobileNoStr;
  475. }
  476. catch(Exception ex)
  477. {
  478. Error.Log(ex.ToString());
  479. throw new Exception("根据用户名字符串获取手机号码字符串出错!",ex);
  480. }
  481. finally
  482. {
  483. data    = null;
  484. }
  485. }
  486. #endregion
  487. /// <summary>
  488. /// 删除一组短讯
  489. /// </summary>
  490. /// <param name="MsgIDS">消息ID的连接字符串,用逗号相隔开</param>
  491. public bool MsgDelete(string MsgIDS)
  492. {
  493. Database data = new Database();
  494. SqlParameter[] prams = {
  495.    data.MakeInParam("@MsgIDS",   SqlDbType.VarChar,4000, MsgIDS)
  496.    };
  497. try
  498. {
  499. data.RunProc("SP_SMS_DelMsg",prams);
  500. data = null;
  501. return true;
  502. }
  503. catch(Exception ex)
  504. {
  505. Error.Log(ex.ToString());
  506. return false;
  507. }
  508. }
  509. }
  510. }