flexbiz-server 12.3.25 → 12.3.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/server/app.js +7 -7
- package/server/cluster.js +5 -5
- package/server/controllers/controller.js +1 -1
- package/server/controllers/controllerUtils.js +3 -3
- package/server/controllers/importFromExcelHandler.js +3 -3
- package/server/controllers/importFromGsHandler.js +3 -3
- package/server/controllers/importFromJsonHandler.js +2 -2
- package/server/controllers/importHandler.js +18 -17
- package/server/controllers/viewHandler.js +4 -4
- package/server/global.js +8 -7
- package/server/libs/WorkerStaticPool.js +14 -12
- package/server/libs/tinhgiatb.js +35 -35
- package/server/models/account.js +4 -4
- package/server/models/afflink.js +2 -2
- package/server/models/app.js +1 -1
- package/server/models/approve.js +3 -2
- package/server/models/assabcihandler.js +1 -1
- package/server/models/assbank.js +1 -1
- package/server/models/assbooking.js +4 -3
- package/server/models/assbuy.js +3 -2
- package/server/models/asscashwithdraw.js +3 -2
- package/server/models/assfindhash.js +2 -2
- package/server/models/assinvestment.js +5 -4
- package/server/models/assissue.js +1 -1
- package/server/models/asskey.js +2 -2
- package/server/models/assneedtobuy.js +3 -3
- package/server/models/assperiod.js +4 -5
- package/server/models/assproduct.js +9 -8
- package/server/models/assprofitsharing.js +3 -2
- package/server/models/assreceiver.js +3 -2
- package/server/models/assrequest.js +3 -3
- package/server/models/asssell.js +4 -3
- package/server/models/asstransaction.js +3 -2
- package/server/models/asstransfer.js +3 -3
- package/server/models/assuser_identity.js +2 -2
- package/server/models/asswithdraw.js +3 -3
- package/server/models/attend.js +2 -2
- package/server/models/banggiaban.js +4 -4
- package/server/models/bangtinhluong.js +3 -2
- package/server/models/base.js +2 -1
- package/server/models/bds_area.js +2 -2
- package/server/models/bds_block.js +2 -2
- package/server/models/bds_building.js +1 -1
- package/server/models/bds_floor.js +2 -2
- package/server/models/bds_floordetail.js +4 -3
- package/server/models/bds_nhadat.js +5 -4
- package/server/models/bds_nhomnhadat.js +2 -1
- package/server/models/bds_phanloainhadat.js +2 -1
- package/server/models/bg1.js +3 -2
- package/server/models/bg2.js +3 -2
- package/server/models/cache.js +1 -1
- package/server/models/calllog.js +2 -2
- package/server/models/campaign.js +1 -1
- package/server/models/cart.js +3 -3
- package/server/models/cddiem.js +1 -1
- package/server/models/cddt.js +2 -2
- package/server/models/cdkh.js +2 -2
- package/server/models/cdkhtheongay.js +2 -2
- package/server/models/cdnphep.js +2 -2
- package/server/models/cdtk.js +2 -2
- package/server/models/cdtktheongay.js +2 -2
- package/server/models/cdvt.js +3 -2
- package/server/models/cdvtnpp.js +2 -2
- package/server/models/cdvttheongay.js +3 -2
- package/server/models/chamcong.js +3 -2
- package/server/models/checkin.js +1 -1
- package/server/models/checkinactivity.js +2 -1
- package/server/models/checkinkpi.js +3 -2
- package/server/models/checkinlocation.js +2 -2
- package/server/models/chitieukpi.js +2 -2
- package/server/models/chudethaoluan.js +3 -2
- package/server/models/ckgtluong.js +1 -1
- package/server/models/colleague.js +1 -1
- package/server/models/comment.js +1 -1
- package/server/models/congdoansx.js +3 -3
- package/server/models/congtacvien.js +1 -1
- package/server/models/congthuctinhgiaban.js +4 -4
- package/server/models/consultant.js +2 -2
- package/server/models/contract.js +4 -3
- package/server/models/counter.js +1 -1
- package/server/models/ctds.js +3 -2
- package/server/models/ctds2.js +4 -4
- package/server/models/currency.js +1 -1
- package/server/models/customer.js +5 -5
- package/server/models/databanle.js +5 -4
- package/server/models/datlich.js +3 -3
- package/server/models/department.js +2 -2
- package/server/models/dh2.js +4 -3
- package/server/models/diagram.js +2 -1
- package/server/models/dinhmucsx.js +3 -2
- package/server/models/dkhoc.js +3 -2
- package/server/models/dknphep.js +2 -2
- package/server/models/dmban.js +3 -2
- package/server/models/dmbp.js +3 -2
- package/server/models/dmca.js +1 -1
- package/server/models/dmchietkhau.js +6 -5
- package/server/models/dmchietkhauhd.js +4 -4
- package/server/models/dmcpmh.js +2 -2
- package/server/models/dmdiemthuong.js +3 -2
- package/server/models/dmdoi.js +3 -3
- package/server/models/dmdoituongdanhgia.js +1 -1
- package/server/models/dmdt.js +3 -3
- package/server/models/dmdvt.js +1 -1
- package/server/models/dmgiaban.js +4 -3
- package/server/models/dmgiamua.js +3 -2
- package/server/models/dmgiathitruong.js +3 -2
- package/server/models/dmgiathitruong_ngay.js +1 -1
- package/server/models/dmgiathitruong_theodoi.js +2 -2
- package/server/models/dmhoahonghd.js +5 -4
- package/server/models/dmhoahongnpp.js +5 -4
- package/server/models/dmkc.js +2 -2
- package/server/models/dmkho.js +2 -2
- package/server/models/dmkhuyenmai.js +4 -3
- package/server/models/dmkhuyenmaihd.js +3 -2
- package/server/models/dmletet.js +1 -1
- package/server/models/dmlo.js +2 -2
- package/server/models/dmloaicong.js +3 -2
- package/server/models/dmloaitask.js +2 -2
- package/server/models/dmloaits.js +2 -2
- package/server/models/dmnckkm.js +3 -2
- package/server/models/dmnghiepvu.js +2 -1
- package/server/models/dmnguonvon.js +2 -2
- package/server/models/dmnhnv.js +3 -3
- package/server/models/dmnv.js +3 -3
- package/server/models/dmnvt.js +4 -3
- package/server/models/dmphatdichvu.js +3 -2
- package/server/models/dmphi.js +2 -2
- package/server/models/dmqct.js +2 -2
- package/server/models/dmqddvt.js +1 -1
- package/server/models/dmtanggiamts.js +2 -2
- package/server/models/dmto.js +3 -3
- package/server/models/dmtt.js +3 -2
- package/server/models/dmvt.js +6 -6
- package/server/models/dmyt.js +2 -1
- package/server/models/dn0.js +3 -2
- package/server/models/dnm.js +3 -3
- package/server/models/dokho.js +2 -2
- package/server/models/domain.js +2 -2
- package/server/models/dvcs.js +1 -1
- package/server/models/ecomcategories.js +3 -2
- package/server/models/ecomcategories_cty.js +3 -3
- package/server/models/ecomproductlines.js +2 -2
- package/server/models/ecompromotion_flashsales.js +2 -2
- package/server/models/ecompromotion_freeships.js +2 -2
- package/server/models/endpoint.js +2 -1
- package/server/models/events.js +1 -1
- package/server/models/evoucher.js +3 -2
- package/server/models/experiencejourney.js +2 -2
- package/server/models/experiencejourneydata.js +4 -4
- package/server/models/experiencejourneypersona.js +1 -1
- package/server/models/experiencejourneystage.js +1 -1
- package/server/models/exportexceltemplate.js +2 -2
- package/server/models/fbconversation.js +1 -1
- package/server/models/fbmessage.js +1 -1
- package/server/models/fbpage.js +2 -2
- package/server/models/fieldright.js +2 -2
- package/server/models/file.js +3 -2
- package/server/models/financialroadmap.js +1 -1
- package/server/models/folder.js +3 -2
- package/server/models/follow.js +1 -1
- package/server/models/form.js +2 -2
- package/server/models/forminfo.js +2 -2
- package/server/models/formvalue.js +2 -2
- package/server/models/giaoca.js +1 -1
- package/server/models/giatb.js +2 -2
- package/server/models/group.js +3 -2
- package/server/models/gt_ctgt.js +2 -2
- package/server/models/gt_hspb.js +2 -1
- package/server/models/gt_sltk.js +2 -2
- package/server/models/gt_thcppstk.js +2 -2
- package/server/models/hanmucton.js +2 -2
- package/server/models/hd1.js +3 -2
- package/server/models/hd2.js +4 -4
- package/server/models/hd3.js +3 -3
- package/server/models/hd4.js +3 -2
- package/server/models/hd7.js +3 -2
- package/server/models/hd8.js +3 -2
- package/server/models/hde.js +3 -2
- package/server/models/hlink.js +1 -1
- package/server/models/hlinkvalue.js +1 -1
- package/server/models/hmcn.js +2 -1
- package/server/models/hmcnct.js +2 -2
- package/server/models/hspbts.js +1 -1
- package/server/models/htl.js +1 -1
- package/server/models/importexceltemplate.js +2 -2
- package/server/models/introducebonus.js +3 -2
- package/server/models/introducecode.js +2 -2
- package/server/models/introducer.js +3 -2
- package/server/models/kbbtpb.js +2 -1
- package/server/models/kbmPttct.js +1 -1
- package/server/models/kbmTkgtgt.js +2 -2
- package/server/models/kbm_bcdkt.js +1 -1
- package/server/models/kbm_kqhdkd.js +1 -1
- package/server/models/kbm_lcttgt.js +1 -1
- package/server/models/kbm_lctttt.js +1 -1
- package/server/models/kbm_pttct.js +2 -2
- package/server/models/kbm_tkgtgt.js +2 -1
- package/server/models/kbmbcdkt.js +1 -1
- package/server/models/kbmbcqt.js +2 -1
- package/server/models/kbmkqhdkd.js +1 -1
- package/server/models/kbmlcttgt.js +1 -1
- package/server/models/kbmlctttt.js +1 -1
- package/server/models/kbmtmbctc.js +1 -1
- package/server/models/kehoachdtcp.js +2 -2
- package/server/models/kehoachmh.js +3 -2
- package/server/models/keyresult.js +1 -1
- package/server/models/khunghangthanhvien.js +2 -2
- package/server/models/label.js +2 -2
- package/server/models/labelinfo.js +1 -1
- package/server/models/lenhcapphat.js +3 -2
- package/server/models/lenhsx.js +3 -2
- package/server/models/lienhe.js +3 -3
- package/server/models/like_module.js +2 -2
- package/server/models/link.js +2 -2
- package/server/models/listinfo.js +71 -66
- package/server/models/loaidiem.js +2 -2
- package/server/models/lock.js +1 -1
- package/server/models/log.js +2 -2
- package/server/models/mailaccount.js +1 -1
- package/server/models/mailgroup.js +2 -1
- package/server/models/mailreceived.js +2 -2
- package/server/models/mailschedule.js +1 -1
- package/server/models/mailsent.js +1 -1
- package/server/models/mailtemplate.js +1 -1
- package/server/models/maudanhgia.js +1 -1
- package/server/models/menuinfo.js +2 -2
- package/server/models/message.js +2 -1
- package/server/models/message2.js +3 -2
- package/server/models/message2setting.js +1 -1
- package/server/models/moduleinfo.js +2 -2
- package/server/models/momo.js +2 -2
- package/server/models/news.js +3 -2
- package/server/models/newsfeed.js +2 -2
- package/server/models/note.js +1 -1
- package/server/models/notification.js +3 -3
- package/server/models/okr.js +3 -3
- package/server/models/okrdiagram.js +2 -2
- package/server/models/onepay.js +2 -2
- package/server/models/opportunity.js +3 -3
- package/server/models/options.js +1 -1
- package/server/models/originimportid.js +1 -1
- package/server/models/otp.js +1 -1
- package/server/models/parameter.js +1 -1
- package/server/models/participant.js +3 -3
- package/server/models/partner.js +1 -1
- package/server/models/payload.js +1 -1
- package/server/models/pbl.js +3 -2
- package/server/models/pc0.js +3 -3
- package/server/models/pc1.js +3 -3
- package/server/models/pc2.js +4 -3
- package/server/models/pc3.js +3 -2
- package/server/models/pc5.js +3 -2
- package/server/models/pc6.js +3 -3
- package/server/models/pdn.js +2 -2
- package/server/models/pdx.js +3 -3
- package/server/models/phieudanhgia.js +2 -2
- package/server/models/pht.js +3 -2
- package/server/models/phucap.js +2 -2
- package/server/models/pkc.js +2 -2
- package/server/models/pkh.js +1 -1
- package/server/models/pkk.js +3 -2
- package/server/models/pkt.js +2 -2
- package/server/models/pn1.js +3 -2
- package/server/models/pn2.js +3 -2
- package/server/models/pn3.js +3 -2
- package/server/models/pn5.js +3 -2
- package/server/models/pn6.js +3 -2
- package/server/models/pn9.js +3 -2
- package/server/models/pnc.js +3 -3
- package/server/models/pnh.js +3 -2
- package/server/models/pnk.js +3 -2
- package/server/models/po1.js +3 -2
- package/server/models/ppb.js +1 -1
- package/server/models/profile.js +2 -1
- package/server/models/pt1.js +3 -2
- package/server/models/pt5.js +3 -2
- package/server/models/ptl.js +1 -1
- package/server/models/ptthanhtoan.js +2 -2
- package/server/models/purchase_contract.js +4 -3
- package/server/models/pxc.js +1 -1
- package/server/models/pxh.js +3 -2
- package/server/models/pxk.js +2 -1
- package/server/models/qts.js +3 -2
- package/server/models/qts_dieuchinh.js +1 -1
- package/server/models/qts_dieuchuyen.js +3 -2
- package/server/models/quanhuyen.js +2 -2
- package/server/models/reason.js +2 -2
- package/server/models/reportinfo.js +3 -2
- package/server/models/right.js +3 -3
- package/server/models/rpt.js +1 -1
- package/server/models/rptform.js +2 -2
- package/server/models/rptobject.js +1 -1
- package/server/models/sale_contract.js +3 -3
- package/server/models/schedule.js +1 -1
- package/server/models/schedule_log.js +1 -1
- package/server/models/service.js +1 -1
- package/server/models/shipbook.js +3 -2
- package/server/models/shortcut.js +2 -2
- package/server/models/smsaccount.js +1 -1
- package/server/models/smssend.js +2 -2
- package/server/models/so1.js +5 -5
- package/server/models/so2.js +3 -2
- package/server/models/so3.js +3 -3
- package/server/models/so5.js +4 -3
- package/server/models/so9.js +5 -4
- package/server/models/socai.js +6 -6
- package/server/models/socainpp.js +6 -6
- package/server/models/socaitmp.js +5 -5
- package/server/models/sodiemthuong.js +3 -3
- package/server/models/sokho.js +5 -4
- package/server/models/sokhocapphat.js +5 -4
- package/server/models/sokhokhongton.js +6 -5
- package/server/models/sokhonpp.js +5 -4
- package/server/models/sokhott.js +5 -4
- package/server/models/sophanbokh.js +1 -1
- package/server/models/sosanxuat.js +3 -2
- package/server/models/sotinhkh.js +2 -1
- package/server/models/spdd_ck.js +2 -2
- package/server/models/spdd_dk.js +2 -2
- package/server/models/step.js +1 -1
- package/server/models/strategicdiagram.js +1 -1
- package/server/models/strategicgoal.js +3 -3
- package/server/models/strategickpi.js +3 -2
- package/server/models/strategicobjective.js +4 -3
- package/server/models/strategicplan.js +4 -3
- package/server/models/subscribe.js +2 -2
- package/server/models/support.js +1 -1
- package/server/models/synctime.js +2 -2
- package/server/models/sysconfig.js +2 -2
- package/server/models/sysgroup.js +1 -1
- package/server/models/tableinfo.js +1 -1
- package/server/models/task.js +4 -4
- package/server/models/taskreg.js +3 -2
- package/server/models/tc.js +2 -2
- package/server/models/tdttco.js +3 -3
- package/server/models/tdttco_tt.js +1 -1
- package/server/models/tdttno.js +3 -3
- package/server/models/tdttno_tt.js +2 -2
- package/server/models/templaterpt.js +1 -1
- package/server/models/templatestore.js +2 -2
- package/server/models/templatevoucher.js +1 -1
- package/server/models/tinhthanh.js +2 -2
- package/server/models/tokens.js +2 -2
- package/server/models/tontucthoi.js +2 -2
- package/server/models/trangthai.js +2 -2
- package/server/models/trangthaiapp.js +3 -2
- package/server/models/transaction.js +6 -5
- package/server/models/trialinfo.js +1 -1
- package/server/models/user.js +5 -6
- package/server/models/usergroup.js +4 -3
- package/server/models/vanchuyen.js +3 -2
- package/server/models/vat.js +2 -2
- package/server/models/vatra.js +3 -2
- package/server/models/vatvao.js +3 -2
- package/server/models/versioninfo.js +2 -2
- package/server/models/vietqrbanks.js +2 -2
- package/server/models/vsocai.js +3 -3
- package/server/models/waitevent.js +1 -1
- package/server/models/wallet.js +1 -1
- package/server/models/warranty.js +1 -1
- package/server/models/xaphuong.js +1 -1
- package/server/models/xhd.js +3 -2
- package/server/models/ytdd_ck.js +3 -2
- package/server/models/ytdd_dk.js +3 -2
- package/server/models/zalo.js +1 -1
- package/server/modules/vouchers/vo-bc1.js +7 -6
- package/server/modules/vouchers/vo-bn1.js +9 -9
- package/server/modules/vouchers/vo-dh2.js +25 -25
- package/server/modules/vouchers/vo-hd2.js +105 -105
- package/server/modules/vouchers/vo-pbl.js +12 -12
- package/server/modules/vouchers/vo-so1.js +60 -59
- package/server/modules/vouchers/vo-so7.js +50 -49
- package/server/modules/vouchers/vo-so9.js +44 -43
- package/server/workers/backupApp.js +1 -1
- package/server/workers/calcGrid.js +1 -0
- package/server/workers/customerOnImport.js +1 -1
- package/server/workers/dmvtOnImport.js +1 -1
- package/server/workers/excelParser.js +1 -1
- package/server/workers/inputWorker.js +2 -1
- package/server/workers/pushNotify.js +1 -1
- package/server/workers/reportWorker.js +2 -2
- package/server/workers/restoreApp.js +1 -1
- package/server/workers/runScript.js +1 -1
- package/server/workers/sendEmail.js +1 -1
- package/server/workers/webhook.js +1 -1
package/package.json
CHANGED
package/server/app.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';require("events").EventEmitter.defaultMaxListeners=1E7;
|
|
2
|
-
const express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),_global=require("./global"),
|
|
3
|
-
$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$options$$.port||$configs$$.PORT||443;require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req
|
|
4
|
-
$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});var $compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=
|
|
2
|
+
const os=require("os"),express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),crypto=require("crypto"),mainServer=function($app$$,$options$$={cluster:!0,port:443,useSocket:!0},$callbackServer$$=null){const $configs$$=global.configs={...defaultConfigs,...$options$$.configs},$User$$=global.getModel("user");$configs$$.admins||
|
|
3
|
+
($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$options$$.port||$configs$$.PORT||443;require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req$$,
|
|
4
|
+
$res$$,$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});var $compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=
|
|
5
5
|
require("cookie-parser");$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||($uid$$=$req$$.headers.uid);$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));$res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("compression");
|
|
6
6
|
$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||1048576;$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=$req$jscomp$2_size$$.headers["content-lenght"])&&$req$jscomp$2_size$$>$limitFileSize$$)return $res$$.status(400).send({error:"File too large"});$next$$()});$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=
|
|
7
7
|
require("multer")({dest:$compress_cookieParser_morgan_multer_root_dir_uploads_session$$,limits:{files:1,fileSize:$limitFileSize$$}});$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$);$app$$.use(cors({credentials:!0,exposedHeaders:["set-cookie","uid"],origin:($origin$$,$callback$$)=>{$callback$$(null,!0)}}));$configs$$.paths||($configs$$.paths={});!0!==$options$$.lite&&($app$$.use("/",express.static($configs$$.paths.public||__dirname+"/public")),$app$$.use("/admin",express.static($configs$$.paths.admin||
|
|
@@ -9,11 +9,11 @@ __dirname+"/admin")),$app$$.use("/templates",express.static($configs$$.paths.tem
|
|
|
9
9
|
require("rotating-file-stream");const $logDirectory$$=$configs$$.paths.log||__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);$accessLogStream_rfs$$=$accessLogStream_rfs$$("access.log",{interval:"1d",path:$logDirectory$$});$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$("combined",{stream:$accessLogStream_rfs$$,skip:function($req$$,$res$$){return 400>$res$$.statusCode}}));$app$$.use(function($err$$,$req$$,$res$$,$next$$){console.error($err$$.stack);
|
|
10
10
|
$res$$.status(500).send("Server Error!")});global.mongoose.connect($configs$$.database.url,{useNewUrlParser:!0}).then(async()=>{console.log("Connected to Database");const $redis$$=require("redis");global.clientRedis=$redis$$.createClient();global.clientRedis.on("error",$err$$=>console.error("Redis Client Error",$err$$));global.clientRedis.on("end",()=>{console.error("Redis connection closed.")});global.clientRedis.on("connect",function(){console.log("redis connected");0!=$options$$.createRedisCache&&
|
|
11
11
|
require("./libs/redis-cache").set();$options$$.start_abci_handler&&global.getModel("assabcihandler").start();!0!==$options$$.lite?require("./route")($app$$,()=>{if(!1!==$options$$.createServer){var $StaticPool_StaticPool$jscomp$1_StaticPool$$=require("sticky-session");if($configs$$.use_ssl){var $server_sslConfig$$=require("./sslConfig");$server_sslConfig$$=https.createServer($server_sslConfig$$($options$$.sslDir),$app$$)}else $server_sslConfig$$=http.createServer($app$$);$server_sslConfig$$.timeout=
|
|
12
|
-
6E5;!1!==$options$$.useSocket
|
|
12
|
+
6E5;!1!==$options$$.useSocket?$User$$.initSocket($server_sslConfig$$):$User$$.initClientSockets();if(!1!==$options$$.cluster){if(!$StaticPool_StaticPool$jscomp$1_StaticPool$$.listen($server_sslConfig$$,global.port))$server_sslConfig$$.once("listening",function(){console.log("server started on",global.port)});$StaticPool_StaticPool$jscomp$1_StaticPool$$=require("cluster");$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("worker "+$worker$$.process.pid+
|
|
13
13
|
" died",$code$$,$signal$$)});$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("online",function($worker$$){console.info("worker "+$worker$$.process.pid+" is online")})}else $server_sslConfig$$.listen(global.port,()=>{console.log("server start at "+global.port+" port")})}$options$$.start_input_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.inputMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||
|
|
14
|
-
0,
|
|
15
|
-
$options$$.start_report_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,
|
|
16
|
-
{console.log("Not Connected to Database ERROR! ",$err$$)});return $app$$};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});process.on("uncaughtException",function($err$jscomp$3_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);console.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
|
|
14
|
+
0,os.cpus().length,3E5,2),global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("Crud pool ready")}));$options$$.start_import_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,2,36E5),global.importDataMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("Import pool ready")}));
|
|
15
|
+
$options$$.start_report_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,os.cpus().length,3E5,2),global.reportMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("Report pool ready")}));$callbackServer$$&&$callbackServer$$()}):require("./route")($app$$,()=>{$callbackServer$$&&$callbackServer$$()},
|
|
16
|
+
!0)})}).catch($err$$=>{console.log("Not Connected to Database ERROR! ",$err$$)});return $app$$};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});process.on("uncaughtException",function($err$jscomp$3_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);console.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
|
|
17
17
|
Error: ${$err$jscomp$3_error$$.message}
|
|
18
18
|
Stack: ${$err$jscomp$3_error$$.stack}
|
|
19
19
|
`;try{const $logDirectory$$=__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);fs.writeFile(`${$logDirectory$$}/error-${(new Date).getTime()}.txt`,$err$jscomp$3_error$$,()=>{console.log("wrote log error")})}catch($e$$){console.log($e$$)}process.exit(1)});module.exports=mainServer;
|
package/server/cluster.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';require("events").EventEmitter.defaultMaxListeners=1E7;
|
|
2
|
-
const express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),crypto=require("crypto"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),sslConfig=require("./sslConfig"),clusterServer=function($app$$,$sslDir$$,$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$={},$_port_accessLogStream_rfs$$=9999,$options$$={start_import_data_pool:!1,
|
|
3
|
-
useAgenda:!0,createRedisCache:!0}){const $configs$$=global.configs={...defaultConfigs,...$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$,cluster:0!=$options$$.cluster};$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$_port_accessLogStream_rfs$$;require("moment-timezone").tz.setDefault($configs$$.timezone||
|
|
2
|
+
const os=require("os"),express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),crypto=require("crypto"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),sslConfig=require("./sslConfig"),clusterServer=function($app$$,$sslDir$$,$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$={},$_port_accessLogStream_rfs$$=9999,$options$$={start_import_data_pool:!1,
|
|
3
|
+
start_report_pool:!0,useAgenda:!0,createRedisCache:!0}){const $configs$$=global.configs={...defaultConfigs,...$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$,cluster:0!=$options$$.cluster};$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$_port_accessLogStream_rfs$$;require("moment-timezone").tz.setDefault($configs$$.timezone||
|
|
4
4
|
"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req$$,$res$$,$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",
|
|
5
5
|
resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("cookie-parser");$app$$.use($_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||($uid$$=$req$$.headers.uid);$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));
|
|
6
6
|
$res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("compression");$app$$.use($_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||1048576;$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=
|
|
@@ -14,9 +14,9 @@ function($error$$){if($error$$)return console.log($error$$);console.log("created
|
|
|
14
14
|
($init_system_data_server$$=!0);for(let $i$$=0;$i$$<$configs$$.adminUsers.length;$i$$++){let $adminUser$$=$configs$$.adminUsers[$i$$],$u$$=await $StaticPool_StaticPool$jscomp$1_StaticPool$$.findOne({email:$adminUser$$.email});$u$$||($adminUser$$.local={name:$adminUser$$.name,email:$adminUser$$.email,active:!0},$u$$=new $StaticPool_StaticPool$jscomp$1_StaticPool$$($adminUser$$),$u$$.local.password=$u$$.generateHash($adminUser$$.email+$adminUser$$.defaultPassword),$u$$.save(function($error$$,$user$$){if($error$$)return console.error($error$$);
|
|
15
15
|
$user$$&&console.log("da tao thanh cong user "+$user$$.email)}))}const $async$$=require("async");$init_system_data_server$$&&$initSysData$$();require("./route")($app$$);$init_system_data_server$$=$configs$$.use_ssl?https.createServer(sslConfig($sslDir$$),$app$$):http.createServer($app$$);$init_system_data_server$$.timeout=6E5;$StaticPool_StaticPool$jscomp$1_StaticPool$$.initSocket($init_system_data_server$$);if(!1!==$options$$.cluster){if(!require("sticky-session").listen($init_system_data_server$$,
|
|
16
16
|
global.port))$init_system_data_server$$.once("listening",function(){console.log("server cluster started on",global.port)});$StaticPool_StaticPool$jscomp$1_StaticPool$$=require("cluster");$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("worker "+$worker$$.process.pid+" died",$code$$,$signal$$)});$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("online",function($worker$$){console.info("worker "+$worker$$.process.pid+" is online");global.clientRedis.set("lastworker",
|
|
17
|
-
JSON.stringify({pid:$worker$$.process.pid}))})}else $init_system_data_server$$.listen(global.port,()=>{console.log("server start at "+global.port+" port")});$options$$.start_input_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.inputMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js"
|
|
18
|
-
$options$$.start_import_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js"
|
|
19
|
-
|
|
17
|
+
JSON.stringify({pid:$worker$$.process.pid}))})}else $init_system_data_server$$.listen(global.port,()=>{console.log("server start at "+global.port+" port")});$options$$.start_input_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.inputMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",0,os.cpus().length,3E5,2),global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("Crud pool ready")}));
|
|
18
|
+
$options$$.start_import_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",0,2,36E5),global.importDataMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.error("Import pool ready")}));$options$$.start_report_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=
|
|
19
|
+
new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/reportWorker.js",0,os.cpus().length,3E5,2),global.reportMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.error("Report pool ready")}))})}).catch($err$$=>{console.error("Not Connected to Database ERROR!",$err$$)})};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});
|
|
20
20
|
process.on("uncaughtException",function($err$jscomp$3_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);console.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
|
|
21
21
|
Error: ${$err$jscomp$3_error$$.message}
|
|
22
22
|
Stack: ${$err$jscomp$3_error$$.stack}
|
|
@@ -34,7 +34,7 @@ controller.prototype.get=function($route_name$$,$shareRoute$$=!1){const $ctrl$$=
|
|
|
34
34
|
user:$user$$,params:$params$$}=$req$$;try{handlers.findHandler($ctrl$$,{query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$user_agent$$,ip:$ip$$,shareRoute:$shareRoute$$,originalUrl:$req$$.originalUrl},($e$jscomp$16_result$$,$returnvalue$$)=>{if($e$jscomp$16_result$$)return $res$$.status(400).send($e$jscomp$16_result$$);({result:$e$jscomp$16_result$$}=$returnvalue$$);if(0==$e$jscomp$16_result$$.length)return $res$$.status(404).send({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});
|
|
35
35
|
$res$$.send($e$jscomp$16_result$$[0])})}catch($e$$){console.error($e$$),$res$$.status(400).send($e$$)}})};
|
|
36
36
|
controller.prototype.postAgainHandler=function($user$$,$condition$$,$callback$jscomp$0$$,$options$$={req:null}){let $model$$=this.model,$ctrl$$=this;if(!$ctrl$$.post)return $callback$jscomp$0$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n xong"});const $update_tk_vt$$=$condition$$.update_tk_vt;delete $condition$$.update_tk_vt;const $user_update$$={date_updated:new Date,user_updated:$user$$.email};$model$$.find($condition$$).sort({ngay_ct:1}).lean().exec(function($e$jscomp$0$$,
|
|
37
|
-
$objsrepost$$){console.log("start repost",$condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);setImmediate(()=>{if($e$jscomp$0$$)return console.error("postAgain: find",$e$jscomp$0$$),$callback$jscomp$0$$({error:$e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$});async.
|
|
37
|
+
$objsrepost$$){console.log("start repost",$condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);setImmediate(()=>{if($e$jscomp$0$$)return console.error("postAgain: find",$e$jscomp$0$$),$callback$jscomp$0$$({error:$e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$});async.map($objsrepost$$,function($obj$$,$callback$$){setImmediate(async()=>{console.log("postAgain: handle data before post",$obj$$.ma_ct,$obj$$.so_ct,$obj$$.ngay_ct,"by",$user$$.email);if($ctrl$$.reposting)try{await $ctrl$$.reposting($user$$,
|
|
38
38
|
$obj$$)}catch($e$$){return $callback$$({error:"Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u tr\u01b0\u1edbc khi repost ch\u1ee9ng t\u1eeb:"+$obj$$.so_ct+", L\u1ed7i: "+($e$$.message||$e$$.error||"")})}$update_tk_vt$$&&$obj$$.details&&(console.log("postAgain: update tk_vt..."),await $obj$$.details.filter($d$$=>$d$$.ma_vt).asyncJoinModel2($obj$$.id_app,global.getModel("dmvt"),{where:"ma_vt",fields:"tk_vt"}),$user_update$$.details=$obj$$.details);try{console.log("postAgain: update voucher..."),
|
|
39
39
|
await $model$$.updateOne({_id:$obj$$._id},{...$user_update$$})}catch($e$$){return console.error("postAgain: error update data before repost",$e$$),$callback$$({error:"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u ch\u1ee9ng t\u1eeb "+$obj$$.so_ct+",Error:"+$e$$.message||$e$$.error||""})}console.log("postAgain: posting...");postData($obj$$,$ctrl$$,function($e$$,$rs$$){console.log("postAgain: reported",$obj$$.ma_ct,$obj$$.so_ct,$obj$$.ngay_ct,"by",$user$$.email);if($e$$)return $callback$$({error:$e$$.message||
|
|
40
40
|
$e$$.error||"Kh\u00f4ng th\u1ec3 post s\u1ed5 s\u00e1ch ch\u1ee9ng t\u1eeb:"+$obj$$.so_ct});$callback$$(null,$rs$$)},{req:$options$$.req})})},function($e$$){if($e$$)return console.error("postAgain: Error",$e$$),$callback$jscomp$0$$({error:$e$$.message||$e$$.error||$e$$});console.log("postAgain: finished",$condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);$callback$jscomp$0$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n xong"})})})})};
|
|
@@ -40,15 +40,15 @@ if(0>$str_func$$.indexOf("async ")){0>$str_func$$.indexOf("return ")&&($str_func
|
|
|
40
40
|
})`,$admins_of_user_sandbox_us$$)();_.isArray($cust_users_will_receive$$)?$users_will_receive$$=$cust_users_will_receive$$:console.error("handle user will receive notify:",$cust_users_will_receive$$,$p$jscomp$0$$.handle_receivers)}}catch($e$$){console.error("pushNotification",$e$$)}}$ctrl$$.options||($ctrl$$.options={});$ctrl$$.options.onEmitEvent||($ctrl$$.options.onEmitEvent=($obj$$,$users_will_receive$$,$next$$,$_notificationData$$)=>{$next$$(null,$users_will_receive$$,$_notificationData$$)});
|
|
41
41
|
$ctrl$$.options.onEmitEvent(Object.assign({},$obj$jscomp$0$$),$users_will_receive$$,($e$$,$_users_will_receive$$,$_notificationData$$)=>{setImmediate(()=>{if($e$$)return console.error("Error emit events",$e$$);$_users_will_receive$$=_.uniq($_users_will_receive$$);0<$_users_will_receive$$.length&&app.emitEvent($obj$jscomp$0$$.id_app,`${$ctrl$$.name.toLowerCase()}:${$eventName$$}`,$_notificationData$$||$notificationData$$,$exclude_token$$,$_users_will_receive$$,!$_justFireEvents$$)})},Object.assign({},
|
|
42
42
|
$notificationData$$),Object.assign({},$p$jscomp$0$$))})}))}})},PostBook=require("../libs/post-book"),Sokho=global.getModel("sokho"),Sokhott=global.getModel("sokhott"),Sokhokhongton=global.getModel("sokhokhongton"),Tdttno=global.getModel("tdttno"),Tdttno_tt=global.getModel("tdttno_tt"),Tdttco_tt=global.getModel("tdttco_tt"),Tdttco=global.getModel("tdttco"),Vatra=global.getModel("vatra"),Vatvao=global.getModel("vatvao"),deletePost=function($user$$,$obj$$,$callback$jscomp$1$$){$obj$$.toObject&&($obj$$=
|
|
43
|
-
$obj$$.toObject());if(!$obj$$._id)return console.error("Error when delete post: obj does not have _id",$obj$$),$callback$jscomp$1$$("Error when delete post: obj does not have _id",$obj$$);async.series({delete_model_books_registed:$callback$jscomp$0$$=>{setImmediate(()=>{if(!global.model_books)return $callback$jscomp$0$$();async.
|
|
43
|
+
$obj$$.toObject());if(!$obj$$._id)return console.error("Error when delete post: obj does not have _id",$obj$$),$callback$jscomp$1$$("Error when delete post: obj does not have _id",$obj$$);async.series({delete_model_books_registed:$callback$jscomp$0$$=>{setImmediate(()=>{if(!global.model_books)return $callback$jscomp$0$$();async.map(global.model_books.filter($d$$=>"sokho"!==$d$$&&"sokhonpp"!==$d$$&&"sokhott"!==$d$$&&"sokhokhongton"!==$d$$&&"socai"!==$d$$&&"socaitmp"!==$d$$),($bookName$$,$callback$$)=>
|
|
44
44
|
{setImmediate(()=>{let $book$$=mongoose.models[$bookName$$.toLowerCase()];$book$$?$book$$.deleteMany({id_ct:$obj$$._id.toString()},$e$$=>{$callback$$($e$$)}):$callback$$()})},$e$$=>{$callback$jscomp$0$$($e$$)})})},sk:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokho,function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},sktt:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokhott,
|
|
45
45
|
function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},skkhongton:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokhokhongton,function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},sknpp:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,global.getModel("sokhonpp"),function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},
|
|
46
46
|
vsc:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vsocai"))return $callback$$();vsocai.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},sc:$callback$$=>{setImmediate(()=>{Socai.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},sctmp:$callback$$=>{setImmediate(()=>{global.getModel("socaitmp").deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},vatra:$callback$$=>
|
|
47
47
|
{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vatra"))return $callback$$();Vatra.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},vatvao:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vatvao"))return $callback$$();Vatvao.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttno:$callback$$=>{setImmediate(async()=>{let $tdtts$$=await Tdttno.find({id_ct:$obj$$._id.toString()},
|
|
48
48
|
{_id:1,tat_toan:1}).lean();if(0<$tdtts$$.length){if(0<$tdtts$$.filter($t$$=>$t$$.tat_toan).length)return $callback$$(null);$tdtts$$=$tdtts$$.map($t$$=>$t$$._id.toString());if(await Tdttno_tt.findOne({id_tdtt:{$in:$tdtts$$}}))return $callback$$()}Tdttno.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttco:$callback$$=>{setImmediate(async()=>{let $tdtts$$=await Tdttco.find({id_ct:$obj$$._id.toString()},{_id:1,tat_toan:1}).lean();if(0<$tdtts$$.length){if(0<$tdtts$$.filter($t$$=>
|
|
49
|
-
$t$$.tat_toan).length)return $callback$$(null);$tdtts$$=$tdtts$$.map($t$$=>$t$$._id.toString());if(await Tdttco_tt.findOne({id_tdtt:{$in:$tdtts$$}}))return $callback$$()}Tdttco.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttno_tt:$callback$jscomp$0$$=>{setImmediate(()=>{Tdttno_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);$obj$$.tdttnos?async.
|
|
49
|
+
$t$$.tat_toan).length)return $callback$$(null);$tdtts$$=$tdtts$$.map($t$$=>$t$$._id.toString());if(await Tdttco_tt.findOne({id_tdtt:{$in:$tdtts$$}}))return $callback$$()}Tdttco.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttno_tt:$callback$jscomp$0$$=>{setImmediate(()=>{Tdttno_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);$obj$$.tdttnos?async.map($obj$$.tdttnos,
|
|
50
50
|
function($detail$$,$callback$$){setImmediate(()=>{Tdttno.findOneAndUpdate({_id:$detail$$.id_tdtt},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){$e$$&&console.error($e$$);$callback$jscomp$0$$()}):$callback$jscomp$0$$()})})},tdttco_tt:$callback$jscomp$0$$=>{setImmediate(()=>{Tdttco_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);
|
|
51
|
-
$obj$$.tdttcos?async.
|
|
51
|
+
$obj$$.tdttcos?async.map($obj$$.tdttcos,function($detail$$,$callback$$){setImmediate(()=>{Tdttco.findOneAndUpdate({_id:$detail$$.id_tdtt},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){$e$$&&console.error($e$$);$callback$jscomp$0$$()}):$callback$jscomp$0$$()})})}},function($e$$){$e$$&&console.error("delete books",$e$$);$callback$jscomp$1$$($e$$,$obj$$)})},runWebhooks=async($ctrl$$,$obj$$,$action$$,$voucher_options$$)=>
|
|
52
52
|
{$voucher_options$$||($voucher_options$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$ctrl$$.name},{option:1}).lean()||{}).option);if($voucher_options$$&&$voucher_options$$.option_webhooks&&($ctrl$$=$voucher_options$$.option_webhooks.find($w$$=>$w$$.action.toUpperCase()===$action$$.toUpperCase()&&$w$$.url))){$voucher_options$$=path.dirname(__dirname)+"/workers/webhook.js";if(!fs.existsSync($voucher_options$$))return console.error("webhook process is not exitst");global.webhookPool||
|
|
53
53
|
(global.webhookPool=new StaticPool($voucher_options$$,0,1));global.webhookPool.exec({data:$obj$$,webhook_configs:$ctrl$$},$response$$=>{$response$$.error?console.error("runWebhooks",$response$$.error):console.log($response$$)})}},getNextSequence=async function($id_app$$,$ma_ct$$,$field$$,$callback$$,$options$$={}){var $condition_qct_qcts$$={status:!0,field:$field$$,id_app:$id_app$$,$and:[{$or:[{ma_ct:"#",ma_ct_khac:{$regex:$ma_ct$$,$options:"i"}},{cac_ma_ct:$ma_ct$$.toLowerCase()},{ma_ct:$ma_ct$$.toUpperCase()}]}]};
|
|
54
54
|
$options$$.id_qct&&($condition_qct_qcts$$._id=$options$$.id_qct);if($options$$.ngay_ct){let $start_date$$=moment($options$$.ngay_ct).startOf("date").toDate(),$end_date$$=moment($options$$.ngay_ct).endOf("date").toDate();$condition_qct_qcts$$.$and.push({$or:[{tu_ngay:null},{tu_ngay:{$lte:$end_date$$}}]});$condition_qct_qcts$$.$and.push({$or:[{den_ngay:null},{den_ngay:{$gte:$start_date$$}}]})}$options$$.toObject&&($options$$=$options$$.toObject());$condition_qct_qcts$$=await dmqct.find($condition_qct_qcts$$).lean();
|
|
@@ -8,6 +8,6 @@ var $columns$$=$req$$.columns;$columns$$._error||($columns$$._error="Error");let
|
|
|
8
8
|
let $data_new$$=[],$row_master$$,$row_master_exists$$;async.mapSeries($data$$,($row$$,$cb$$)=>{setImmediate(()=>{$row_master$$={exfields:{}};$row_master_exists$$=null;$master_columns$$.forEach(function($column$$){if(0===$column$$.indexOf("exfields.")){let $_c$$=$column$$.replace("exfields.","");$row_master$$.exfields[$_c$$]=$row$$[$column$$]}else $row_master$$[$column$$]=$row$$[$column$$]});for(let $i$$=0;$i$$<$data_new$$.length;$i$$++){let $m$$=$data_new$$[$i$$],$is_eq$$=!0;$master_columns$$.forEach(function($column$$){_.isEqual($m$$[$column$$],
|
|
9
9
|
$row_master$$[$column$$])||($is_eq$$=!1)});$is_eq$$&&($row_master_exists$$=$m$$)}$row_master_exists$$?$row_master$$=$row_master_exists$$:$data_new$$.push($row_master$$);let $row_detail$$;for(let $detail_name$$ in $details$$)$row_detail$$={},$details$$[$detail_name$$].columns.forEach(function($column$$){$row$$[$detail_name$$+"$"+$column$$]&&($row_detail$$[$column$$]=$row$$[$detail_name$$+"$"+$column$$])}),$row_master$$[$detail_name$$]||($row_master$$[$detail_name$$]=[]),0<_.keys($row_detail$$).length&&
|
|
10
10
|
$row_master$$[$detail_name$$].push($row_detail$$);$cb$$()})},()=>{$req$$.data=$data_new$$;setImmediate(()=>{$callback$$()})})},function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data||[],$columns$$=$req$$.columns;for(let $row$$ of $data$$){let $_first$$=$row$$._first;$_first$$&&0<$_first$$.length&&_.extend($row$$,$_first$$[0])}const $log$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"IMPORTEXCEL",data:{data:$data$$,columns:$columns$$}},
|
|
11
|
-
$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("parse value",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,async($e$$,$rs$$)=>{$log$$.result={error:$e$$,result:$rs
|
|
12
|
-
$callback$$($e$$)):$callback$$({error:$e$$.message||$e$$,message:$e$$.message||$e$$});0===$rs$$.rows_error.length?($req$$.result=$rs$$,$callback$$()):($e$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", "),$callback$$({message:$e$$,error:$rs$$.error||$rs$$}))},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null
|
|
13
|
-
module.exports=importFromExcel;
|
|
11
|
+
$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("parse value",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,async($e$$,$rs$$)=>{$log$$.result={error:$e$$,result:$rs$$,finished_at:new Date};await $log$$.save();if($e$$)return console.error("import",$e$$),$e$$.error?($e$$.message=
|
|
12
|
+
$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.message||$e$$,message:$e$$.message||$e$$});0===$rs$$.rows_error.length?($req$$.result=$rs$$,$callback$$()):($e$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", "),$callback$$({message:$e$$,error:$rs$$.error||$rs$$}))},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,
|
|
13
|
+
$req$$.result)})};module.exports=importFromExcel;
|
|
@@ -5,6 +5,6 @@ configs.google_credentials;if(!$app_google_credentials_id_app$$)return $callback
|
|
|
5
5
|
range:$range$$});if(0==$response$$.data.values.length)return $callback$$({error:"Sheet n\u00e0y kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u"});let $columns$$=$response$$.data.values[0].map($c$$=>{let $field$$=$listinfo$$.fields.find($f$$=>$f$$.name.toLowerCase()==($c$$||"").toString().toLowerCase());return $field$$?$field$$.name:($field$$=$listinfo$$.fields.find($f$$=>$f$$.header.toLowerCase()==($c$$||"").toString().toLowerCase()))?$field$$.name:$c$$}),$data$$=$response$$.data.values.slice(1).map($row$$=>
|
|
6
6
|
{let $n_row$$={};$columns$$.forEach(($c$$,$index$$)=>{$n_row$$[$c$$]=$row$$[$index$$]});return $n_row$$});$req$$.data=$data$$;$callback$$()}catch($e$$){return $error$$=(($e$$.response||{}).data||{}).error||$e$$,$credentials$$&&403==$error$$.code?$callback$$({error:`Kh\u00f4ng th\u1ec3 truy c\u1eadp v\u00e0o google sheet. H\u00e3y ph\u00e2n quy\u1ec1n cho t\u00e0i kho\u1ea3n ${$credentials$$.client_email} c\u00f3 quy\u1ec1n \u0111\u1ecdc google sheet tr\u00ean`}):$callback$$($error$$)}})},function($callback$$){let $data$$=
|
|
7
7
|
$req$$.data;if($ctrl$$.options.onImport)$ctrl$$.options.onImport($req$$.user,$data$$,[],function($e$$,$new_data$$){setImmediate(()=>{if($e$$)return console.error("onImport from json:",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.data=$new_data$$||$data$$;$callback$$()})});else $req$$.data=$data$$,$callback$$()},function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data;const $log$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,
|
|
8
|
-
id_func:$ctrl$$.name,action:"IMPORTJSON",data:{data:$data$$}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("importFromJson",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$log$$.result={error:$e$$,result:$rs
|
|
9
|
-
$ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},
|
|
10
|
-
"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromGs;
|
|
8
|
+
id_func:$ctrl$$.name,action:"IMPORTJSON",data:{data:$data$$}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("importFromJson",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$log$$.result={error:$e$$,result:$rs$$,finished_at:new Date};await $log$$.save();
|
|
9
|
+
if($e$$)return console.error("import from json",$ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},
|
|
10
|
+
{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromGs;
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
$callback$$()}catch($e$$){return console.error("importFromJson",$e$$),$callback$$({error:$e$$.message||$e$$})}}else if($req$$.body){if(!$req$$.body.map)return $callback$$({error:"D\u1eef li\u1ec7u \u0111\u1ec3 import ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng"});try{$req$$.data=$req$$.body.map($row_rs$$=>{$row_rs$$=_.isString($row_rs$$)?JSONParser($row_rs$$):$row_rs$$;delete $row_rs$$.id_app;delete $row_rs$$._id;return $row_rs$$})}catch($e$$){return console.error("importFromJson",$e$$),$callback$$({error:$e$$.message||
|
|
3
3
|
$e$$})}$callback$$()}else return $callback$$({error:"Kh\u00f4ng t\u00ecm th\u1ea5y d\u1eef li\u1ec7u c\u1ea7n import"})},function($callback$$){let $data$$=$req$$.data;if($ctrl$$.options.onImport)$ctrl$$.options.onImport($req$$.user,$data$$,[],function($e$$,$new_data$$){setImmediate(()=>{if($e$$)return console.error("onImport from json:",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.data=$new_data$$||$data$$;$callback$$()})});else $req$$.data=$data$$,$callback$$()},
|
|
4
4
|
function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data;const $logData$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"IMPORTJSON",data:{data:$data$$}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("importFromJson",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,
|
|
5
|
-
$req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$logData$$.result
|
|
6
|
-
[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromJSON;
|
|
5
|
+
$req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$logData$$.result={error:$e$$,result:$rs$$,finished_at:new Date};await $logData$$.save();if($e$$)return console.error("import from json",$ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=
|
|
6
|
+
[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromJSON;
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
'use strict';const async=require("async"),_=require("lodash"),{JSONParser}=require("../libs/utils"),createHandler=require("./createHandler"),create=async($user$$,$ctrl$$,$data$$,$callback$$,$id_be_supply_by_user$$,$req$$,$action$$="add")=>{$req$$=$req$$||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.id_be_supply_by_user=$id_be_supply_by_user$$;$req$$.action=$action$$;return createHandler($ctrl$$,$req$$,$callback$$)},updateHandler=require("./updateHandler"),update=async function($user$$,$ctrl$$,
|
|
2
2
|
$id$$,$data$$,$callback$$,$action$$,$req$$,$_action$$="update"){$req$$=$req$$||{};$req$$.action=$action$$;$req$$._action=$_action$$;$req$$.user=$user$$;$req$$.id=$id$$;$req$$.data=$data$$;return updateHandler($ctrl$$,$req$$,$callback$$)};
|
|
3
3
|
async function importHandler($user$$,$ctrl$$,$id_app$$,$data$$,$callback_main$$,$options$$={replace:!0,req:null}){const $model$$=$ctrl$$.model;let $replace$$=$options$$.replace,$rows_error$$=[];var $custs_listInfo_tk_dt$$=global.getModel("listinfo");let $info$$=await $custs_listInfo_tk_dt$$.findOne({code:$ctrl$$.name.toLowerCase()}).lean(),$modelJoins$$=[];$info$$&&(await $custs_listInfo_tk_dt$$.updateModel($info$$,$ctrl$$.model),$modelJoins$$=($info$$.fields||[]).filter($f$$=>$f$$.ref_model&&"_id"==
|
|
4
|
-
$f$$.ref_field));$data$$=$data$$.filter($row$$=>{let $has_data$$=!1;for(let $key$$ in $row$$)if($row$$[$key$$]){$has_data$$=!0;break}return $has_data$$});$custs_listInfo_tk_dt$$=[];$model$$.schema.paths.ma_kh&&($custs_listInfo_tk_dt$$=$data$$.filter($r$$=>$r$$.ten_kh));$model$$.schema.paths.details&&
|
|
5
|
-
{$kh$$.ma_kh||($kh$$.ma_kh=$kh$$.ten_kh.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kh:$kh$$.ma_kh,ten_kh:$kh$$.ten_kh,dia_chi:$kh$$.dia_chi||"",dien_thoai:$kh$$.dien_thoai||"",ma_so_thue:$kh$$.ma_so_thue||""}});$custs_listInfo_tk_dt$$=await $custs_listInfo_tk_dt$$.asyncGroupBy(["ma_kh",
|
|
6
|
-
var $dvts_kh$$=[];$model$$.schema.paths.ma_kho&&($dvts_kh$$=$data$$.filter($r$$=>$r$$.ten_kho));$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kho)));$dvts_kh$$=$dvts_kh$$.map($kh$$=>
|
|
7
|
-
"ten_kho"],[]);for($kho_vts$$ of $dvts_kh$$)$kho_vts$$.id_app=$id_app$$,$kho_vts$$.user_created=$user$$.email,$kho_vts$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,ma_kho:$kho_vts$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho_vts$$);var $kho_vts$$=[];$model$$.schema.paths.ma_vt&&
|
|
8
|
-
[]).filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt)));$kho_vts$$=$kho_vts$$.map($vt$$=>({ma_vt:$vt$$.ma_vt,ten_vt:$vt$$.ten_vt,ma_dvt:$vt$$.ma_dvt||"Kh\u00f4ng \u0111\u01a1n v\u1ecb t\u00ednh",user_created:$user$$.email}));$kho_vts$$=await $kho_vts$$.asyncGroupBy(["ma_vt","ten_vt","ma_dvt"],[]);if(0<$kho_vts$$.length){$dvts_kh$$=
|
|
9
|
-
$user$$.email,await global.getModel("dmdvt").findOne({ma_dvt:$dvt_tk_vt$$.ma_dvt,id_app:$id_app$$}).lean()||(console.log("create dvt",$dvt_tk_vt$$),await global.getModel("dmdvt").create($dvt_tk_vt$$));var $dvt_tk_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^156",$options:"i"}},
|
|
10
|
-
loai:1,tk:{$regex:"^511",$options:"i"}},{tk:1}).lean()||{}).tk;for(let $vt$$ of $kho_vts$$)$vt$$.id_app=$id_app$$,$vt$$.tk_vt=$dvt_tk_vt$$,$vt$$.tk_gv=$dvts_kh$$,$vt$$.tk_dt=$custs_listInfo_tk_dt$$,$vt$$.status=!0,$vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$vt$$.ma_vt,
|
|
11
|
-
tu:1,ma:1}))}$data$$.forEach($r$$=>{delete $r$$.ten_dvcs;global.mongoose.Types.ObjectId.isValid($r$$._id)&&delete $r$$._id});await $data$$.filter($r$$=>$r$$.ma_dvcs).asyncJoinModel2($id_app$$,global.getModel("dvcs"),{where:{ma_dvcs:"_id"},fields:"ten_dvcs"});async.
|
|
12
|
-
$data_value$$=$row$$[$key$$];if($data_value$$&&_.isString($data_value$$)&&("mixed"==$data_type$$||"array"==$data_type$$)&&($data_value$$=$data_value$$.trim(),0==$data_value$$.indexOf("[")||0==$data_value$$.indexOf("{")))try{$row$$[$key$$]=JSONParser($data_value$$)}catch($e$$){delete $row$$[$key$$],
|
|
13
|
-
old_id:$row$$[$field_ref$$.name]}).lean();$new_data_ref$$&&($row$$[$field_ref$$.name]=$new_data_ref$$.new_id)}}delete $row$$.__v;let $old_id$$=$row$$._id;$row$$.ma_dvcs&&!$row$$.ten_dvcs&&delete $row$$.ma_dvcs;$row$$.id_app&&$id_app
|
|
14
|
-
$row$$[$ctrl$$.options.unique_imp]&&""!=$row$$[$ctrl$$.options.unique_imp])$query$$[$ctrl$$.options.unique_imp]=$row$$[$ctrl$$.options.unique_imp];else if($ctrl$$.unique.forEach(function($k$$){0<=$row_keys$$.indexOf($k$$)&&($query$$[$k$$]
|
|
15
|
-
0!=$ctrl$$.require_id_app&&($query$$.id_app=$id_app$$)}else $query$$._id=$row$$._id;$ctrl$$.model.find($query$$).lean().exec(function($error$$,$rss$$){if($error$$)return $callback$$($error$$);if(1<$rss$$.length)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, \u0111\u1ed1i t\u01b0\u1ee3ng "+
|
|
16
|
-
($row$$.id_app=$foundObject$$.id_app,$row$$._id=$foundObject$$._id.toString(),($ctrl$$.unique||[]).forEach(function($k$$){$row$$[$k$$]=$foundObject$$[$k$$]}),update($user$$,$ctrl$$,$foundObject$$._id,$row$$,function($e$$){if($e$$){let $_e$$=$e$$;_.isArray($_e$$)||($_e$$=[{error:$e$$.error
|
|
17
|
-
$e$$;_.isArray($_e$jscomp$1_i$$)||($_e$jscomp$1_i$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$jscomp$1_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,
|
|
18
|
-
for(let $key$$ in $_r$$)"_id"!=$key$$&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$new_row$$._id.toString()}))}$callback$$()})},$row$$._id,$options$$.req,"import")})})}else create($user
|
|
19
|
-
$e$$,code:$e$$.code}]);$rows_error$$.push({error:$_e$jscomp$2_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},
|
|
20
|
-
($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$new_row$$._id.toString()}))}$callback$$()})},$row$$._id,$options$$.req,"import")})},function($error$$){setImmediate(()=>{if($error$$)return $callback_main$$($error$$)
|
|
4
|
+
$f$$.ref_field));$data$$=$data$$.filter($row$$=>{let $has_data$$=!1;for(let $key$$ in $row$$)if($row$$[$key$$]){$has_data$$=!0;break}return $has_data$$});if(1E4<$data$$.length)return $callback_main$$("S\u1ed1 d\u00f2ng import t\u1ed1i \u0111a 1 l\u1ea7n l\u00e0 10000.");console.log("\u0110ang import t\u1edbi",$ctrl$$.name,$data$$.length," d\u00f2ng d\u1eef li\u1ec7u...");$custs_listInfo_tk_dt$$=[];$model$$.schema.paths.ma_kh&&($custs_listInfo_tk_dt$$=$data$$.filter($r$$=>$r$$.ten_kh));$model$$.schema.paths.details&&
|
|
5
|
+
($custs_listInfo_tk_dt$$=$custs_listInfo_tk_dt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kh)));$custs_listInfo_tk_dt$$=$custs_listInfo_tk_dt$$.map($kh$$=>{$kh$$.ma_kh||($kh$$.ma_kh=$kh$$.ten_kh.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kh:$kh$$.ma_kh,ten_kh:$kh$$.ten_kh,dia_chi:$kh$$.dia_chi||"",dien_thoai:$kh$$.dien_thoai||"",ma_so_thue:$kh$$.ma_so_thue||""}});$custs_listInfo_tk_dt$$=await $custs_listInfo_tk_dt$$.asyncGroupBy(["ma_kh",
|
|
6
|
+
"ten_kh","dia_chi","dien_thoai","ma_so_thue"],[]);for($dvts_kh$$ of $custs_listInfo_tk_dt$$)$dvts_kh$$.id_app=$id_app$$,$dvts_kh$$.user_created=$user$$.email,await global.getModel("customer").asyncCreateCustomer($dvts_kh$$);var $dvts_kh$$=[];$model$$.schema.paths.ma_kho&&($dvts_kh$$=$data$$.filter($r$$=>$r$$.ten_kho));$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kho)));$dvts_kh$$=$dvts_kh$$.map($kh$$=>
|
|
7
|
+
{$kh$$.ma_kho||($kh$$.ma_kho=$kh$$.ten_kho.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kho:$kh$$.ma_kho,ten_kho:$kh$$.ten_kho}});$dvts_kh$$=await $dvts_kh$$.asyncGroupBy(["ma_kho","ten_kho"],[]);for($kho_vts$$ of $dvts_kh$$)$kho_vts$$.id_app=$id_app$$,$kho_vts$$.user_created=$user$$.email,$kho_vts$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,ma_kho:$kho_vts$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho_vts$$);var $kho_vts$$=[];$model$$.schema.paths.ma_vt&&
|
|
8
|
+
($kho_vts$$=$data$$.filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt));$model$$.schema.paths.details&&($kho_vts$$=$kho_vts$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt)));$kho_vts$$=$kho_vts$$.map($vt$$=>({ma_vt:$vt$$.ma_vt,ten_vt:$vt$$.ten_vt,ma_dvt:$vt$$.ma_dvt||"Kh\u00f4ng \u0111\u01a1n v\u1ecb t\u00ednh",user_created:$user$$.email}));$kho_vts$$=await $kho_vts$$.asyncGroupBy(["ma_vt","ten_vt","ma_dvt"],[]);if(0<$kho_vts$$.length){$dvts_kh$$=
|
|
9
|
+
await $kho_vts$$.asyncGroupBy(["ma_dvt"],[]);for($dvt_tk_vt$$ of $dvts_kh$$)$dvt_tk_vt$$.id_app=$id_app$$,$dvt_tk_vt$$.ten_dvt=$dvt_tk_vt$$.ma_dvt,$dvt_tk_vt$$.status=!0,$dvt_tk_vt$$.user_created=$user$$.email,await global.getModel("dmdvt").findOne({ma_dvt:$dvt_tk_vt$$.ma_dvt,id_app:$id_app$$}).lean()||(console.log("create dvt",$dvt_tk_vt$$),await global.getModel("dmdvt").create($dvt_tk_vt$$));var $dvt_tk_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^156",$options:"i"}},
|
|
10
|
+
{tk:1}).lean()||{}).tk;$dvts_kh$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^632",$options:"i"}},{tk:1}).lean()||{}).tk;$custs_listInfo_tk_dt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^511",$options:"i"}},{tk:1}).lean()||{}).tk;for(let $vt$$ of $kho_vts$$)$vt$$.id_app=$id_app$$,$vt$$.tk_vt=$dvt_tk_vt$$,$vt$$.tk_gv=$dvts_kh$$,$vt$$.tk_dt=$custs_listInfo_tk_dt$$,$vt$$.status=!0,$vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$vt$$.ma_vt,
|
|
11
|
+
id_app:$id_app$$}).lean()||(console.log("create product",$vt$$),await global.getModel("dmvt").create($vt$$),await global.getModel("dmqddvt").create({id_app:$id_app$$,status:!0,ma_vt:$vt$$.ma_vt,ma_dvt:$vt$$.ma_dvt,tu:1,ma:1}))}$data$$.forEach($r$$=>{delete $r$$.ten_dvcs;global.mongoose.Types.ObjectId.isValid($r$$._id)&&delete $r$$._id});await $data$$.filter($r$$=>$r$$.ma_dvcs).asyncJoinModel2($id_app$$,global.getModel("dvcs"),{where:{ma_dvcs:"_id"},fields:"ten_dvcs"});async.map($data$$,function($row$$,
|
|
12
|
+
$callback$$){const $row_keys$$=Object.keys($row$$);$row_keys$$.filter($key$$=>$ctrl$$.model.schema.paths[$key$$]).forEach($key$$=>{let $data_type$$=$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase(),$data_value$$=$row$$[$key$$];if($data_value$$&&_.isString($data_value$$)&&("mixed"==$data_type$$||"array"==$data_type$$)&&($data_value$$=$data_value$$.trim(),0==$data_value$$.indexOf("[")||0==$data_value$$.indexOf("{")))try{$row$$[$key$$]=JSONParser($data_value$$)}catch($e$$){delete $row$$[$key$$],
|
|
13
|
+
console.error("Error parse data",$e$$)}});setImmediate(async()=>{for(let $i$$=0;$i$$<$modelJoins$$.length;$i$$++){let $field_ref$$=$modelJoins$$[$i$$];if($row$$[$field_ref$$.name]){let $new_data_ref$$=await global.getModel("originimportid").findOne({id_app:$id_app$$,old_id:$row$$[$field_ref$$.name]}).lean();$new_data_ref$$&&($row$$[$field_ref$$.name]=$new_data_ref$$.new_id)}}delete $row$$.__v;let $old_id$$=$row$$._id;$row$$.ma_dvcs&&!$row$$.ten_dvcs&&delete $row$$.ma_dvcs;$row$$.id_app&&$id_app$$!=
|
|
14
|
+
$row$$.id_app&&delete $row$$._id;delete $row$$.id_app;if($replace$$&&($ctrl$$.unique&&0<$ctrl$$.unique.length||$row$$._id)){let $query$$={};if($ctrl$$.unique&&0<$ctrl$$.unique.length){if($ctrl$$.options.unique_imp&&null!=$row$$[$ctrl$$.options.unique_imp]&&void 0!=$row$$[$ctrl$$.options.unique_imp]&&""!=$row$$[$ctrl$$.options.unique_imp])$query$$[$ctrl$$.options.unique_imp]=$row$$[$ctrl$$.options.unique_imp];else if($ctrl$$.unique.forEach(function($k$$){0<=$row_keys$$.indexOf($k$$)&&($query$$[$k$$]=
|
|
15
|
+
$row$$[$k$$],void 0==$query$$[$k$$]&&delete $query$$[$k$$])}),1>Object.keys($query$$).length)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, D\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i \u0111\u1ee7 c\u00e1c gi\u00e1 tr\u1ecb:"+$ctrl$$.unique.join(","));0!=$ctrl$$.require_id_app&&($query$$.id_app=$id_app$$)}else $query$$._id=$row$$._id;$ctrl$$.model.find($query$$).lean().exec(function($error$$,$rss$$){if($error$$)return $callback$$($error$$);if(1<$rss$$.length)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, \u0111\u1ed1i t\u01b0\u1ee3ng "+
|
|
16
|
+
Object.values($query$$).join("-")+" \u0111\u00e3 t\u1ed3n t\u1ea1i nhi\u1ec1u h\u01a1n m\u1ed9t l\u1ea7n");setImmediate(async()=>{let $foundObject$$;1===$rss$$.length&&($foundObject$$=$rss$$[0]);$foundObject$$?($row$$.id_app=$foundObject$$.id_app,$row$$._id=$foundObject$$._id.toString(),($ctrl$$.unique||[]).forEach(function($k$$){$row$$[$k$$]=$foundObject$$[$k$$]}),update($user$$,$ctrl$$,$foundObject$$._id,$row$$,function($e$$){if($e$$){let $_e$$=$e$$;_.isArray($_e$$)||($_e$$=[{error:$e$$.error||
|
|
17
|
+
$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$$})}$callback$$()},"import",$options$$.req,"import")):create($user$$,$ctrl$$,$row$$,function($e$$,$new_row$$){setImmediate(async()=>{if($e$$){var $_e$jscomp$1_i$$=$e$$;_.isArray($_e$jscomp$1_i$$)||($_e$jscomp$1_i$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$jscomp$1_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,
|
|
18
|
+
old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},{new:!0,upsert:!0}),$_e$jscomp$1_i$$=0;$_e$jscomp$1_i$$<$data$$.length;$_e$jscomp$1_i$$++){const $_r$$=$data$$[$_e$jscomp$1_i$$];for(let $key$$ in $_r$$)"_id"!=$key$$&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$new_row$$._id.toString()}))}$callback$$()})},$row$$._id,$options$$.req,"import")})})}else create($user$$,
|
|
19
|
+
$ctrl$$,$row$$,function($e$$,$new_row$$){setImmediate(async()=>{if($e$$){console.error("error import data, creating...",$e$$);var $_e$jscomp$2_i$$=$e$$;_.isArray($_e$jscomp$2_i$$)||($_e$jscomp$2_i$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({error:$_e$jscomp$2_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},
|
|
20
|
+
{new:!0,upsert:!0}),$_e$jscomp$2_i$$=0;$_e$jscomp$2_i$$<$data$$.length;$_e$jscomp$2_i$$++){const $_r$$=$data$$[$_e$jscomp$2_i$$];for(let $key$$ in $_r$$)"_id"!=$key$$&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$new_row$$._id.toString()}))}$callback$$()})},$row$$._id,$options$$.req,"import")})},function($error$$){setImmediate(()=>{if($error$$)return $callback_main$$($error$$);console.log("\u0110\u00e3 import t\u1edbi",
|
|
21
|
+
$ctrl$$.name,$data$$.length," d\u00f2ng d\u1eef li\u1ec7u");$callback_main$$(null,{rows_imported:$data$$.length-$rows_error$$.length,rows_error:$rows_error$$})})})}module.exports=importHandler;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';const async=require("async"),_=require("lodash"),redisCache=require("../libs/redis-cache"),view=async($user$$,$self$$,$rows$$,$next$$,$options$$)=>{const $model$$=$self$$.model;let $fields_load$$="";$options$$&&$options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&($fields_load$$=$options$$.req.query.fields);let $schema_paths$$=$model$$.schema.paths;for(let $index$$=0;$index$$<$rows$$.length;$index$$++){const $item$$=$rows$$[$index$$];delete $item$$.__v;$item$$.stt_sorted=
|
|
2
2
|
$index$$;delete $item$$.from_cached;_.has($schema_paths$$,"exfields")&&!$item$$.exfields&&($item$$.exfields={})}let $items$$=[];$options$$&&$options$$.req&&$options$$.req.query_cache&&!$options$$.req.query.refresh_required?await new Promise($resolve$$=>{setImmediate(async()=>{let $cacheData$$=await redisCache.getCacheReport($options$$.req.user.email,($options$$.req.user.current_id_app||"system").toString(),$self$$.name,$options$$.req.query_cache,0,$options$$.req.query.page);if($cacheData$$)for(let $index$$=
|
|
3
|
-
0;$index$$<$rows$$.length;$index$$++){const $item$$=$rows$$[$index$$];let $cacheds$$=$cacheData$$.filter($r$$=>$r$$._id===$item$$._id.toString());if(0<$cacheds$$.length)for(let $cached$$ of $cacheds$$)$cached$$.from_cached=!0,$items$$.push($cached$$);else $items$$.push($item$$)}else $items$$=$rows$$;$resolve$$()})}):$items$$=$rows$$;async.
|
|
3
|
+
0;$index$$<$rows$$.length;$index$$++){const $item$$=$rows$$[$index$$];let $cacheds$$=$cacheData$$.filter($r$$=>$r$$._id===$item$$._id.toString());if(0<$cacheds$$.length)for(let $cached$$ of $cacheds$$)$cached$$.from_cached=!0,$items$$.push($cached$$);else $items$$.push($item$$)}else $items$$=$rows$$;$resolve$$()})}):$items$$=$rows$$;async.parallel({_Participant_created:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,"id_app")&&await $items$$.filter($item$$=>$item$$.user_created&&!$item$$.from_cached).asyncJoinModel2($user$$.current_id_app,
|
|
4
4
|
"participant",{where:{user_created:"email"},fields:{name_user_created:"name"}});await $items$$.filter($item$$=>$item$$.user_created&&!$item$$.name_user_created&&!$item$$.from_cached).asyncJoinModel2(null,"user",{where:{user_created:"email"},fields:{name_user_created:"name"}});$callback$$(null)})},_Participant_updated:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,"id_app")&&await $items$$.filter($item$$=>$item$$.user_updated&&!$item$$.from_cached).asyncJoinModel2($user$$.current_id_app,
|
|
5
|
-
global.getModel("participant"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});await $items$$.filter($item$$=>$item$$.user_updated&&!$item$$.name_user_updated&&!$item$$.from_cached).asyncJoinModel2(null,global.getModel("user"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});$callback$$(null)})},_approve:$callback$$=>{!$fields_load$$||0<=$fields_load$$.indexOf("approve_data")?async.
|
|
5
|
+
global.getModel("participant"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});await $items$$.filter($item$$=>$item$$.user_updated&&!$item$$.name_user_updated&&!$item$$.from_cached).asyncJoinModel2(null,global.getModel("user"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});$callback$$(null)})},_approve:$callback$$=>{!$fields_load$$||0<=$fields_load$$.indexOf("approve_data")?async.map($items$$,($item$$,$next$$)=>{setImmediate(()=>{global.getModel("approve").find({id_ct:$item$$._id.toString()},
|
|
6
6
|
{title:1,trang_thai:1,user_approved:1,user_approved_name:1,date_approved:1,user_denied:1,user_denied_name:1,date_denied:1}).lean().exec(async($e$$,$rs$$)=>{setImmediate(async()=>{$item$$.approve_data=$rs$$||[];await $item$$.approve_data.filter($r$$=>$r$$.user_approved).asyncJoinModel2($item$$.id_app,global.getModel("participant"),{where:{user_approved:"email"},fields:{user_approved_name:"name",signature_image:"signature_image"}});await $item$$.approve_data.filter($r$$=>$r$$.user_denied).asyncJoinModel2($item$$.id_app,
|
|
7
|
-
global.getModel("participant"),{where:{user_denied:"email"},fields:{user_denied_name:"name",signature_image:"signature_image"}});$next$$(null)})})})},()=>{$callback$$(null)}):$callback$$(null)},transfer_ct:$callback$$=>{if(_.has($schema_paths$$,"id_ct_chuyen")&&$user$$.current_app_info&&$user$$.current_app_info.options&&$user$$.current_app_info.options.id_app_thue)async.
|
|
8
|
-
{_id:1}).lean().exec(async($e$$,$rs$$)=>{$rs$$&&($item$$.id_ct_nhan=$rs$$._id);$next$$(null)})})},()=>{$callback$$(null)});else return $callback$$()},posted:$callback$$=>{$options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)?async.
|
|
7
|
+
global.getModel("participant"),{where:{user_denied:"email"},fields:{user_denied_name:"name",signature_image:"signature_image"}});$next$$(null)})})})},()=>{$callback$$(null)}):$callback$$(null)},transfer_ct:$callback$$=>{if(_.has($schema_paths$$,"id_ct_chuyen")&&$user$$.current_app_info&&$user$$.current_app_info.options&&$user$$.current_app_info.options.id_app_thue)async.map($items$$,($item$$,$next$$)=>{setImmediate(()=>{$model$$.findOne({id_app:$user$$.current_app_info.options.id_app_thue,id_ct_chuyen:$item$$._id.toString()},
|
|
8
|
+
{_id:1}).lean().exec(async($e$$,$rs$$)=>{$rs$$&&($item$$.id_ct_nhan=$rs$$._id);$next$$(null)})})},()=>{$callback$$(null)});else return $callback$$()},posted:$callback$$=>{$options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)?async.map($items$$,($item$$,$next$$)=>{setImmediate(async()=>{let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book,$exists$$=await global.getModel($book$$).findOne({id_ct:$item$$._id.toString()},
|
|
9
9
|
{_id:1});$item$$[`${$book$$}_posted`]=!!$exists$$;$next$$()})},()=>{$callback$$(null)}):$callback$$()}},$e$jscomp$0$$=>{if($e$jscomp$0$$)return $next$$($e$jscomp$0$$);if($options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)){let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book;$items$$=$items$$.filter($r$$=>$options$$.req.query.show_posted_book?$r$$[`${$book$$}_posted`]:!$r$$[`${$book$$}_posted`])}let $items_need_view$$=
|
|
10
10
|
$items$$.filter($i$$=>!$i$$.from_cached),$items_cached$$=$items$$.filter($i$$=>$i$$.from_cached);async.series({view:$callback$$=>{if($self$$.view)try{$self$$.view($user$$,$items_need_view$$,function($error$$,$rs$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$items_need_view$$=$rs$$||$items_need_view$$;$callback$$(null,$items_need_view$$)})},$options$$)}catch($e$$){console.error("Error on view of",name,$e$$),$callback$$(null,$items_need_view$$)}else $callback$$(null,$items_need_view$$)},
|
|
11
11
|
dynamicView:$callback$$=>{$self$$.dynamicView?$self$$.dynamicView($user$$,$items_need_view$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$items_need_view$$=$rs$$||$items_need_view$$;$callback$$(null,$items_need_view$$)}):$callback$$(null,$items_need_view$$)},viewRequired:$callback$$=>{$items$$=[...$items_cached$$,...$items_need_view$$].sort(($a$$,$b$$)=>$a$$.stt_sorted-$b$$.stt_sorted);if($self$$.viewRequired)try{$self$$.viewRequired($user$$,$items$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);
|
package/server/global.js
CHANGED
|
@@ -6,13 +6,14 @@ global.getModel=$model_name$$=>{$model_name$$=$model_name$$.split(".js")[0];"kbm
|
|
|
6
6
|
if(((global.configs||{}).paths||{}).models&&($_requireFields_model_model_path_mySchema$$=((global.configs||{}).paths||{}).models+"/"+$model_name$$+".js",fs.existsSync($_requireFields_model_model_path_mySchema$$)))return require($_requireFields_model_model_path_mySchema$$);$_requireFields_model_model_path_mySchema$$=__dirname+"/models/"+$model_name$$+".js";if(fs.existsSync($_requireFields_model_model_path_mySchema$$))return require($_requireFields_model_model_path_mySchema$$);console.error("model",
|
|
7
7
|
$model_name$$,"is not exists. create new model");$_requireFields_model_model_path_mySchema$$={...require("./models/listinfo").requireFields};$_requireFields_model_model_path_mySchema$$=new global.Schema($_requireFields_model_model_path_mySchema$$,{strict:!1});return global.mongoose.model($model_name$$,$_requireFields_model_model_path_mySchema$$)};global.getLib=$lib_name$$=>require("./libs/"+$lib_name$$);
|
|
8
8
|
const pointSchema=new global.mongoose.Schema({type:{type:String,enum:["Point"],required:!0,default:"Point"},coordinates:{type:[Number],required:!0}}),polygonSchema=new global.mongoose.Schema({type:{type:String,enum:["Polygon"],required:!0,default:"Polygon"},coordinates:{type:[[[Number]]],required:!0}});global.customTypes={Point:pointSchema,Polygon:polygonSchema};const EventEmitter=require("events");class GlobalEmitter extends EventEmitter{}global.globalEvents=new GlobalEmitter;
|
|
9
|
-
|
|
10
|
-
global.alertMessage=function($email$$){setImmediate(()=>{Message
|
|
11
|
-
global.createNotification=function($email_sender$$,$email_receiver$$,$title$$,$content$$,$fn$$,$exfields$$,$emitEvent$$,$c_token$$,$send_email$$){
|
|
12
|
-
global.getNotifies=function($email$$,$fn$$){async.parallel({colls:function($callback$$){$callback$$(null,[])},notifications:function($callback$$){Notification
|
|
13
|
-
|
|
14
|
-
global.
|
|
15
|
-
global.
|
|
9
|
+
global.getSysConfig=async $cf_code$$=>{if($cf_code$$=await global.getModel("sysconfig").findOne({code:$cf_code$$}))return $cf_code$$.value};global.asyncCountUnRead=async $email$$=>{const $Message$$=global.getModel("message");return new Promise($resolve$$=>{setImmediate(()=>{$Message$$.countDocuments({email:$email$$,read:!1},($e$$,$rs$$)=>{$resolve$$($rs$$||0)})})})};
|
|
10
|
+
global.alertMessage=function($email$$){const $Message$$=global.getModel("message"),$User$$=global.getModel("user");setImmediate(()=>{$Message$$.countDocuments({email_owner:$email$$,email_receiver:$email$$,read:!1},function($error$$,$count$$){$error$$?console.log($error$$):$User$$.emitEvent($email$$,"message:count",$count$$,!1)})})};
|
|
11
|
+
global.createNotification=function($email_sender$$,$email_receiver$$,$title$$,$content$$,$fn$$,$exfields$$,$emitEvent$$,$c_token$$,$send_email$$){global.getModel("notification").createNotification($email_sender$$,$email_receiver$$,$title$$,$content$$,$fn$$,$exfields$$,$emitEvent$$,$c_token$$,$send_email$$)};
|
|
12
|
+
global.getNotifies=function($email$$,$fn$$){const $Notification$$=global.getModel("notification");async.parallel({colls:function($callback$$){$callback$$(null,[])},notifications:function($callback$$){$Notification$$.find({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$colls_raw$$){setImmediate(()=>{if($error$$)$callback$$($error$$);else{const $colls$$=$colls_raw$$.map(function($c$$){return $c$$.toObject()});$callback$$(null,$colls$$)}})})},apps:function($callback$$){$callback$$(null,
|
|
13
|
+
[])}},function($error$$,$rs$$){setImmediate(()=>{$fn$$($error$$,$rs$$)})})};
|
|
14
|
+
global.sendNotification=function($email$$,$_id$$,$notify$$,$push_to_mobile_and_web$$=!0){const $User$$=global.getModel("user");setImmediate(()=>{$notify$$||($notify$$={email_sender:"H\u1ec7 th\u1ed1ng"});const $obj_notify$$={_id:$_id$$,code:"notification",action:"view"};$obj_notify$$.body=$notify$$.content||$notify$$.title||"";$obj_notify$$.sender=$notify$$.email_sender;$obj_notify$$.title=$notify$$.title||"";$obj_notify$$.content=$notify$$.content||"";$User$$.emitEvent($email$$,"notify:new",$obj_notify$$,
|
|
15
|
+
$push_to_mobile_and_web$$)})};global.alertNotification=function($email$$){const $Notification$$=global.getModel("notification"),$User$$=global.getModel("user");setImmediate(()=>{$Notification$$.countDocuments({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$count$$){setImmediate(()=>{$error$$?console.log($error$$):$User$$.emitEvent($email$$,"notify:count",$count$$,!1)})})})};
|
|
16
|
+
global.asyncCountNotifications=async function($email$$){const $Notification$$=global.getModel("notification");return new Promise($resolve$$=>{setImmediate(()=>{$Notification$$.countDocuments({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$count$$){setImmediate(()=>{$error$$?(console.log($error$$),$resolve$$(0)):$resolve$$($count$$)})})})})};const {RateLimiterRedis,RateLimiterQueue,RateLimiterMemory}=require("rate-limiter-flexible");
|
|
16
17
|
global.createRateLimiterMiddleware=async($config$$,$keyPrefix$$)=>{const $total_points$$=$config$$.points||1E3;var $duration_limiterFlexible$$=$config$$.duration||1;const $insuranceLimiter$$=new RateLimiterMemory({points:$total_points$$,duration:$duration_limiterFlexible$$});$duration_limiterFlexible$$=new RateLimiterRedis({keyPrefix:$keyPrefix$$,storeClient:global.clientRedis,points:$total_points$$,duration:$duration_limiterFlexible$$,blockDuration:$config$$.blockDuration||0,inmemoryBlockOnConsumed:$total_points$$+
|
|
17
18
|
1,inmemoryBlockDuration:10,insuranceLimiter:$insuranceLimiter$$});const $rateLimiter$$=new RateLimiterQueue($duration_limiterFlexible$$,{maxQueueSize:$config$$.maxQueueSize||1E4});return async($req$$,$res$$,$next$$)=>{let $key$$=($req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress).replace("::ffff:","");const $origin$$=($req$$.headers.origin||$req$$.headers.referer||"").toString().toLowerCase().replace("https://","").replace("http://","").replace("www.","").split("/").join("").trim();
|
|
18
19
|
let $trust_domains$$=((global.configs||{}).trust_domains||"").toString().toLowerCase().split(","),$points$$;if($origin$$&&0>$trust_domains$$.indexOf($origin$$)&&($check_query_trust_Key$$={domain:$origin$$},$check_query_trust_Key$$=await global.getModel("domain").findOne($check_query_trust_Key$$).lean())){if($check_query_trust_Key$$.not_allow)return $res$$.status(400).send({error:"Access is not allowed"});$points$$=$check_query_trust_Key$$.points;$trust_domains$$.push($origin$$)}var $check_query_trust_Key$$=
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
'use strict';const {Worker}=require("worker_threads"),fs=require("fs"),_=require("lodash"),crypto=require("crypto"),redisCache=require("./redis-cache");
|
|
2
|
-
class WorkerPool{constructor($filename_i$$,$maxQueue_worker$$=0,$maxWorkers$$=
|
|
3
|
-
this.createWorker(),this.workers[$maxQueue_worker$$.id]=$maxQueue_worker$$}createWorker(){const $wk$$={id:`worker-${crypto.randomBytes(20).toString("hex")}`,isBusy:!1
|
|
4
|
-
$
|
|
5
|
-
$
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
$
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
'use strict';const {Worker}=require("worker_threads"),fs=require("fs"),_=require("lodash"),crypto=require("crypto"),moment=require("moment"),redisCache=require("./redis-cache");
|
|
2
|
+
class WorkerPool{constructor($filename_i$$,$maxQueue_worker$$=0,$maxWorkers$$=1,$defaultTimeout$$=3E5,$pre_created_workers$$=0){if(!fs.existsSync($filename_i$$))throw Error("Worker file does not exist");this.filename=$filename_i$$;this.maxWorkers=$maxWorkers$$;(this.maxQueue=$maxQueue_worker$$)&&this.maxQueue<$maxWorkers$$&&(this.maxQueue=$maxWorkers$$);this.defaultTimeout=$defaultTimeout$$;this.pre_created_workers=$pre_created_workers$$;this.queue=[];this.queue_running=[];this.workers={};console.log("\u0110ang t\u1ea1o s\u1eb5n",
|
|
3
|
+
$pre_created_workers$$,"workes/",$maxWorkers$$);for($filename_i$$=0;$filename_i$$<Math.min($pre_created_workers$$,$maxWorkers$$);$filename_i$$++)$maxQueue_worker$$=this.createWorker(),this.workers[$maxQueue_worker$$.id]=$maxQueue_worker$$}workerIsAlive($wk$$){return!$wk$$.worker||0>=$wk$$.worker.threadId||moment().diff(moment($wk$$.time_responded),"seconds")>(($wk$$.task||{}).timeout||1E4)/1E3?!1:!0}createWorker(){const $wk$$={id:`worker-${crypto.randomBytes(20).toString("hex")}`,isBusy:!1,time_responded:new Date};
|
|
4
|
+
$wk$$.worker=new Worker(this.filename);$wk$$.worker.on("message",async $message$$=>{$wk$$.time_responded=new Date;if("pong"!==$message$$)try{let $task$$;($task$$=$message$$.id_task?this.queue_running.find($q$$=>$q$$.id==$message$$.id_task):$wk$$.task)&&clearTimeout($task$$.timeoutId);if($task$$&&$task$$.callback)if($message$$.id_task&&$message$$.id_task!==$task$$.id)console.error("K\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1 kh\u00f4ng \u0111\u00fang cho task",$task$$.id,$message$$);else{$task$$.finished=new Date;
|
|
5
|
+
$task$$.status=5;$task$$.message="\u0110\u00e3 th\u1ef1c hi\u1ec7n xong";$task$$.result=$message$$&&$message$$.map?void 0:$message$$;try{let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id);$task$$.callback($message$$,
|
|
6
|
+
$task$$.id)}delete $wk$$.task;$wk$$.isBusy=!1;this.processQueue()}catch($e$$){console.error($e$$)}});$wk$$.worker.on("error",$error$$=>{console.error("Worker error:",$error$$);$wk$$.worker.terminate()});$wk$$.worker.on("exit",async $code$$=>{console.error(`Worker exited with code ${$code$$}. Creating new worker...`);if($wk$$.task){let $task$$=this.queue_running.find($q$$=>$q$$.id==$wk$$.task.id_task);if($task$$){clearTimeout($task$$.timeoutId);$task$$.finished=new Date;$task$$.status=9;$task$$.message=
|
|
7
|
+
"\u0110\u00e3 c\u00f3 l\u1ed7i x\u1ea3y ra trong h\u1ec7 th\u1ed1ng. H\u00e3y th\u1eed l\u1ea1i";let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;try{await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$task$$.callback&&$task$$.callback({error:$message$$},$task$$.id);this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id)}}delete this.workers[$wk$$.id];
|
|
8
|
+
$code$$=this.createWorker();this.workers[$code$$.id]=$code$$});return $wk$$}async processQueue($id_worker$$){for(let $i$$=0;$i$$<this.maxWorkers&&0!=this.queue.length;$i$$++){let $wk$$=Object.values(this.workers).find($w$$=>!$w$$.isBusy&&!$w$$.task&&(!$id_worker$$||$id_worker$$==$w$$.id));if(!$wk$$)if(Object.keys(this.workers).length<this.maxWorkers)console.log("T\u1ea1o th\u00eam worker m\u1edbi...",", s\u1ed1 l\u01b0\u1ee3ng workers hi\u1ec7n t\u1ea1i",Object.values(this.workers).length,", max:",
|
|
9
|
+
this.maxWorkers),$wk$$=this.createWorker(),this.workers[$wk$$.id]=$wk$$;else break;if($wk$$){this.workerIsAlive($wk$$)||(console.error("Worker",$wk$$.id,"kh\u00f4ng c\u00f2n ho\u1ea1t \u0111\u1ed9ng. T\u1ea1o l\u1ea1i..."),delete this.workers[$wk$$.id],$wk$$=this.createWorker(),this.workers[$wk$$.id]=$wk$$);const $task$$=this.queue.shift();if($task$$){$task$$.status=2;$task$$.message="\u0110ang th\u1ef1c hi\u1ec7n";this.queue_running.push($task$$);try{let {finished:$finished$$,status:$status$$,message:$message$$,
|
|
10
|
+
result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$wk$$.isBusy=!0;$wk$$.task=$task$$;$task$$.params.id_worker=$wk$$.id;$wk$$.worker.postMessage($task$$.params);$task$$.timeoutId=setTimeout(async()=>{this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id);$task$$.finished=new Date;$task$$.status=9;$task$$.message="\u0110\u00e3 h\u1ebft th\u1eddi gian th\u1ef1c hi\u1ec7n";
|
|
11
|
+
let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;try{await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$task$$.callback&&$task$$.callback({error:$message$$},$task$$.id);delete $wk$$.task;$wk$$.isBusy=!1;this.processQueue()},$task$$.timeout||this.defaultTimeout)}}}}async pushToQueue($params$$,$callback$$,$timeout$$=0,$id_worker$$){$params$$.id_task||
|
|
12
|
+
($params$$.id_task=`task-${crypto.randomBytes(20).toString("hex")}`);$timeout$$=$timeout$$||this.defaultTimeout;const $task$$={id:$params$$.id_task,start:new Date,params:_.cloneDeep($params$$),timeout:$timeout$$,status:0};delete $task$$.params.configs;delete $task$$.params.user;delete $task$$.params.configs;delete $task$$.params.data;$task$$.params.req&&(delete $task$$.params.req.user,delete $task$$.params.req.body,delete ($task$$.params.req.query||{}).access_token);try{await redisCache.setObject($params$$.id_task,
|
|
13
|
+
$task$$),this.queue.push({id:$params$$.id_task,params:$params$$,callback:$callback$$,timeout:$timeout$$,status:0}),this.processQueue($id_worker$$)}catch($e$$){console.error("L\u1ed7i \u0111\u1ea9y task t\u1edbi queue",$e$$),$callback$$({error:$e$$.error||$e$$.message||$e$$})}}async exec($args_params$$,$callback$$=()=>{},$timeout$$=0){if(0<this.maxQueue&&this.queue.length>=this.maxQueue)$callback$$({error:"Queue is full"});else if($args_params$$.load)for(let $id_worker$$ of Object.keys(this.workers)){let $params$$=
|
|
14
|
+
_.cloneDeep($args_params$$);this.pushToQueue($params$$,$callback$$,$timeout$$,$id_worker$$)}else $args_params$$=_.cloneDeep($args_params$$),this.pushToQueue($args_params$$,$callback$$,$timeout$$)}fullQueue(){return 0<this.maxQueue&&this.queue.length>=this.maxQueue}busy(){return 0==Object.values(this.workers).filter($w$$=>!$w$$.isBusy).length}destroy(){for(const $worker$$ of Object.values(this.workers))$worker$$.terminate();this.workers={};this.queue=[]}}module.exports=WorkerPool;
|