Пример #1
0
        private void UpdateSendMessageRetryHistory(int sendMessageHistoryId)
        {
            var sendMessageRetryHistoryRepository = this.unitOfWork.Repository <SendMessageRetryHistory>();

            Infobip_SendMessageResult sendMessageResult = this.unitOfWork.Repository <Infobip_SendMessageResult>().Get(p => p.SourceTable == SourceTable.SendMessageHistory && p.SourceTableId == sendMessageHistoryId);

            if (sendMessageResult == null)
            {
                throw new Exception(string.Format("InfobipSmsProvider(smsProviderType = {0}),無法取得 Infobip_SendMessageResult(SendMessageHistoryId:{1})", smsProviderType.ToString(), sendMessageHistoryId));
            }

            List <Infobip_SendMessageResultItem> SendMessageResults = sendMessageResult.SendMessageResults.ToList();

            foreach (var SendMessageResult in SendMessageResults)
            {
                Infobip_DeliveryReport DeliveryReport = SendMessageResult.DeliveryReport;
                if (DeliveryReport == null)
                {
                    continue;                         // 如果尚未取得派送報表,就忽略
                }
                SendMessageRetryHistory entity = this.unitOfWork.Repository <SendMessageRetryHistory>().Get(p => p.MessageId == SendMessageResult.MessageId);
                if (entity == null)
                {
                    continue;                 // 如果找不到對應 MessageId,就忽略
                }
                entity.SentDate       = DeliveryReport.SentDate;
                entity.DoneDate       = DeliveryReport.DoneDate;
                entity.DeliveryStatus = DeliveryReport.Status;

                entity.DeliveryStatusString = entity.DeliveryStatus.ToString();
                entity.Price = DeliveryReport.Price ?? (decimal)0.0;
                entity.DeliveryReportCreatedTime = DeliveryReport.CreatedTime;
                entity.Delivered = IsDelivered(entity.DeliveryStatus);

                sendMessageRetryHistoryRepository.Update(entity);
            }
        }
Пример #2
0
        private void UpdateSendMessageRetryHistory(int sendMessageHistoryId)
        {
            var sendMessageHistoryRepository      = this.unitOfWork.Repository <SendMessageHistory>();
            var sendMessageRetryHistoryRepository = this.unitOfWork.Repository <SendMessageRetryHistory>();

            var sendMessageHistory = sendMessageHistoryRepository.GetById(sendMessageHistoryId);

            Every8d_SendMessageResult sendMessageResult = this.unitOfWork.Repository <Every8d_SendMessageResult>().Get(p => p.SourceTable == SourceTable.SendMessageHistory && p.SourceTableId == sendMessageHistoryId);
            // if (SendMessageResult == null) return; 不應該為 null

            string RequestId = sendMessageResult.BATCH_ID;

            string ProviderName = this.Name;

            DateTime SendMessageResultCreatedTime = sendMessageResult.CreatedTime;

            List <Every8d_DeliveryReport> DeliveryReports = sendMessageResult.DeliveryReports.ToList();

            foreach (var DeliveryReport in DeliveryReports)
            {
                string DestinationName = DeliveryReport.NAME;

                var entity = new SendMessageRetryHistory();

                ////////////////////////////////////////
                // 01 ~ 05

                entity.SendMessageHistoryId = sendMessageHistoryId;

                entity.RequestId = RequestId;

                ////////////////////////////////////////
                // 11 ~ 15

                entity.ProviderName        = ProviderName;
                entity.MessageId           = null;
                entity.MessageStatus       = MessageStatus.Unknown;
                entity.MessageStatusString = entity.MessageStatus.ToString();
                entity.SenderAddress       = sendMessageHistory.SenderAddress;

                ////////////////////////////////////////
                // 16 ~ 20

                entity.DestinationAddress           = sendMessageHistory.DestinationAddress;
                entity.SendMessageResultCreatedTime = SendMessageResultCreatedTime;

                // TODO: 驗證 Every8d 回傳發送時間轉成 UTC 時間是否正確
                //entity.SentDate = Converter.ToDateTime(DeliveryReport.SENT_TIME, Converter.Every8d_SentTime).Value; // 2010/03/23 12:05:29
                //entity.DoneDate = Converter.ToDateTime(DeliveryReport.SENT_TIME, Converter.Every8d_SentTime).Value; // 2010/03/23 12:05:29,簡訊供應商沒有提供此資訊,因此設定與SentDate一致
                entity.SentDate = Converter.ToDateTime(DeliveryReport.SENT_TIME, Converter.Every8d_SentTime).Value.ToUniversalTime(); // 2010/03/23 12:05:29
                entity.DoneDate = Converter.ToDateTime(DeliveryReport.SENT_TIME, Converter.Every8d_SentTime).Value.ToUniversalTime(); // 2010/03/23 12:05:29,簡訊供應商沒有提供此資訊,因此設定與SentDate一致

                entity.DeliveryStatus = (DeliveryReportStatus)Convert.ToInt32(DeliveryReport.STATUS);

                ////////////////////////////////////////
                // 21 ~ 25

                entity.DeliveryStatusString = entity.DeliveryStatus.ToString();
                entity.Price = Convert.ToDecimal(DeliveryReport.COST);
                entity.DeliveryReportCreatedTime = DeliveryReport.CreatedTime;
                entity.Delivered = IsDelivered(entity.DeliveryStatus);

                ////////////////////////////////////////
                // 26
                entity.CreatedTime = DateTime.UtcNow;

                entity = sendMessageRetryHistoryRepository.Insert(entity);

                sendMessageHistory.RetryTotalTimes        += 1;
                sendMessageHistory.SendMessageRetryHistory = entity;
                sendMessageHistoryRepository.Update(sendMessageHistory);
            }
        }
Пример #3
0
        private void CreateSendMessageRetryHistory(SendMessageHistory sendMessageHistory)
        {
            int sendMessageHistoryId = sendMessageHistory.Id;

            var sendMessageRetryHistoryRepository = this.unitOfWork.Repository <SendMessageRetryHistory>();
            var sendMessageHistoryRepository      = this.unitOfWork.Repository <SendMessageHistory>();

            Infobip_SendMessageResult sendMessageResult = this.unitOfWork.Repository <Infobip_SendMessageResult>().Get(p => p.SourceTable == SourceTable.SendMessageHistory && p.SourceTableId == sendMessageHistoryId);

            if (sendMessageResult == null)
            {
                throw new Exception(string.Format("InfobipSmsProvider(smsProviderType = {0}),無法取得 Infobip_SendMessageResult(SendMessageHistoryId:{1})", smsProviderType.ToString(), sendMessageHistoryId));
            }

            string RequestId = sendMessageResult.ClientCorrelator;

            string ProviderName = this.Name;

            DateTime SendMessageResultCreatedTime = sendMessageResult.CreatedTime;

            List <Infobip_SendMessageResultItem> SendMessageResults = sendMessageResult.SendMessageResults.ToList();

            SendMessageRetryHistory entity = null;

            foreach (var SendMessageResult in SendMessageResults)
            {
                string DestinationName = SendMessageResult.DestinationName;

                entity = new SendMessageRetryHistory();

                ////////////////////////////////////////
                // 01 ~ 05

                entity.SendMessageHistoryId = sendMessageHistoryId;
                entity.RequestId            = RequestId;

                ////////////////////////////////////////
                // 11 ~ 15

                entity.ProviderName        = ProviderName;
                entity.MessageId           = SendMessageResult.MessageId;
                entity.MessageStatus       = (EFunTech.Sms.Schema.MessageStatus)((int)SendMessageResult.MessageStatus);
                entity.MessageStatusString = entity.MessageStatus.ToString();
                entity.SenderAddress       = SendMessageResult.SenderAddress;

                ////////////////////////////////////////
                // 16 ~ 20

                // 20151106 Norman, Infobip 給的手機門號是 E164格式,但是沒有加上 "+",使用 【MobileUtil.GetE164PhoneNumber】會導致誤判
                var destinationAddress = SendMessageResult.DestinationAddress;
                if (!destinationAddress.StartsWith("+", StringComparison.OrdinalIgnoreCase))
                {
                    destinationAddress = "+" + destinationAddress;
                }

                entity.DestinationAddress           = MobileUtil.GetE164PhoneNumber(destinationAddress);
                entity.SendMessageResultCreatedTime = SendMessageResultCreatedTime;
                entity.SentDate       = null;
                entity.DoneDate       = null;
                entity.DeliveryStatus = DeliveryReportStatus.MessageAccepted;

                ////////////////////////////////////////
                // 21 ~ 25

                entity.DeliveryStatusString = entity.DeliveryStatus.ToString();
                entity.Price = (decimal)0.0; // 尚未傳送完成
                entity.DeliveryReportCreatedTime = null;
                entity.Delivered = IsDelivered(entity.DeliveryStatus);

                ////////////////////////////////////////
                // 26
                entity.CreatedTime = DateTime.UtcNow;

                entity.Email = sendMessageHistory.Email;

                entity = sendMessageRetryHistoryRepository.Insert(entity);
            }

            // (6) 更新 SendMessageHistory
            if (entity != null)
            {
                sendMessageHistory.RetryTotalTimes        += 1;
                sendMessageHistory.SendMessageRetryHistory = entity;
                sendMessageHistoryRepository.Update(sendMessageHistory);
            }
        }