ЦИТК-916 - Рассылка E-Mail - поддержка PG
This commit is contained in:
parent
ca64cbd6b4
commit
e6d6971391
@ -10,7 +10,6 @@
|
|||||||
const xml2js = require("xml2js"); //Конвертация XML в JSON и JSON в XML
|
const xml2js = require("xml2js"); //Конвертация XML в JSON и JSON в XML
|
||||||
const cfg = require("./../config"); //Настройки сервера приложений
|
const cfg = require("./../config"); //Настройки сервера приложений
|
||||||
const { makeErrorText, sendMail } = require("./../core/utils"); //Вспомогательные функции
|
const { makeErrorText, sendMail } = require("./../core/utils"); //Вспомогательные функции
|
||||||
const oracledb = require("oracledb"); //Работа с СУБД Oracle
|
|
||||||
|
|
||||||
//---------------------
|
//---------------------
|
||||||
// Глобальные константы
|
// Глобальные константы
|
||||||
@ -24,84 +23,37 @@ const NSTATUS_DONE = 3;
|
|||||||
// Тело модуля
|
// Тело модуля
|
||||||
//------------
|
//------------
|
||||||
|
|
||||||
//Чтение данных из курсора
|
|
||||||
const readCursorData = cursor => {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let queryStream = cursor.toQueryStream();
|
|
||||||
let rows = [];
|
|
||||||
queryStream.on("data", row => {
|
|
||||||
rows.push(row);
|
|
||||||
});
|
|
||||||
queryStream.on("error", err => {
|
|
||||||
reject(new Error(err.message));
|
|
||||||
});
|
|
||||||
queryStream.on("close", () => {
|
|
||||||
resolve(rows);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
//Установка статуса отправки
|
//Установка статуса отправки
|
||||||
const setSendMsg = async prms => {
|
const setSendMsg = async prms => {
|
||||||
let pooledConnection;
|
await prms.dbConn.executeStored({
|
||||||
try {
|
connection: prms.dbConn.connection,
|
||||||
pooledConnection = await prms.connection.getConnection();
|
sName: "PKG_EXS_EXT_MAIL.EXSEXTMAIL_SET_STATUS",
|
||||||
await pooledConnection.execute(
|
inPrms: {
|
||||||
"begin PKG_EXS_EXT_MAIL.EXSEXTMAIL_SET_STATUS(NRN => :NRN, SERR_TEXT => :SERR_TEXT, NSTATUS => :NSTATUS); end;",
|
NRN: prms.nRn,
|
||||||
{ NRN: prms.nRn, SERR_TEXT: prms.sErrMsg, NSTATUS: prms.nStatus },
|
SERR_TEXT: prms.sErrMsg,
|
||||||
{ autoCommit: true }
|
NSTATUS: prms.nStatus
|
||||||
);
|
|
||||||
} catch (e) {
|
|
||||||
throw new Error(e.message);
|
|
||||||
} finally {
|
|
||||||
if (pooledConnection) {
|
|
||||||
try {
|
|
||||||
await pooledConnection.close();
|
|
||||||
} catch (e) {
|
|
||||||
throw new Error(e.message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
//Считывание записей прикладываемых документов
|
//Считывание записей прикладываемых документов
|
||||||
const getMailAttach = async prms => {
|
const getMailAttach = async prms => {
|
||||||
let pooledConnection;
|
let attachData = await prms.dbConn.executeStored({
|
||||||
try {
|
connection: prms.dbConn.connection,
|
||||||
pooledConnection = await prms.connection.getConnection();
|
sName: "PKG_EXS_EXT_MAIL.GET_ATTACH",
|
||||||
let res = await pooledConnection.execute(
|
inPrms: { NIDENT: prms.nIdent },
|
||||||
"begin PKG_EXS_EXT_MAIL.GET_ATTACH(NIDENT => :NIDENT, RCDOCUMENTS => :RCDOCUMENTS); end;",
|
outPrms: { RCDOCUMENTS: prms.dbConn.connector.DT_CURSOR }
|
||||||
{
|
});
|
||||||
NIDENT: prms.nIdent,
|
let rowsRes = [];
|
||||||
RCDOCUMENTS: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
if (attachData)
|
||||||
},
|
if (attachData.RCDOCUMENTS)
|
||||||
{ outFormat: oracledb.OBJECT, autoCommit: true }
|
attachData.RCDOCUMENTS.map(data => {
|
||||||
);
|
|
||||||
let rows = await readCursorData(res.outBinds.RCDOCUMENTS);
|
|
||||||
let rowsRes = [];
|
|
||||||
//Если результат запроса не пустой
|
|
||||||
if (rows.length !== 0) {
|
|
||||||
//Переводим BLOB в BUFFER и формируем формат аттача
|
|
||||||
for (let i = 0; i < rows.length; i++) {
|
|
||||||
let rowContent = await rows[i].BDATA.getData();
|
|
||||||
rowsRes.push({
|
rowsRes.push({
|
||||||
filename: rows[i].FILENAME,
|
filename: data.FILENAME ? data.FILENAME : data.filename,
|
||||||
content: rowContent
|
content: data.BDATA ? data.BDATA : data.bdata
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
}
|
return rowsRes;
|
||||||
return rowsRes;
|
|
||||||
} catch (e) {
|
|
||||||
throw new Error(e.message);
|
|
||||||
} finally {
|
|
||||||
if (pooledConnection) {
|
|
||||||
try {
|
|
||||||
await pooledConnection.close();
|
|
||||||
} catch (e) {
|
|
||||||
throw new Error(e.message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//Разбор XML
|
//Разбор XML
|
||||||
@ -125,7 +77,7 @@ const before = async prms => {
|
|||||||
parseRes = await parseXML(prms.queue.blMsg.toString());
|
parseRes = await parseXML(prms.queue.blMsg.toString());
|
||||||
//Если есть присоединенные файлы - добавляем их
|
//Если есть присоединенные файлы - добавляем их
|
||||||
if (parseRes.mail.ident) {
|
if (parseRes.mail.ident) {
|
||||||
parseRes.mail.attachments = await getMailAttach({ connection: prms.dbConn.connection, nIdent: parseRes.mail.ident });
|
parseRes.mail.attachments = await getMailAttach({ dbConn: prms.dbConn, nIdent: parseRes.mail.ident });
|
||||||
}
|
}
|
||||||
//Если указан текст в обычном формате
|
//Если указан текст в обычном формате
|
||||||
if (parseRes.mail.text) {
|
if (parseRes.mail.text) {
|
||||||
@ -158,7 +110,7 @@ const before = async prms => {
|
|||||||
//Если имеется рег. номер записи очереди отправки E-mail - обновляем информацию о текущем сообщении
|
//Если имеется рег. номер записи очереди отправки E-mail - обновляем информацию о текущем сообщении
|
||||||
if (parseRes.mail.nExsextmailId) {
|
if (parseRes.mail.nExsextmailId) {
|
||||||
await setSendMsg({
|
await setSendMsg({
|
||||||
connection: prms.dbConn.connection,
|
dbConn: prms.dbConn,
|
||||||
nRn: parseRes.mail.nExsextmailId,
|
nRn: parseRes.mail.nExsextmailId,
|
||||||
sErrMsg: "",
|
sErrMsg: "",
|
||||||
nStatus: NSTATUS_DONE
|
nStatus: NSTATUS_DONE
|
||||||
@ -170,7 +122,7 @@ const before = async prms => {
|
|||||||
//Если имеется рег. номер записи очереди отправки E-mail - обновляем информацию о текущем сообщении
|
//Если имеется рег. номер записи очереди отправки E-mail - обновляем информацию о текущем сообщении
|
||||||
if (parseRes.mail.nExsextmailId) {
|
if (parseRes.mail.nExsextmailId) {
|
||||||
await setSendMsg({
|
await setSendMsg({
|
||||||
connection: prms.dbConn.connection,
|
dbConn: prms.dbConn,
|
||||||
nRn: parseRes.mail.nExsextmailId,
|
nRn: parseRes.mail.nExsextmailId,
|
||||||
sErrMsg: res,
|
sErrMsg: res,
|
||||||
nStatus: NSTATUS_ERR
|
nStatus: NSTATUS_ERR
|
||||||
|
Loading…
x
Reference in New Issue
Block a user