using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; using System.Threading; using QMAPP.FJC.Entity.Message; using QMAPP.FJC.DAL.Message; using QMFrameWork.Data; using QMFrameWork.Log; using System.IO.Ports; namespace MsgSendService { public class SendClass { public void SendMsg() { //获取间隔时间 int internalValue = Convert.ToInt32(ConfigurationManager.AppSettings["InternalValue"]); string comport = ConfigurationManager.AppSettings["Comport"]; //短信息过期时间(分钟) 0:不过期 int MessageExpire = int.Parse("0" + ConfigurationManager.AppSettings["MessageExpire"]); //通话时长 int ringtime = Convert.ToInt32(ConfigurationManager.AppSettings["Ringtime"]); while (true) { //休眠时间 Thread.Sleep(internalValue); MessageDAL messageDal = new MessageDAL(); //获取待发信息和发送失败信息 List outBoxList = new List(); outBoxList = messageDal.GetOutBoxList(); List badOutBoxList = new List(); badOutBoxList = messageDal.GetBadOutBoxList(); //需要拨打电话的电话号码 List phonenumber = new List(); #region 拨号 List callList = new List(); //foreach (var outbox in outBoxList) //{ // if (MessageExpire == 0 || (DateTime.Now - outbox.SENDTIME).TotalMinutes < MessageExpire) // { // callList.Add(outbox.MBNO); // } //} //if (callList.Count > 0) //{ // try // { // using (ModemLib.Voice.PhoneHelper phonehelper = new ModemLib.Voice.PhoneHelper(comport, 9600, Parity.None, 8, StopBits.One)) // { // foreach (var no in callList) // { // var ring = phonehelper.DialUp(no); // Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + no + " call result:" + ring.ToString()); // WriteLog.Write(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + no + " call result:" + ring.ToString()); // if (ring) //是否拨通 // { // System.Threading.Thread.Sleep(ringtime);//等待响铃2秒后 // phonehelper.HangUp();//挂断 // } // } // } // } // catch (Exception ex) // { // WriteLog.Write(ex.Message); // } //} #endregion #region 待发送信息 foreach (var outbox in outBoxList) { //发送短信 bool sendFlag = false; bool expired = false; //如果短信息发送时间未失效 if (MessageExpire == 0 || (DateTime.Now - outbox.SENDTIME).TotalMinutes < MessageExpire) { using (ModemLib.SMS.SMSHelper sms = new ModemLib.SMS.SMSHelper(comport)) { sendFlag = sms.Send(outbox.MBNO, outbox.MSG); } Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + outbox.MBNO + " send message:" + sendFlag.ToString()); WriteLog.Write(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + outbox.MBNO + " send message:" + sendFlag.ToString()); } else { expired = true; } if (sendFlag || expired) { if (sendFlag) { phonenumber.Add(outbox.MBNO); } SendOutBox sendOutBox = new SendOutBox(); #region //sendOutBox.ID = outbox.ID; sendOutBox.USERNAME = outbox.USERNAME; sendOutBox.MBNO = outbox.MBNO; sendOutBox.MSG = outbox.MSG; sendOutBox.SENDTIME = outbox.SENDTIME; sendOutBox.COMPORT = outbox.COMPORT; sendOutBox.TOTAL = sendFlag ? 1 : 2;//1发送成功 2短信息过期 #endregion using (IDataSession session = AppDataFactory.CreateMainSession()) { session.OpenTs(); messageDal.BaseSession = session; //发送成功之后 //删除发件箱信息 messageDal.DeleteOutBox(outbox); //插入已发送信息 messageDal.InsertSendOutBox(sendOutBox); session.CommitTs(); } } else { BadOutBox badOutBox = new BadOutBox(); #region //badOutBox.ID = outbox.ID; badOutBox.USERNAME = outbox.USERNAME; badOutBox.MBNO = outbox.MBNO; badOutBox.MSG = outbox.MSG; badOutBox.SENDTIME = outbox.SENDTIME; badOutBox.COMPORT = outbox.COMPORT; badOutBox.BADWHY = ""; #endregion using (IDataSession session = AppDataFactory.CreateMainSession()) { session.OpenTs(); messageDal.BaseSession = session; //发送成功之后 //删除发件箱信息 messageDal.DeleteOutBox(outbox); //插入已发送信息 messageDal.InsertBadOutBox(badOutBox); session.CommitTs(); } } } #endregion #region 发送失败信息 foreach (var badoutbox in badOutBoxList) { //发送短信 bool sendFlag = false; bool expired = false; //如果短信息发送时间未失效 if (MessageExpire == 0 || (DateTime.Now - badoutbox.SENDTIME).TotalMinutes < MessageExpire) { using (ModemLib.SMS.SMSHelper sms = new ModemLib.SMS.SMSHelper(comport)) { sendFlag = sms.Send(badoutbox.MBNO, badoutbox.MSG); } Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + badoutbox.MBNO + " resend message:" + sendFlag.ToString()); WriteLog.Write(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + badoutbox.MBNO + " resend message:" + sendFlag.ToString()); } else { expired = true; } if (sendFlag || expired) { if (sendFlag) { phonenumber.Add(badoutbox.MBNO); } SendOutBox sendOutBox = new SendOutBox(); #region //sendOutBox.ID = badoutbox.ID; sendOutBox.USERNAME = badoutbox.USERNAME; sendOutBox.MBNO = badoutbox.MBNO; sendOutBox.MSG = badoutbox.MSG; sendOutBox.SENDTIME = badoutbox.SENDTIME; sendOutBox.COMPORT = badoutbox.COMPORT; sendOutBox.TOTAL = sendFlag ? 1 : 2;//1发送成功 2短信息过期; #endregion using (IDataSession session = AppDataFactory.CreateMainSession()) { session.OpenTs(); messageDal.BaseSession = session; //发送成功之后 //删除发件箱信息 messageDal.DeleteBadOutBox(badoutbox); //插入已发送信息 messageDal.InsertSendOutBox(sendOutBox); session.CommitTs(); } } } #endregion } } public void Test() { MessageDAL messageDal = new MessageDAL(); //获取待发信息和发送失败信息 List outBoxList = new List(); outBoxList = messageDal.GetOutBoxList(); List badOutBoxList = new List(); badOutBoxList = messageDal.GetBadOutBoxList(); #region 待发送信息 foreach (var outbox in outBoxList) { //发送短信 bool sendFlag = false; //using (ModemLib.SMS.SMSHelper sms = new ModemLib.SMS.SMSHelper(comport)) //{ // sendFlag = sms.Send(outbox.MBNO, outbox.MSG); //} if (sendFlag) { SendOutBox sendOutBox = new SendOutBox(); #region //sendOutBox.ID = outbox.ID;// sendOutBox.USERNAME = outbox.USERNAME; sendOutBox.MBNO = outbox.MBNO; sendOutBox.MSG = outbox.MSG; sendOutBox.SENDTIME = outbox.SENDTIME; sendOutBox.COMPORT = outbox.COMPORT; sendOutBox.TOTAL = 1; #endregion using (IDataSession session = AppDataFactory.CreateMainSession()) { session.OpenTs(); messageDal.BaseSession = session; //发送成功之后 //删除发件箱信息 messageDal.DeleteOutBox(outbox); //插入已发送信息 messageDal.InsertSendOutBox(sendOutBox); session.CommitTs(); } } else { BadOutBox badOutBox = new BadOutBox(); #region //badOutBox.ID = outbox.ID; badOutBox.USERNAME = outbox.USERNAME; badOutBox.MBNO = outbox.MBNO; badOutBox.MSG = outbox.MSG; badOutBox.SENDTIME = outbox.SENDTIME; badOutBox.COMPORT = outbox.COMPORT; badOutBox.BADWHY = ""; #endregion using (IDataSession session = AppDataFactory.CreateMainSession()) { session.OpenTs(); messageDal.BaseSession = session; //发送成功之后 //删除发件箱信息 messageDal.DeleteOutBox(outbox); //插入已发送信息 messageDal.InsertBadOutBox(badOutBox); session.CommitTs(); } } } #endregion #region 发送失败信息 foreach (var badoutbox in badOutBoxList) { //发送短信 bool sendFlag = true; //using (ModemLib.SMS.SMSHelper sms = new ModemLib.SMS.SMSHelper(comport)) //{ // sendFlag = sms.Send(badoutbox.MBNO, badoutbox.MSG); //} if (sendFlag) { SendOutBox sendOutBox = new SendOutBox(); #region //sendOutBox.ID = badoutbox.ID; sendOutBox.USERNAME = badoutbox.USERNAME; sendOutBox.MBNO = badoutbox.MBNO; sendOutBox.MSG = badoutbox.MSG; sendOutBox.SENDTIME = badoutbox.SENDTIME; sendOutBox.COMPORT = badoutbox.COMPORT; sendOutBox.TOTAL = 1; #endregion using (IDataSession session = AppDataFactory.CreateMainSession()) { session.OpenTs(); messageDal.BaseSession = session; //发送成功之后 //删除发件箱信息 messageDal.DeleteBadOutBox(badoutbox); //插入已发送信息 messageDal.InsertSendOutBox(sendOutBox); session.CommitTs(); } } } #endregion } } }