Skillbox Student 962e3208ce Фиксация доработок по обучению
Формирование файла dataset; Загрузка на файловый ресурс SCP; Передача данных фреймворку; Запрос на обучение модели.
2025-03-24 19:26:22 +03:00

121 lines
3.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Сервис интеграции ПП Парус 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;