Пример #1
0
        /// <summary>
        /// Формирует XML тело сообщения на основе структуры GisDataPack.
        /// </summary>
        /// <param name="gisRequest">Структура типа GisDataPack</param>
        /// <returns>Строковое представление сформированного XML</returns>
        private static string GetBodyXML(DataPack gisRequest)
        {
            var soapFormatter = new GisSoapFormatter
            {
                Template         = PathHelper.ToAppAbsolutePath(gisRequest.TemplatePath),
                SchemaVersion    = gisRequest.SchemaVersion,
                AddOrgPPAGuid    = gisRequest.AddOrgPPAGUID,
                ValuesDictionary = gisRequest.Xpath2Values,
                OrgPPAGuid       = gisRequest.OrgPPAGUID,
                Config           = gisRequest.SoapConfig
            };
            var soapString = soapFormatter.GetSoapRequest(gisRequest.RequesterMessageGuid);

#if DEBUG
            Notificator.Write(soapString);
#endif

            if (gisRequest.AddSignature && gisRequest.Action != "urn:getState")
            {
                var soapXml = XmlDocumentHelper.Create(soapString);
                soapString = SignNode(soapXml, Constants.SoapContentXpath, gisRequest.CertificateThumbprint, gisRequest.SignPasswd, gisRequest.RequesterMessageGuid);
#if DEBUG
                Notificator.Write(soapString);
#endif
                return(soapString);
            }
            return(soapString);
        }
Пример #2
0
        /// <summary>
        /// Поставляет данные задачи из базы Oracle в <see cref="taskOracleData"/>
        /// </summary>
        protected override void ProvideTaskOracleData()
        {
            Contract.Requires(Regex.IsMatch(TaskDataPack.ServiceId, @"^\d+$"));
            Contract.Requires(Regex.IsMatch(TaskDataPack.MethodId, @"^\d+$"));
            Contract.Requires(Regex.IsMatch(TaskDataPack.TaskId, @"^\d+$"));
            Contract.Requires(Regex.IsMatch(TaskDataPack.LastStartDate, @"^(\d+\.){2}\d+\s(\d+\:){2}\d+.+$"));
            Contract.Requires(!string.IsNullOrEmpty(TaskDataPack.MethodVersion));

            /// Заполняются параметры модели из <see cref="OriginTask.TaskDataPack"/>.
            Oracle.ExportDataProviderNsiItemParameters exportDataProviderNsiItemParameters = new Oracle.ExportDataProviderNsiItemParameters
            {
                task_id = TaskDataPack.TaskId,

                connectSettings = ""
            };

            // Создаётся экземпляр класса ExportNsiItemModel и в него передаются параметры.
            Oracle.ExportDataProviderNsiItemModel exportDataProviderNsiItemmodel = new Oracle.ExportDataProviderNsiItemModel(exportDataProviderNsiItemParameters);

            exportDataProviderNsiItemmodel.Select();

            // Поле класса заполняется данными из Oracle.
            taskOracleData = exportDataProviderNsiItemmodel.ResultData;
#if DEBUG
            Notificator.Write("ExportDataProviderNsiItemTask, параметры задачи: " + exportDataProviderNsiItemmodel.ResultData.Rows[0].Field <string>("REQUESTER_MESSAGE_GUID") + " " +
                              exportDataProviderNsiItemmodel.ResultData.Rows[0].Field <string>("REGISTRY_NUMBER") + " " +
                              exportDataProviderNsiItemmodel.ResultData.Rows[0].Field <string>("MODIFIED_AFTER")
                              );
#endif
        }
        /// <summary>
        /// Заполняет поле <see cref="exportToOracle"/> данными кортежа.
        /// </summary>
        private void ConvertTupleToDataTable()
        {
#if DEBUG
            Notificator.Write("ExportDataProviderNsiItemModel XMLBody: " + TupleElementValue("XMLstring"));
#endif
            // Получаем строковое представление XML от ГИС ЖКХ.
            var bodyXML = TupleElementValue("XMLstring");

            // Создаём объект класса-обработчика XML документа.
            XML.XmlDataNSI1 xmlDataNSI1 = new XML.XmlDataNSI1(bodyXML);

            // Результат обработки XML файла заносим в поле класса-модели.
            exportToOracle = xmlDataNSI1.BuildDataTable();
        }
Пример #4
0
        /// <summary>
        /// Заполняет поле <see cref="exportToOracle"/> данными кортежа.
        /// </summary>
        private void ConvertTupleToDataTable()
        {
#if DEBUG
            Notificator.Write("ExportNsiItemModel XMLBody: " + TupleElementValue("XMLstring"));
#endif
            // Получаем строковое представление XML от ГИС ЖКХ.
            var XMLBody = TupleElementValue("XMLstring");

            // Создаём объект класса-маршрутизатора, который по входящему параметру номеру справочника возвращает
            // специализированный класс-обработчик XML документа.
            XML.BuilderCreator builder = new XML.BuilderCreator(ResultData, XMLBody);

            // Получаем конкретный объект который из XML будет возвращать DataTable.
            var dataTableCreator = builder.GetBuilder();

            // Результат обработки XML файла заносим в поле класса-модели.
            exportToOracle = dataTableCreator.BuildDataTable();
        }
Пример #5
0
        /// <summary>
        /// Возвращает данные о задаче в рамках выполнения запроса к сервисам ГИС ЖКХ.
        /// А именно:
        /// <see cref="DataPack.Path"/>,
        /// <see cref="DataPack.AddOrgPpaGuid"/>,
        /// <see cref="DataPack.AddSignature"/>,
        /// <see cref="DataPack.TemplatePath"/>,
        /// <see cref="DataPack.Action"/>,
        /// <see cref="DataPack.TemplateResponsePath"/>,
        /// <see cref="DataPack.ActionResponce"/>,
        /// <see cref="DataPack.MethodVersion"/>.
        /// </summary>
        protected void ProvideTaskInfo()
        {
            // Создаем параметры модели.
            OriginTaskParameters originTaskParameters = new OriginTaskParameters
            {
                taskId           = taskDataPack.TaskId,
                connectSettings  = string.Empty,
                operationsSelect = OriginTaskParameters.selectOperation.ProvideTaskInfo
            };

            // Скармливаем конструктору.
            OriginTaskModel originTaskModel = new OriginTaskModel(originTaskParameters);

            // Выполняем выборку данных.
            originTaskModel.Select();

            // Заполняем параметры задачи полученными из БД данными.
            taskDataPack.Path                 = originTaskModel.ResultData.Rows[0].Field <string>("PATH");
            taskDataPack.TemplatePath         = originTaskModel.ResultData.Rows[0].Field <string>("REQUEST_PATH");
            taskDataPack.Action               = originTaskModel.ResultData.Rows[0].Field <string>("REQUEST_ACTION");
            taskDataPack.TemplateResponsePath = originTaskModel.ResultData.Rows[0].Field <string>("RESPONSE_PATH");
            taskDataPack.ActionResponce       = originTaskModel.ResultData.Rows[0].Field <string>("RESPONSE_ACTION");
            taskDataPack.MethodVersion        = originTaskModel.ResultData.Rows[0].Field <string>("VERSION");
            taskDataPack.OrgPPAGUID           = originTaskModel.ResultData.Rows[0].Field <string>("ORG_PPAGUID");

            taskDataPack.AddOrgPpaGuid = Convert.ToBoolean(originTaskModel.ResultData.Rows[0].Field <System.Int16>("ADD_ORG_PPA_GUID"));
            taskDataPack.AddSignature  = Convert.ToBoolean(originTaskModel.ResultData.Rows[0].Field <System.Int16>("ADD_SIGNATURE"));

#if DEBUG
            Notificator.Write("PATH: " + taskDataPack.Path + " " +
                              "REQUEST_PATH: " + taskDataPack.TemplatePath + " " +
                              "REQUEST_ACTION: " + taskDataPack.Action + " " +
                              "RESPONSE_PATH: " + taskDataPack.TemplateResponsePath + " " +
                              "RESPONSE_ACTION: " + taskDataPack.ActionResponce + " " +
                              "VERSION: " + taskDataPack.MethodVersion + " " +
                              "ORG_PPAGUID: " + taskDataPack.OrgPPAGUID + " " +
                              "ADD_ORG_PPA_GUID: " + taskDataPack.AddOrgPpaGuid.ToString() + " " +
                              "ADD_SIGNATURE: " + taskDataPack.AddSignature.ToString()
                              );
#endif
        }
Пример #6
0
        private void ExecuteSubtask(object item)
        {
            try
            {
                // Извлекаем кадр - подзадачу.
                DataTable oracleData = GetSubtaskData(item.ToString());

                // Просим фабрику сгенерить нам нужный объект
                var creator = new SubtaskCreator(TaskDataPack);

                // Создаем подзадачу на запрос в ГИС.
                var subtask = creator.GetSubtask();

                // Скармливаем данные подзадачи
                subtask.OracleData = oracleData;

                // Формируем набор данных для выполнения запроса в ГИС.
                subtask.InitGisDataPack(item.ToString());

                // Выполняем запрос к сервису ГИС ЖКХ.
                subtask.PerformGisRequest();

                // Формируем набор данных для получения результатов запроса в ГИС ЖКХ.
                subtask.InitGisResultDataPack();

                // Получаем результат работы сервиса ГИС ЖКХ.
                subtask.PerformGisRequestForResults();

                // Записываем результаты работы сервиса в Oracle.
                subtask.WriteGisResultsToOracle();
            }
            catch (Exception ex)
            {
                Notificator.Write("Ошибка. Task_id = " + TaskDataPack.TaskId + ", REQUESTER_MESSAGE_GUID = " + item.ToString() + ". OriginTask. ExecuteSubtask().  Сообщение об ошибке: " + ex.Message + "Stack Trace: " + ex.StackTrace, EventLogEntryType.Error);
            }
        }
Пример #7
0
        /// <summary>
        /// Поставляет данные задачи из базы Oracle в <see cref="taskOracleData"/>
        /// </summary>
        protected override void ProvideTaskOracleData()
        {
            Contract.Requires(Regex.IsMatch(TaskDataPack.ServiceId, @"^\d+$"));
            Contract.Requires(Regex.IsMatch(TaskDataPack.MethodId, @"^\d+$"));
            Contract.Requires(Regex.IsMatch(TaskDataPack.TaskId, @"^\d+$"));
            Contract.Requires(Regex.IsMatch(TaskDataPack.LastStartDate, @"^(\d+\.){2}\d+\s(\d+\:){2}\d+.+$"));

            /// Заполняются параметры модели из <see cref="OriginTask.TaskDataPack"/>.
            Oracle.ExportNsiListParameters exportNsiListParameters = new Oracle.ExportNsiListParameters
            {
                task_id         = TaskDataPack.TaskId,
                connectSettings = ""
            };

            // Создаётся экземпляр класса ExportNsiListModel и в него передаются параметры.
            Oracle.ExportNsiListModel exportNsiListModel = new Oracle.ExportNsiListModel(exportNsiListParameters);
            exportNsiListModel.Select();

            // Поле класса заполняется данными из Oracle.
            taskOracleData = exportNsiListModel.ResultData;
#if DEBUG
            Notificator.Write("ExportNsiListTask, параметры задачи: " + exportNsiListModel.ResultData.Rows[0][0].ToString() + " " + exportNsiListModel.ResultData.Rows[0][1].ToString());
#endif
        }