コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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");
            }
        }
コード例 #3
0
        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;
            }
        }