From e6d697139175b841be33e12ec74744409bf1926e Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 5 Apr 2025 14:01:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-916=20-=20=D0=A0=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0=20E-Mail=20-=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20PG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/send_mail.js | 98 +++++++++++--------------------------------- 1 file changed, 25 insertions(+), 73 deletions(-) diff --git a/modules/send_mail.js b/modules/send_mail.js index bfb5c79..971e341 100644 --- a/modules/send_mail.js +++ b/modules/send_mail.js @@ -10,7 +10,6 @@ const xml2js = require("xml2js"); //Конвертация XML в JSON и JSON в XML const cfg = require("./../config"); //Настройки сервера приложений 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 => { - let pooledConnection; - try { - pooledConnection = await prms.connection.getConnection(); - await pooledConnection.execute( - "begin PKG_EXS_EXT_MAIL.EXSEXTMAIL_SET_STATUS(NRN => :NRN, SERR_TEXT => :SERR_TEXT, NSTATUS => :NSTATUS); end;", - { NRN: prms.nRn, SERR_TEXT: prms.sErrMsg, NSTATUS: prms.nStatus }, - { autoCommit: true } - ); - } catch (e) { - throw new Error(e.message); - } finally { - if (pooledConnection) { - try { - await pooledConnection.close(); - } catch (e) { - throw new Error(e.message); - } + await prms.dbConn.executeStored({ + connection: prms.dbConn.connection, + sName: "PKG_EXS_EXT_MAIL.EXSEXTMAIL_SET_STATUS", + inPrms: { + NRN: prms.nRn, + SERR_TEXT: prms.sErrMsg, + NSTATUS: prms.nStatus } - } + }); }; //Считывание записей прикладываемых документов const getMailAttach = async prms => { - let pooledConnection; - try { - pooledConnection = await prms.connection.getConnection(); - let res = await pooledConnection.execute( - "begin PKG_EXS_EXT_MAIL.GET_ATTACH(NIDENT => :NIDENT, RCDOCUMENTS => :RCDOCUMENTS); end;", - { - NIDENT: prms.nIdent, - RCDOCUMENTS: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } - }, - { outFormat: oracledb.OBJECT, autoCommit: true } - ); - 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(); + let attachData = await prms.dbConn.executeStored({ + connection: prms.dbConn.connection, + sName: "PKG_EXS_EXT_MAIL.GET_ATTACH", + inPrms: { NIDENT: prms.nIdent }, + outPrms: { RCDOCUMENTS: prms.dbConn.connector.DT_CURSOR } + }); + let rowsRes = []; + if (attachData) + if (attachData.RCDOCUMENTS) + attachData.RCDOCUMENTS.map(data => { rowsRes.push({ - filename: rows[i].FILENAME, - content: rowContent + filename: data.FILENAME ? data.FILENAME : data.filename, + content: data.BDATA ? data.BDATA : data.bdata }); - } - } - return rowsRes; - } catch (e) { - throw new Error(e.message); - } finally { - if (pooledConnection) { - try { - await pooledConnection.close(); - } catch (e) { - throw new Error(e.message); - } - } - } + }); + return rowsRes; }; //Разбор XML @@ -125,7 +77,7 @@ const before = async prms => { parseRes = await parseXML(prms.queue.blMsg.toString()); //Если есть присоединенные файлы - добавляем их 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) { @@ -158,7 +110,7 @@ const before = async prms => { //Если имеется рег. номер записи очереди отправки E-mail - обновляем информацию о текущем сообщении if (parseRes.mail.nExsextmailId) { await setSendMsg({ - connection: prms.dbConn.connection, + dbConn: prms.dbConn, nRn: parseRes.mail.nExsextmailId, sErrMsg: "", nStatus: NSTATUS_DONE @@ -170,7 +122,7 @@ const before = async prms => { //Если имеется рег. номер записи очереди отправки E-mail - обновляем информацию о текущем сообщении if (parseRes.mail.nExsextmailId) { await setSendMsg({ - connection: prms.dbConn.connection, + dbConn: prms.dbConn, nRn: parseRes.mail.nExsextmailId, sErrMsg: res, nStatus: NSTATUS_ERR