import config from "./config/config"; import logging from "./config/logging"; import * as Xcron from "node-cron"; import { getOrder, updateCashback, uploadCashback } from "./lib_cashback"; import { download, upload, getDataNatInfo, insertNatInfo } from "./lib_member"; import { uploadPayment } from "./lib_payment"; import { retur } from "./lib_retur"; import axios from "axios"; export const NAME_SPACE = "Point Member Gateway"; const VERSION = "1.0"; let isRunning: boolean = false; logging.info(NAME_SPACE, "Starting " + VERSION); const on_init = async () => { logging.info(NAME_SPACE, "On Init Start"); await one_result_job(); await cashback(); await payment(); await returJob(); logging.info(NAME_SPACE, "On Init End"); }; on_init(); async function one_result_job() { if (isRunning) { logging.info(NAME_SPACE, "Still Running"); return; } isRunning = true; try { logging.info(NAME_SPACE, "Starting Job Member" + VERSION); // UPLOAD logging.info(NAME_SPACE, "Start upload"); var up = await upload(); if (up["status"] != "OK") { logging.error(NAME_SPACE, "\t Error", up); } else { logging.info(NAME_SPACE, "\t Success", up); } //Sleep logging.info(NAME_SPACE, "\t wait 1s"); await delay(1000); logging.info(NAME_SPACE, "Start download"); var dn = await download(); if (dn["status"] != "OK") { logging.error(NAME_SPACE, "\t Error", dn); } else { logging.info(NAME_SPACE, "\t Success", dn); } logging.info(NAME_SPACE, "Start Get Info Member National"); var inf = await getDataNatInfo(); let infoList = []; if (inf["status"] != "OK") { logging.error(NAME_SPACE, "\t Error", inf); } else { infoList = inf["records"]; logging.info(NAME_SPACE, "\t Success, total data", inf["total"]); } logging.info(NAME_SPACE, "\t Start Insert info"); for (let i = 0; i < infoList.length; i++) { const e = infoList[i]; logging.info(NAME_SPACE, "\t\t Start Insert info ", e["member_nik"]); // {"member_nik":"0123459547894563","member_point":"20000","member_visit":"2"} var insert = await insertNatInfo( e["member_nik"], e["member_point"], e["member_visit"] ); if (insert["status"] != "OK") { logging.error(NAME_SPACE, "\t\t Error", insert); } else { logging.info(NAME_SPACE, "\t\t Success insert/update data", insert); } logging.info(NAME_SPACE, "\t\t wait 1s"); await delay(1000); } logging.info(NAME_SPACE, "\t End Insert info"); logging.info(NAME_SPACE, "End Job Member"); isRunning = false; } catch (e) { isRunning = false; if (e instanceof Error) { logging.error(NAME_SPACE, e.message); } else { logging.error(NAME_SPACE, "Unknown"); } } } async function cashback() { if (isRunning) { logging.info(NAME_SPACE, "Still Running"); return; } isRunning = true; try { logging.info(NAME_SPACE, "Starting Job Cashback" + VERSION); // UPLOAD logging.info(NAME_SPACE, "Start Get Data"); var respOrder = await getOrder(); if (respOrder["status"] != "OK") { logging.error(NAME_SPACE, "\t Error", respOrder); } else { logging.info( NAME_SPACE, "\t Success get order ", respOrder["data"].length ); } logging.info(NAME_SPACE, "\t wait 1s"); await delay(1000); let listOrder = respOrder["data"]; logging.info(NAME_SPACE, "Start update cashback"); for (let i = 0; i < listOrder.length; i++) { const e = listOrder[i]; logging.info( NAME_SPACE, "\t Start update cashback " + e["T_OrderHeaderLabNumber"] ); var respInsert = await updateCashback(e["T_OrderHeaderID"]); if (respInsert["status"] != "OK") { logging.error(NAME_SPACE, "\t Error update cashback", respInsert); } else { logging.info( NAME_SPACE, "\t Success update cashback", respInsert["status"] ); } logging.info( NAME_SPACE, "End update cashback " + e["T_OrderHeaderLabNumber"] ); logging.info(NAME_SPACE, "\t wait 1s"); await delay(1000); } logging.info(NAME_SPACE, "End update cashback"); logging.info(NAME_SPACE, "\t wait 1s"); await delay(1000); logging.info(NAME_SPACE, "Start upload cashback point"); var up = await uploadCashback(); if (up["status"] != "OK") { logging.error(NAME_SPACE, "\t Error", up); } else { logging.info(NAME_SPACE, "\t Success", up); } logging.info(NAME_SPACE, "END upload cashback point"); logging.info(NAME_SPACE, "End Job Cashback"); isRunning = false; } catch (e) { isRunning = false; if (e instanceof Error) { logging.error(NAME_SPACE, e.message); } else { logging.error(NAME_SPACE, "Unknown"); } } } async function payment() { if (isRunning) { logging.info(NAME_SPACE, "Still Running"); return; } isRunning = true; try { logging.info(NAME_SPACE, "Starting Job Payment" + VERSION); // UPLOAD logging.info(NAME_SPACE, "Start Upload Payment"); var respOrder = await uploadPayment(); if (respOrder["status"] != "OK") { logging.error(NAME_SPACE, "\t Error", respOrder); } else { logging.info(NAME_SPACE, "\t Success upload payment ", respOrder); } logging.info(NAME_SPACE, "\t wait 1s"); logging.info(NAME_SPACE, "End Job Payment"); isRunning = false; } catch (e) { isRunning = false; if (e instanceof Error) { logging.error(NAME_SPACE, e.message); } else { logging.error(NAME_SPACE, "Unknown"); } } } async function returJob() { if (isRunning) { logging.info(NAME_SPACE, "Still Running"); return; } isRunning = true; try { logging.info(NAME_SPACE, "Starting Job Retur" + VERSION); // UPLOAD logging.info(NAME_SPACE, "Start Upload Retur"); var respOrder = await retur(); if (respOrder["status"] != "OK") { logging.error(NAME_SPACE, "\t Error", respOrder); } else { logging.info(NAME_SPACE, "\t Success retur ", respOrder); } logging.info(NAME_SPACE, "\t wait 1s"); logging.info(NAME_SPACE, "End Job Retur"); 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 () => { await one_result_job(); }, { timezone: "Asia/Jakarta", } ); } // ------------- function async function delay(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); }