forked from CITKParus/P8-ExchangeService
ЦИТК-495 Расширение "Интеграция с ЭДО СБИС": сокращение времени ожидания подгтовленных документов за счёт повторных запросов через сервер приложений, а не через "Пользовательские задания"
This commit is contained in:
parent
9048a934b7
commit
0146702e1c
@ -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('Сервер ЭДО "СБИС" не вернул ответ');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user