Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 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();
            }
        }
Beispiel #5
0
 /// <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;
            }
        }
Beispiel #7
0
 public static void Insert(SendMessagesEntity entity)
 {
     SendMessagesDA.Insert(entity);
 }
Beispiel #8
0
 public static void Update(SendMessagesEntity entity)
 {
     SendMessagesDA.Update(entity);
 }
Beispiel #9
0
 private void SendFailedHandler(SendMessagesEntity aMessageToSend)
 {
     Log.Write(string.Format("发短信失败:发送给的号码是:{0},内容是{1}", aMessageToSend.SendToNumber, aMessageToSend.Content));
 }