public static GsmStatusInfo GetGsmSmsStatusInfo(long responseId, DateTime createDate)
        {
            GsmStatusInfo   smallGsmStatusEntity = new GsmStatusInfo();
            SmsStatusResult smsStatusResult;
            int             messageStatus;

            List <GsmStatusInfo> gsmGetStatusEntitiyList = NotificationOperation.GetGsmSmsStatusOfSingleRecord(responseId, createDate);

            if (gsmGetStatusEntitiyList.Count == 0)
            {
                throw new EsbBusinessException("RecordNotFound");
            }

            if (gsmGetStatusEntitiyList.FirstOrDefault().Status != GsmOperatorStatus.Completed)
            {
                smsStatusResult = BuildSmsStatusRequestByOperator(gsmGetStatusEntitiyList);
                messageStatus   = smsStatusResult.GsmSmsStatusResultList.FirstOrDefault().MessageStatus;

                var gsmOperator                     = gsmGetStatusEntitiyList.FirstOrDefault().Operator;
                GsmOperatorSender sender            = new GsmOperatorSender(gsmOperator);
                string            statusExplanation = sender.GetStatusExplanationFromEnum(messageStatus);

                smallGsmStatusEntity.NotificationResponseId = responseId;
                smallGsmStatusEntity.GsmStatus            = messageStatus.ToString();
                smallGsmStatusEntity.GsmStatusExplanation = statusExplanation;
                smallGsmStatusEntity.DeliveryTime         = smsStatusResult.GsmSmsStatusResultList.FirstOrDefault().MessageDeliveryDate;
                smallGsmStatusEntity.Operator             = gsmOperator;
            }
            else
            {
                smallGsmStatusEntity = gsmGetStatusEntitiyList.FirstOrDefault();
            }

            return(smallGsmStatusEntity);
        }
        public static SmsStatusResult BuildSmsStatusRequestByOperator(List <GsmStatusInfo> gsmGetStatusEntitiyList)
        {
            try {
                CommonUtilities.SetEsbContext();
            }
            catch (Exception ex) {
                log.ErrorFormat("Error while creating new esb context :{0}", ex);
            }

            if (gsmGetStatusEntitiyList == null)
            {
                return(null);
            }

            var gsmOperator = gsmGetStatusEntitiyList.FirstOrDefault().Operator;
            GsmOperatorSender      sender           = new GsmOperatorSender(gsmOperator);
            SmsStatusRequestEntity smsGetStatusItem = new SmsStatusRequestEntity();

            foreach (var item in gsmGetStatusEntitiyList)
            {
                if (gsmOperator == GsmOperator.VODAFONE)
                {
                    smsGetStatusItem.MultipleStatusRequestKeys.Add(new MultipleStatusRequestKey {
                        MessageId = item.OperatorResponseId,
                        NotificationResponseId = item.NotificationResponseId,
                        SessionId   = item.SessionId,
                        GsmStatusId = item.Id
                    });
                    smsGetStatusItem.SessionId = item.SessionId;
                    smsGetStatusItem.NotificationResponseId = item.NotificationResponseId;
                }
                else
                {
                    smsGetStatusItem.MessageIdList.Add(item.OperatorResponseId);
                    if (!string.IsNullOrEmpty(item.SessionId))
                    {
                        smsGetStatusItem.SessionId = item.SessionId;
                    }
                }
            }

            SmsStatusRequest smsStatusRequest = sender.BuildSmsStatusRequest(smsGetStatusItem);
            SmsStatusResult  smsStatusResult  = sender.GetSmsStatus(smsStatusRequest);

            if (smsStatusResult.GsmSmsStatusResultList == null || smsStatusResult.GsmSmsStatusResultList.Count == 0)
            {
                throw new Exception(string.Format("Gsm status result null or empty, gsm operator:{0}", gsmOperator));
            }

            foreach (var smsStatusResulItem in smsStatusResult.GsmSmsStatusResultList)
            {
                var           gsmStatusFields = sender.SetGsmStatusFields(smsStatusResulItem, sender);
                GsmStatusInfo smallGsmEntitiy = GetInsertDateAndIdOfGsmItem(smsStatusResulItem.MessageId, smsStatusResulItem.SessionId, gsmOperator, gsmGetStatusEntitiyList);
                NotificationOperation.UpdateGsmSmsStatusResults(smsStatusResulItem, gsmOperator, smallGsmEntitiy, gsmStatusFields);
                if (gsmStatusFields.InternalStatus != GsmOperatorStatus.Completed)
                {
                    DateTime nexCheckDate = sender.SetNextStatusCheckDateOfGsmSms(smallGsmEntitiy.InsertDate, gsmStatusFields.InternalStatus);
                    NotificationOperation.UpdateNexCheckDateOfGsmRecord(nexCheckDate, smsStatusResulItem.MessageId, smallGsmEntitiy);
                }
            }
            return(smsStatusResult);
        }