public void GetDeliveryReport(string requestId) { using (var smsClient = new SMSClient(userName, password)) { SMS_LOG SMS_LOG = smsClient.GetDeliveryStatus(requestId, string.Empty); this.logService.Debug("Every8dSmsProvider(smsProviderType = {0}),接收簡訊發送結果(簡訊發送識別碼:{1},發送結果:{2})", smsProviderType.ToString(), requestId, SMS_LOG.ToString()); UpdateDb(requestId, SMS_LOG); } }
private static void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { try { using (PostavkeDataContext db = new PostavkeDataContext()) { SMS_LOG po = new SMS_LOG(); po.Result = e.Result; po.Error = e.Error != null?e.Error.ToString() : ""; po.DateTime = DateTime.Now; po.Broj = _broj; po.Poruka = _poruka; db.SMS_LOGs.InsertOnSubmit(po); db.SubmitChanges(); } } catch (Exception ex) { Sustav.SpremiGresku("", ex, 1, "POSLAN SMS"); } }
private void UpdateDb(string requestId, SMS_LOG SMS_LOG) { //連線狀態代碼,各代碼說明請參閱下表。 // 0: 取得連線成功 // -100: 取得連線失敗,無此帳號 // -101: 取得連線失敗,密碼錯誤 // -999: 帳號已封鎖,請洽服務窗口。認證錯誤超過 10 次將封鎖此服務。 if (SMS_LOG.CODE != 0) { return; } if (SMS_LOG.GET_DELIVERY_STATUS.SMS_LIST.Count == 0) { return; } // (3) 將 DeliveryReportList.DeliveryReports 塞入對應資料表 Infobip_DeliveryReport Every8d_SendMessageResult SendMessageResult = this.unitOfWork.Repository <Every8d_SendMessageResult>().Get(p => p.BATCH_ID == requestId); // if (SendMessageResult == null) return; 不應該為 null int CODE = SMS_LOG.CODE; string DESCRIPTION = SMS_LOG.DESCRIPTION; foreach (var SMS_CONTENT in SMS_LOG.GET_DELIVERY_STATUS.SMS_LIST) { var entity = new Every8d_DeliveryReport(); entity.RequestId = requestId; entity.CODE = CODE; entity.DESCRIPTION = DESCRIPTION; entity.NAME = SMS_CONTENT.NAME; entity.MOBILE = SMS_CONTENT.MOBILE; entity.SENT_TIME = SMS_CONTENT.SENT_TIME; entity.COST = SMS_CONTENT.COST; entity.STATUS = SMS_CONTENT.STATUS; entity.CreatedTime = DateTime.UtcNow; entity.SendMessageResult = SendMessageResult; entity = this.unitOfWork.Repository <Every8d_DeliveryReport>().Insert(entity); } Every8d_SendMessageResult every8d_SendMessageResult = this.unitOfWork.Repository <Every8d_SendMessageResult>().Get(p => p.BATCH_ID == requestId); if (every8d_SendMessageResult == null) { throw new Exception(string.Format("Every8dSmsProvider({0}),無法取得 Infobip_SendMessageResult(BATCH_ID:{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 = every8d_SendMessageResult.SENDED.HasValue ? every8d_SendMessageResult.SENDED.Value : 0; int DeliveryReportCount = this.unitOfWork.Repository <Every8d_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 = SendMessageResult.SourceTable; switch (sourceTable) { case SourceTable.SendMessageQueue: int sendMessageQueueId = SendMessageResult.SourceTableId; UpdateSendMessageHistory(sendMessageQueueId); break; case SourceTable.SendMessageHistory: int sendMessageHistoryId = SendMessageResult.SourceTableId; UpdateSendMessageRetryHistory(sendMessageHistoryId); break; } }