import config from "./config/config"; import logging from "./config/logging"; import * as Xcron from "node-cron"; import { getDetail, getOrder, inject } from "./lib-inject"; export const NAME_SPACE = "INJECT DTL RESUME INDIVIDU"; const VERSION = "1.0"; let isRunning: boolean = false; logging.info(NAME_SPACE, "Starting " + VERSION); const on_init = async () => { logging.info( NAME_SPACE, "-------------------- ON INT START --------------------" ); await Inject(); logging.info( NAME_SPACE, "-------------------- ON INIT END --------------------" ); }; on_init(); async function Inject() { if (isRunning) { logging.info(NAME_SPACE, "Still Running"); return; } isRunning = true; try { logging.info(NAME_SPACE, "Starting Job Inject" + VERSION); // UPLOAD logging.info(NAME_SPACE, "Start GET ORDER"); var respOrder = await getOrder( config.mcuID, config.startDate, config.endDate ); if (respOrder["status"] != "OK") { logging.error(NAME_SPACE, "\t Error", respOrder); } else { logging.info( NAME_SPACE, "\t Success get order data found ", respOrder.data.length ); } let orders = respOrder.data; logging.info(NAME_SPACE, "\t\t wait 1s"); await delay(1000); logging.info(NAME_SPACE, "End Job Get Order"); for (let index = 0; index < orders.length; index++) { const element = orders[index]; logging.info(NAME_SPACE, "START GET DETAIL"); let count = index + 1; logging.info( NAME_SPACE, "GET DETAIL :" + count + "/" + respOrder.data.length.toString() ); var respDetail = await getDetail(element.orderID); if (respDetail["status"] != "OK") { logging.error(NAME_SPACE, "\t Error", respDetail); } else { let detail = respDetail.data; logging.info( NAME_SPACE, "\t Success get order data found ", respDetail.data.length ); if (detail == 0) { logging.info(NAME_SPACE, "\t Not Inject "); } else { logging.info(NAME_SPACE, "\t\t START INJECT DATA "); logging.info( NAME_SPACE, "\t\t START INJECT DATA NO REG", element.labNumber ); logging.info( NAME_SPACE, "\t\t START INJECT DATA NAME", element.patientName ); logging.info( NAME_SPACE, "\t\t START CORPORATE", element.corporateName ); for (let j = 0; j < detail.length; j++) { const e = detail[j]; logging.info( NAME_SPACE, "\t\t\t INJECT GROUP RESULT :", e.groupResultName ); logging.info(NAME_SPACE, "\t\t\t INJECT TESTNAME :", e.testName); logging.info(NAME_SPACE, "\t\t\t INJECT CATEGORY :", e.category); logging.info( NAME_SPACE, "\t\t\t INJECT RST :", e.resumeEntryResult ); var respInsert = await inject(e); if (respInsert["status"] != "OK") { logging.error(NAME_SPACE, "\t\t\t Error", respInsert); } else { logging.info(NAME_SPACE, "\t\t\t Success Insert", respInsert); } logging.info(NAME_SPACE, "\t\t\t wait 1s"); await delay(1000); } logging.info(NAME_SPACE, "\t\t END INJECT DATA "); } } logging.info(NAME_SPACE, "\t wait 1s"); await delay(1000); logging.info(NAME_SPACE, "END GET DETAIL"); } isRunning = false; } catch (e) { isRunning = false; if (e instanceof Error) { logging.error(NAME_SPACE, e.message); } else { logging.error(NAME_SPACE, "Unknown"); } } } // console.log(config); for (const sched of config.schedule) { Xcron.schedule( sched, async () => { logging.info( NAME_SPACE, " -------------------- ON INIT SCHEDULE --------------------" ); logging.info( NAME_SPACE, "-------------------- END SCHEDULE--------------------" ); }, { timezone: "Asia/Jakarta", } ); } // ------------- function async function delay(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); }