flexbiz-server 12.7.5 → 12.7.7

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.
Files changed (95) hide show
  1. package/package.json +2 -2
  2. package/server/app.js +23 -19
  3. package/server/auths/rateLimiterMiddleware.js +3 -3
  4. package/server/controllers/controller.js +41 -41
  5. package/server/controllers/controllerUtils.js +61 -61
  6. package/server/controllers/controllerUtils_v1.js +72 -0
  7. package/server/controllers/controller_old.js +129 -0
  8. package/server/controllers/createHandler.js +34 -34
  9. package/server/controllers/createHandler_old.js +35 -0
  10. package/server/controllers/deleteHandler.js +11 -12
  11. package/server/controllers/deleteHandler_old.js +12 -0
  12. package/server/controllers/exportHandler.js +19 -17
  13. package/server/controllers/exportHandler_old.js +17 -0
  14. package/server/controllers/findHandler.js +61 -55
  15. package/server/controllers/findHandler_old.js +74 -0
  16. package/server/controllers/importFromGsHandler.js +10 -10
  17. package/server/controllers/importFromJsonHandler.js +6 -6
  18. package/server/controllers/importFromJsonHandler_old.js +6 -0
  19. package/server/controllers/updateBookHandler.js +1 -1
  20. package/server/controllers/updateFieldHandler.js +12 -13
  21. package/server/controllers/updateFieldHandler_old.js +13 -0
  22. package/server/controllers/updateHandler.js +38 -40
  23. package/server/controllers/updateHandler_old.js +40 -0
  24. package/server/controllers/viewHandler.js +13 -14
  25. package/server/controllers/viewHandler_old.js +14 -0
  26. package/server/flow/nodes/aiAnalysis.js +1 -1
  27. package/server/global.js +2 -3
  28. package/server/libs/WorkerStaticPool.js +14 -14
  29. package/server/libs/asyncCompat.js +10 -0
  30. package/server/libs/createSocaitheongay.js +1 -1
  31. package/server/libs/invoiceVnpt.js +1 -1
  32. package/server/libs/post-book.js +2 -2
  33. package/server/libs/post-sokho.js +5 -5
  34. package/server/libs/redis-cache.js +2 -2
  35. package/server/models/assabcihandler.js +1 -1
  36. package/server/models/counter.js +2 -2
  37. package/server/models/listinfo.js +200 -225
  38. package/server/models/listinfo_old.js +124 -0
  39. package/server/models/po1.js +4 -4
  40. package/server/models/purchase_contract.js +3 -3
  41. package/server/models/smsaccount.js +2 -2
  42. package/server/models/tdttco.js +3 -3
  43. package/server/models/tdttno.js +3 -3
  44. package/server/modules/lists/ls-afflink.js +1 -1
  45. package/server/modules/lists/ls-assbooking.js +1 -1
  46. package/server/modules/lists/ls-assinvestment.js +11 -11
  47. package/server/modules/lists/ls-asskey.js +2 -2
  48. package/server/modules/lists/ls-assneedtobuy.js +1 -1
  49. package/server/modules/lists/ls-assperiod.js +1 -1
  50. package/server/modules/lists/ls-asssell.js +1 -1
  51. package/server/modules/lists/ls-cart.js +14 -14
  52. package/server/modules/lists/ls-congdoansx.js +1 -1
  53. package/server/modules/lists/ls-consultant.js +2 -2
  54. package/server/modules/lists/ls-dkhoc.js +2 -2
  55. package/server/modules/lists/ls-dmban.js +1 -1
  56. package/server/modules/lists/ls-dmbp.js +2 -2
  57. package/server/modules/lists/ls-dmdoi.js +1 -1
  58. package/server/modules/lists/ls-dmnhtask.js +2 -2
  59. package/server/modules/lists/ls-dmvt.js +3 -3
  60. package/server/modules/lists/ls-file.js +1 -1
  61. package/server/modules/lists/ls-giaoca.js +1 -1
  62. package/server/modules/lists/ls-introducer.js +2 -2
  63. package/server/modules/lists/ls-kbm-bcqt.js +1 -1
  64. package/server/modules/lists/ls-news.js +1 -1
  65. package/server/modules/lists/ls-participant.js +1 -1
  66. package/server/modules/lists/ls-rpt.js +1 -1
  67. package/server/modules/lists/ls-smsaccount.js +1 -1
  68. package/server/modules/lists/ls-sosanxuat.js +1 -1
  69. package/server/modules/lists/ls-support.js +1 -1
  70. package/server/modules/public/callin.js +1 -1
  71. package/server/modules/reports/calc-tinhgiafifo.js +1 -1
  72. package/server/modules/reports/calc-tinhgiatb.js +1 -1
  73. package/server/modules/reports/calc-tinhgiathanh.js +1 -1
  74. package/server/modules/reports/calc-tinhluong.js +1 -1
  75. package/server/modules/reports/rp-assbonus.js +1 -1
  76. package/server/modules/reports/rp-bkchamcong.js +1 -1
  77. package/server/modules/reports/rp-cdpsdiem.js +1 -1
  78. package/server/modules/reports/rp-cdpskh.js +1 -1
  79. package/server/modules/reports/rp-cdpsnphep.js +1 -1
  80. package/server/modules/reports/rp-kcsns.js +1 -1
  81. package/server/modules/reports/rp-sctbhxh.js +1 -1
  82. package/server/modules/reports/rp-sctluong.js +1 -1
  83. package/server/modules/reports/rp-sctthuetncn.js +1 -1
  84. package/server/modules/reports/rp-sctvt.js +1 -1
  85. package/server/modules/reports/rp-sctvtnpp.js +1 -1
  86. package/server/modules/reports/rp-sctvttt.js +1 -1
  87. package/server/modules/reports/rp-thgt.js +1 -1
  88. package/server/modules/systems/sys-labelinfo.js +2 -3
  89. package/server/modules/systems/sys-listinfo.js +1 -1
  90. package/server/modules/systems/sys-menuinfo.js +1 -4
  91. package/server/modules/systems/sys-moduleinfo.js +2 -4
  92. package/server/modules/systems/sys-notification.js +1 -1
  93. package/server/workers/backupApp.js +1 -1
  94. package/server/workers/calcGrid.js +1 -1
  95. package/server/workers/runScript.js +1 -1
package/server/global.js CHANGED
@@ -1,4 +1,4 @@
1
- const fs=require("fs"),async=require("async"),logger=require("./libs/logger.js");global.Logger=logger;const prototypes=require("./libs/prototypes.js"),TransactionPool=require("./libs/BlockchainTransactionPool"),leanID=require("./libs/mongooseLeanId"),mongooseSecurityPlugin=require("./libs/mongooseSecurityPlugin"),deletePost=require("./libs/mongooseDeletePost"),{onAfterCommit}=require("./libs/sessionContext.js");
1
+ const fs=require("fs"),async=require("./libs/asyncCompat"),logger=require("./libs/logger.js");global.Logger=logger;const prototypes=require("./libs/prototypes.js"),TransactionPool=require("./libs/BlockchainTransactionPool"),leanID=require("./libs/mongooseLeanId"),mongooseSecurityPlugin=require("./libs/mongooseSecurityPlugin"),deletePost=require("./libs/mongooseDeletePost"),{onAfterCommit}=require("./libs/sessionContext.js");
2
2
  function globalListinfoCodePlugin($schema$$){$schema$$.path("listinfo_code")||$schema$$.add({listinfo_code:{type:String,default:null}});$schema$$.path("id_client")||$schema$$.add({id_client:{type:String,default:null}})}global.blockchainTransactionPool=new TransactionPool;global.new_schedules=[];global.rootDir=__dirname;global.ctrlVouchers={};global.controllers={};global.report_controllers={};global.postingVouchers={};global.cacheDatas={};
3
3
  global.socketContainer={loadConnectionId:async()=>new Promise($res$$=>{global.clientRedis.get("client-io",function($err$$,$reply$$){if($err$$)return console.error($err$$),$res$$({});if($reply$$)try{let $ios$$=JSON.parse($reply$$);return $res$$($ios$$||{})}catch($e$$){return console.error($e$$),$res$$({})}else return $res$$({})})}),saveConnectionId:async($clientIO$$={})=>new Promise(($res$$,$rej$$)=>{global.clientRedis.set("client-io",JSON.stringify($clientIO$$),$e$$=>{if($e$$)return console.error($e$$),
4
4
  $rej$$($e$$);$res$$($clientIO$$)})})};global.clientIO={};global.model_books="socai socaitmp socainpp vsocai sokho sokhott sokhonpp sokhokhongton sosanxuat vatvao vatra phucap".split(" ");global.secu_models="asskey assproduct assperiod assinvestment asssell assbuy assneedtobuy asswithdraw asscashwithdraw wallet assfindhash assbank asstransaction assissue token tokens user app listinfo right otp payload smsaccount emailaccount".split(" ");global.webPush=require("web-push");global.mongoose=require("mongoose");
@@ -6,8 +6,7 @@ const originalCast=global.mongoose.Number.cast();global.mongoose.Number.cast(fun
6
6
  global.getModel=$model_name_name$$=>{$model_name_name$$=$model_name_name$$.split(".js")[0];var $_requireFields_manualMap_model_model_path_mySchema$$={kbmpttct:"kbmPttct",kbmtkgtgt:"kbmTkgtgt",token:"tokens",bn1:"pc1",bc1:"pt1",dmnhkh:"group",dmchucvu:"group",dmnhtask:"group",dmntt:"group",dmnt:"currentcy",dmtk:"account",dmkh:"customer",dmsp:"dmvt",data_socai:"socai",data_socaitc:"socaitc",data_sokho:"sokho"};$_requireFields_manualMap_model_model_path_mySchema$$[$model_name_name$$]&&($model_name_name$$=
7
7
  $_requireFields_manualMap_model_model_path_mySchema$$[$model_name_name$$]);if($_requireFields_manualMap_model_model_path_mySchema$$=mongoose.models[$model_name_name$$])return $_requireFields_manualMap_model_model_path_mySchema$$;if(global.controllers[$model_name_name$$.toUpperCase()]&&global.controllers[$model_name_name$$.toUpperCase()].model)return global.controllers[$model_name_name$$].model;if(((global.configs||{}).paths||{}).models&&($_requireFields_manualMap_model_model_path_mySchema$$=((global.configs||
8
8
  {}).paths||{}).models+"/"+$model_name_name$$+".js",fs.existsSync($_requireFields_manualMap_model_model_path_mySchema$$)))return require($_requireFields_manualMap_model_model_path_mySchema$$);$_requireFields_manualMap_model_model_path_mySchema$$=__dirname+"/models/"+$model_name_name$$+".js";if(fs.existsSync($_requireFields_manualMap_model_model_path_mySchema$$))return require($_requireFields_manualMap_model_model_path_mySchema$$);console.error("model",$model_name_name$$,"is not exists. create new model");
9
- $_requireFields_manualMap_model_model_path_mySchema$$={...require("./models/listinfo").requireFields};$_requireFields_manualMap_model_model_path_mySchema$$=new global.Schema($_requireFields_manualMap_model_model_path_mySchema$$,{strict:!1});return global.mongoose.model($model_name_name$$,$_requireFields_manualMap_model_model_path_mySchema$$)};const {createStorageUsageTracker}=require("mongoose-storage-usage");
10
- global.storageUsage=createStorageUsageTracker(mongoose,{autoApply:!0,appModel:global.getModel("app"),fileFieldsConfig:{File:["file"]}});global.storageUsage.registerCronJob("0 2 * * *");global.mongoose.plugin(function($schema$$){$schema$$.set("versionKey",!1)});global.getLib=$lib_name$$=>require("./libs/"+$lib_name$$);
9
+ $_requireFields_manualMap_model_model_path_mySchema$$={...require("./models/listinfo").requireFields};$_requireFields_manualMap_model_model_path_mySchema$$=new global.Schema($_requireFields_manualMap_model_model_path_mySchema$$,{strict:!1});return global.mongoose.model($model_name_name$$,$_requireFields_manualMap_model_model_path_mySchema$$)};global.mongoose.plugin(function($schema$$){$schema$$.set("versionKey",!1)});global.getLib=$lib_name$$=>require("./libs/"+$lib_name$$);
11
10
  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;
12
11
  global.getSysConfig=async $cf_code$$=>{if($cf_code$$=await global.getModel("sysconfig").findOne({code:$cf_code$$}))return $cf_code$$.value};global.asyncCountUnRead=async $email$$=>global.getModel("message").countDocuments({email:$email$$,read:!1});
13
12
  global.alertMessage=function($email$$,$id_app$$){onAfterCommit(async()=>{var $Message$jscomp$1_count$$=global.getModel("message");const $User$$=global.getModel("user");let $query$$={email_owner:$email$$,read:!1};$id_app$$&&($query$$["exfields.id_app"]=$id_app$$);$Message$jscomp$1_count$$=await $Message$jscomp$1_count$$.countDocuments($query$$);$User$$.emitEvent($email$$,"message:count",$Message$jscomp$1_count$$,!1)})};
@@ -4,17 +4,17 @@ this.workers={};this.poolName=$poolName$$;this.SCALE_THRESHOLD_LAG=40;this.SCALE
4
4
  return}var $forceKillTimeout$$=setTimeout(()=>{Logger.warn(`[${this.poolName}] Worker ${$wk$$.id} kh\u00f4ng ch\u1ecbu ch\u1ebft an to\u00e0n. \u00c9p terminate!`);$wk$$.worker.terminate()},3E3);$wk$$.worker.once("exit",()=>{clearTimeout($forceKillTimeout$$)})}}checkLoadAndScale(){const $now$$=Date.now();if(!($now$$-this.lastScaleTime<this.SCALE_COOLDOWN)){var $avgLag_workersList$$=Object.values(this.workers),$hasBacklog_totalWorkers_wk$$=$avgLag_workersList$$.length;if(!($hasBacklog_totalWorkers_wk$$>=
5
5
  this.maxWorkers)&&$hasBacklog_totalWorkers_wk$$!==0){var $totalLag$$=0;$avgLag_workersList$$.forEach($w$$=>$totalLag$$+=$w$$.lag||0);$avgLag_workersList$$=$totalLag$$/$hasBacklog_totalWorkers_wk$$;$hasBacklog_totalWorkers_wk$$=this.queue.length>$hasBacklog_totalWorkers_wk$$;if($avgLag_workersList$$>this.SCALE_THRESHOLD_LAG||$hasBacklog_totalWorkers_wk$$&&$avgLag_workersList$$>20)Logger.info(`[${this.poolName}] High Load detected (Avg Lag: ${$avgLag_workersList$$.toFixed(2)}ms, Queue: ${this.queue.length}). Scaling up...`),
6
6
  $hasBacklog_totalWorkers_wk$$=this.createWorker(),this.workers[$hasBacklog_totalWorkers_wk$$.id]=$hasBacklog_totalWorkers_wk$$,this.lastScaleTime=$now$$}}}workerIsAlive($wk$$){return!$wk$$.worker||$wk$$.worker.threadId<=0||moment().diff(moment($wk$$.time_responded),"seconds")>(($wk$$.task||{}).timeout||this.defaultTimeout)/1E3?!1:!0}createWorker(){const $wk$$={id:`worker-${crypto.randomBytes(20).toString("hex")}`,isBusy:!1,time_responded:new Date,lag:0};$wk$$.worker=new Worker(this.filename);$wk$$.worker.on("message",
7
- async $rawMessage$$=>{$wk$$.time_responded=new Date;let $message$$=$rawMessage$$;if(Buffer.isBuffer($rawMessage$$)||$rawMessage$$ instanceof Uint8Array)try{$message$$=v8.deserialize($rawMessage$$)}catch($e$$){Logger.error(`[${this.poolName}] L\u1ed7i deserialize message t\u1eeb worker:`,$e$$)}if($message$$&&$message$$.type==="metrics")$wk$$.lag=$message$$.lag,this.checkLoadAndScale();else{var $task$$;try{($task$$=$message$$.id_task?this.queue_running.find($q$$=>$q$$.id==$message$$.id_task):$wk$$.task)&&
8
- clearTimeout($task$$.timeoutId);if($task$$&&$task$$.callback)if($message$$.id_task&&$message$$.id_task!==$task$$.id)Logger.error("[",this.poolName,"] K\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1 kh\u00f4ng \u0111\u00fang cho task",$task$$.id,$message$$);else{$task$$.finished=new Date;$task$$.status=5;$task$$.message="\u0110\u00e3 th\u1ef1c hi\u1ec7n xong";$task$$.result=$message$$&&Array.isArray($message$$)?void 0:$message$$;if($task$$.save_log)try{let {finished:$finished$$,status:$status$$,message:$message$$,
9
- result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){Logger.error("[",this.poolName,"] can't update task status",$task$$.id,$e$$.message)}this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id);$task$$.callback($message$$,$task$$.id)}delete $wk$$.task;$wk$$.isBusy=!1;this.processQueue()}catch($e$$){Logger.error("[",this.poolName,"]",$e$$);try{delete $wk$$.task,$wk$$.isBusy=!1,this.processQueue()}catch($e$$){Logger.error("[",
10
- this.poolName,"] cancel current task",$e$$)}}}});$wk$$.worker.on("error",$error$$=>{Logger.error("Worker error:",$error$$);this.terminateWorkerGracefully($wk$$)});$wk$$.worker.on("exit",async $code$$=>{Logger.error("[",this.poolName,"]",`: worker exited with code ${$code$$}. Creating new worker...`);if($wk$$.task){let $task$$=this.queue_running.find($q$$=>$q$$.id==$wk$$.task.id);if($task$$){clearTimeout($task$$.timeoutId);$task$$.finished=new Date;$task$$.status=9;$task$$.message="\u0110\u00e3 c\u00f3 l\u1ed7i x\u1ea3y ra trong h\u1ec7 th\u1ed1ng. H\u00e3y th\u1eed l\u1ea1i";
11
- let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;if($task$$.save_log)try{await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){Logger.error("[",this.poolName,"] can't update task status",$task$$.id,$e$$.message)}$task$$.callback&&$task$$.callback({error:$task$$.message},$task$$.id);this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id)}}delete this.workers[$wk$$.id];
12
- $code$$=this.createWorker();this.workers[$code$$.id]=$code$$;this.processQueue()});return $wk$$}async processQueue($id_worker$$){for(let $i$$=0;$i$$<this.maxWorkers&&this.queue.length!=0;$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===0)$wk$$=this.createWorker(),this.workers[$wk$$.id]=$wk$$;else{this.checkLoadAndScale();break}if($wk$$){if(!this.workerIsAlive($wk$$)){Logger.error("[",
13
- this.poolName,"]: Worker",$wk$$.id,"b\u1ecb zombie. Ti\u1ebfn h\u00e0nh terminate...");delete $wk$$.task;this.terminateWorkerGracefully($wk$$);continue}const $task$$=this.queue.shift();if($task$$){$task$$.status=2;$task$$.message="\u0110ang th\u1ef1c hi\u1ec7n";this.queue_running.push($task$$);if($task$$.save_log)try{let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,
14
- result:$result$$})}catch($e$$){Logger.error("[",this.poolName,"] can't update task status",$task$$.id,$e$$.message)}$wk$$.isBusy=!0;$wk$$.task=$task$$;$task$$.params.id_worker=$wk$$.id;try{const $bufferParams$$=v8.serialize($task$$.params);$wk$$.worker.postMessage($bufferParams$$,[$bufferParams$$.buffer])}catch($err$$){Logger.error(`[${this.poolName}] L\u1ed7i serialize task params. Fallback sang g\u1eedi th\u01b0\u1eddng.`,$err$$),$wk$$.worker.postMessage($task$$.params)}$task$$.timeoutId=setTimeout(async()=>
15
- {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 (Time out: ${$task$$.timeout||this.defaultTimeout} ms)`;let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;if($task$$.save_log)try{await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){Logger.error("[",
16
- this.poolName,"] can't update task status",$task$$.id,$e$$.message)}$task$$.callback&&$task$$.callback({error:$task$$.message},$task$$.id);Logger.error(`[${this.poolName}] Task ${$task$$.id} TIMEOUT! Terminating worker ${$wk$$.id}...`);delete $wk$$.task;this.terminateWorkerGracefully($wk$$)},$task$$.timeout||this.defaultTimeout)}}}}async pushToQueue($params$$,$callback$$,$timeout$$=0,$id_worker$$){let $save_log$$=!0;$params$$.id_task||($params$$.id_task=`task-${crypto.randomBytes(20).toString("hex")}`,
17
- $save_log$$=!1);$timeout$$=$timeout$$||this.defaultTimeout;const $task$$={id:$params$$.id_task,start:new Date,params:_.cloneDeep($params$$),timeout:$timeout$$,status:0,save_log:$save_log$$};delete $task$$.params.configs;delete $task$$.params.user;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{try{$save_log$$&&await redisCache.setObject($params$$.id_task,$task$$)}catch($e$$){Logger.error("[",
18
- this.poolName,"] Kh\u00f4ng th\u1ec3 l\u01b0u task t\u1edbi redis:",$e$$.message)}this.queue.push({id:$params$$.id_task,params:$params$$,callback:$callback$$,timeout:$timeout$$,status:0,save_log:$save_log$$});this.processQueue($id_worker$$)}catch($e$$){Logger.error("[",this.poolName,"] : l\u1ed7i \u0111\u1ea9y task t\u1edbi queue",$e$$),$callback$$({error:$e$$.error||$e$$.message||$e$$})}}async exec($args_params$$,$callback$$=()=>{},$timeout$$=0){if(this.maxQueue>0&&this.queue.length>=this.maxQueue)Logger.error("[",
19
- this.poolName,"]",": queue is full"),$callback$$({error:"Queue is full"});else if($args_params$$.load)for(let $id_worker$$ of Object.keys(this.workers)){let $params$$=_.cloneDeep($args_params$$);this.pushToQueue($params$$,$callback$$,$timeout$$,$id_worker$$)}else $args_params$$=_.cloneDeep($args_params$$),this.pushToQueue($args_params$$,$callback$$,$timeout$$)}fullQueue(){return this.maxQueue>0&&this.queue.length>=this.maxQueue}busy(){return Object.values(this.workers).filter($w$$=>!$w$$.isBusy).length==
20
- 0}destroy(){for(const $worker$$ of Object.values(this.workers))$worker$$.terminate();this.workers={};this.queue=[]}}module.exports=WorkerPool;
7
+ async $rawMessage$$=>{$wk$$.time_responded=new Date;let $message$$=$rawMessage$$;if(Buffer.isBuffer($rawMessage$$)||$rawMessage$$ instanceof Uint8Array)try{$message$$=v8.deserialize($rawMessage$$)}catch($e$$){Logger.error(`[WorkerStaticPool][${this.poolName}] L\u1ed7i deserialize message t\u1eeb worker:`,$e$$)}if($message$$&&$message$$.type==="metrics")$wk$$.lag=$message$$.lag,this.checkLoadAndScale();else{var $task$$;try{($task$$=$message$$.id_task?this.queue_running.find($q$$=>$q$$.id==$message$$.id_task):
8
+ $wk$$.task)&&clearTimeout($task$$.timeoutId);if($task$$&&$task$$.callback)if($message$$.id_task&&$message$$.id_task!==$task$$.id)Logger.error("[WorkerStaticPool][",this.poolName,"] K\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1 kh\u00f4ng \u0111\u00fang cho task",$task$$.id,$message$$);else{$task$$.finished=new Date;$task$$.status=5;$task$$.message="\u0110\u00e3 th\u1ef1c hi\u1ec7n xong";$task$$.result=$message$$&&Array.isArray($message$$)?void 0:$message$$;if($task$$.save_log)try{let {finished:$finished$$,status:$status$$,
9
+ message:$message$$,result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){Logger.error("[WorkerStaticPool][",this.poolName,"] can't update task status",$task$$.id,$e$$.message)}this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id);$task$$.callback($message$$,$task$$.id)}delete $wk$$.task;$wk$$.isBusy=!1;this.processQueue()}catch($e$$){Logger.error("[WorkerStaticPool][",this.poolName,
10
+ "] l\u1ed7i x\u1eed l\u00fd message",$e$$);try{delete $wk$$.task,$wk$$.isBusy=!1,this.processQueue()}catch($e$$){Logger.error("[WorkerStaticPool][",this.poolName,"] cancel current task",$e$$)}}}});$wk$$.worker.on("error",$error$$=>{Logger.error("[WorkerStaticPool] Worker error:",$error$$);this.terminateWorkerGracefully($wk$$)});$wk$$.worker.on("exit",async $code$$=>{Logger.error("[WorkerStaticPool][",this.poolName,"]",`: worker exited with code ${$code$$}. Creating new worker...`);if($wk$$.task){let $task$$=
11
+ this.queue_running.find($q$$=>$q$$.id==$wk$$.task.id);if($task$$){clearTimeout($task$$.timeoutId);$task$$.finished=new Date;$task$$.status=9;$task$$.message="\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$$;if($task$$.save_log)try{await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){Logger.error("[WorkerStaticPool][",
12
+ this.poolName,"] can't update task status",$task$$.id,$e$$.message)}$task$$.callback&&$task$$.callback({error:$task$$.message},$task$$.id);this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id)}}delete this.workers[$wk$$.id];$code$$=this.createWorker();this.workers[$code$$.id]=$code$$;this.processQueue()});return $wk$$}async processQueue($id_worker$$){for(let $i$$=0;$i$$<this.maxWorkers&&this.queue.length!=0;$i$$++){let $wk$$=Object.values(this.workers).find($w$$=>!$w$$.isBusy&&
13
+ !$w$$.task&&(!$id_worker$$||$id_worker$$==$w$$.id));if(!$wk$$)if(Object.keys(this.workers).length===0)$wk$$=this.createWorker(),this.workers[$wk$$.id]=$wk$$;else{this.checkLoadAndScale();break}if($wk$$){if(!this.workerIsAlive($wk$$)){Logger.error("[WorkerStaticPool][",this.poolName,"]: Worker",$wk$$.id,"b\u1ecb zombie. Ti\u1ebfn h\u00e0nh terminate...");delete $wk$$.task;this.terminateWorkerGracefully($wk$$);continue}const $task$$=this.queue.shift();if($task$$){$task$$.status=2;$task$$.message="\u0110ang th\u1ef1c hi\u1ec7n";
14
+ this.queue_running.push($task$$);if($task$$.save_log)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$$){Logger.error("[WorkerStaticPool][",this.poolName,"] can't update task status",$task$$.id,$e$$.message)}$wk$$.isBusy=!0;$wk$$.task=$task$$;$task$$.params.id_worker=$wk$$.id;try{const $bufferParams$$=v8.serialize($task$$.params);
15
+ $wk$$.worker.postMessage($bufferParams$$,[$bufferParams$$.buffer])}catch($err$$){Logger.error(`[WorkerStaticPool][${this.poolName}] L\u1ed7i serialize task params. Fallback sang g\u1eedi th\u01b0\u1eddng.`,$err$$),$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 (Time out: ${$task$$.timeout||
16
+ this.defaultTimeout} ms)`;let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;if($task$$.save_log)try{await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){Logger.error("[WorkerStaticPool][",this.poolName,"] can't update task status",$task$$.id,$e$$.message)}$task$$.callback&&$task$$.callback({error:$task$$.message},$task$$.id);Logger.error(`[WorkerStaticPool][${this.poolName}] Task ${$task$$.id} TIMEOUT! Terminating worker ${$wk$$.id}...`);
17
+ delete $wk$$.task;this.terminateWorkerGracefully($wk$$)},$task$$.timeout||this.defaultTimeout)}}}}async pushToQueue($params$$,$callback$$,$timeout$$=0,$id_worker$$){let $save_log$$=!0;$params$$.id_task||($params$$.id_task=`task-${crypto.randomBytes(20).toString("hex")}`,$save_log$$=!1);$timeout$$=$timeout$$||this.defaultTimeout;const $task$$={id:$params$$.id_task,start:new Date,params:_.cloneDeep($params$$),timeout:$timeout$$,status:0,save_log:$save_log$$};delete $task$$.params.configs;delete $task$$.params.user;
18
+ 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{try{$save_log$$&&await redisCache.setObject($params$$.id_task,$task$$)}catch($e$$){Logger.error("[WorkerStaticPool][",this.poolName,"] Kh\u00f4ng th\u1ec3 l\u01b0u task t\u1edbi redis:",$e$$.message)}this.queue.push({id:$params$$.id_task,params:$params$$,callback:$callback$$,timeout:$timeout$$,status:0,save_log:$save_log$$});this.processQueue($id_worker$$)}catch($e$$){Logger.error("[WorkerStaticPool][",
19
+ this.poolName,"] : l\u1ed7i \u0111\u1ea9y task t\u1edbi queue",$e$$),$callback$$({error:$e$$.error||$e$$.message||$e$$})}}async exec($args_params$$,$callback$$=()=>{},$timeout$$=0){if(this.maxQueue>0&&this.queue.length>=this.maxQueue)Logger.error("[WorkerStaticPool][",this.poolName,"]",": queue is full"),$callback$$({error:"Queue is full"});else if($args_params$$.load)for(let $id_worker$$ of Object.keys(this.workers)){let $params$$=_.cloneDeep($args_params$$);this.pushToQueue($params$$,$callback$$,
20
+ $timeout$$,$id_worker$$)}else $args_params$$=_.cloneDeep($args_params$$),this.pushToQueue($args_params$$,$callback$$,$timeout$$)}fullQueue(){return this.maxQueue>0&&this.queue.length>=this.maxQueue}busy(){return Object.values(this.workers).filter($w$$=>!$w$$.isBusy).length==0}destroy(){for(const $worker$$ of Object.values(this.workers))$worker$$.terminate();this.workers={};this.queue=[]}}module.exports=WorkerPool;
@@ -0,0 +1,10 @@
1
+ function invoke($fn$$,$args$$,$done$$){let $called$$=!1;const $finish$$=($err$$,$result$$)=>{if(!$called$$){$called$$=!0;try{$done$$($err$$,$result$$)}catch($e$$){typeof Logger!=="undefined"&&Logger&&Logger.error?Logger.error("[asyncCompat] L\u1ed7i khi x\u1eed l\u00fd k\u1ebft qu\u1ea3 task:",$e$$):console.error("[asyncCompat] L\u1ed7i khi x\u1eed l\u00fd k\u1ebft qu\u1ea3 task:",$e$$)}}};try{if(typeof $fn$$!=="function")return $finish$$(new TypeError("[asyncCompat] task/iteratee ph\u1ea3i l\u00e0 m\u1ed9t function"));
2
+ if($fn$$.length>$args$$.length){const $maybeReturn$$=$fn$$(...$args$$,($err$$,$result$$)=>$finish$$($err$$,$result$$));$maybeReturn$$&&typeof $maybeReturn$$.then==="function"&&$maybeReturn$$.catch($err$$=>$finish$$($err$$))}else Promise.resolve().then(()=>$fn$$(...$args$$)).then($result$$=>$finish$$(null,$result$$),$err$$=>$finish$$($err$$))}catch($err$$){$finish$$($err$$)}}
3
+ function series($tasks$$,$callback$$){$callback$$=$callback$$||function(){};const $isArray$$=Array.isArray($tasks$$),$keys$$=$isArray$$?$tasks$$.map(($_$$,$i$$)=>$i$$):Object.keys($tasks$$||{}),$results$$=$isArray$$?[]:{};let $finished$$=!1;const $finish$$=$err$$=>{if(!$finished$$){$finished$$=!0;if($err$$)return $callback$$($err$$);$callback$$(null,$results$$)}};(async()=>{try{for(const $key$$ of $keys$$){if($finished$$)return;const $result$$=await (new Promise(($resolve$$,$reject$$)=>{invoke($tasks$$[$key$$],
4
+ [],($err$$,$res$$)=>$err$$?$reject$$($err$$):$resolve$$($res$$))})).catch($err$$=>{throw $err$$;});$results$$[$key$$]=$result$$}$finish$$(null)}catch($err$$){$finish$$($err$$)}})()}
5
+ function parallel($tasks$$,$callback$$){$callback$$=$callback$$||function(){};const $isArray$$=Array.isArray($tasks$$),$keys$$=$isArray$$?$tasks$$.map(($_$$,$i$$)=>$i$$):Object.keys($tasks$$||{}),$results$$=$isArray$$?[]:{};let $finished$$=!1;const $finish$$=$err$$=>{if(!$finished$$){$finished$$=!0;if($err$$)return $callback$$($err$$);$callback$$(null,$results$$)}};if($keys$$.length===0)return $finish$$(null);let $remaining$$=$keys$$.length;$keys$$.forEach($key$$=>{invoke($tasks$$[$key$$],[],($err$$,
6
+ $res$$)=>{if(!$finished$$){if($err$$)return $finish$$($err$$);$results$$[$key$$]=$res$$;$remaining$$--;$remaining$$===0&&$finish$$(null)}})})}
7
+ function mapLimit($coll_effectiveLimit$$,$i$$,$iteratee$$,$callback$$){$callback$$=$callback$$||function(){};const $items$$=Array.isArray($coll_effectiveLimit$$)?$coll_effectiveLimit$$:Array.from($coll_effectiveLimit$$||[]),$results$$=Array($items$$.length);let $finished$$=!1;const $finish$$=$err$$=>{if(!$finished$$){$finished$$=!0;if($err$$)return $callback$$($err$$);$callback$$(null,$results$$)}};if($items$$.length===0)return $finish$$(null);$coll_effectiveLimit$$=Math.max(1,Math.min($i$$===void 0||
8
+ $i$$===null?1:$i$$,$items$$.length));let $index$$=0,$completed$$=0;const $startNext$$=()=>{if(!($finished$$||$index$$>=$items$$.length)){var $currentIndex$$=$index$$++;invoke($iteratee$$,[$items$$[$currentIndex$$]],($err$$,$res$$)=>{if(!$finished$$){if($err$$)return $finish$$($err$$);$results$$[$currentIndex$$]=$res$$;$completed$$++;if($completed$$===$items$$.length)return $finish$$(null);$startNext$$()}})}};for($i$$=0;$i$$<$coll_effectiveLimit$$;$i$$++)$startNext$$()}
9
+ function map($coll$$,$iteratee$$,$callback$$){return mapLimit($coll$$,Infinity,$iteratee$$,$callback$$)}function mapSeries($coll$$,$iteratee$$,$callback$$){return mapLimit($coll$$,1,$iteratee$$,$callback$$)}function forever($fn$$,$errback$$){$errback$$=$errback$$||function(){};let $stopped$$=!1;const $runOnce$$=()=>{$stopped$$||invoke($fn$$,[],$err$$=>{if(!$stopped$$){if($err$$)return $stopped$$=!0,$errback$$($err$$);setImmediate($runOnce$$)}})};$runOnce$$()}
10
+ module.exports={series,parallel,map,mapLimit,mapSeries,forever};
@@ -1,4 +1,4 @@
1
- const async=require("async"),_=require("lodash"),moment=require("moment");
1
+ const async=require("./asyncCompat"),_=require("lodash"),moment=require("moment");
2
2
  exports.find=function($query$$,$fn$$,$options$$){const $socai$$=global.getModel("socai");async.parallel({ps_no:function($callback$$){setImmediate(async()=>{let $query_no$$={};_.extend($query_no$$,$query$$);$query_no$$.tk&&($query_no$$.tk_no=$query_no$$.tk,delete $query_no$$.tk);$query_no$$.ma_kh&&($query_no$$.ma_kh_no=$query_no$$.ma_kh,delete $query_no$$.ma_kh);let $page$$=0,$_data$$=[];const $check$$=await $socai$$.find($query_no$$).skip($page$$*1E6).limit(1E6).explain("executionStats");$check$$.length>
3
3
  0&&$check$$[0].executionStats.totalKeysExamined!=$check$$[0].executionStats.totalDocsExamined&&Logger.error("vsocai: indexes c\u1ee7a socai ch\u01b0a hi\u1ec7u qu\u1ea3 cho query",$query_no$$,$check$$[0].executionStats);async.forever($callback$$=>{$socai$$.find($query_no$$).skip($page$$*1E6).limit(1E6).lean().then(function($rs$$){Logger.info("vsocai: ps no",{page:$page$$,rows_number:$rs$$.length});$rs$$.forEach($r$$=>{$r$$.tk=$r$$.tk_no;$r$$.tk_du=$r$$.tk_co;$r$$.ma_kh=$r$$.ma_kh_no;!$r$$.ma_kh&&
4
4
  $r$$.ma_kh_co&&($r$$.ma_kh=$r$$.ma_kh_co);$r$$.ps_no_nt=$r$$.tien_nt;$r$$.ps_no=Math.roundBy($r$$.tien,0);$r$$.ps_co_nt=0;$r$$.ps_co=0});$_data$$=$_data$$.concat($rs$$);if($rs$$.length<1E6)return $callback$$("0");$page$$+=1;$callback$$()}).catch($e$$=>{$callback$$($e$$)})},$e$$=>{if($e$$!="0")return $callback$$($e$$);$callback$$(null,$_data$$)})})},ps_co:function($callback$$){setImmediate(()=>{let $query_co$$={};_.extend($query_co$$,$query$$);$query_co$$.tk&&($query_co$$.tk_co=$query_co$$.tk,delete $query_co$$.tk);
@@ -1,4 +1,4 @@
1
- const axios=require("axios"),async=require("async"),moment=require("moment"),{xml2json,base64toJSON}=require("./utils"),exportInvoice=async($app$$,$ct$$,$check_data$$)=>{throw"Ch\u01b0a tri\u1ec3n khai";};exports.exportInvoice=exportInvoice;const getInvoice=async($app$$,$transactionUuid$$)=>{throw"Ch\u01b0a tri\u1ec3n khai";};exports.getInvoice=getInvoice;
1
+ const axios=require("axios"),async=require("./asyncCompat"),moment=require("moment"),{xml2json,base64toJSON}=require("./utils"),exportInvoice=async($app$$,$ct$$,$check_data$$)=>{throw"Ch\u01b0a tri\u1ec3n khai";};exports.exportInvoice=exportInvoice;const getInvoice=async($app$$,$transactionUuid$$)=>{throw"Ch\u01b0a tri\u1ec3n khai";};exports.getInvoice=getInvoice;
2
2
  const getInvoices=async($app$jscomp$2_str$$,$condition_data$$={})=>{if(!$app$jscomp$2_str$$)throw"Thi\u1ebfu th\u00f4ng tin c\u00f4ng ty";if(!$app$jscomp$2_str$$.vnpt_url_service||!$app$jscomp$2_str$$.vnpt_user||!$app$jscomp$2_str$$.vnpt_password)throw"Ch\u01b0a khai b\u00e1o th\u00f4ng tin k\u1ebft n\u1ed1i VNPT invoice";if(!$app$jscomp$2_str$$.ma_so_thue)throw"Ch\u01b0a khai b\u00e1o m\u00e3 s\u1ed1 thu\u1ebf c\u00f4ng ty";if(!$condition_data$$.ky_hieu_hoa_don&&!$app$jscomp$2_str$$.vnpt_ky_hieu_hoa_don)throw"Ch\u01b0a khai b\u00e1o m\u1eabu ho\u00e1 \u0111\u01a1n";
3
3
  if(!$condition_data$$.so_serial&&!$app$jscomp$2_str$$.so_serial)throw"Ch\u01b0a khai b\u00e1o k\u00ed hi\u1ec7u ho\u00e1 \u0111\u01a1n";if(!$condition_data$$.tu_ngay)throw"\u0110i\u1ec1u ki\u1ec7n thi\u1ebfu t\u1eeb ng\u00e0y (tu_ngay)";if(!$condition_data$$.den_ngay)throw"\u0110i\u1ec1u ki\u1ec7n thi\u1ebfu t\u1eeb ng\u00e0y (den_ngay)";const $ERRORS$$={"ERR:1":"T\u00e0i kho\u1ea3n \u0111\u0103ng nh\u1eadp sai ho\u1eb7c kh\u00f4ng c\u00f3 quy\u1ec1n ServiceRole","ERR:2":"Kh\u00f4ng t\u00ecm th\u1ea5y h\u00f3a \u0111\u01a1n",
4
4
  "ERR:3":"Sai \u0111\u1ecbnh d\u1ea1ng ng\u00e0y th\u00e1ng","ERR:4":"Kh\u00f4ng l\u1ea5y \u0111\u01b0\u1ee3c b\u1ea3ng h\u00f3a \u0111\u01a1n (sai m\u1eabu s\u1ed1)","ERR:6":"V\u01b0\u1ee3t qu\u00e1 gi\u1edbi h\u1ea1n s\u1ed1 l\u01b0\u1ee3ng h\u00f3a \u0111\u01a1n \u0111\u01b0\u1ee3c ph\u00e9p l\u1ea5y (500 h\u00f3a \u0111\u01a1n)","ERR:5":"C\u00f3 l\u1ed7i x\u1ea3y ra","ERR:7":"V\u01b0\u1ee3t qu\u00e1 gi\u1edbi h\u1ea1n 7 ng\u00e0y"};$condition_data$$=`<?xml version="1.0" encoding="utf-8"?>
@@ -1,5 +1,5 @@
1
- const async=require("async"),utils=require("./utils"),tontucthoi=global.getModel("tontucthoi"),Dmvt=global.getModel("dmvt"),round=4,post=function($master$$,$details$$,$model_book$$,$prepare$$,$options$$={}){$details$$||=[];Array.isArray($details$$)||($details$$=[$details$$]);this.master={...$master$$};this.details=$details$$.map($detail$$=>({...$detail$$}));this.prepare=$prepare$$;this.model_book=$model_book$$;this.options=$options$$};
2
- post.prototype.runPrepare=async($prepareFunction$$,$details$$)=>{$details$$=$details$$.map($d$$=>{$d$$.toObject&&($d$$=$d$$.toObject());return{...$d$$}});return new Promise($resolve$$=>{$prepareFunction$$?async.map($details$$,($detail$$,$callback$$)=>{setImmediate(()=>{$detail$$.toObject=function(){return Object.assign({},$detail$$)};$prepareFunction$$($detail$$,$detail$$=>{$detail$$.toObject=function(){return Object.assign({},$detail$$)};$callback$$(null,$detail$$)})})},($e$$,$details$$)=>{$resolve$$($details$$)}):
1
+ const async=require("./asyncCompat"),utils=require("./utils"),tontucthoi=global.getModel("tontucthoi"),Dmvt=global.getModel("dmvt"),round=4,post=function($master$$,$details$$,$model_book$$,$prepare$$,$options$$={}){$details$$||=[];Array.isArray($details$$)||($details$$=[$details$$]);this.master={...$master$$};this.details=$details$$.map($detail$$=>({...$detail$$}));this.prepare=$prepare$$;this.model_book=$model_book$$;this.options=$options$$};
2
+ post.prototype.runPrepare=async($prepareFunction$$,$details$$)=>{$details$$=$details$$.map($d$$=>{$d$$.toObject&&($d$$=$d$$.toObject());return{...$d$$}});return new Promise($resolve$$=>{$prepareFunction$$?async.map($details$$,($detail$$,$callback$$)=>{$detail$$.toObject=function(){return Object.assign({},$detail$$)};$prepareFunction$$($detail$$,$detail$$=>{$detail$$.toObject=function(){return Object.assign({},$detail$$)};$callback$$(null,$detail$$)})},($e$$,$details$$)=>{$resolve$$($details$$)}):
3
3
  $resolve$$($details$$)})};
4
4
  post.prototype.remove=async function($callback$$=()=>{}){var $master$$=this.master;$master$$&&$master$$.toObject&&($master$$=$master$$.toObject());if(!$master$$._id)return $callback$$();let $model_book$$=this.model_book,$query_delete$$={id_ct:$master$$._id.toString(),id_app:$master$$.id_app};this.options.queryDelete&&($query_delete$$={...$query_delete$$,...this.options.queryDelete,id_app:$master$$.id_app});$master$$=$model_book$$.modelName.toLowerCase()==="sokho"?await global.getModel("sokho").find({id_ct:$master$$._id.toString(),id_app:$master$$.id_app}).lean():
5
5
  [];await $model_book$$.deleteMany($query_delete$$);$master$$.length>0&&tontucthoi.tinhTonTucThoi($master$$,$e$$=>{$e$$&&Logger.error("[post-book] [\u0110\u00e3 t\u00ednh t\u1ed3n t\u1ee9c th\u1eddi sau khi xo\u00e1 d\u1eef li\u1ec7u sokho c\u1ee7a v\u1eadt t\u01b0]",$e$$)});$callback$$()};
@@ -1,8 +1,8 @@
1
- const async=require("async"),utils=require("./utils"),tontucthoi=global.getModel("tontucthoi"),Dmvt=global.getModel("dmvt"),round=4,tinhgiatb=require("../libs/tinhgiatb1vt"),moment=require("moment"),dinhmucsx=async($id_app$$,$i_ma_sp_qd$$,$dm_ma_tt1$$,$sl_xuat_sl_xuat_qd$$,$dm_of_vt_ma_dvt_vt$$)=>{let $vts$$=[];$dm_ma_tt1$$=await global.getModel("dinhmucsx").findOne({id_app:$id_app$$,ma_sp:$i_ma_sp_qd$$,ma_tt1:$dm_ma_tt1$$||void 0},{details:1}).lean();if(!$dm_ma_tt1$$||!$dm_ma_tt1$$.details||$dm_ma_tt1$$.details.length===
2
- 0)return $vts$$;$dm_ma_tt1$$.details=$dm_ma_tt1$$.details.map($d$$=>{$d$$.toObject&&($d$$=$d$$.toObject());return $d$$});var $he_so_qd_sl$$=1;($i_ma_sp_qd$$=await global.getModel("dmqddvt").findOne({id_app:$id_app$$,ma_vt:$i_ma_sp_qd$$,ma_dvt:$dm_of_vt_ma_dvt_vt$$}).lean())&&($he_so_qd_sl$$=$i_ma_sp_qd$$.mau?$i_ma_sp_qd$$.tu/$i_ma_sp_qd$$.mau:$i_ma_sp_qd$$.ty_le_qd);$sl_xuat_sl_xuat_qd$$*=$he_so_qd_sl$$;await $dm_ma_tt1$$.details.asyncJoinModel2($id_app$$,Dmvt,{where:"ma_vt",setFields:($item$$,$ref$$)=>
3
- {$item$$.tk_vt||($item$$.tk_vt=$ref$$.tk_vt);$item$$.tk_gv||($item$$.tk_gv=$ref$$.tk_gv);$item$$.tg_tk=$ref$$.tg_tk;$item$$.xk_nvl=$ref$$.xk_nvl}});for($i_ma_sp_qd$$=0;$i_ma_sp_qd$$<$dm_ma_tt1$$.details.length;$i_ma_sp_qd$$++)$dm_of_vt_ma_dvt_vt$$=$dm_ma_tt1$$.details[$i_ma_sp_qd$$],$he_so_qd_sl$$=0,$he_so_qd_sl$$=$dm_of_vt_ma_dvt_vt$$.loai_dinh_muc==1?$dm_of_vt_ma_dvt_vt$$.sl_dinh_muc*$sl_xuat_sl_xuat_qd$$*(1+($dm_of_vt_ma_dvt_vt$$.ty_le_hao_hut||0)/100):$dm_of_vt_ma_dvt_vt$$.sl_dinh_muc*(1+$dm_of_vt_ma_dvt_vt$$.ty_le_hao_hut/
4
- 100),$dm_of_vt_ma_dvt_vt$$.xk_nvl?($dm_of_vt_ma_dvt_vt$$=await dinhmucsx($id_app$$,$dm_of_vt_ma_dvt_vt$$.ma_vt,$dm_of_vt_ma_dvt_vt$$.ma_tt1||void 0,$he_so_qd_sl$$,$dm_of_vt_ma_dvt_vt$$.ma_dvt),$vts$$=[...$vts$$,...$dm_of_vt_ma_dvt_vt$$]):($dm_of_vt_ma_dvt_vt$$.sl_xuat=$he_so_qd_sl$$,$vts$$.push($dm_of_vt_ma_dvt_vt$$));return $vts$$},post=function($master$$,$details$$,$prepare$$,$options$$={}){$details$$||=[];Array.isArray($details$$)||($details$$=[$details$$]);this.master={...$master$$};this.details=
5
- $details$$.map($detail$$=>({...$detail$$}));this.prepare=$prepare$$;this.options=$options$$};
1
+ const async=require("./asyncCompat"),utils=require("./utils"),tontucthoi=global.getModel("tontucthoi"),Dmvt=global.getModel("dmvt"),round=4,tinhgiatb=require("../libs/tinhgiatb1vt"),moment=require("moment"),dinhmucsx=async($id_app$$,$i_ma_sp_qd$$,$dm_ma_tt1$$,$sl_xuat_sl_xuat_qd$$,$dm_of_vt_ma_dvt_vt$$)=>{let $vts$$=[];$dm_ma_tt1$$=await global.getModel("dinhmucsx").findOne({id_app:$id_app$$,ma_sp:$i_ma_sp_qd$$,ma_tt1:$dm_ma_tt1$$||void 0},{details:1}).lean();if(!$dm_ma_tt1$$||!$dm_ma_tt1$$.details||
2
+ $dm_ma_tt1$$.details.length===0)return $vts$$;$dm_ma_tt1$$.details=$dm_ma_tt1$$.details.map($d$$=>{$d$$.toObject&&($d$$=$d$$.toObject());return $d$$});var $he_so_qd_sl$$=1;($i_ma_sp_qd$$=await global.getModel("dmqddvt").findOne({id_app:$id_app$$,ma_vt:$i_ma_sp_qd$$,ma_dvt:$dm_of_vt_ma_dvt_vt$$}).lean())&&($he_so_qd_sl$$=$i_ma_sp_qd$$.mau?$i_ma_sp_qd$$.tu/$i_ma_sp_qd$$.mau:$i_ma_sp_qd$$.ty_le_qd);$sl_xuat_sl_xuat_qd$$*=$he_so_qd_sl$$;await $dm_ma_tt1$$.details.asyncJoinModel2($id_app$$,Dmvt,{where:"ma_vt",
3
+ setFields:($item$$,$ref$$)=>{$item$$.tk_vt||($item$$.tk_vt=$ref$$.tk_vt);$item$$.tk_gv||($item$$.tk_gv=$ref$$.tk_gv);$item$$.tg_tk=$ref$$.tg_tk;$item$$.xk_nvl=$ref$$.xk_nvl}});for($i_ma_sp_qd$$=0;$i_ma_sp_qd$$<$dm_ma_tt1$$.details.length;$i_ma_sp_qd$$++)$dm_of_vt_ma_dvt_vt$$=$dm_ma_tt1$$.details[$i_ma_sp_qd$$],$he_so_qd_sl$$=0,$he_so_qd_sl$$=$dm_of_vt_ma_dvt_vt$$.loai_dinh_muc==1?$dm_of_vt_ma_dvt_vt$$.sl_dinh_muc*$sl_xuat_sl_xuat_qd$$*(1+($dm_of_vt_ma_dvt_vt$$.ty_le_hao_hut||0)/100):$dm_of_vt_ma_dvt_vt$$.sl_dinh_muc*
4
+ (1+$dm_of_vt_ma_dvt_vt$$.ty_le_hao_hut/100),$dm_of_vt_ma_dvt_vt$$.xk_nvl?($dm_of_vt_ma_dvt_vt$$=await dinhmucsx($id_app$$,$dm_of_vt_ma_dvt_vt$$.ma_vt,$dm_of_vt_ma_dvt_vt$$.ma_tt1||void 0,$he_so_qd_sl$$,$dm_of_vt_ma_dvt_vt$$.ma_dvt),$vts$$=[...$vts$$,...$dm_of_vt_ma_dvt_vt$$]):($dm_of_vt_ma_dvt_vt$$.sl_xuat=$he_so_qd_sl$$,$vts$$.push($dm_of_vt_ma_dvt_vt$$));return $vts$$},post=function($master$$,$details$$,$prepare$$,$options$$={}){$details$$||=[];Array.isArray($details$$)||($details$$=[$details$$]);
5
+ this.master={...$master$$};this.details=$details$$.map($detail$$=>({...$detail$$}));this.prepare=$prepare$$;this.options=$options$$};
6
6
  post.prototype.runPrepare=async($prepareFunction$$,$details$$)=>{$details$$=$details$$.map($d$$=>{$d$$.toObject&&($d$$=$d$$.toObject());return{...$d$$}});return new Promise($resolve$$=>{$prepareFunction$$?async.map($details$$,($detail$$,$callback$$)=>{$detail$$.toObject=function(){return Object.assign({},$detail$$)};$prepareFunction$$($detail$$,$detail$$=>{$detail$$.toObject=function(){return Object.assign({},$detail$$)};$callback$$(null,$detail$$)})},($e$$,$details$$)=>{$resolve$$($details$$)}):
7
7
  $resolve$$($details$$)})};
8
8
  post.prototype.remove=async function($callback$$=()=>{}){var $master$$=this.master;$master$$&&$master$$.toObject&&($master$$=$master$$.toObject());if(!$master$$._id)return $callback$$();let $query_delete$$={id_ct:$master$$._id.toString(),id_app:$master$$.id_app};this.options.queryDelete&&($query_delete$$={...$query_delete$$,...this.options.queryDelete,id_app:$master$$.id_app});$master$$=await global.getModel("sokho").find({id_ct:$master$$._id.toString(),id_app:$master$$.id_app}).lean();await global.getModel("sokho").deleteMany($query_delete$$);
@@ -1,5 +1,5 @@
1
- const async=require("async"),underscore=require("underscore"),{onAfterCommit}=require("./sessionContext"),models=[{name:"user",key:["email"]},{name:"participant",key:["email"]},{name:"usergroup",key:["_id"]},{name:"dmvt",key:["ma_vt"]},{name:"customer",key:["ma_kh","_id"]},{name:"app",key:["_id"]},{name:"group",key:["_id"]},{name:"dokho",key:["_id"]},{name:"dvcs",key:["_id","ma_dvcs"]},{name:"dmkho",key:["ma_kho","_id"]},{name:"dmbp",key:["ma_bp","_id"]},{name:"dmnv",key:["ma_nv","_id"]},{name:"dmphi",
2
- key:["ma_phi","_id"]},{name:"dmdt",key:["ma_dt","_id"]},{name:"account",key:["tk"]},{name:"trangthai",key:[$obj$$=>`:trangthai:ma_ct:${$obj$$.ma_ct}:ma_trang_thai:${$obj$$.ma_trang_thai}`,$obj$$=>`:trangthai:ma_trang_thai:${$obj$$.ma_trang_thai}:ma_ct:${$obj$$.ma_ct}`]},{name:"trangthaiapp",key:[$obj$$=>`${$obj$$._id.toString()}:ma_ct:${$obj$$.ma_ct}:ma_trang_thai:${$obj$$.ma_trang_thai}`,$obj$$=>`${$obj$$._id.toString()}:ma_trang_thai:${$obj$$.ma_trang_thai}:ma_ct:${$obj$$.ma_ct}`]}];
1
+ const async=require("./asyncCompat"),underscore=require("underscore"),{onAfterCommit}=require("./sessionContext"),models=[{name:"user",key:["email"]},{name:"participant",key:["email"]},{name:"usergroup",key:["_id"]},{name:"dmvt",key:["ma_vt"]},{name:"customer",key:["ma_kh","_id"]},{name:"app",key:["_id"]},{name:"group",key:["_id"]},{name:"dokho",key:["_id"]},{name:"dvcs",key:["_id","ma_dvcs"]},{name:"dmkho",key:["ma_kho","_id"]},{name:"dmbp",key:["ma_bp","_id"]},{name:"dmnv",key:["ma_nv","_id"]},
2
+ {name:"dmphi",key:["ma_phi","_id"]},{name:"dmdt",key:["ma_dt","_id"]},{name:"account",key:["tk"]},{name:"trangthai",key:[$obj$$=>`:trangthai:ma_ct:${$obj$$.ma_ct}:ma_trang_thai:${$obj$$.ma_trang_thai}`,$obj$$=>`:trangthai:ma_trang_thai:${$obj$$.ma_trang_thai}:ma_ct:${$obj$$.ma_ct}`]},{name:"trangthaiapp",key:[$obj$$=>`${$obj$$._id.toString()}:ma_ct:${$obj$$.ma_ct}:ma_trang_thai:${$obj$$.ma_trang_thai}`,$obj$$=>`${$obj$$._id.toString()}:ma_trang_thai:${$obj$$.ma_trang_thai}:ma_ct:${$obj$$.ma_ct}`]}];
3
3
  exports.sortObjectKeys=$obj$$=>Object.keys($obj$$).sort().reduce(($acc$$,$key$$)=>({...$acc$$,[$key$$]:$obj$$[$key$$]}),{});
4
4
  exports.generateRedisKey=($d_session_modelName$$,$query_query_sorted$$,$id_app$$,$key$jscomp$11_val$$)=>{$query_query_sorted$$=exports.sortObjectKeys($query_query_sorted$$);$d_session_modelName$$=$d_session_modelName$$||"";if(!$key$jscomp$11_val$$&&$query_query_sorted$$._id)$d_session_modelName$$="flex:"+$query_query_sorted$$._id;else if($key$jscomp$11_val$$){if(typeof $key$jscomp$11_val$$=="function")return $key$jscomp$11_val$$($query_query_sorted$$).replace(/\./g,"_");if($key$jscomp$11_val$$!==
5
5
  "id_app"&&$query_query_sorted$$[$key$jscomp$11_val$$]!==void 0&&$query_query_sorted$$[$key$jscomp$11_val$$]!==null){var $key$$=$query_query_sorted$$[$key$jscomp$11_val$$];$d_session_modelName$$=$d_session_modelName$$?`${$d_session_modelName$$}:${$key$jscomp$11_val$$}:${$key$$}`:`${$key$jscomp$11_val$$}:${$key$$}`}}else for($key$$ in $query_query_sorted$$)$key$$!=="id_app"&&$query_query_sorted$$[$key$$]!==void 0&&$query_query_sorted$$[$key$$]!==null&&($key$jscomp$11_val$$=$query_query_sorted$$[$key$$],
@@ -1,4 +1,4 @@
1
- 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");
1
+ 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("./asyncCompat");
2
2
  model.start=()=>{Logger.info("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$$&&$abci$$.trang_thai==
3
3
  "0"&&moment().diff(moment($abci$$.date_created),"hours")<1)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(),Logger.info("lenh rut von nay da duoc thuc hien thanh cong:",$Withdraw$$.id)}catch($e$$){await global.getModel("assbank").sendCoins($Withdraw$$.id_app,
@@ -1,2 +1,2 @@
1
- const counterScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},name:{type:String,required:!0,uppercase:!0,maxlength:1024},field:{type:String,required:!0,maxlength:32},sequence:{type:Number}});(global.configs||{}).createIndexes&&counterScheam.index({id_app:1,name:1,field:1});const model=mongoose.models.counter||mongoose.model("counter",counterScheam);
2
- model.getNextSequence=function($id_app$$,$name$$,$field$$,$fn$$){model.findOneAndUpdate({id_app:$id_app$$,name:$name$$.toUpperCase(),field:$field$$},{$inc:{sequence:1}},{new:!0,upsert:!0},function($error$$,$obj$$){return $error$$?$fn$$($error$$):$obj$$?$fn$$(null,$obj$$.sequence):$fn$$(null,-1)})};module.exports=model;
1
+ const counterSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},name:{type:String,required:!0,uppercase:!0,maxlength:1024},field:{type:String,required:!0,maxlength:32},sequence:{type:Number,default:0}},{versionKey:!1});(global.configs||{}).createIndexes&&counterSchema.index({id_app:1,name:1,field:1},{unique:!0,background:!0});const model=mongoose.models.counter||mongoose.model("counter",counterSchema);
2
+ model.getNextSequence=async function($doc_id_app$$,$name$$,$field$$){return($doc_id_app$$=await model.findOneAndUpdate({id_app:$doc_id_app$$,name:($name$$||"").toUpperCase(),field:$field$$},{$inc:{sequence:1}},{new:!0,upsert:!0,lean:!0,setDefaultsOnInsert:!0,projection:{sequence:1,_id:0}}))?$doc_id_app$$.sequence:-1};module.exports=model;