257 lines
7.1 KiB
TypeScript
257 lines
7.1 KiB
TypeScript
import config from "./config/config";
|
|
import logging from "./config/logging";
|
|
import * as Xcron from "node-cron";
|
|
|
|
import {
|
|
getListOutbox,
|
|
sendToQontak,
|
|
uploadFileCdn,
|
|
changeStatusOutbox,
|
|
} from "./lib-inject";
|
|
|
|
export const NAME_SPACE = "SENT RESULT VIA WA";
|
|
const VERSION = "1.0";
|
|
|
|
let isRunning = false;
|
|
|
|
logging.info(NAME_SPACE, "Starting. Ver:", `${VERSION}`);
|
|
|
|
const on_init = async () => {
|
|
logging.info(
|
|
NAME_SPACE,
|
|
"-------------------- ON INIT START --------------------"
|
|
);
|
|
|
|
await main("N");
|
|
await main("E");
|
|
await main("R");
|
|
|
|
logging.info(
|
|
NAME_SPACE,
|
|
"-------------------- ON INIT END --------------------"
|
|
);
|
|
};
|
|
|
|
on_init();
|
|
|
|
async function main(status: string) {
|
|
if (isRunning) {
|
|
logging.info(NAME_SPACE, "Process is running. Skip this run.");
|
|
return;
|
|
}
|
|
isRunning = true;
|
|
|
|
try {
|
|
logging.info(NAME_SPACE, "Process is running. Start to get list outbox.");
|
|
|
|
let outboxs = await getLists(status);
|
|
|
|
/* Pesan minta diproses kirim */
|
|
if (status == "N") {
|
|
logging.info(NAME_SPACE, "GET Processed (N) Message");
|
|
|
|
for (let i = 0; i < outboxs.length; i++) {
|
|
let outbox = outboxs[i];
|
|
logging.info(NAME_SPACE, "\t Detail: ", outbox);
|
|
let retry = outbox.XWaOutboxIsRetry;
|
|
|
|
/* Jika fileUrl masih 0, maka panggil upload file */
|
|
if (outbox.fileUrl == null) {
|
|
let resp = uploadFile(outbox);
|
|
logging.info(NAME_SPACE, "\t Uploading File to CDN: ", resp);
|
|
logging.info(NAME_SPACE, "\t wait 2s \t");
|
|
await delay(2000);
|
|
|
|
if ((await resp) == "OK") {
|
|
logging.info(NAME_SPACE, "\t File Uploaded");
|
|
|
|
let response = sentMsg(outbox, status, retry);
|
|
|
|
logging.info(NAME_SPACE, "\t wait 4s \t");
|
|
await delay(4000);
|
|
|
|
logging.info(NAME_SPACE, "\t Resp Qontak: ", response);
|
|
} else {
|
|
// Change Status ke Error
|
|
changeStatus(outbox, "E", retry);
|
|
}
|
|
} else {
|
|
// Jika fileUrl sudah ada maka langsung kirim file
|
|
let response = sentMsg(outbox, status, retry);
|
|
|
|
logging.info(NAME_SPACE, "\t wait 4s \t");
|
|
await delay(4000);
|
|
|
|
logging.info(NAME_SPACE, "\t Resp Qontak: ", response);
|
|
}
|
|
}
|
|
} else if (status == "E") {
|
|
/* Pesan Eror < 5x retry */
|
|
logging.info(NAME_SPACE, "GET Error (E) Message");
|
|
for (let i = 0; i < outboxs.length; i++) {
|
|
let outbox = outboxs[i];
|
|
logging.info(NAME_SPACE, "\t Detail: ", outbox);
|
|
let retry = outbox.XWaOutboxIsRetry;
|
|
|
|
if (retry >= 5) {
|
|
logging.info(
|
|
NAME_SPACE,
|
|
"\t Retry count more than 5. Skip this message."
|
|
);
|
|
continue;
|
|
} else {
|
|
retry++;
|
|
|
|
if (outbox.fileUrl == null) {
|
|
let resp = uploadFile(outbox);
|
|
logging.info(NAME_SPACE, "\t Uploading File to CDN: ", resp);
|
|
logging.info(NAME_SPACE, "\t wait 2s \t");
|
|
await delay(2000);
|
|
|
|
if ((await resp) == "OK") {
|
|
logging.info(NAME_SPACE, "\t File Uploaded");
|
|
|
|
let response = sentMsg(outbox, status, retry);
|
|
|
|
logging.info(NAME_SPACE, "\t wait 4s \t");
|
|
await delay(4000);
|
|
|
|
logging.info(NAME_SPACE, "\t Resp Qontak: ", response);
|
|
} else {
|
|
changeStatus(outbox, "E", retry);
|
|
}
|
|
} else {
|
|
let response = sentMsg(outbox, status, retry);
|
|
logging.info(NAME_SPACE, "\t wait 4s \t");
|
|
await delay(4000);
|
|
logging.info(NAME_SPACE, "\t Resp Qontak: ", response);
|
|
}
|
|
}
|
|
}
|
|
} else if (status == "R") {
|
|
logging.info(NAME_SPACE, "GET Rejected (R) Message");
|
|
|
|
for (let i = 0; i < outboxs.length; i++) {
|
|
let outbox = outboxs[i];
|
|
logging.info(NAME_SPACE, "\t Detail: ", outbox);
|
|
let retry = outbox.XWaOutboxIsRetry;
|
|
|
|
/* Jika fileUrl masih 0, maka panggil upload file */
|
|
if (outbox.fileUrl == null) {
|
|
let resp = uploadFile(outbox);
|
|
logging.info(NAME_SPACE, "\t Uploading File to CDN: ", resp);
|
|
logging.info(NAME_SPACE, "\t wait 2s \t");
|
|
await delay(2000);
|
|
|
|
if ((await resp) == "OK") {
|
|
logging.info(NAME_SPACE, "\t File Uploaded");
|
|
|
|
let response = sentMsg(outbox, status, retry);
|
|
|
|
logging.info(NAME_SPACE, "\t wait 4s \t");
|
|
await delay(4000);
|
|
|
|
logging.info(NAME_SPACE, "\t Resp Qontak: ", response);
|
|
} else {
|
|
// Change Status ke Error
|
|
changeStatus(outbox, "E", retry);
|
|
}
|
|
} else {
|
|
// Jika fileUrl sudah ada maka langsung kirim file
|
|
let response = sentMsg(outbox, status, retry);
|
|
|
|
logging.info(NAME_SPACE, "\t wait 4s \t");
|
|
await delay(4000);
|
|
|
|
logging.info(NAME_SPACE, "\t Resp Qontak: ", response);
|
|
}
|
|
}
|
|
}
|
|
|
|
logging.info(NAME_SPACE, "End Job Get Order");
|
|
isRunning = false;
|
|
} catch (e) {
|
|
isRunning = false;
|
|
if (e instanceof Error) {
|
|
logging.error(NAME_SPACE, e.message);
|
|
} else {
|
|
logging.error(NAME_SPACE, "Unknown");
|
|
}
|
|
}
|
|
}
|
|
|
|
async function getLists(status: string) {
|
|
const statusOutbox = status;
|
|
// const statusOutbox = config.statusOutbox;
|
|
const startDate = config.startDate;
|
|
const endDate = config.endDate;
|
|
const setupID = config.mcuID;
|
|
|
|
var resp = await getListOutbox(statusOutbox, startDate, endDate, setupID);
|
|
if (resp["status"] != "OK") {
|
|
logging.error(NAME_SPACE, "\t Error get outbox data", resp);
|
|
logging.error(NAME_SPACE, "\t Error: ", resp);
|
|
} else {
|
|
logging.info(
|
|
NAME_SPACE,
|
|
"\t Success get order data found ",
|
|
resp.data.length
|
|
);
|
|
}
|
|
const result =
|
|
typeof resp.data === "string" ? JSON.parse(resp.data) : resp.data;
|
|
return result;
|
|
}
|
|
|
|
async function sentMsg(item: any, status: string, retry: number) {
|
|
let payload = {
|
|
orderID: item.orderID,
|
|
orderDate: item.orderDate,
|
|
patientDOB: item.patientDOB,
|
|
patientName: item.patientName,
|
|
patientHp: item.patientHp,
|
|
corpName: item.CorporateName,
|
|
fileName: item.fileName,
|
|
statusOutbox: status,
|
|
retryOutbox: retry,
|
|
sendWaID: item.sendWaID,
|
|
};
|
|
// return payload;
|
|
|
|
/* Axios for POST to the WA API */
|
|
var response = await sendToQontak(payload); // Response "OK"
|
|
return response;
|
|
}
|
|
|
|
async function uploadFile(item: any) {
|
|
let payload = {
|
|
fileName: item.fileName,
|
|
rptUrl: item.localUrl,
|
|
mime: "application/pdf",
|
|
XWaOutboxID: item.sendWaID,
|
|
};
|
|
// return payload;
|
|
|
|
var response = await uploadFileCdn(payload); // Response "OK"
|
|
return response;
|
|
}
|
|
|
|
async function changeStatus(item: any, status: string, retry: number) {
|
|
let payload = {
|
|
toStatus: status,
|
|
XWaOutboxID: item.sendWaID,
|
|
retry: retry,
|
|
};
|
|
// return payload;
|
|
|
|
var response = await changeStatusOutbox(payload);
|
|
return response;
|
|
}
|
|
|
|
async function delay(ms: number) {
|
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
}
|
|
function elseif(arg0: boolean) {
|
|
throw new Error("Function not implemented.");
|
|
}
|