flexbiz-server 12.3.26 → 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/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/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-dh2.js +21 -21
- package/server/modules/vouchers/vo-hd2.js +58 -58
- package/server/modules/vouchers/vo-pbl.js +29 -29
- package/server/modules/vouchers/vo-so1.js +51 -50
- package/server/modules/vouchers/vo-so7.js +45 -44
- package/server/modules/vouchers/vo-so9.js +35 -34
- 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}
|
|
@@ -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.map($data$$,function($row
|
|
12
|
-
$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;
|
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;
|
package/server/libs/tinhgiatb.js
CHANGED
|
@@ -2,38 +2,38 @@
|
|
|
2
2
|
module.exports=async function($condition$$,$fn$$){if($condition$$&&$condition$$.tu_thang&&$condition$$.den_thang&&$condition$$.nam&&$condition$$.id_app){$condition$$.tu_thang=Number($condition$$.tu_thang);$condition$$.den_thang=Number($condition$$.den_thang);var $ma_kho$$=$condition$$.ma_kho;$ma_kho$$&&console.log("dang tinh gia trung binh cho kho",$ma_kho$$);var $tu_ngay$$=moment(new Date($condition$$.nam,$condition$$.tu_thang-1,15)).startOf("month").toDate(),$den_ngay$$=moment(new Date($condition$$.nam,
|
|
3
3
|
$condition$$.den_thang-1,15)).endOf("month").toDate(),$id_app$$=$condition$$.id_app,$app_query_dmvt$$=await global.getModel("app").findOne({_id:$id_app$$},{options:1}).lean();if(!$app_query_dmvt$$)return $fn$$("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");var $f_tien$$=($app_query_dmvt$$.options||{}).f_tien||0;$app_query_dmvt$$={id_app:$id_app$$,gia_xuat:"1"};$condition$$.ma_nvt&&($app_query_dmvt$$.ma_nvt=$condition$$.ma_nvt);$condition$$.ma_ncc&&($app_query_dmvt$$.ma_ncc=$condition$$.ma_ncc);
|
|
4
4
|
$condition$$.ma_vt&&($app_query_dmvt$$.ma_vt=$condition$$.ma_vt);dmvt.find($app_query_dmvt$$).lean().exec(function($error$jscomp$3$$,$dmvts$$){async.map($dmvts$$,function($vt$$,$callback$$){setImmediate(()=>{let $query$$={id_app:$id_app$$,tu_ngay:$tu_ngay$$,den_ngay:$den_ngay$$,ma_vt:$vt$$.ma_vt,ma_kho:$ma_kho$$};tinhgiatb1vt($query$$,function($error$$,$gia$$){if($error$$)return console.error("Kh\u00f4ng th\u1ec3 t\u00ednh gi\u00e1 trung b\u00ecnh cho v\u1eadt t\u01b0",$query$$.ma_vt,$error$$),$callback$$($error$$);
|
|
5
|
-
$gia$$.id_app=$id_app$$;$gia$$.ma_kho=$ma_kho$$;$gia$$.status=!0;$callback$$(null,$gia$$)})})},function($error$jscomp$2$$,$bang_gia$$){if($error$jscomp$2$$)return $fn$$($error$jscomp$2$$);$
|
|
6
|
-
|
|
7
|
-
$
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
$sk$$.
|
|
11
|
-
|
|
12
|
-
$ct$jscomp$1_ctrl
|
|
13
|
-
$sk$$.
|
|
14
|
-
{
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
(
|
|
18
|
-
|
|
19
|
-
$
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
$
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
$d$$.
|
|
29
|
-
|
|
30
|
-
$
|
|
31
|
-
$detail$$.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
$
|
|
35
|
-
|
|
36
|
-
_.
|
|
37
|
-
$vc$$.
|
|
38
|
-
|
|
39
|
-
$
|
|
5
|
+
$gia$$.id_app=$id_app$$;$gia$$.ma_kho=$ma_kho$$;$gia$$.status=!0;$callback$$(null,$gia$$)})})},function($error$jscomp$2$$,$bang_gia$$){if($error$jscomp$2$$)return $fn$$($error$jscomp$2$$);$error$jscomp$2$$=[];for(let $t$$=$condition$$.tu_thang;$t$$<=$condition$$.den_thang;$t$$++)$error$jscomp$2$$.push($t$$);async.map($error$jscomp$2$$,function($t$$,$callback$jscomp$1$$){async.map($bang_gia$$,function($gia$$,$callback$jscomp$0$$){setImmediate(()=>{$gia$$.thang=$t$$;$gia$$.nam=$condition$$.nam;async.series({savetogiatb:function($callback$$){let $query_delete$$=
|
|
6
|
+
{id_app:$id_app$$,ma_vt:$gia$$.ma_vt,nam:$condition$$.nam,thang:$t$$};$ma_kho$$&&($query_delete$$.ma_kho=$ma_kho$$);giatb.deleteMany($query_delete$$,function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$$($error$jscomp$0$$);giatb.create($gia$$,function($error$$,$result$$){if($error$$)return console.log("Loi khi luu vao bang gia trung binh thang vat tu "+$gia$$.ma_vt,$error$$),$callback$$($error$$);$callback$$(null,$result$$)})})}},function($error$$){if($error$$)return $callback$jscomp$0$$($error$$);
|
|
7
|
+
$callback$jscomp$0$$(null)})})},function($error$$){if($error$$)return $callback$jscomp$1$$($error$$);$callback$jscomp$1$$(null)})},function($error$jscomp$1$$){if($error$jscomp$1$$)return $fn$$($error$jscomp$1$$);let $vouchers_x$$={},$vouchers_n$$={},$ma_vts$$=$bang_gia$$.map($v$$=>$v$$.ma_vt);async.parallel({xuat:function($callback$jscomp$0$$){setImmediate(()=>{let $query_sokho_x$$={id_app:$id_app$$,ngay_ct:{$gte:$tu_ngay$$,$lte:$den_ngay$$},nxt:2,ma_vt:{$in:$ma_vts$$},px_gia_dd:!1};$ma_kho$$&&($query_sokho_x$$.ma_kho=
|
|
8
|
+
$ma_kho$$);sokho.find($query_sokho_x$$).lean().exec(function($error$jscomp$0$$,$sks$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);if(!$sks$$||0===$sks$$.length)return $callback$jscomp$0$$(null,$vouchers_x$$);async.mapSeries($sks$$,function($sk$$,$callback$$){let $voucher$$=$vouchers_x$$[$sk$$.id_ct];var $ct_ctrl$$=global.controllers[$sk$$.ma_ct.toUpperCase()];$ct_ctrl$$=$ct_ctrl$$?$ct_ctrl$$.getProperty("model"):mongoose.models[$sk$$.ma_ct.toLowerCase()];!$voucher$$&&$ct_ctrl$$?
|
|
9
|
+
$ct_ctrl$$.findById($sk$$.id_ct,function($error$$,$v$$){if($error$$)return $callback$$($error$$);$v$$?($voucher$$=$v$$,$vouchers_x$$[$sk$$.id_ct]=$voucher$$):(sokho.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu xuat. chuong trinh da xoa phieu nay khoi sokho",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}),socai.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu xuat. chuong trinh da xoa phieu nay khoi socai",
|
|
10
|
+
$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}));$callback$$()}):$callback$$()},function($error$$){if($error$$)return console.error("co loi lay phieu xuat",$error$$),$callback$jscomp$0$$($error$$);$callback$jscomp$0$$(null,$vouchers_x$$)})})})},nhap:function($callback$jscomp$0$$){setImmediate(()=>{let $query_sokho_n$$={id_app:$id_app$$,ngay_ct:{$gte:$tu_ngay$$,$lte:$den_ngay$$},nxt:1,ma_vt:{$in:$ma_vts$$},pn_gia_tb:!0,ma_ct:{$ne:"PXC"}};$ma_kho$$&&($query_sokho_n$$.ma_kho=$ma_kho$$);
|
|
11
|
+
sokho.find($query_sokho_n$$,function($error$jscomp$0$$,$sks$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);if(!$sks$$||0===$sks$$.length)return $callback$jscomp$0$$(null,$vouchers_n$$);async.map($sks$$,function($sk$$,$callback$$){let $voucher$$=$vouchers_n$$[$sk$$.id_ct];var $ct$jscomp$1_ctrl$$=global.controllers[$sk$$.ma_ct.toUpperCase()];$ct$jscomp$1_ctrl$$=$ct$jscomp$1_ctrl$$?$ct$jscomp$1_ctrl$$.getProperty("model"):mongoose.models[$sk$$.ma_ct.toLowerCase()];!$voucher$$&&
|
|
12
|
+
$ct$jscomp$1_ctrl$$?$ct$jscomp$1_ctrl$$.findById($sk$$.id_ct,function($error$$,$v$$){if($error$$)return $callback$$($error$$);$v$$?($voucher$$=$v$$,$vouchers_n$$[$sk$$.id_ct]=$voucher$$):(sokho.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu nhap. chuong trinh da xoa phieu nay khoi sokho",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}),socai.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu nhap. chuong trinh da xoa phieu nay khoi socai",
|
|
13
|
+
$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}));$callback$$()}):$callback$$()},function($error$$){if($error$$)return console.log("co loi lay phieu nhap",$error$$),$callback$jscomp$0$$($error$$);$callback$jscomp$0$$(null,$vouchers_n$$)})})})},nhap_dc:$callback$$=>{if($ma_kho$$){let $query_sokho_pnc$$={id_app:$id_app$$,ma_ct:"PNC",ngay_ct:{$gte:$tu_ngay$$,$lte:$den_ngay$$},$or:[{ma_kho_x:$ma_kho$$},{"details.ma_kho_x":$ma_kho$$}],"details.px_gia_dd":!1};global.getModel("pnc").find($query_sokho_pnc$$).then($pnc$$=>
|
|
14
|
+
{console.log("S\u1ed1 phi\u1ebfu nh\u1eadp \u0111i\u1ec1u chuy\u1ec3n c\u1ee7a kho",$ma_kho$$,$pnc$$.length);$pnc$$.forEach($p$$=>{$vouchers_n$$[$p$$._id.toString()]=$p$$});$callback$$()}).catch($e$$=>{console.log("co loi lay phieu nhap dieu chuyen",$e$$);return $callback$$($e$$)})}else $callback$$()}},function($error$jscomp$0$$){if($error$jscomp$0$$)return $fn$$($error$jscomp$0$$);async.waterfall([function($callback$jscomp$0$$){async.map(_.values($vouchers_x$$),($voucher_x$$,$callback$$)=>{setImmediate(()=>
|
|
15
|
+
{(async()=>{var $details_details_doi_details_kmc$$=$voucher_x$$.details.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&!$d$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===($d$$.ma_kho||$d$$.ma_kho_x||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x)));await Promise.all($details_details_doi_details_kmc$$.map($d$$=>(async()=>{var $gia$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$$=$gia$$?$gia$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,
|
|
16
|
+
ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$$*$he_so_qd$$;$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$)})()));$voucher_x$$.details_doi&&($details_details_doi_details_kmc$$=$voucher_x$$.details_doi.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&!$d$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===($d$$.ma_kho||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x))),await Promise.all($details_details_doi_details_kmc$$.map($d$$=>
|
|
17
|
+
(async()=>{var $gia$jscomp$3_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$3_gia_chuan$$=$gia$jscomp$3_gia_chuan$$?$gia$jscomp$3_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$jscomp$3_gia_chuan$$*$he_so_qd$$;$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$)})())));
|
|
18
|
+
await Promise.all($voucher_x$$.details.filter($d$$=>$d$$.promotion&&$d$$.promotion.details_km).map($d$jscomp$0$$=>(async()=>{const $details_km$$=$d$jscomp$0$$.promotion.details_km.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&!$d$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===($d$$.ma_kho||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x)));await Promise.all($details_km$$.map($d$$=>(async()=>{var $gia$jscomp$4_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$4_gia_chuan$$=
|
|
19
|
+
$gia$jscomp$4_gia_chuan$$?$gia$jscomp$4_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$jscomp$4_gia_chuan$$*$he_so_qd$$;$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy(($d$$.sl_xuat||$d$$.sl_km||0)*$d$$.gia_von,$f_tien$$)})()))})()));await Promise.all($voucher_x$$.details.filter($d$$=>$d$$.combo&&0<$d$$.combo.length&&
|
|
20
|
+
!$d$$.px_gia_dd).map($detail$$=>(async()=>{const $combo$$=$detail$$.combo.filter($c$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$c$$.ma_vt)&&(!$ma_kho$$||$ma_kho$$===($detail$$.ma_kho||$detail$$.ma_kho_x||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x)));await Promise.all($combo$$.map($d$$=>(async()=>{var $gia$jscomp$5_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$5_gia_chuan$$=$gia$jscomp$5_gia_chuan$$?$gia$jscomp$5_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,
|
|
21
|
+
ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$jscomp$5_gia_chuan$$*$he_so_qd$$;$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy(($d$$.sl_xuat||0)*$d$$.gia_von,$f_tien$$)})()));$detail$$.tien_xuat=$detail$$.tien_xuat_nt=$detail$$.combo.map($c$$=>$c$$.tien_xuat_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$detail$$.gia_von=$detail$$.gia_von_nt=Math.roundBy($detail$$.sl_xuat?$detail$$.tien_xuat_nt/$detail$$.sl_xuat:
|
|
22
|
+
0,$f_tien$$)})()));$voucher_x$$.promotion&&($details_details_doi_details_kmc$$=$voucher_x$$.promotion.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&!$d$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===($d$$.ma_kho||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x))),await Promise.all($details_details_doi_details_kmc$$.map($d$$=>(async()=>{var $gia$jscomp$6_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$6_gia_chuan$$=$gia$jscomp$6_gia_chuan$$?$gia$jscomp$6_gia_chuan$$.gia:
|
|
23
|
+
0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von_nt=$gia$jscomp$6_gia_chuan$$*$he_so_qd$$;$d$$.gia_von=$d$$.gia_von_nt;$d$$.tien_xuat_nt=Math.roundBy(($d$$.sl_xuat||$d$$.sl_km||0)*$d$$.gia_von,$f_tien$$);$d$$.tien_xuat=$d$$.tien_xuat_nt})())));let $voucher_x_data$$=$voucher_x$$.toObject();try{const $ctrl$$=global.controllers[$voucher_x$$.ma_ct.toUpperCase()];
|
|
24
|
+
await ($ctrl$$?$ctrl$$.getProperty("model"):mongoose.models[$voucher_x$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher_x$$._id},$voucher_x_data$$)}catch($e$$){return $callback$$($e$$)}let $ctrl$jscomp$0$$=global.controllers[$voucher_x_data$$.ma_ct.toUpperCase()];$ctrl$jscomp$0$$&&$ctrl$jscomp$0$$.post&&await (async()=>new Promise(($resolve$$,$reject$$)=>{Controller.postData($voucher_x_data$$,$ctrl$jscomp$0$$,($e$$,$rs$$)=>{if($e$$)return console.error("error repost khi tinh gia trung binh",$e$$,$voucher_x_data$$),
|
|
25
|
+
$reject$$($e$$);$resolve$$($rs$$)},{kiem_tra_han_muc_cong_no:!1})}))()})().then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})})},$error$$=>{$callback$jscomp$0$$($error$$,$vouchers_x$$)})},function($_vouchers_x$$,$callback$jscomp$0$$){async.map(_.values($vouchers_n$$),($voucher_n$$,$callback$$)=>{setImmediate(()=>{(async()=>{var $details_doi$$=$voucher_n$$.details.filter($d$$=>(!$d$$.combo||0==$d$$.combo.length)&&(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&($d$$.pn_gia_tb||
|
|
26
|
+
"PNC"===$voucher_n$$.ma_ct&&!$d$$.px_gia_dd||"PKK"===$voucher_n$$.ma_ct&&!$d$$.px_gia_dd)&&(!$ma_kho$$||$ma_kho$$===$d$$.ma_kho||$ma_kho$$===$d$$.ma_kho_x||$ma_kho$$===$voucher_n$$.ma_kho||$ma_kho$$===$voucher_n$$.ma_kho_n));await Promise.all($details_doi$$.map($d$$=>(async()=>{var $gia$jscomp$7_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$7_gia_chuan$$=$gia$jscomp$7_gia_chuan$$?$gia$jscomp$7_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$vouchers_n$$.id_app,
|
|
27
|
+
ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von_nt=$gia$jscomp$7_gia_chuan$$*$he_so_qd$$;$d$$.gia_von=$d$$.gia_von_nt;"PNC"===$voucher_n$$.ma_ct||"PKK"===$voucher_n$$.ma_ct?($d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$),$d$$.tien_xuat=$d$$.tien_xuat_nt):($d$$.tien_nhap_nt=Math.roundBy($d$$.sl_nhap*$d$$.gia_von,$f_tien$$),$d$$.tien_nhap=$d$$.tien_nhap_nt)})()));await Promise.all($voucher_n$$.details.filter($d$$=>
|
|
28
|
+
$d$$.combo&&0<$d$$.combo.length&&($d$$.pn_gia_tb||"PNC"===$voucher_n$$.ma_ct&&!$d$$.px_gia_dd||"PKK"===$voucher_n$$.ma_ct&&!$d$$.px_gia_dd)).map($detail$$=>(async()=>{const $combo$$=$detail$$.combo.filter($c$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$c$$.ma_vt)&&(!$ma_kho$$||$ma_kho$$===($detail$$.ma_kho||$voucher_n$$.ma_kho||$voucher_n$$.ma_kho_n)));await Promise.all($combo$$.map($d$$=>(async()=>{var $gia$jscomp$8_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$8_gia_chuan$$=
|
|
29
|
+
$gia$jscomp$8_gia_chuan$$?$gia$jscomp$8_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_n$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$jscomp$8_gia_chuan$$*$he_so_qd$$;"PNC"===$voucher_n$$.ma_ct||"PKK"===$voucher_n$$.ma_ct?($d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$),$d$$.tien_xuat=$d$$.tien_xuat_nt):($d$$.tien_nhap_nt=Math.roundBy($d$$.sl_nhap*
|
|
30
|
+
$d$$.gia_von,$f_tien$$),$d$$.tien_nhap=$d$$.tien_nhap_nt)})()));"PNC"===$voucher_n$$.ma_ct||"PKK"===$voucher_n$$.ma_ct?($detail$$.tien_xuat=$detail$$.tien_xuat_nt=$detail$$.combo.map($c$$=>$c$$.tien_xuat_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$detail$$.gia_von=$detail$$.gia_von_nt=Math.roundBy($detail$$.sl_xuat?$detail$$.tien_xuat_nt/$detail$$.sl_xuat:0,$f_tien$$)):($detail$$.tien_nhap=$detail$$.tien_nhap_nt=$detail$$.combo.map($c$$=>$c$$.tien_nhap_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$detail$$.gia_von=
|
|
31
|
+
$detail$$.gia_von_nt=Math.roundBy($detail$$.sl_nhap?$detail$$.tien_nhap_nt/$detail$$.sl_nhap:0,$f_tien$$))})()));$voucher_n$$.details_doi&&($details_doi$$=$voucher_n$$.details_doi.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&$d$$.pn_gia_tb&&(!$ma_kho$$||$ma_kho$$===$d$$.ma_kho)),await Promise.all($details_doi$$.map($d$$=>(async()=>{var $gia$jscomp$9_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$9_gia_chuan$$=$gia$jscomp$9_gia_chuan$$?$gia$jscomp$9_gia_chuan$$.gia:
|
|
32
|
+
0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$vouchers_n$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von_nt=$gia$jscomp$9_gia_chuan$$*$he_so_qd$$;$d$$.gia_von=$d$$.gia_von_nt;$d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$);$d$$.tien_xuat=$d$$.tien_xuat_nt})())));let $voucher_n_data$$=$voucher_n$$.toObject();try{const $ctrl$$=global.controllers[$voucher_n_data$$.ma_ct.toUpperCase()];await ($ctrl$$?
|
|
33
|
+
$ctrl$$.getProperty("model"):mongoose.models[$voucher_n_data$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher_n_data$$._id},$voucher_n_data$$)}catch($e$$){return $callback$$($e$$)}let $ctrl$jscomp$0$$=global.controllers[$voucher_n_data$$.ma_ct.toUpperCase()];$ctrl$jscomp$0$$&&$ctrl$jscomp$0$$.post&&await (async()=>new Promise(($resolve$$,$reject$$)=>{Controller.postData($voucher_n_data$$,$ctrl$jscomp$0$$,function($e$$,$rs$$){if($e$$)return console.error("error repost khi tinh gia trung binh",$e$$,
|
|
34
|
+
$voucher_n_data$$),$reject$$($e$$);$resolve$$($rs$$)},{kiem_tra_han_muc_cong_no:!1})}))()})().then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})})},function($error$$){$callback$jscomp$0$$($error$$)})}],function($e$jscomp$1$$){if($e$jscomp$1$$)return $fn$$($e$jscomp$1$$);$e$jscomp$1$$={id_app:$condition$$.id_app,ngay:$den_ngay$$,chenh_lech:1};$condition$$.ma_vt&&($e$jscomp$1$$.ma_vt=$condition$$.ma_vt);$condition$$.ma_kho&&($e$jscomp$1$$.ma_kho=$condition$$.ma_kho);ckvt($e$jscomp$1$$,
|
|
35
|
+
($e$jscomp$0$$,$rs$jscomp$0$$)=>{if($e$jscomp$0$$)return $fn$$($e$jscomp$0$$);$rs$jscomp$0$$=_.filter($rs$jscomp$0$$,$r$$=>0!==$r$$.du00&&(0==$r$$.ton00||.001>Math.abs($r$$.ton00)));$vouchers_x$$=_.sortBy(_.values($vouchers_x$$),$v$$=>-(new Date($v$$.ngay_ct)).getTime());$vouchers_n$$=_.sortBy(_.values($vouchers_n$$),$v$$=>-(new Date($v$$.ngay_ct)).getTime());let $chung_tu_cap_nhat_chenh_lech$$={};async.map($rs$jscomp$0$$,($vt$$,$callback$$)=>{setImmediate(()=>{let $d_voucher$$=null;($d_voucher$$=
|
|
36
|
+
_.find($vouchers_x$$,$x$$=>_.find($x$$.details,$vc$$=>{if($vc$$.ma_vt!=$vt$$.ma_vt||$vc$$.px_gia_dd||$ma_kho$$&&$ma_kho$$!==$vc$$.ma_kho&&$ma_kho$$!==$x$$.ma_kho)return!1;$vc$$.tien_xuat_nt+=$vt$$.du00;$vc$$.tien_xuat=Math.roundBy($vc$$.tien_xuat_nt,$f_tien$$);$vc$$.sl_xuat&&($vc$$.gia_von_nt=$vc$$.gia_von=Math.roundBy($vc$$.tien_xuat_nt/$vc$$.sl_xuat,0));return!0})))||($d_voucher$$=_.find($vouchers_n$$,$n$$=>_.find($n$$.details,$vc$$=>{if($vc$$.ma_vt!=$vt$$.ma_vt||$vc$$.pn_gia_tb||$ma_kho$$&&$ma_kho$$!==
|
|
37
|
+
$vc$$.ma_kho&&$ma_kho$$!==$n$$.ma_kho)return!1;$vc$$.tien_nhap_nt-=$vt$$.du00;$vc$$.tien_nhap=Math.roundBy($vc$$.tien_nhap_nt,$f_tien$$);$vc$$.sl_nhap&&($vc$$.gia_von_nt=$vc$$.gia_von=Math.roundBy($vc$$.tien_nhap_nt/$vc$$.sl_nhap,0));return!0})));$d_voucher$$&&($chung_tu_cap_nhat_chenh_lech$$[$d_voucher$$._id.toString()]=$d_voucher$$);$callback$$(null,$d_voucher$$)})},$_vouchers_chenh_lech_e$$=>{if($_vouchers_chenh_lech_e$$)return $fn$$($_vouchers_chenh_lech_e$$);$_vouchers_chenh_lech_e$$=_.values($chung_tu_cap_nhat_chenh_lech$$);
|
|
38
|
+
async.map($_vouchers_chenh_lech_e$$,($voucher$$,$callback$$)=>{setImmediate(async()=>{try{let $voucher_data$$=$voucher$$.toObject();const $ctrl$$=global.controllers[$voucher_data$$.ma_ct.toUpperCase()];await ($ctrl$$?$ctrl$$.getProperty("model"):mongoose.models[$voucher_data$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher_data$$._id},$voucher_data$$);$ctrl$$&&$ctrl$$.post?Controller.postData($voucher_data$$,$ctrl$$,($e$$,$rs$$)=>{$e$$&&console.error("error repost khi tinh gia trung binh",$e$$,$voucher_data$$);
|
|
39
|
+
$callback$$($e$$,$rs$$)},{kiem_tra_han_muc_cong_no:!1}):$callback$$(null)}catch($error$$){return $callback$$($error$$)}})},async $e$$=>{if($e$$)return $fn$$($e$$);$bang_gia$$.joinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:"ten_vt"}],()=>{$fn$$(null,$bang_gia$$)})})})})})})})})})}else $fn$$("L\u1ed7i: T\u00ednh n\u0103ng n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: tu_thang,den_thang,nam,id_app")};
|
package/server/models/account.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';const dmnt=require("./currency"),accountSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},tk:{type:String,required:"tk is required",uppercase:!0,trim:!0,maxlength:32},ten_tk:{type:String,required:"ten_tk is required",trim:!0,maxlength:1024},ten_tk2:{type:String,maxlength:1024},tk_me:{type:String,default:"",trim:!0,uppercase:!0,maxlength:32},loai_tk:{type:Number,min:0,max:1,default:1,enum:[0,1]},tk_cn:{type:Boolean,default:!1,required:!0},ma_nt:{type:String,uppercase:!0,
|
|
2
2
|
required:"ma_nt is required",default:"VND",trim:!0,maxlength:32},tk_kho_yn:Boolean,tk_cp_yn:Boolean,tk_bp_yn:Boolean,tk_dt_yn:Boolean,tk_hd_yn:Boolean,tk_nv_yn:Boolean,tk_td1_yn:Boolean,tk_td2_yn:Boolean,tk_td3_yn:Boolean,not_du_co_yn:Boolean,not_du_no_yn:Boolean,exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},visible_to:{type:Number,
|
|
3
|
-
default:0},visible_to_users:[String],update_right:[String],delete_right:[String]},{toJSON:{virtuals:!0}});
|
|
4
|
-
accountSchema.index({id_app:1,tk:1},{
|
|
5
|
-
|
|
6
|
-
module.exports=model;
|
|
3
|
+
default:0},visible_to_users:[String],update_right:[String],delete_right:[String]},{toJSON:{virtuals:!0}});
|
|
4
|
+
(global.configs||{}).createIndexes&&(accountSchema.index({id_app:1}),accountSchema.index({tk:1}),accountSchema.index({ten_tk:1}),accountSchema.index({ma_nt:1}),accountSchema.index({loai_tk:1}),accountSchema.index({tk_cn:1}),accountSchema.index({status:1}),accountSchema.index({user_created:1,visible_to:1,visible_to_users:1}),accountSchema.index({date_created:1}),accountSchema.index({date_updated:1}),accountSchema.index({id_app:1,tk:1},{unique:!0}),accountSchema.index({ten_tk:"text",ten_tk2:"text",
|
|
5
|
+
tk:"text",ma_nt:"text"},{name:"account_index"}));accountSchema.validate={ma_nt:[function($id_app$$,$value$$,$callback$$){if(!$value$$)return $callback$$(!0);dmnt.findOne({id_app:$id_app$$,ma_nt:$value$$},function($error$$,$nt$$){if($error$$)return $callback$$(!1);$nt$$&&$callback$$(!0)})},"M\u00e3 ngo\u1ea1i t\u1ec7 kh\u00f4ng t\u1ed3n t\u1ea1i"]};const model=mongoose.models.account||mongoose.model("account",accountSchema);
|
|
6
|
+
model.referenceKeys={tk:[{model:"vsocai",key:"tk",error:"T\u00e0i kho\u1ea3n ${obj.tk} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u"},{model:"cdtk",key:"tk",error:"T\u00e0i kho\u1ea3n ${obj.tk} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u"},{model:"cdkh",key:"tk",error:"T\u00e0i kho\u1ea3n ${obj.tk} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u"},{model:"dmvt",key:"tk_vt",error:"T\u00e0i kho\u1ea3n ${obj.tk} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u"}]};module.exports=model;
|
package/server/models/afflink.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';const afflinkScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},title:{type:String,required:!0},page_link:{type:String,required:!0},of_user:String,da_truy_cap:{type:Number,default:0},da_dat_hang:{type:Number,default:0},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
|
|
2
|
-
afflinkScheam.index({of_user:1})
|
|
1
|
+
'use strict';const afflinkScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},title:{type:String,required:!0},page_link:{type:String,required:!0},of_user:String,da_truy_cap:{type:Number,default:0},da_dat_hang:{type:Number,default:0},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
|
|
2
|
+
(global.configs||{}).createIndexes&&(afflinkScheam.index({id_app:1}),afflinkScheam.index({status:1}),afflinkScheam.index({of_user:1}),afflinkScheam.index({user_created:1,visible_to:1,visible_to_users:1}));module.exports=mongoose.models.afflink||mongoose.model("afflink",afflinkScheam);
|
package/server/models/app.js
CHANGED
|
@@ -5,7 +5,7 @@ nguoi_nop_thue:{type:String,maxlength:1024},giam_doc:{type:String,maxlength:1024
|
|
|
5
5
|
default:24},logo:{type:String,maxlength:1024},logo_watermark:{type:String,maxlength:1024},account_types_accept:[],options:{},allow_modules:[String],partner:String,server:String,owner:String,default_password:String,google_credentials:String,email_host:String,email_port:Number,email_secure:{type:Boolean,default:!0},email_authMethod:{type:String,default:"LOGIN"},email_user:String,email_pass:String,email_name:String,viettel_version:{type:String,maxlength:1024},viettel_user:{type:String,maxlength:1024},
|
|
6
6
|
viettel_password:{type:String,maxlength:1024},viettel_token:{type:String},viettel_url_service:{type:String,maxlength:1024},viettel_direct_issue:Boolean,vnpt_user:{type:String,maxlength:1024},vnpt_password:{type:String,maxlength:1024},vnpt_url_service:{type:String,maxlength:1024},ma_hoa_don:String,ky_hieu_hoa_don:String,so_serial:String,sip_uri:String,sip_password:String,sip_websocket:String,voiip_access_token:String,voiip_webhook:String,zalo_app_id:String,zalo_secret_key:String,zalo_code:String,zalo_oa_id:String,
|
|
7
7
|
zalo_code_verifier:String,zalo_code_challenge:String,zalo_access_token:String,zalo_refresh_token:String,zalo_expires_in:Number,zalo_updated:Date,zalo_otp_template_id:String,exfields:global.Schema.Types.Mixed,domain:String,ssl_key:String,ssl_cert:String,ssl_ca:String,expire_date:Date,trang_thai:{type:String,default:"0"},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,
|
|
8
|
-
default:""}});appScheam.index({app_code:1},{unique:!0})
|
|
8
|
+
default:""}});(global.configs||{}).createIndexes&&(appScheam.index({app_code:1},{unique:!0}),appScheam.index({name:1,province:1}),appScheam.index({menu_code:1}),appScheam.index({trang_thai:1}),appScheam.index({sale_online:1}),appScheam.index({date_created:1}),appScheam.index({date_updated:1}),appScheam.index({user_created:"text"},{name:"app_index_created"}),appScheam.index({name:"text",province:"text",name_en:"text",address:"text",phone:"text",email:"text",ma_so_thue:"text"},{name:"app_index"}));
|
|
9
9
|
const App=global.mongoose.models.app||global.mongoose.model("app",appScheam);
|
|
10
10
|
App.participants=async $app$$=>{_.isString($app$$)&&($app$$=await App.getInfo($app$$));let $participants$$=await Participant.find({id_app:$app$$._id});if($app$$.user_created&&!$participants$$.find($p$$=>$p$$.email===$app$$.user_created)){let $_p$$={email:$app$$.user_created,name:$app$$.user_created.split("@")[0],admin:!0,active:!0,cancel:!1,id_app:$app$$._id};$participants$$.push($_p$$);Participant.createParticipant($_p$$,$e$$=>{$e$$&&console.error("create participant for user owner",$e$$)})}return $participants$$};
|
|
11
11
|
App.getInfo=async function($id_app$$,$field$$){return new Promise(($resolve$$,$reject$$)=>{App.findOne({_id:$id_app$$}).lean().exec(($e$$,$rs$$)=>{if($e$$||!$rs$$)return $reject$$(Error($e$$?$e$$.message:"App is not exists"));$resolve$$($field$$?$rs$$[$field$$]:$rs$$)})})};
|
package/server/models/approve.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use strict';const App=require("./app"),Options=require("./options"),ngcompile=require("ng-node-compile"),utils=require("../libs/utils"),File=require("./file"),underscore=require("underscore"),crypto=require("crypto"),moment=require("moment"),participant=require("./participant"),_=require("lodash"),approveSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},id_ct:{type:String,required:!0,maxlength:1024},ma_ct:{type:String,required:!0,maxlength:32,trim:!0},trang_thai:{type:String},user_request:{type:String,
|
|
2
2
|
required:!0,maxlength:128,trim:!0},user_request_name:{type:String,required:!0,maxlength:1024},template_content:String,request_content:String,user_approves:[{email:{type:String,maxlength:128,trim:!0},name:{type:String,maxlength:1024}}],user_approved:{type:String,maxlength:128,trim:!0},user_approved_name:{type:String,maxlength:1024},date_approved:Date,approved_reason:String,user_denied:{type:String,maxlength:128,trim:!0},user_denied_name:{type:String,maxlength:1024},date_denied:Date,denied_reason:{type:String,
|
|
3
|
-
maxlength:4E3},update_after_approve:Schema.Types.Mixed,update_after_deny:Schema.Types.Mixed,title:{type:String,maxlength:1024},data:Schema.Types.Mixed,status:{type:Boolean,default:!1},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},visible_to:{type:Number,default:2},visible_to_users:[String]});
|
|
4
|
-
approveSchema.index({user_denied:1})
|
|
3
|
+
maxlength:4E3},update_after_approve:Schema.Types.Mixed,update_after_deny:Schema.Types.Mixed,title:{type:String,maxlength:1024},data:Schema.Types.Mixed,status:{type:Boolean,default:!1},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},visible_to:{type:Number,default:2},visible_to_users:[String]});
|
|
4
|
+
(global.configs||{}).createIndexes&&(approveSchema.index({id_ct:1,id_app:1}),approveSchema.index({trang_thai:1}),approveSchema.index({user_approved:1}),approveSchema.index({user_denied:1}),approveSchema.index({status:1}),approveSchema.index({date_created:1}),approveSchema.index({date_updated:1}),approveSchema.index({user_request:"text",user_request_name:"text"},{name:"approve_index"}));const model=mongoose.models.approve||mongoose.model("approve",approveSchema);
|
|
5
|
+
let renderRequests=$requests$$=>$requests$$&&0!==$requests$$.length?`
|
|
5
6
|
<p style='margin-top:50px'>
|
|
6
7
|
<hr/>
|
|
7
8
|
<h5>Danh s\u00e1ch \u0111\u00e3 duy\u1ec7t ho\u1eb7c t\u1eeb ch\u1ed1i</h5>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';const assabcihandlerSchema=new Schema({id_app:{type:String,required:!0},event:{type:String,required:!0,uppercase:!0},id:{type:String,required:!0},trang_thai:{type:String,default:"0"},date_created:{type:Date,default:Date.now},data:Schema.Types.Mixed});assabcihandlerSchema.index({id_app:1,event:1,id:1},{unique:!0});const model=mongoose.models.assabcihandler||mongoose.model("assabcihandler",assabcihandlerSchema),moment=require("moment"),async=require("async");
|
|
1
|
+
'use strict';const assabcihandlerSchema=new Schema({id_app:{type:String,required:!0},event:{type:String,required:!0,uppercase:!0},id:{type:String,required:!0},trang_thai:{type:String,default:"0"},date_created:{type:Date,default:Date.now},data:Schema.Types.Mixed});(global.configs||{}).createIndexes&&assabcihandlerSchema.index({id_app:1,event:1,id:1},{unique:!0});const model=mongoose.models.assabcihandler||mongoose.model("assabcihandler",assabcihandlerSchema),moment=require("moment"),async=require("async");
|
|
2
2
|
model.start=()=>{console.log("abci handler is started");async.forever(function($next$$){setTimeout(async()=>{const $now$$=new Date,$withdraws$$=await global.getModel("asswithdraw").find({trang_thai:"0",status:!0,ngay_xu_ly:{$lte:$now$$}});await new Promise($resolve$$=>{async.mapSeries($withdraws$$,($Withdraw$$,$callback$$)=>{setImmediate(async()=>{let $query_abci$$={id_app:$Withdraw$$.id_app,event:"WITHDRAW",id:$Withdraw$$.id},$abci$$=await model.findOne($query_abci$$);if($abci$$&&"0"==$abci$$.trang_thai&&
|
|
3
3
|
1>moment().diff(moment($abci$$.date_created),"hours"))return $callback$$();try{$abci$$=new model($query_abci$$),await $abci$$.save()}catch($e$$){return $callback$$()}try{await global.getModel("assbank").sendCoins($Withdraw$$.id_app,$Withdraw$$.product_owner,$Withdraw$$.creator,$Withdraw$$.von,$Withdraw$$.denom,{...$Withdraw$$.toObject(),event:"WITHDRAW",memo:"R\u00fat v\u1ed1n"})}catch($e$$){return $callback$$()}try{$Withdraw$$.lai_truoc_han&&await global.getModel("assbank").sendCoins($Withdraw$$.id_app,
|
|
4
4
|
$Withdraw$$.product_owner,$Withdraw$$.creator,$Withdraw$$.lai_truoc_han,$Withdraw$$.denom,{...$Withdraw$$.toObject(),event:"INTEREST",memo:"L\u00e3i t\u1eeb \u0111\u1ea7u t\u01b0"}),$Withdraw$$.da_rut_von=!0,$Withdraw$$.trang_thai="5",await $Withdraw$$.save(),$abci$$.data={note:"R\u00fat v\u1ed1n th\u00e0nh c\u00f4ng",obj:$Withdraw$$.toObject()},$abci$$.trang_thai="5",await $abci$$.save(),console.log("lenh rut von nay da duoc thuc hien thanh cong:",$Withdraw$$.id)}catch($e$$){await global.getModel("assbank").sendCoins($Withdraw$$.id_app,
|