From 3c4bb16b0c7364bbb9ade50621cadf7d764da419 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Tue, 20 Nov 2018 21:56:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=B5=D1=82=D0=BE=D0=B4=20=D1=83=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B8=20=D1=81=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=B7=D0=B8?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D0=B8?= =?UTF-8?q?=20=D0=B8=20=D0=B0=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D0=B5=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B5=D0=B9=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=BA=D1=83=D1=80=D1=81=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/parus_oracle_db.js | 58 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/modules/parus_oracle_db.js b/modules/parus_oracle_db.js index 1ff87a2..ac1fcf0 100644 --- a/modules/parus_oracle_db.js +++ b/modules/parus_oracle_db.js @@ -33,6 +33,26 @@ const SLOG_STATE_INF = "INF"; //Информация (строковый код) const SLOG_STATE_WRN = "WRN"; //Предупреждение (строковые коды) const SLOG_STATE_ERR = "ERR"; //Ошибка (строковый код) +// Состояния исполнения записей очереди сервиса +const NQUEUE_EXEC_STATE_INQUEUE = 0; //Поставлено в очередь +const NQUEUE_EXEC_STATE_APP = 1; //Обрабатывается сервером приложений +const NQUEUE_EXEC_STATE_APP_OK = 2; //Успешно обработано сервером приложений +const NQUEUE_EXEC_STATE_APP_ERR = 3; //Ошибка обработки сервером приложений +const NQUEUE_EXEC_STATE_DB = 4; //Обрабатывается СУБД +const NQUEUE_EXEC_STATE_DB_OK = 5; //Успешно обработано СУБД +const NQUEUE_EXEC_STATE_DB_ERR = 6; //Ошибка обработки СУБД +const NQUEUE_EXEC_STATE_OK = 7; //Обработано успешно +const NQUEUE_EXEC_STATE_ERR = 8; //Обработано с ошибками +const SQUEUE_EXEC_STATE_INQUEUE = "INQUEUE"; //Поставлено в очередь +const SQUEUE_EXEC_STATE_APP = "APP"; //Обрабатывается сервером приложений +const SQUEUE_EXEC_STATE_APP_OK = "APP_OK"; //Успешно обработано сервером приложений +const SQUEUE_EXEC_STATE_APP_ERR = "APP_ERR"; //Ошибка обработки сервером приложений +const SQUEUE_EXEC_STATE_DB = "DB"; //Обрабатывается СУБД +const SQUEUE_EXEC_STATE_DB_OK = "DB_OK"; //Успешно обработано СУБД +const SQUEUE_EXEC_STATE_DB_ERR = "DB_ERR"; //Ошибка обработки СУБД +const SQUEUE_EXEC_STATE_OK = "OK"; //Обработано успешно +const SQUEUE_EXEC_STATE_ERR = "ERR"; //Обработано с ошибками + //------------ // Тело модуля //------------ @@ -72,6 +92,23 @@ const disconnect = async prms => { } }; +//Чтение данных из курсора +const readCursorData = cursor => { + return new Promise((resolve, reject) => { + let queryStream = cursor.toQueryStream(); + let rows = []; + queryStream.on("data", row => { + rows.push(row); + }); + queryStream.on("error", err => { + reject(new Error(err.message)); + }); + queryStream.on("close", () => { + resolve(rows); + }); + }); +}; + //Получение списка сервисов const getServices = prms => { return new Promise((resolve, reject) => { @@ -231,7 +268,24 @@ const getQueueOutgoing = prms => { const putQueueIncoming = prms => {}; //Установка значения в сообщении очереди -const setQueueValue = prms => {}; +const setQueueState = async prms => { + try { + let res = await prms.connection.execute( + "BEGIN PKG_EXS.QUEUE_EXEC_STATE_SET(NEXSQUEUE => :NEXSQUEUE, NEXEC_STATE => :NEXEC_STATE, SEXEC_MSG => :SEXEC_MSG, RCQUEUE => :RCQUEUE); END;", + { + NEXSQUEUE: prms.nQueueId, + NEXEC_STATE: prms.nExecState, + SEXEC_MSG: prms.sExecMsg, + RCQUEUE: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } + }, + { outFormat: oracledb.OBJECT, autoCommit: true, fetchInfo: { bMsg: { type: oracledb.BUFFER } } } + ); + let rows = await readCursorData(res.outBinds.RCQUEUE); + return rows; + } catch (e) { + throw new Error(e.message); + } +}; //----------------- // Интерфейс модуля @@ -244,4 +298,4 @@ exports.getServiceFunctions = getServiceFunctions; exports.log = log; exports.getQueueOutgoing = getQueueOutgoing; exports.putQueueIncoming = putQueueIncoming; -exports.setQueueValue = setQueueValue; +exports.setQueueState = setQueueState;