Формирование файла dataset; Загрузка на файловый ресурс SCP; Передача данных фреймворку; Запрос на обучение модели.
121 lines
3.9 KiB
JavaScript
121 lines
3.9 KiB
JavaScript
/*
|
||
Сервис интеграции ПП Парус 8 с WEB API
|
||
Дополнительный модуль: Интеграция с Фреймворка оценки и прогнозирования состояния оборудования
|
||
*/
|
||
|
||
//------------------------------
|
||
// Подключение внешних библиотек
|
||
//------------------------------
|
||
|
||
const xml2js = require("xml2js"); //Конвертация XML в JSON и JSON в XML
|
||
const _ = require("lodash"); //Работа с коллекциями и объектами
|
||
|
||
//---------------------
|
||
// Глобальные константы
|
||
//---------------------
|
||
|
||
// Список тегов которые должны содержать массив
|
||
const tag = [
|
||
"ftp_filepath",
|
||
"data_config"
|
||
];
|
||
|
||
//------------
|
||
// Тело модуля
|
||
//------------
|
||
|
||
//Обернуть содержимое тега в массив
|
||
const toArray = (obj, tags) => {
|
||
for (const prop in obj) {
|
||
const value = obj[prop];
|
||
if (tags.indexOf(prop) != -1 && !_.isArray(obj[prop])) {
|
||
obj[prop] = JSON.parse("[" + JSON.stringify(value) + "]");
|
||
}
|
||
if (typeof value === "object") {
|
||
toArray(value, tag);
|
||
}
|
||
}
|
||
return obj;
|
||
};
|
||
|
||
//Конвертация в XML
|
||
const toXML = obj => {
|
||
const builder = new xml2js.Builder();
|
||
return builder.buildObject(obj);
|
||
};
|
||
|
||
//Конвертация в JSON
|
||
const parseXML = xmlDoc => {
|
||
return new Promise((resolve, reject) => {
|
||
xml2js.parseString(xmlDoc, { explicitArray: false, mergeAttrs: true }, (err, result) => {
|
||
if (err) reject(err);
|
||
else resolve(result);
|
||
});
|
||
});
|
||
};
|
||
|
||
//Конвертация в JSON
|
||
const toJSON = async obj => {
|
||
let result = await parseXML(obj);
|
||
result = result.root;
|
||
toArray(result, tag);
|
||
return result;
|
||
};
|
||
|
||
//Обработчик "До" отправки запроса к сервису "СБИС"
|
||
const beforeDocParse = async prms => {
|
||
try {
|
||
//Конвертируем XML из "Парус 8" в понятный "СБИСу" JSON
|
||
let obj = await toJSON(prms.queue.blMsg.toString());
|
||
//Собираем и отдаём общий результат работы
|
||
return {
|
||
options: {
|
||
simple: false,
|
||
},
|
||
blMsg: Buffer.from(JSON.stringify(obj))
|
||
};
|
||
} catch (e) {
|
||
throw Error(e);
|
||
}
|
||
};
|
||
|
||
//Обработчик "После" запроса к сервису "СБИС"
|
||
const afterDocParseResp = async prms => {
|
||
//Преобразуем JSON ответ сервиса "СБИС" в XML, понятный "Парус 8"
|
||
let resu = null;
|
||
if (prms.queue.blResp) {
|
||
try {
|
||
resu = toXML(JSON.parse(prms.queue.blResp.toString()));
|
||
} catch (e) {
|
||
throw new Error(`Неожиданный ответ сервера. Ошибка интерпретации: ${e.message}`);
|
||
}
|
||
} else {
|
||
throw new Error('Сервер не вернул ответ');
|
||
}
|
||
//Возврат результата
|
||
return {
|
||
blResp: Buffer.from(resu)
|
||
};
|
||
};
|
||
|
||
//Обработчик "После" запроса к сервису
|
||
const beforeDocParseMsg = async prms => {
|
||
//Преобразуем JSON ответ сервиса в XML, понятный "Парус 8"
|
||
let resu = null;
|
||
if (prms.queue.blMsg) {
|
||
try {
|
||
resu = toXML(JSON.parse(prms.queue.blMsg.toString()));
|
||
} catch (e) {
|
||
throw new Error(`Неожиданный ответ сервера. Ошибка интерпретации: ${e.message}`);
|
||
}
|
||
} else {
|
||
throw new Error('Сервер не вернул ответ');
|
||
}
|
||
//Возврат результата
|
||
return {
|
||
blMsg: Buffer.from(resu)
|
||
};
|
||
};
|
||
exports.beforeDocParse = beforeDocParse;
|
||
exports.afterDocParseResp = afterDocParseResp;
|
||
exports.beforeDocParseMsg = beforeDocParseMsg; |