public DeliveryReport(String smsUniqueId, DeliveryReportStatus status, DeliveryReportError error) { this.SmsUniqueId = smsUniqueId; this.SmsStatus = status; this.Error = error; }
/// <summary> /// 判斷傳送簡訊是否成功 /// </summary> private bool IsDelivered(DeliveryReportStatus Status) { return(Status == DeliveryReportStatus.Sent); }
/// <summary> /// 判斷傳送簡訊是否成功 /// </summary> private bool IsDelivered(DeliveryReportStatus Status) { return(Status == DeliveryReportStatus.DeliveredToTerminal); }
public DeliveryReport(String smsUniqueId, DeliveryReportStatus status, DeliveryReportError error) { this.SmsUniqueId = smsUniqueId; this.SmsStatus = status; this.Error = error; }
private void UpdateDb_GetDeliveryReport(string requestId, DeliveryReportList deliveryReportList) { if (deliveryReportList.DeliveryReports.Length == 0) { return; } this.logService.Debug("InfobipSmsProvider(smsProviderType = {0}),接收簡訊發送結果(簡訊發送識別碼:{1},發送結果:{2})", smsProviderType.ToString(), requestId, deliveryReportList.ToString()); // (3) 將 DeliveryReportList.DeliveryReports 塞入對應資料表 Infobip_DeliveryReport var sendMessageResultItemRepository = this.unitOfWork.Repository <Infobip_SendMessageResultItem>(); foreach (var deliveryReport in deliveryReportList.DeliveryReports) { /* * System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.Entity.Core.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.Infobip_DeliveryReport_dbo.Infobip_SendMessageResultItem_MessageId". The conflict occurred in database "EFunTechSms", table "dbo.Infobip_SendMessageResultItem", column 'MessageId'. * The statement has been terminated. */ if (!sendMessageResultItemRepository.Any(p => p.MessageId == deliveryReport.MessageId)) { this.logService.Error("取消建立 Infobip_DeliveryReport,因為 MessageId = {0} 不存在 Infobip_SendMessageResultItem", deliveryReport.MessageId); continue; } var entity = new Infobip_DeliveryReport(); entity.RequestId = requestId; entity.MessageId = deliveryReport.MessageId; entity.SentDate = deliveryReport.SentDate.ToUniversalTime(); // 已換轉換成UTC時間 entity.DoneDate = deliveryReport.DoneDate.ToUniversalTime(); // 已換轉換成UTC時間 entity.StatusString = deliveryReport.Status; DeliveryReportStatus Status = DeliveryReportStatus.Unknown; Enum.TryParse <DeliveryReportStatus>(deliveryReport.Status, out Status); entity.Status = Status; entity.Price = deliveryReport.Price; entity.CreatedTime = DateTime.UtcNow; entity = this.unitOfWork.Repository <Infobip_DeliveryReport>().Insert(entity); } Infobip_SendMessageResult infobip_SendMessageResult = this.unitOfWork.Repository <Infobip_SendMessageResult>().Get(p => p.ClientCorrelator == requestId); if (infobip_SendMessageResult == null) { throw new Exception(string.Format("InfobipSmsProvider(smsProviderType = {0}),無法取得 Infobip_SendMessageResult(ClientCorrelator:{1})", smsProviderType.ToString(), requestId)); } // (4) 如果所有派送結果都取回了,就在 DeliveryReportQueue (待查詢簡訊發送結果序列) 刪除對應資料 var deliveryReportQueueRepository = this.unitOfWork.Repository <DeliveryReportQueue>(); var deliveryReportQueue = deliveryReportQueueRepository.Get(p => p.RequestId == requestId && p.ProviderName == this.Name); if (deliveryReportQueue != null) { int SendMessageResultItemCount = infobip_SendMessageResult.SendMessageResults.Count; int DeliveryReportCount = this.unitOfWork.Repository <Infobip_DeliveryReport>().Count(p => p.RequestId == requestId); deliveryReportQueue.SendMessageResultItemCount = SendMessageResultItemCount; deliveryReportQueue.DeliveryReportCount = DeliveryReportCount; deliveryReportQueueRepository.Update(deliveryReportQueue); // 20151111 Norman, 暫時不刪除,用以除錯 //if (DeliveryReportCount >= SendMessageResultItemCount) //{ // deliveryReportQueueRepository.Delete(p => p.RequestId == requestId); //} } // (5) 出大表,SendMessageHistorys SourceTable sourceTable = infobip_SendMessageResult.SourceTable; switch (sourceTable) { case SourceTable.SendMessageQueue: int sendMessageQueueId = infobip_SendMessageResult.SourceTableId; UpdateSendMessageHistory(sendMessageQueueId); break; case SourceTable.SendMessageHistory: int sendMessageHistoryId = infobip_SendMessageResult.SourceTableId; UpdateSendMessageRetryHistory(sendMessageHistoryId); break; } }