Новый параметр установки статуса сообщения - сброс данных сообщения к первоначальному варианту

This commit is contained in:
Mikhail Chechnev 2019-01-06 20:27:13 +03:00
parent bd0959f7cc
commit ae9ed4f407
4 changed files with 40 additions and 6 deletions

View File

@ -116,6 +116,10 @@ create or replace package PKG_EXS as
SPRC_RESP_RESULT_ERR constant varchar2(40) := 'ERR'; -- Îøèáêà îáðàáîòêè
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');
@ -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;

View File

@ -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({

View File

@ -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)"
}
}
});

View File

@ -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 }