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); } }
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); } }
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); } }