Untitled
unknown
plain_text
10 months ago
5.9 kB
13
Indexable
const { exec } = require("child_process");
const fs = require("fs");
const logFile = "/home/fdsuser/app/log/teller_report.log";
function log(message) {
const timestamp = new Date().toISOString().replace("T", " ").split(".")[0];
const logMsg = `[${timestamp}] ${message}\n`;
fs.appendFileSync(logFile, logMsg);
console.log(logMsg.trim());
}
function runCommand(command, description) {
return new Promise((resolve, reject) => {
log(`START: ${description}`);
exec(command, { maxBuffer: 1024 * 1024 * 10 }, (error, stdout, stderr) => {
if (error) {
log(`ERROR: ${description} -> ${error.message}`);
return reject(error);
}
if (stderr) {
log(`STDERR: ${description} -> ${stderr}`);
}
log(`SUCCESS: ${description}`);
resolve(stdout);
});
});
}
const commands = [
{ desc: "Outside Normal Hour - Query", cmd: `/home/fdsuser/app/bin/mssqlquery -query "SELECT CAST(DTDATE AS VARCHAR(MAX)) AS DTDATE, RIGHT('000000' + CAST(DTTRTM AS VARCHAR(6)), 6) AS DTTRTM, CAST(DTDBCR AS VARCHAR(MAX)) AS DTDBCR, CAST(DTDES1 AS VARCHAR(MAX)) AS DTDES1, CAST(DTDES2 AS VARCHAR(MAX)) AS DTDES2, CAST(DTTLID AS VARCHAR(MAX)) AS DTTLID, CAST(DTTXCD AS VARCHAR(MAX)) AS DTTXCD, CAST(DTSUPV AS VARCHAR(MAX)) AS DTSUPV, CAST(DTWSID AS VARCHAR(MAX)) AS DTWSID, CAST(DTACCT AS VARCHAR(MAX)) AS DTACCT, CAST(DTAMT AS VARCHAR(MAX)) AS DTAMT FROM DTRANH WHERE DTDATE = CONVERT(CHAR(8), GETDATE()-1, 112) AND (RIGHT('000000' + CAST(DTTRTM AS VARCHAR(6)), 6) < '050000' OR RIGHT('000000' + CAST(DTTRTM AS VARCHAR(6)), 6) > '160000') AND DTTLID LIKE '%TL%' AND LEN(DTTLID) = 10" -output "/home/fdsuser/app/csv/outside_normal_hours.csv"` },
{ desc: "Outside Normal Hour - Script", cmd: "/home/fdsuser/app/bin/outside_normal_hours.sh" },
{ desc: "Dormant Account - Query", cmd: `/home/fdsuser/app/bin/mssqlquery -query "SELECT CAST(DTDATE AS VARCHAR(50)) AS DTDATE, CAST(DTTRTM AS VARCHAR(50)) AS DTTRTM, CAST(DTDBCR AS VARCHAR(50)) AS DTDBCR, CAST(DTDES1 AS VARCHAR(200)) AS DTDES1, CAST(DTDES2 AS VARCHAR(200)) AS DTDES2, CAST(DTTLID AS VARCHAR(50)) AS DTTLID, CAST(DTTXCD AS VARCHAR(50)) AS DTTXCD, CAST(DTSUPV AS VARCHAR(50)) AS DTSUPV, CAST(DTWSID AS VARCHAR(50)) AS DTWSID, CAST(DTACCT AS VARCHAR(50)) AS DTACCT, CAST(DTAMT AS VARCHAR(50)) AS DTAMT, CAST(DDXD01 AS VARCHAR(50)) AS DDXD01 FROM DTRANH A INNER JOIN DTRCD B ON A.DTTAPC = B.DFRAPC AND A.DTTXCD = B.DFRNCD INNER JOIN DDORM C ON A.DTACCT = C.DDXACT WHERE DTDATE = CONVERT(CHAR(8), GETDATE()-1, 112) AND DDXD01 IN (1,2,3) AND DTTLID LIKE '%TL%' AND LEN(DTTLID) = 10" -output "/home/fdsuser/app/csv/dormant_account.csv"` },
{ desc: "Dormant Account - Script", cmd: "/home/fdsuser/app/bin/dormant_account.sh" },
{ desc: "Multiple Withdrawal Deposit - Query", cmd: `/home/fdsuser/app/bin/mssqlquery -query "SELECT CAST(DTDATE AS VARCHAR(MAX)) AS DTDATE, CAST(DTTRTM AS VARCHAR(MAX)) AS DTTRTM, CAST(DTDBCR AS VARCHAR(MAX)) AS DTDBCR, CAST(DTDES1 AS VARCHAR(MAX)) AS DTDES1, CAST(DTDES2 AS VARCHAR(MAX)) AS DTDES2, CAST(DTTLID AS VARCHAR(MAX)) AS DTTLID, CAST(DTTXCD AS VARCHAR(MAX)) AS DTTXCD, CAST(DTSUPV AS VARCHAR(MAX)) AS DTSUPV, CAST(DTWSID AS VARCHAR(MAX)) AS DTWSID, CAST(DTACCT AS VARCHAR(MAX)) AS DTACCT, CAST(DTAMT AS VARCHAR(MAX)) AS DTAMT FROM DTRANH A INNER JOIN DTRCD B ON A.DTTAPC = B.DFRAPC AND A.DTTXCD = B.DFRNCD WHERE DTDATE = CONVERT(CHAR(8), DATEADD(DAY, -1, GETDATE()), 112) AND DTTLID LIKE '%TL%' AND LEN(DTTLID) = 10 ORDER BY DTDATE ASC, DTTRTM ASC" -output "/home/fdsuser/app/csv/multiple_withdrawal_deposit.csv"` },
{ desc: "Multiple Withdrawal Deposit - Script", cmd: "/home/fdsuser/app/bin/multiple_withdrawal_deposit.sh" },
{ desc: "Teller Reversal - Query", cmd: `/home/fdsuser/app/bin/mssqlquery -query "SELECT CAST(DTDATE AS VARCHAR(MAX)) AS DTDATE, CAST(DTTRTM AS VARCHAR(MAX)) AS DTTRTM, CAST(DTDBCR AS VARCHAR(MAX)) AS DTDBCR, CAST(DTDES1 AS VARCHAR(MAX)) AS DTDES1, CAST(DTDES2 AS VARCHAR(MAX)) AS DTDES2, CAST(DTTLID AS VARCHAR(MAX)) AS DTTLID, CAST(DTTXCD AS VARCHAR(MAX)) AS DTTXCD, CAST(DTSUPV AS VARCHAR(MAX)) AS DTSUPV, CAST(DTWSID AS VARCHAR(MAX)) AS DTWSID, CAST(DTACCT AS VARCHAR(MAX)) AS DTACCT, CAST(DTAMT AS VARCHAR(MAX)) AS DTAMT, CAST(DTPOD# AS VARCHAR(MAX)) AS DTPOD, CAST(DTEXST AS VARCHAR(MAX)) AS DTEXST FROM DTRANH A INNER JOIN DTRCD B ON CAST(A.DTTAPC AS VARCHAR(MAX)) = CAST(B.DFRAPC AS VARCHAR(MAX)) AND CAST(A.DTTXCD AS VARCHAR(MAX)) = CAST(B.DFRNCD AS VARCHAR(MAX)) WHERE DTEXST <> 'N' AND DTDATE = CONVERT(CHAR(8), GETDATE()-1, 112) AND DFAZLV IN ('0','1','2','3') AND DTTLID LIKE '%TL%' AND LEN(DTTLID) = 10 ORDER BY DTDATE ASC, DTTRTM ASC, DTEXST ASC" -output "/home/fdsuser/app/csv/teller_reversal.csv"` },
{ desc: "Teller Reversal - Script", cmd: "/home/fdsuser/app/bin/teller_reversal.sh" }
];
async function runAll() {
for (let c of commands) {
try {
await runCommand(c.cmd, c.desc);
} catch (e) {
log(`STOPPED: Error pada step "${c.desc}"`);
return;
}
}
log("=== SEMUA PERINTAH SELESAI BERHASIL ===");
}
// tracking supaya tidak dijalankan 2x di hari yang sama
let lastRunDate = null;
// Scheduler manual: cek setiap detik
setInterval(() => {
const now = new Date();
const hours = now.getHours();
const minutes = now.getMinutes();
const seconds = now.getSeconds();
const today = now.toISOString().slice(0, 10); // YYYY-MM-DD
console.log(`TELLER REPORT IS LISTENING ${today} ${hours}:${minutes}:${seconds}`)
if (hours === 8 && minutes === 0 && seconds === 0) {
if (lastRunDate !== today) {
lastRunDate = today;
log("=== JOB DIMULAI JAM 08:00:00 ===");
runAll();
}
}
}, 1000); // cek tiap 1 detik
Editor is loading...
Leave a Comment