private void SendOneMessage() { SendMessagesEntity aMessageToSend = SendMessagesBll.GetOneToSend(); if (aMessageToSend == null) { return; } //发送 bool ans = SendSMS(aMessageToSend); aMessageToSend.TriedCount++; aMessageToSend.LastestSendTime = DateTime.Now; if (!ans) { if (aMessageToSend.TriedCount >= TryTimes) { aMessageToSend.SendStatusEnum = (int)SendStatusEnum.FailSendedToBeCallback; SendFailedHandler(aMessageToSend); } else { aMessageToSend.SendStatusEnum = (int)SendStatusEnum.ToBeSend; } } else { aMessageToSend.SendStatusEnum = (int)SendStatusEnum.SuccessSended; } SendMessagesBll.Update(aMessageToSend); }
public bool SendSMS(SendMessagesEntity messageToSend) { //判断短信的字数是否符合规范 int theLength = messageToSend.Content.Length; if (theLength == 0 || theLength > CutCount * 70) { return(false); } //计算需要发送的短信条数 int theCount = theLength / 70; int theYuShu = theLength % 70; int theAdditionalCount = theYuShu == 0 ? 0 : 1; int realCount = theCount + theAdditionalCount; //切割短信并发送,其中有任意一小条短信发送不成功将视为整个短信发送不成功 //短信片,将一条大短信切割成小短信置于此 var sendPieceMessages = new List <SendMessagesEntity>(); for (int index = 0; index < realCount; index++) { var sendMessagesEntity = new SendMessagesEntity { SystemSmsId = messageToSend.SystemSmsId, SendToNumber = messageToSend.SendToNumber, Content = "" }; //最后一条与之前的短信应该分别处理 if (index < realCount - 1) { sendMessagesEntity.Content = messageToSend.Content.Substring(70 * index, 70); sendPieceMessages.Add(sendMessagesEntity); } else { sendMessagesEntity.Content = messageToSend.Content.Substring(70 * index); sendPieceMessages.Add(sendMessagesEntity); } } foreach (SendMessagesEntity aStandMessage in sendPieceMessages) { if (!SendStandardSms(aStandMessage)) { return(false); } //应为多条短信留有间隔发送的缓冲,否则可能发送不成功 if (sendPieceMessages.Count > 1) { Thread.Sleep(2000); } } return(true); }
public static bool SendAMessage(SendMessagesEntity aMessage) { if (!TheSerialPort.GetInstance.PortIsOpen()) { throw new ApplicationException("端口未打开!"); } if (SmsMachineBll.GetInstance.WorkNow) { throw new ApplicationException("短信收发线程工作中,无法向端口发送数据"); } return(SmsMachineBll.GetInstance.SendSMS(aMessage)); }
public static void Update(SendMessagesEntity entity) { using (var dataOperator = new DataOperator("app", "SMS")) { dataOperator.CommandText = @" UPDATE [dbo].[T_SendMessages] SET [SendStatusEnum] = @SendStatusEnum, LastestSendTime=@LastestSendTime, TriedCount=@TriedCount WHERE PKID=@PKID GO "; dataOperator.SetParameter("@SendStatusEnum", entity.SendStatusEnum, SqlDbType.Int); dataOperator.SetParameter("@LastestSendTime", entity.LastestSendTime, SqlDbType.DateTime); dataOperator.SetParameter("@TriedCount", entity.TriedCount, SqlDbType.Int); dataOperator.ExecuteNonQuery(); } }
/// <summary> /// 发送标准的字符不超过70的短信,若超过70,则无法发送成功 /// </summary> private bool SendStandardSms(SendMessagesEntity standradMessageToSend) { try { var thePdu = new PduEncoding(); string decodedSMS = thePdu.smsDecodedsms(standradMessageToSend.SystemNumber, standradMessageToSend.SendToNumber, standradMessageToSend.Content); //发送第一步 字节数 _theSerialPort.SendString(String.Format("AT+CMGS={0}\r", thePdu.nLength)); _theSerialPort.ReadTo("> ", 10000); //发送第二步 内容 _theSerialPort.SendString(String.Format("{0}\x01a", decodedSMS)); _theSerialPort.ReadTo("+CMGS:", 12000); _theSerialPort.ReadTo("OK", 2000); return(true); } catch { return(false); } }
public static void Insert(SendMessagesEntity entity) { using (var dataOperator = new DataOperator("app", "SMS")) { dataOperator.CommandText = @" INSERT INTO [dbo].[T_SendMessages] ([SendStatusEnum] ,[SystemSmsId] ,[SendToNumber] ,[SystemNumber] ,[Content] ,[TriedCount] ,[LastestSendTime] ,[HrmisId]) VALUES (@SendStatusEnum ,@SystemSmsId ,@SendToNumber ,@SystemNumber ,@Content ,@TriedCount ,@LastestSendTime ,@HrmisId) GO SELECT @@IDENTITY "; dataOperator.SetParameter("@SendStatusEnum", entity.SendStatusEnum, SqlDbType.Int); dataOperator.SetParameter("@SystemSmsId", entity.SystemSmsId, SqlDbType.Int); dataOperator.SetParameter("@SendToNumber", entity.SendToNumber, SqlDbType.NVarChar, 50); dataOperator.SetParameter("@SystemNumber", entity.SystemNumber, SqlDbType.NVarChar, 50); dataOperator.SetParameter("@Content", entity.Content, SqlDbType.NVarChar, 2000); dataOperator.SetParameter("@LastestSendTime", entity.LastestSendTime, SqlDbType.DateTime); dataOperator.SetParameter("@TriedCount", entity.TriedCount, SqlDbType.Int); dataOperator.SetParameter("@HrmisId", entity.HrmisId, SqlDbType.Int); object obj = dataOperator.ExecuteScalar(); int returnValue; int.TryParse(obj.ToString(), out returnValue); entity.PKID = returnValue; } }
public static void Insert(SendMessagesEntity entity) { SendMessagesDA.Insert(entity); }
public static void Update(SendMessagesEntity entity) { SendMessagesDA.Update(entity); }
private void SendFailedHandler(SendMessagesEntity aMessageToSend) { Log.Write(string.Format("发短信失败:发送给的号码是:{0},内容是{1}", aMessageToSend.SendToNumber, aMessageToSend.Content)); }