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, getMember, uploadV2, downloadV2, generate, } 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 Get Member"); var mb = await getMember(); let member = []; if (mb["status"] != "OK") { logging.error(NAME_SPACE, "\t Error", mb); } else { if (mb["data"].length > 0) { member = mb["data"]; } logging.info(NAME_SPACE, "\t Success" + mb["data"].length); } //Sleep logging.info(NAME_SPACE, "\t wait 1s"); await delay(1000); if (member.length > 0) { logging.info(NAME_SPACE, "Start Upload Member To National"); for (let i = 0; i < member.length; i++) { const e = member[i]; logging.info(NAME_SPACE, "\t\tStart Upload " + e["MemberNumber"]); var dn = await uploadV2(e); logging.error(NAME_SPACE, "\t\t response", dn); if (dn["status"] != "OK") { logging.error(NAME_SPACE, "\t\t Error", dn); } else { logging.info(NAME_SPACE, "\t\t Success", dn); } logging.info(NAME_SPACE, "\t\t wait 1s"); await delay(1000); } logging.info(NAME_SPACE, "End Upload Member To National"); } else { logging.info(NAME_SPACE, "Tidak ada data upload"); } //DOWNLOAD logging.info(NAME_SPACE, "Start Download Member National"); var mbNat = await downloadV2(); let memberNat = []; if (mbNat["status"] != "OK") { logging.error(NAME_SPACE, "\t Error", mbNat); } else { if (mbNat["data"].length > 0) { memberNat = mbNat["data"]; } logging.info(NAME_SPACE, "\t Success" + mbNat["data"].length); } //Sleep logging.info(NAME_SPACE, "\t wait 1s"); await delay(1000); console.log("memberNat.length"); if (memberNat.length > 0) { logging.info(NAME_SPACE, "Start Generate Member National"); for (let i = 0; i < memberNat.length; i++) { const e = memberNat[i]; logging.info(NAME_SPACE, "\t\tStart generate " + e["MemberNumber"]); var dn = await generate(e); if (dn["status"] != "OK") { logging.error(NAME_SPACE, "\t\t Error", dn); } else { logging.info(NAME_SPACE, "\t\t Success", dn); } logging.info(NAME_SPACE, "\t\t wait 1s"); await delay(1000); } logging.info(NAME_SPACE, "End Generate Member National"); } else { logging.info(NAME_SPACE, "Tidak ada generate Member National"); } 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"]); } if (infoList.length > 0) { 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_visit"], e["member_point"] ); 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"); } else { logging.info(NAME_SPACE, "\t Tidak ada data 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"]; // console.log(listOrder); if (listOrder.length > 0) { 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"); } else { logging.info(NAME_SPACE, "Tidak ada update cashback"); } logging.info(NAME_SPACE, "\t wait 1s"); await delay(1000); logging.info(NAME_SPACE, "Start upload cashback point"); var ucp = await uploadCashback(); // console.log(ucp); if (ucp["status"] != "OK") { logging.error(NAME_SPACE, "\t Error", ucp); } else { logging.info(NAME_SPACE, "\t Success", ucp); } 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(); await cashback(); await payment(); await returJob(); }, { timezone: "Asia/Jakarta", } ); } // ------------- function async function delay(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); }