Beispiel #1
0
 public DeliveryReport(String smsUniqueId, DeliveryReportStatus status, DeliveryReportError error)
 {
     this.SmsUniqueId = smsUniqueId;
     this.SmsStatus   = status;
     this.Error       = error;
 }
Beispiel #2
0
 /// <summary>
 /// 判斷傳送簡訊是否成功
 /// </summary>
 private bool IsDelivered(DeliveryReportStatus Status)
 {
     return(Status == DeliveryReportStatus.Sent);
 }
 /// <summary>
 /// 判斷傳送簡訊是否成功
 /// </summary>
 private bool IsDelivered(DeliveryReportStatus Status)
 {
     return(Status == DeliveryReportStatus.DeliveredToTerminal);
 }
Beispiel #4
0
 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;
            }
        }