diff --git a/db/PKG_EXS.pck b/db/PKG_EXS.pck index 379fd11..df33f5f 100644 --- a/db/PKG_EXS.pck +++ b/db/PKG_EXS.pck @@ -114,7 +114,11 @@ create or replace package PKG_EXS as /* - */ SPRC_RESP_RESULT_OK constant varchar2(40) := 'OK'; -- SPRC_RESP_RESULT_ERR constant varchar2(40) := 'ERR'; -- - SPRC_RESP_RESULT_UNAUTH constant varchar2(40) := 'UNAUTH'; -- + SPRC_RESP_RESULT_UNAUTH constant varchar2(40) := 'UNAUTH'; -- + + /* - */ + NQUEUE_RESET_DATA_NO constant number(1) := 0; -- + NQUEUE_RESET_DATA_YES constant number(1) := 1; -- /* - */ SPRC_RESP_ARGS constant varchar2(80) := 'NIDENT,IN,NUMBER;NEXSQUEUE,IN,NUMBER;'; -- @@ -439,6 +443,7 @@ create or replace package PKG_EXS as NEXEC_STATE in number, -- (. NQUEUE_EXEC_STATE_*, null - ) SEXEC_MSG in varchar2, -- NINC_EXEC_CNT in number, -- (. NINC_EXEC_CNT_*, null - ) + NRESET_DATA in number, -- (. NQUEUE_RESET_DATA_NO*, null - ) RCQUEUE out sys_refcursor -- ); @@ -1881,6 +1886,7 @@ create or replace package body PKG_EXS as NEXEC_STATE in number, -- (. NQUEUE_EXEC_STATE_*, null - ) SEXEC_MSG in varchar2, -- NINC_EXEC_CNT in number, -- (. NINC_EXEC_CNT_*, null - ) + NRESET_DATA in number, -- (. NQUEUE_RESET_DATA_NO*, null - ) RCQUEUE out sys_refcursor -- ) is @@ -1921,7 +1927,9 @@ create or replace package body PKG_EXS as set T.EXEC_DATE = sysdate, T.EXEC_STATE = NVL(NEXEC_STATE, T.EXEC_STATE), T.EXEC_CNT = REXSQUEUE.EXEC_CNT, - T.EXEC_MSG = SEXEC_MSG + T.EXEC_MSG = SEXEC_MSG, + T.MSG = DECODE(NVL(NRESET_DATA, NQUEUE_RESET_DATA_NO), NQUEUE_RESET_DATA_NO, T.MSG, T.MSG_ORIGINAL), + T.RESP = DECODE(NVL(NRESET_DATA, NQUEUE_RESET_DATA_NO), NQUEUE_RESET_DATA_NO, T.RESP, null) where T.RN = NEXSQUEUE; if (sql%rowcount = 0) then PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => NEXSQUEUE, SUNIT_TABLE => 'EXSQUEUE'); @@ -2220,7 +2228,7 @@ create or replace package body PKG_EXS as SPROCEDURE => REXSMSGTYPE.PRC_RESP), RPARAM_CONTAINER => PRMS); /* */ - PKG_CONTPRMLOC.PURGE(RCONTAINER => PRMS); + PKG_CONTPRMLOC.PURGE(RCONTAINER => PRMS); /* */ PRC_RESP_RESULT_GET(NIDENT => NIDENT, SRESULT => SRESULT, @@ -2284,7 +2292,13 @@ create or replace package body PKG_EXS as /* */ open RCRESULT for select SRESULT "sResult", - SMSG "sMsg" + DECODE(SRESULT, + SPRC_RESP_RESULT_OK, + null, + SPRC_RESP_RESULT_ERR, + NVL(SMSG, ' '), + SPRC_RESP_RESULT_UNAUTH, + NVL(SMSG, ' ')) "sMsg" from DUAL; end QUEUE_PRC; diff --git a/models/obj_queue.js b/models/obj_queue.js index 505c335..e5e66c4 100644 --- a/models/obj_queue.js +++ b/models/obj_queue.js @@ -38,6 +38,10 @@ const SPRC_RESP_RESULT_OK = "OK"; //Обработано успешно const SPRC_RESP_RESULT_ERR = "ERR"; //Ошибка обработки const SPRC_RESP_RESULT_UNAUTH = "UNAUTH"; //Неаутентифицирован +//Флаг сброса данных сообщения +const NQUEUE_RESET_DATA_NO = 0; //Не сбрасывать +const NQUEUE_RESET_DATA_YES = 1; //Сбросить + //------------------ // Интерфейс модуля //------------------ @@ -64,6 +68,8 @@ exports.SQUEUE_EXEC_STATE_ERR = SQUEUE_EXEC_STATE_ERR; exports.SPRC_RESP_RESULT_OK = SPRC_RESP_RESULT_OK; exports.SPRC_RESP_RESULT_ERR = SPRC_RESP_RESULT_ERR; exports.SPRC_RESP_RESULT_UNAUTH = SPRC_RESP_RESULT_UNAUTH; +exports.NQUEUE_RESET_DATA_NO = NQUEUE_RESET_DATA_NO; +exports.NQUEUE_RESET_DATA_YES = NQUEUE_RESET_DATA_YES; //Схема валидации сообщения очереди обмена exports.Queue = new Schema({ diff --git a/models/prms_db_connector.js b/models/prms_db_connector.js index c45e77f..4040a17 100644 --- a/models/prms_db_connector.js +++ b/models/prms_db_connector.js @@ -19,7 +19,9 @@ const { NQUEUE_EXEC_STATE_DB_OK, NQUEUE_EXEC_STATE_DB_ERR, NQUEUE_EXEC_STATE_OK, - NQUEUE_EXEC_STATE_ERR + NQUEUE_EXEC_STATE_ERR, + NQUEUE_RESET_DATA_NO, + NQUEUE_RESET_DATA_YES } = require("./obj_queue"); //Схемы валидации сообщения очереди обмена //---------- @@ -368,6 +370,17 @@ exports.setQueueState = new Schema({ enum: "Значение флага инкремента количества исполнений (nIncExecCnt) не поддерживается", required: "Не указан флаг икремента количества исполнений (nIncExecCnt)" } + }, + //Флаг сброса данных сообщения + nResetData: { + type: Number, + enum: [NQUEUE_RESET_DATA_NO, NQUEUE_RESET_DATA_YES], + required: false, + message: { + type: "Флаг сброса данных сообщения (nResetData) имеет некорректный тип данных (ожидалось - Number)", + enum: "Значение флага сброса данных сообщения (nResetData) не поддерживается", + required: "Не указан флаг сброса данных сообщения (nResetData)" + } } }); diff --git a/modules/parus_oracle_db.js b/modules/parus_oracle_db.js index 0b7901a..74e8b2a 100644 --- a/modules/parus_oracle_db.js +++ b/modules/parus_oracle_db.js @@ -238,12 +238,13 @@ const getQueueOutgoing = async 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, NINC_EXEC_CNT => :NINC_EXEC_CNT, RCQUEUE => :RCQUEUE); END;", + "BEGIN PKG_EXS.QUEUE_EXEC_STATE_SET(NEXSQUEUE => :NEXSQUEUE, NEXEC_STATE => :NEXEC_STATE, SEXEC_MSG => :SEXEC_MSG, NINC_EXEC_CNT => :NINC_EXEC_CNT, NRESET_DATA => :NRESET_DATA, RCQUEUE => :RCQUEUE); END;", { NEXSQUEUE: prms.nQueueId, NEXEC_STATE: prms.nExecState, SEXEC_MSG: prms.sExecMsg, NINC_EXEC_CNT: prms.nIncExecCnt, + NRESET_DATA: prms.nResetData, RCQUEUE: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } }, { outFormat: oracledb.OBJECT, autoCommit: true }