Функция получения сведений о просроченных сообщениях очереди обмена

This commit is contained in:
Mikhail Chechnev 2019-01-07 17:47:05 +03:00
parent 3bcfb6d39c
commit 7b44cfbe2b
6 changed files with 123 additions and 10 deletions

View File

@ -368,6 +368,43 @@ class DBConnector extends EventEmitter {
throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД"); throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД");
} }
} }
//Получить информацию о просроченных сообщениях обмена сервиса
async getServiceExpiredQueueInfo(prms) {
//Работаем только при наличии подключения
if (this.bConnected) {
//Проверяем структуру переданного объекта с параметрами получения информации о просроченных сообщения обмена
let sCheckResult = validateObject(
prms,
prmsDBConnectorSchema.getServiceExpiredQueueInfo,
"Параметры функции получения информации о просроченных сообщениях обмена сервиса"
);
//Если структура объекта в норме
if (!sCheckResult) {
try {
//Подготовим параметры для передачи в БД
let getServiceExpiredQueueInfoData = _.cloneDeep(prms);
getServiceExpiredQueueInfoData.connection = this.connection;
//И выполним получение информации о просроченных сообщениях
let res = await this.connector.getServiceExpiredQueueInfo(getServiceExpiredQueueInfoData);
//Валидируем полученный ответ
sCheckResult = validateObject(
res,
objServiceSchema.ServiceExpiredQueueInfo,
"Сведения о просроченных сообщениях обмена сервиса"
);
if (sCheckResult) throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
//Успешно - отдаём полученные сведения о просроченных сообщениях
return res;
} catch (e) {
throw new ServerError(SERR_DB_EXECUTE, e.message);
}
} else {
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
}
} else {
throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД");
}
}
//Запись в журнал работы //Запись в журнал работы
async putLog(prms) { async putLog(prms) {
//Работаем только при наличии подключения //Работаем только при наличии подключения

View File

@ -293,10 +293,10 @@ create or replace package PKG_EXS as
); );
/* Получение информации о просроченных сообщениях очереди для сервиса */ /* Получение информации о просроченных сообщениях очереди для сервиса */
procedure SERVICE_QUEUE_EXPIRED_GET procedure SERVICE_QUEUE_EXPIRED_INFO_GET
( (
NEXSSERVICE in number, -- Рег. номер записи сервиса NEXSSERVICE in number, -- Рег. номер записи сервиса
RCSERVICE_QUEUE_EXPIRED out sys_refcursor -- Êóðñîð ñî ñâåäåíèÿìè î ïðîñðî÷åííûõ ñîîáùåíèÿõ ñåðâèñà RCSERVICE_QUEUE_EXPIRED_INFO out sys_refcursor -- Êóðñîð ñî ñâåäåíèÿìè î ïðîñðî÷åííûõ ñîîáùåíèÿõ ñåðâèñà
); );
/* Получение контекста сервиса */ /* Получение контекста сервиса */
@ -1244,11 +1244,11 @@ create or replace package body PKG_EXS as
RNLIST_BASE_CLEAR(NIDENT => NIDENT); RNLIST_BASE_CLEAR(NIDENT => NIDENT);
end SERVICE_GET; end SERVICE_GET;
/* Ïîëó÷åíèå èíôîðìàöèè î ïðîñðî÷åííûõ ñîîáùåíèÿõ î÷åðåäè äëÿ ñåðâèñà */ /* Ïîëó÷åíèå èíôîðìàöèè î ïðîñðî÷åííûõ ñîîáùåíèÿõ î÷åðåäè äëÿ ñåðâèñà */
procedure SERVICE_QUEUE_EXPIRED_GET procedure SERVICE_QUEUE_EXPIRED_INFO_GET
( (
NEXSSERVICE in number, -- Рег. номер записи сервиса NEXSSERVICE in number, -- Рег. номер записи сервиса
RCSERVICE_QUEUE_EXPIRED out sys_refcursor -- Êóðñîð ñî ñâåäåíèÿìè î ïðîñðî÷åííûõ ñîîáùåíèÿõ ñåðâèñà RCSERVICE_QUEUE_EXPIRED_INFO out sys_refcursor -- Êóðñîð ñî ñâåäåíèÿìè î ïðîñðî÷åííûõ ñîîáùåíèÿõ ñåðâèñà
) )
is is
/* Локальные константы */ /* Локальные константы */
@ -1298,11 +1298,12 @@ create or replace package body PKG_EXS as
end if; end if;
end loop; end loop;
/* Возвращаем ответ в виде курсора */ /* Возвращаем ответ в виде курсора */
open RCSERVICE_QUEUE_EXPIRED for open RCSERVICE_QUEUE_EXPIRED_INFO for
select NCNT "nCnt", select REXSSERVICE.RN "nId",
NCNT "nCnt",
DECODE(NCNT, 0, null, SPREF || SINFO_LIST) "sInfoList" DECODE(NCNT, 0, null, SPREF || SINFO_LIST) "sInfoList"
from DUAL; from DUAL;
end SERVICE_QUEUE_EXPIRED_GET; end SERVICE_QUEUE_EXPIRED_INFO_GET;
/* Получение контекста сервиса */ /* Получение контекста сервиса */
procedure SERVICE_CTX_GET procedure SERVICE_CTX_GET

View File

@ -115,6 +115,17 @@ exports.dbConnectorModule = new Schema({
"Не реализована функция постановки в очередь задания на аутентификацию сервиса (putServiceAuthInQueue)" "Не реализована функция постановки в очередь задания на аутентификацию сервиса (putServiceAuthInQueue)"
} }
}, },
//Получение информации о просроченных сообщениях обмена сервиса
getServiceExpiredQueueInfo: {
use: { validateAsyncFunctionType },
required: true,
message: {
validateAsyncFunctionType:
"Функция получения информации о просроченных сообщениях обмена сервиса (getServiceExpiredQueueInfo) имеет неверный формат (ожидалось - AsyncFunction)",
required:
"Не реализована функция получения информации о просроченных сообщениях обмена сервиса (getServiceExpiredQueueInfo)"
}
},
//Протоколирование работы сервиса //Протоколирование работы сервиса
log: { log: {
use: { validateAsyncFunctionType }, use: { validateAsyncFunctionType },

View File

@ -256,3 +256,35 @@ exports.ServiceCtx = new Schema({
} }
} }
}); });
//Схема валидации сведений о просроченных сообщениях обмена сервиса
exports.ServiceExpiredQueueInfo = new Schema({
//Идентификатор сервиса
nId: {
type: Number,
required: true,
message: {
type: "Идентификатор сервиса (nId) имеет некорректный тип данных (ожидалось - Number)",
required: "Не указан идентификатор сервиса (nId)"
}
},
//Количество просроченных сообщений обмена
nCnt: {
type: Number,
required: true,
message: {
type: "Количество просроченных сообщений обмена (nCnt) имеет некорректный тип данных (ожидалось - Number)",
required: "Не указано количество просроченных сообщений обмена (nCnt)"
}
},
//Информация о просроченных сообщениях обмена
sInfoList: {
type: String,
required: true,
message: {
type:
"Информация о просроченных сообщениях обмена (sInfoList) имеет некорректный тип данных (ожидалось - String)",
required: "Не указана информация о просроченных сообщениях обмена (sInfoList)"
}
}
}).validator({ required: val => val === null || val === 0 || val });

View File

@ -163,6 +163,19 @@ exports.putServiceAuthInQueue = new Schema({
} }
}); });
//Схема валидации параметров функции получения информации о просроченных сообщениях обмена сервиса
exports.getServiceExpiredQueueInfo = new Schema({
//Идентификатор сервиса
nServiceId: {
type: Number,
required: true,
message: {
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
required: path => `Не указан идентификатор сервиса (${path})`
}
}
});
//Схема валидации параметров функции записи в журнал работы сервиса //Схема валидации параметров функции записи в журнал работы сервиса
exports.putLog = new Schema({ exports.putLog = new Schema({
//Тип сообщения журнала работы сервиса //Тип сообщения журнала работы сервиса

View File

@ -152,6 +152,24 @@ const putServiceAuthInQueue = async prms => {
} }
}; };
//Получение информации о просроченных сообщениях обмена сервиса
const getServiceExpiredQueueInfo = async prms => {
try {
let res = await prms.connection.execute(
"BEGIN PKG_EXS.SERVICE_QUEUE_EXPIRED_INFO_GET(NEXSSERVICE => :NEXSSERVICE, RCSERVICE_QUEUE_EXPIRED_INFO => :RCSERVICE_QUEUE_EXPIRED_INFO); END;",
{
NEXSSERVICE: prms.nServiceId,
RCSERVICE_QUEUE_EXPIRED_INFO: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
},
{ outFormat: oracledb.OBJECT }
);
let rows = await readCursorData(res.outBinds.RCSERVICE_QUEUE_EXPIRED_INFO);
return rows[0];
} catch (e) {
throw new Error(e.message);
}
};
//Запись в протокол работы //Запись в протокол работы
const log = async prms => { const log = async prms => {
try { try {
@ -369,6 +387,7 @@ exports.setServiceContext = setServiceContext;
exports.clearServiceContext = clearServiceContext; exports.clearServiceContext = clearServiceContext;
exports.isServiceAuth = isServiceAuth; exports.isServiceAuth = isServiceAuth;
exports.putServiceAuthInQueue = putServiceAuthInQueue; exports.putServiceAuthInQueue = putServiceAuthInQueue;
exports.getServiceExpiredQueueInfo = getServiceExpiredQueueInfo;
exports.log = log; exports.log = log;
exports.getQueue = getQueue; exports.getQueue = getQueue;
exports.putQueue = putQueue; exports.putQueue = putQueue;