ЦИТК-495 Расширение "Интеграция с ЭДО СБИС": сокращение времени ожидания подгтовленных документов за счёт повторных запросов через сервер приложений, а не через "Пользовательские задания"

This commit is contained in:
Mikhail Chechnev 2022-06-14 17:38:10 +03:00
parent 9048a934b7
commit 0146702e1c

View File

@ -9,23 +9,14 @@
const xml2js = require("xml2js"); //Конвертация XML в JSON и JSON в XML const xml2js = require("xml2js"); //Конвертация XML в JSON и JSON в XML
const _ = require("lodash"); //Работа с коллекциями и объектами const _ = require("lodash"); //Работа с коллекциями и объектами
const rqp = require("request-promise"); //Работа с HTTP/HTTPS запросами
//--------------------- //---------------------
// Глобальные константы // Глобальные константы
//--------------------- //---------------------
// Список тегов которые должны содержать массив // Список тегов которые должны содержать массив
const tag = [ const tag = ["Вложение", "Редакция", "ДокументОснование", "ДокументСледствие", "Подпись", "Событие", "Этап", "Действие", "Сертификат"];
"Вложение",
"Редакция",
"ДокументОснование",
"ДокументСледствие",
"Подпись",
"Событие",
"Этап",
"Действие",
"Сертификат"
];
//------------ //------------
// Тело модуля // Тело модуля
@ -125,9 +116,7 @@ const afterConnect = async prms => {
dCtxExp: addHours(new Date(), 23) dCtxExp: addHours(new Date(), 23)
}; };
} else { } else {
throw new Error( throw new Error(`Сервер ЭДО "СБИС" вернул ошибку: ${resp.error.message ? resp.error.message : "Неожиданная ошибка"}`);
`Сервер ЭДО "СБИС" вернул ошибку: ${resp.error.message ? resp.error.message : "Неожиданная ошибка"}`
);
} }
}; };
@ -208,16 +197,43 @@ const beforeAttParse = async prms => {
//Обработчик "После" отправки запроса на загрузку вложения //Обработчик "После" отправки запроса на загрузку вложения
const afterAttParse = async prms => { const afterAttParse = async prms => {
let resu = null;
if (prms.queue.blResp) { if (prms.queue.blResp) {
try { if (prms.optionsResp.statusCode == 200) {
resu = JSON.parse(prms.queue.blResp.toString());
} catch (e) {
return; return;
} } else {
if (resu.error.hasOwnProperty("message")) { let iterable = [1, 2, 3, 4, 5];
//Возврат результата //Если не превышает лимита запросов
throw new Error(`Неожиданный ответ сервера ЭДО "СБИС": ${resu.error.message}`); for (let value of iterable) {
if (prms.optionsResp.statusCode != 200) {
//Выполним повторный запрос
await new Promise(resolve => setTimeout(resolve, 2000));
let serverResp = await rqp(prms.options);
//Сохраняем полученный ответ
prms.queue.blResp = Buffer.from(serverResp.body || "");
prms.optionsResp.statusCode = serverResp.statusCode;
//Если пришел ответ
if (prms.queue.blResp && serverResp.statusCode == 200) {
//Вернем загруженный документ
return {
blResp: prms.queue.blResp
};
}
}
}
//Если был ответ от сервера с ошибкой (иначе мы сюда не попадём)
if (prms.queue.blResp) {
//Разберем сообщение об ошибке
let resu = null;
try {
resu = JSON.parse(prms.queue.blResp.toString());
} catch (e) {
throw new Error(`Неожиданный ответ сервера ЭДО "СБИС": ${prms.queue.blResp.toString()}`);
}
throw new Error(`Сервер ЭДО "СБИС" вернул ошибку: ${resu?.error?.message}`);
} else {
//Возврат результата
throw new Error('Сервер ЭДО "СБИС" не вернул ответ');
}
} }
} else { } else {
throw new Error('Сервер ЭДО "СБИС" не вернул ответ'); throw new Error('Сервер ЭДО "СБИС" не вернул ответ');