flexbiz-server 12.3.56 → 12.3.58
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/controllers/controllerRPT.js +18 -17
- package/server/controllers/controllerUtils.js +31 -31
- package/server/controllers/rptHandler.js +12 -12
- package/server/libs/ckvt.js +8 -8
- package/server/libs/dkvt.js +8 -9
- package/server/libs/mongoosePatch.js +8 -7
- package/server/libs/post-book.js +15 -14
- package/server/libs/post-sokho.js +1 -1
- package/server/libs/sessionContext.js +200 -7
- package/server/libs/tinhgiatb.js +9 -9
- package/server/models/tontucthoi.js +174 -6
- package/server/modules/reports/calc-tinhgiatb.js +4 -4
- package/server/transactionMiddleware.js +5 -3
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const _=require("lodash"),crypto=require("crypto"),numeral=require("numeral"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),reportinfo=global.getModel("reportinfo"),{evalute,getParameterData}=require("../libs/utils"),utils=require("../libs/utils"),handlers=require("./handlers");
|
|
1
|
+
const _=require("lodash"),crypto=require("crypto"),numeral=require("numeral"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),reportinfo=global.getModel("reportinfo"),{evalute,getParameterData}=require("../libs/utils"),utils=require("../libs/utils"),handlers=require("./handlers"),{getCurrentSession,getCurrentStore}=require("../libs/sessionContext");
|
|
2
2
|
class controllerRPT{constructor($router$$,$rptId$$,$fecthData$$,$options$$={}){this.module=this.name=$rptId$$;this.router=$router$$;this.options=$options$$;this.fecthDataFunc=$fecthData$$;global.report_controllers[$rptId$$.toUpperCase()]=this;this.base_path=$options$$.require_id_app===!1?"/":"/:id_app/";this.getData=this.getData.bind(this);this.createRoute=this.createRoute.bind(this);this.notNeedRight=async($user$$,$_options$$={})=>{let $nnr$$=$options$$.notNeedRight;_.isFunction($nnr$$)&&($nnr$$=
|
|
3
3
|
$nnr$$($user$$,$_options$$));return $nnr$$};this.handleResult=async($req$$,$data_response$$,$callback$$)=>{if($data_response$$.error)return $callback$$($data_response$$.error);$data_response$$=$data_response$$.result;var $func_string_rptInfo$$=await reportinfo.findOne({code:($req$$.query.report_info_code||$rptId$$).toLowerCase()}).lean();if($func_string_rptInfo$$&&$func_string_rptInfo$$.handle_data_expression_server){if($func_string_rptInfo$$.handle_data_expression_server.indexOf("async ")>=0)return $callback$$("async function is not allow");
|
|
4
4
|
$func_string_rptInfo$$=`return (async ()=>{
|
|
@@ -9,19 +9,20 @@ $func_string_rptInfo$$=`return (async ()=>{
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
})`;try{let $rs$$=await evalute($func_string_rptInfo$$,{data:$data_response$$,moment,numeral,condition:$req$$.query,user:$req$$.user,_,utils,getData:getParameterData})();if($rs$$){if($rs$$.error)return console.error("handle_data_expression_server",$rs$$.error,$func_string_rptInfo$$,$rptId$$),$callback$$($rs$$.error.message||$rs$$.error);$data_response$$=$rs$$}}catch($e$$){return console.error("handle_data_expression_server",$e$$,$func_string_rptInfo$$,$rptId$$),$callback$$($e$$.message||
|
|
12
|
-
$e$$)}}$callback$$(null,$data_response$$)};this.getDataFunc=()=>{console.log(
|
|
13
|
-
{error:$e$$,data:$rs$$},$res$$);if($e$$)return $e$$.error?$res$$.status(500).send($e$$):$res$$.status(500).send({error:$e$$.message||$e$$});$rs$$=="__end_stream__"?console.log("[handlerWithSession] end stream..."
|
|
14
|
-
{handler:"rptHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$_req_user_agent$$,ip:$ip$$,files:$files$$},global.reportMainPool&&!global.reportMainPool.fullQueue()&&$options$$.queue!=
|
|
15
|
-
req:$_req_user_agent$$,module:$rptId$$.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{setImmediate(()=>{if(!$options$$.waiting_message){if($options$$.resHandler)return $options$$.resHandler($req$$,
|
|
16
|
-
($e$$,$returnvalue$$)=>{if(!$options$$.waiting_message){if($options$$.resHandler)return $options$$.resHandler($req$$,{error:$e$$,data:$returnvalue$$},$res$$);if($e$$)return $res$$.status(400).send($e$$)
|
|
17
|
-
var $_req$jscomp$1_user_agent$$=$ip$jscomp$1_req$$.header("user-agent");$ip$jscomp$1_req$$=$ip$jscomp$1_req$$.ip||$ip$jscomp$1_req$$.headers["x-forwarded-for"]||$ip$jscomp$1_req$$.connection.remoteAddress;
|
|
18
|
-
global.reportMainPool.exec({id_task:$id_task$$,req:$_req$jscomp$1_user_agent$$,module:$rptId$$.toUpperCase(),configs:JSON.stringify(configs)},$response$jscomp$3_returnvalue$$=>
|
|
19
|
-
|
|
20
|
-
($e$jscomp$7_result$$,$returnvalue$$)=>{if($e$jscomp$7_result$$)return $res$$.status(400).send($e$jscomp$7_result$$);$e$jscomp$7_result$$=$returnvalue$$.data;switch($returnvalue$$.type){case "xlsx":$res$$.setHeader("Content-Type",
|
|
21
|
-
$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".docx");$res$$.write($e$jscomp$7_result$$,"binary");$res$$.end(null,"binary");break;default:$res$$.send($e$jscomp$7_result$$)}})}catch($e$$){$res$$.status(400).send($e$$)}}
|
|
22
|
-
$callback$$){const $ctrl$$=this;let $callback_run$$=!1;setImmediate(()=>{try{$ctrl$$.fecthDataFunc($req$$,($err$$,$data$$,$event$$)=>{if($ctrl$$.options?.stream){if($err$$)return $callback$$($err$$);$event$$!=
|
|
23
|
-
$e$$),$callback$$($e$$.message)}})}createRoute($routeName$$,$callbackRoute_handler$$,$_options$$={method:"GET",not_use_worker:!1}){const $self$$=this;$_options$$.method=$_options$$.method
|
|
24
|
-
files:$files$$}=$ip$jscomp$2_req$$;var $_req$jscomp$2_user_agent$$=$ip$jscomp$2_req$$.header("user-agent");$ip$jscomp$2_req$$=$ip$jscomp$2_req$$.ip||$ip$jscomp$2_req$$.headers["x-forwarded-for"]
|
|
25
|
-
files:$files$$},!global.reportMainPool||global.reportMainPool.fullQueue()||$_options$$.not_use_worker)handlers.rptCreateRouteHandler(this,$_req$jscomp$2_user_agent$$,($e$$,$returnvalue$$)=>
|
|
26
|
-
{if($
|
|
27
|
-
$_options$$.method=="
|
|
12
|
+
$e$$)}}$callback$$(null,$data_response$$)};this.getDataFunc=()=>{const $currentStore$$=getCurrentStore();console.log(`\u2705 [rptHanlder] [getDataFunc], sessionID=${$currentStore$$?.storeId||"none"}`);console.log(`\u2705 [rptHanlder] [getDataFunc],sessionID=${getCurrentSession()?._debugId}`);return $options$$.stream?$fecthData$$:async($req$$,$callback$$)=>{console.log(`\u2705 [rptHanlder] Ch\u1ea1y b\u00e1o c\u00e1o, sessionID=${getCurrentSession()?._debugId}`);try{await $fecthData$$($req$$,($e$$,
|
|
13
|
+
$data$$)=>{this.handleResult($req$$,{error:$e$$,result:$data$$},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})}catch($e$$){$callback$$($e$$)}}};const $mainRoute$$=async($req$$,$res$$)=>{if($options$$.stream)handlers.rptHandler(this,$req$$,($e$$,$rs$$)=>{if($options$$.resHandler)return $options$$.resHandler($req$$,{error:$e$$,data:$rs$$},$res$$);if($e$$)return $e$$.error?$res$$.status(500).send($e$$):$res$$.status(500).send({error:$e$$.message||$e$$});$rs$$=="__end_stream__"?console.log("[handlerWithSession] end stream...",
|
|
14
|
+
$rptId$$):$res$$.send($rs$$)},$res$$);else{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$}=$req$$;var $_req_user_agent$$=$req$$.header("user-agent");const $ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{if($_req_user_agent$$={handler:"rptHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$_req_user_agent$$,ip:$ip$$,files:$files$$},global.reportMainPool&&!global.reportMainPool.fullQueue()&&$options$$.queue!=
|
|
15
|
+
0){const $id_task$$=`report-${crypto.randomBytes(20).toString("hex")}`;if($options$$.waiting_message){const $status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$res$$.status(202).send([{message:$options$$.waiting_message,status_task:$status_task$$}])}global.reportMainPool.exec({id_task:$id_task$$,req:$_req_user_agent$$,module:$rptId$$.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{setImmediate(()=>{if(!$options$$.waiting_message){if($options$$.resHandler)return $options$$.resHandler($req$$,
|
|
16
|
+
{error:$response$$.error,data:$response$$.result},$res$$);if($response$$.error)return $res$$.status(400).send($response$$.error);$res$$.send($response$$.result)}})})}else $options$$.waiting_message&&$res$$.status(202).send([{message:$options$$.waiting_message}]),handlers.rptHandler(this,$_req_user_agent$$,($e$$,$returnvalue$$)=>{if(!$options$$.waiting_message){if($options$$.resHandler)return $options$$.resHandler($req$$,{error:$e$$,data:$returnvalue$$},$res$$);if($e$$)return $res$$.status(400).send($e$$);
|
|
17
|
+
$res$$.send($returnvalue$$)}})}catch($e$$){console.error("L\u1ed7i t\u1ea1o job cho b\u00e1o c\u00e1o",$rptId$$,$e$$),$res$$.status(400).send($e$$)}}},$excelRoute$$=async($ip$jscomp$1_req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$}=$ip$jscomp$1_req$$;var $_req$jscomp$1_user_agent$$=$ip$jscomp$1_req$$.header("user-agent");$ip$jscomp$1_req$$=$ip$jscomp$1_req$$.ip||$ip$jscomp$1_req$$.headers["x-forwarded-for"]||$ip$jscomp$1_req$$.connection.remoteAddress;
|
|
18
|
+
try{if($_req$jscomp$1_user_agent$$={handler:"rptExcelHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$_req$jscomp$1_user_agent$$,ip:$ip$jscomp$1_req$$,files:$files$$},global.reportMainPool&&!global.reportMainPool.fullQueue()&&$options$$.queue!=0){const $id_task$$=`report-export-${crypto.randomBytes(20).toString("hex")}`;global.reportMainPool.exec({id_task:$id_task$$,req:$_req$jscomp$1_user_agent$$,module:$rptId$$.toUpperCase(),configs:JSON.stringify(configs)},$response$jscomp$3_returnvalue$$=>
|
|
19
|
+
{if($response$jscomp$3_returnvalue$$.error)return $res$$.status(400).send($response$jscomp$3_returnvalue$$.error);$response$jscomp$3_returnvalue$$=$response$jscomp$3_returnvalue$$.result;const $result$$=$response$jscomp$3_returnvalue$$.data;switch($response$jscomp$3_returnvalue$$.type){case "xlsx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats");$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".xlsx");$res$$.end($result$$,"binary");break;case "docx":$res$$.setHeader("Content-Type",
|
|
20
|
+
"application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".docx");$res$$.write($result$$,"binary");$res$$.end(null,"binary");break;default:$res$$.send($result$$)}})}else handlers.rptExcelHandler(this,$_req$jscomp$1_user_agent$$,($e$jscomp$7_result$$,$returnvalue$$)=>{if($e$jscomp$7_result$$)return $res$$.status(400).send($e$jscomp$7_result$$);$e$jscomp$7_result$$=$returnvalue$$.data;switch($returnvalue$$.type){case "xlsx":$res$$.setHeader("Content-Type",
|
|
21
|
+
"application/vnd.openxmlformats");$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".xlsx");$res$$.end($e$jscomp$7_result$$,"binary");break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".docx");$res$$.write($e$jscomp$7_result$$,"binary");$res$$.end(null,"binary");break;default:$res$$.send($e$jscomp$7_result$$)}})}catch($e$$){$res$$.status(400).send($e$$)}};
|
|
22
|
+
$router$$.route(`${this.base_path+this.module}`).get($mainRoute$$);$router$$.route(`${this.base_path+this.module}`).post($mainRoute$$);$router$$.route(`${this.base_path+this.module}/excel`).get($excelRoute$$);$router$$.route(`${this.base_path+this.module}/excel`).post($excelRoute$$)}getData($req$$,$callback$$){const $ctrl$$=this;let $callback_run$$=!1;setImmediate(()=>{try{$ctrl$$.fecthDataFunc($req$$,($err$$,$data$$,$event$$)=>{if($ctrl$$.options?.stream){if($err$$)return $callback$$($err$$);$event$$!=
|
|
23
|
+
"data"||$callback_run$$||($callback_run$$=!0,this.handleResult($req$$,{error:$err$$,result:$data$$},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)}))}else $callback_run$$=!0,this.handleResult($req$$,{error:$err$$,result:$data$$},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})}catch($e$$){console.error("[report controller] [getData]",$e$$),$callback$$($e$$.message)}})}createRoute($routeName$$,$callbackRoute_handler$$,$_options$$={method:"GET",not_use_worker:!1}){const $self$$=this;$_options$$.method=$_options$$.method?
|
|
24
|
+
$_options$$.method.toUpperCase():"GET";const $route_action_key$$=`rpt_route_action_${$self$$.module}_${$routeName$$}_${$_options$$.method}`;$self$$[$route_action_key$$]=$callbackRoute_handler$$;$callbackRoute_handler$$=async function($ip$jscomp$2_req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$}=$ip$jscomp$2_req$$;var $_req$jscomp$2_user_agent$$=$ip$jscomp$2_req$$.header("user-agent");$ip$jscomp$2_req$$=$ip$jscomp$2_req$$.ip||$ip$jscomp$2_req$$.headers["x-forwarded-for"]||
|
|
25
|
+
$ip$jscomp$2_req$$.connection.remoteAddress;try{if($_req$jscomp$2_user_agent$$={handler:"rptCreateRouteHandler",routeName:$routeName$$,_options:$_options$$,route_action_key:$route_action_key$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$_req$jscomp$2_user_agent$$,ip:$ip$jscomp$2_req$$,files:$files$$},!global.reportMainPool||global.reportMainPool.fullQueue()||$_options$$.not_use_worker)handlers.rptCreateRouteHandler(this,$_req$jscomp$2_user_agent$$,($e$$,$returnvalue$$)=>
|
|
26
|
+
{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($returnvalue$$)});else{const $id_task$$=`report-create-route-${crypto.randomBytes(20).toString("hex")}`;global.reportMainPool.exec({id_task:$id_task$$,req:$_req$jscomp$2_user_agent$$,module:$self$$.module.toUpperCase(),configs:JSON.stringify(configs)},$response$jscomp$6_result$$=>{if($response$jscomp$6_result$$.error)return $res$$.status(400).send($response$jscomp$6_result$$.error);({result:$response$jscomp$6_result$$}=$response$jscomp$6_result$$);
|
|
27
|
+
$res$$.send($response$jscomp$6_result$$)})}}catch($e$$){$res$$.status(400).send($e$$)}};$_options$$.method=="DELETE"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).delete($callbackRoute_handler$$):$_options$$.method=="POST"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).post($callbackRoute_handler$$):$_options$$.method=="PUT"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).put($callbackRoute_handler$$):this.router.route(`${this.base_path+
|
|
28
|
+
this.module}/${$routeName$$}`).get($callbackRoute_handler$$)}}module.exports=controllerRPT;
|
|
@@ -14,26 +14,26 @@ sip_password:0,sip_websocket:0,voiip_access_token:0,voiip_webhook:0,wallet_addre
|
|
|
14
14
|
!1);let $condition$$={};$unique$$=$unique$$.filter($key$$=>$model$$.schema.paths[$key$$]);for(let $i$$=0;$i$$<$unique$$.length;$i$$++){let $key$$=$unique$$[$i$$],$v$$=$obj$$[$key$$];$v$$!=void 0&&$model$$.schema.paths[$key$$]&&($v$$!==null?$model$$.schema.paths[$key$$].instance.toLowerCase()=="number"?$condition$$[$key$$]=Number($v$$):$model$$.schema.paths[$key$$].instance.toLowerCase()=="date"?$condition$$[$key$$]=new Date($v$$):$model$$.schema.paths[$key$$].instance.toLowerCase()=="string"?$condition$$[$key$$]=
|
|
15
15
|
$v$$.toString():$condition$$[$key$$]=$v$$:$condition$$[$key$$]=$v$$)}if($condition$$.id_app&&Object.values($condition$$).length<2||Object.values($condition$$).length<1)return $fn$$("D\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i \u0111\u1ee7 c\u00e1c gi\u00e1 tr\u1ecb: "+$unique$$.join(","));$obj$$.id_app&&($condition$$.id_app=$obj$$.id_app);$replaceIfExists$$?$model$$.deleteMany($condition$$,$e$$=>{setImmediate(()=>{if($e$$)return $fn$$($e$$);$fn$$(null,!1)})}):$model$$.findOne($condition$$,{_id:1},
|
|
16
16
|
($error$$,$result$$)=>{setImmediate(()=>{if($error$$)return $fn$$($error$$);if(!$result$$)return $fn$$(null,!1);console.warn("object exists",$condition$$,"unique fields",$unique$$);$fn$$(null,!0)})})},postData=function($obj$$,$ctrl$$,$mainCallback$$,$options$$={}){const $post$$=$ctrl$$.dynamicPost||$ctrl$$.post;if(!$post$$)return $mainCallback$$();const $postOptions$$={...$ctrl$$.options,...$options$$};let $obj_created$$=$obj$$.toObject?utils.convertObjectIdsToStrings($obj$$.toObject()):{...$obj$$};
|
|
17
|
-
Object.keys($obj_created$$).forEach($key$$=>{let $p$$=$obj_created$$[$key$$];$p$$&&($p$$.toObject&&($obj_created$$[$key$$]=utils.convertObjectIdsToStrings($p$$.toObject())),_.isArray($p$$)&&($obj_created$$[$key$$]=$p$$.map($el$$=>$el$$?$el$$.toObject?utils.convertObjectIdsToStrings($el$$.toObject()):$el$$:$el$$)))})
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
{
|
|
31
|
-
|
|
32
|
-
$
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
17
|
+
Object.keys($obj_created$$).forEach($key$$=>{let $p$$=$obj_created$$[$key$$];$p$$&&($p$$.toObject&&($obj_created$$[$key$$]=utils.convertObjectIdsToStrings($p$$.toObject())),_.isArray($p$$)&&($obj_created$$[$key$$]=$p$$.map($el$$=>$el$$?$el$$.toObject?utils.convertObjectIdsToStrings($el$$.toObject()):$el$$:$el$$)))});$ctrl$$.beforePost||($ctrl$$.beforePost=function($obj_created$$,$callback$$){$callback$$(null,null)});$ctrl$$.beforePost($obj_created$$,function($e$$){if($e$$)return $mainCallback$$($e$$);
|
|
18
|
+
deletePost($obj_created$$.user_updated,$obj_created$$,async function($e$$,$_obj$$,$oldBooks$$){if($e$$)return $mainCallback$$($e$$);let $oldDanamicBook$$={};const $callback$$=async($e$$,$rs$$)=>{if($e$$){for(let $key$$ in $oldBooks$$)$oldBooks$$[$key$$].length>0&&await global.getModel($key$$.toLowerCase()).insertMany($oldBooks$$[$key$$]);if($oldDanamicBook$$)for(let $key$$ in $oldDanamicBook$$)!$oldBooks$$[$key$$]&&$oldDanamicBook$$[$key$$].length>0&&await global.getModel($key$$.toLowerCase()).insertMany($oldDanamicBook$$[$key$$])}$mainCallback$$($e$$,
|
|
19
|
+
$rs$$)};if($ctrl$$.dynamicDeletePost)try{$oldDanamicBook$$=await $ctrl$$.dynamicDeletePost($obj_created$$)}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}setImmediate(async()=>{if($obj_created$$.trang_thai||$obj_created$$.trang_thai==0)$obj_created$$.trang_thai=$obj_created$$.trang_thai.toString();const $listinfo_code$$=$obj_created$$.listinfo_code;let $trang_thai$$;if($obj_created$$.trang_thai&&($listinfo_code$$&&($trang_thai$$=await trangthai.findOne({ma_ct:($listinfo_code$$||"").toUpperCase(),
|
|
20
|
+
ma_trang_thai:$obj_created$$.trang_thai})),$trang_thai$$||=await trangthai.findOne({ma_ct:($obj_created$$.ma_ct||"").toUpperCase(),ma_trang_thai:$obj_created$$.trang_thai}),!$trang_thai$$||!$trang_thai$$.post))return console.log("[controllerUtils][postData] tr\u1ea1ng th\u00e1i kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c kh\u00f4ng y\u00eau c\u1ea7u post d\u1eef li\u1ec7u",$listinfo_code$$,$obj_created$$.trang_thai),$callback$$();setImmediate(()=>{$post$$($obj_created$$,function($e$$,$rs$$){setImmediate(()=>
|
|
21
|
+
{if($e$$){let $msg_error$$=$e$$.message||$e$$.error||$e$$.toString();if($msg_error$$.indexOf("E11000 duplicate")>=0&&($msg_error$$.indexOf("id_ct_1_nh_dk_1")>=0||$msg_error$$.indexOf("id_ct_1_line_1")>=0))return $callback$$(null,$rs$$);console.error("error post data",$obj_created$$._id,$msg_error$$);deletePost($obj_created$$.user_updated,$obj_created$$,async function($e_delete_post$$){if($e_delete_post$$)return console.error("error delete post",$e_delete_post$$),$callback$$($e_delete_post$$);console.error("deleted books because error post");
|
|
22
|
+
if($ctrl$$.dynamicDeletePost)try{return await $ctrl$$.dynamicDeletePost($obj_created$$),$callback$$($e$$.message||$e$$.error||$e$$)}catch($e$$){return console.error("[dynamicDeletePost]",$e$$.message||$e$$.error||$e$$),$callback$$($e$$)}else $callback$$($e$$)})}else $callback$$(null,$rs$$)})},{...$postOptions$$})})})})})},pushNotification=($ctrl$$,$_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=!1,$options$$={title:"",data:{}})=>{let $obj$$;$obj$$=$_obj$$.toObject?utils.convertObjectIdsToStrings($_obj$$.toObject()):
|
|
23
|
+
{...$_obj$$};$obj$$._id&&($obj$$._id=$obj$$._id.toString());setImmediate(async()=>{var $channel_id_func_old_trang_thai$$=`${$ctrl$$.name.toLowerCase()}-${$eventName$$}`;$_obj$$.id_app&&($channel_id_func_old_trang_thai$$=`${$channel_id_func_old_trang_thai$$}-${$_obj$$.id_app}`);let $message$$=JSON.stringify($obj$$);try{await global.clientRedis.publish($channel_id_func_old_trang_thai$$,$message$$)}catch($e$$){console.error("[controllerUtiles][pushNotification] fire event",$eventName$$,$e$$)}if($_obj$$.status){$options$$||=
|
|
24
|
+
{};var $exclude_token$$=$options$$.exclude_token,$trang_thai$$=($obj$$.trang_thai||($obj$$.progress==0?"0":$obj$$.progress)||"").toString();$old_obj$$&&!$justFireEvents$$&&($channel_id_func_old_trang_thai$$=($old_obj$$.trang_thai||($old_obj$$.progress==0?"0":$old_obj$$.progress)||"").toString(),$channel_id_func_old_trang_thai$$===$trang_thai$$&&($justFireEvents$$=!0));var $listinfos_notifications_setting_users_receive_notification_v_options$$;($channel_id_func_old_trang_thai$$=$obj$$.listinfo_code)&&
|
|
25
|
+
($listinfos_notifications_setting_users_receive_notification_v_options$$=await OptionsModel.find({id_app:$obj$$.id_app,id_func:$channel_id_func_old_trang_thai$$,option:{$exists:!0}},{option:1}).lean());$channel_id_func_old_trang_thai$$&&$listinfos_notifications_setting_users_receive_notification_v_options$$.length!=0||($listinfos_notifications_setting_users_receive_notification_v_options$$=(await global.getModel("listinfo").find({api_code:$ctrl$$.name},{code:1}).lean()).map($a$$=>$a$$.code),$listinfos_notifications_setting_users_receive_notification_v_options$$.push($ctrl$$.name),
|
|
26
|
+
$listinfos_notifications_setting_users_receive_notification_v_options$$=[...(new Set($listinfos_notifications_setting_users_receive_notification_v_options$$))],$channel_id_func_old_trang_thai$$={$in:$listinfos_notifications_setting_users_receive_notification_v_options$$},$listinfos_notifications_setting_users_receive_notification_v_options$$=await OptionsModel.find({id_app:$obj$$.id_app,id_func:$channel_id_func_old_trang_thai$$,option:{$exists:!0}},{option:1}).lean());$listinfos_notifications_setting_users_receive_notification_v_options$$=
|
|
27
|
+
$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($v$$=>$v$$.option&&$v$$.option.users_receive_notification).map($v$$=>$v$$.option.users_receive_notification).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$listinfos_notifications_setting_users_receive_notification_v_options$$.length===0&&($listinfos_notifications_setting_users_receive_notification_v_options$$=await Promise.all((($ctrl$$.options||{}).users_receive_notification_default||[]).map($n$$=>new Promise($resolve$$=>
|
|
28
|
+
{setImmediate(async()=>{_.isFunction($n$$)?$resolve$$(await $n$$($obj$$)):$resolve$$($n$$)})}))));$listinfos_notifications_setting_users_receive_notification_v_options$$&&($listinfos_notifications_setting_users_receive_notification_v_options$$=$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($u$$=>!$u$$.trang_thai||$u$$.trang_thai.toString()===$trang_thai$$||$u$$.trang_thai.toString()==="delete"),$listinfos_notifications_setting_users_receive_notification_v_options$$=
|
|
29
|
+
$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($func_string_n$$=>{if(!$func_string_n$$.condition||!$func_string_n$$.condition.trim())return!0;$func_string_n$$=$func_string_n$$.condition;$func_string_n$$.indexOf("return ")<0&&($func_string_n$$=`return ${$func_string_n$$}`);try{return evalute($func_string_n$$,{...$obj$$,master:$obj$$,data:$obj$$})}catch($e$$){return console.error("[controllerUtiles][pushNotification]",$e$$,$func_string_n$$),!1}}),$listinfos_notifications_setting_users_receive_notification_v_options$$.forEach(async $p$$=>
|
|
30
|
+
{setImmediate(async()=>{let $_justFireEvents$$=$justFireEvents$$;$p$$.just_fire_events&&($_justFireEvents$$=$p$$.just_fire_events);let $notificationData$$={_id:$obj$$._id,trang_thai:$trang_thai$$,id_app:$obj$$.id_app,code:$obj$$.ma_ct||$ctrl$$.name,id_link:$obj$$.id_link||$obj$$.id_product,code_link:$obj$$.code_link||$obj$$.colection_name_product,event:$eventName$$,action:$eventName$$.toUpperCase(),data:$options$$.data,key:$options$$.key,not_send_email:$p$$.not_send_email,justFireEvents:$_justFireEvents$$};
|
|
31
|
+
if($justFireEvents$$||$eventName$$.toLowerCase()==="delete")$notificationData$$.title="",$notificationData$$.body="";else{try{$notificationData$$.body=$p$$.body?compileHtml($p$$.body,$obj$$):""}catch($e$$){$notificationData$$.body=$p$$.body,console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml body",$e$$,$obj$$)}try{$notificationData$$.title=stripHtmlTags(compileHtml($options$$.title||$p$$.title||$p$$.content||"",$obj$$))}catch($e$$){$notificationData$$.title=$options$$.title||
|
|
32
|
+
$p$$.title||$p$$.content||"",console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml title",$e$$,$obj$$)}}if($p$$.email_content)try{$notificationData$$.email_content=compileHtml($p$$.email_content,$obj$$)}catch($e$$){$notificationData$$.email_content=$p$$.email_content,console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml email_content",$e$$,$obj$$)}$notificationData$$.title||$notificationData$$.body||($exclude_token$$=null);let $users_will_receive$$=
|
|
33
|
+
$p$$.users;$users_will_receive$$||=[];$options$$.users_will_receive&&$options$$.users_will_receive.length>0&&($users_will_receive$$=$users_will_receive$$.concat($options$$.users_will_receive));$p$$.send_phu_trach&&$obj$$.phu_trach&&($users_will_receive$$=$users_will_receive$$.concat([$obj$$.phu_trach]));if($p$$.send_admin){var $admins_of_user_sandbox_us$$=(await Participant.find({id_app:$obj$$.id_app,admin:!0}).lean()).map($p$$=>$p$$.email);$users_will_receive$$=$users_will_receive$$.concat($admins_of_user_sandbox_us$$)}$p$$.send_attends&&
|
|
34
|
+
$obj$$.attends&&($users_will_receive$$=$users_will_receive$$.concat($obj$$.attends));$p$$.group_id&&($admins_of_user_sandbox_us$$=(await Participant.find({id_app:$obj$$.id_app,group_id:$p$$.group_id}).lean()).map($u$$=>$u$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_of_user_sandbox_us$$));$p$$.send_to_customer&&($obj$$.ma_kh||$obj$$.id_kh)&&($admins_of_user_sandbox_us$$=await mongoose.models.customer.getInfo($obj$$.id_app,{$or:[{ma_kh:$obj$$.ma_kh},{_id:$obj$$.id_kh}]},"of_user"))&&
|
|
35
|
+
($users_will_receive$$=$users_will_receive$$.concat([$admins_of_user_sandbox_us$$]));$p$$.send_to_user_created?$users_will_receive$$=$users_will_receive$$.concat([$obj$$.user_created]):$p$$.send_to_user_created===!1&&($users_will_receive$$=$users_will_receive$$.filter($u$$=>$u$$!==$obj$$.user_created));if($p$$.handle_receivers){$admins_of_user_sandbox_us$$={obj:$obj$$,users_will_receive:$users_will_receive$$,utils};try{let $str_func$$=$p$$.handle_receivers;if($str_func$$.indexOf("async ")<0){$str_func$$.indexOf("return ")<
|
|
36
|
+
0&&($str_func$$=`return ${$str_func$$}`);let $cust_users_will_receive$$=await evalute(`return (async ()=>{
|
|
37
37
|
try{
|
|
38
38
|
${$str_func$$}
|
|
39
39
|
}catch(e){
|
|
@@ -51,17 +51,17 @@ global.getModel("socaitmp").deleteMany({id_ct:$obj$$._id.toString()},function($e
|
|
|
51
51
|
vatvao:$callback$$=>{setImmediate(async()=>{if(global.model_books&&global.model_books.indexOf("vatvao")>=0)return $callback$$();let $old_data$$=await global.getModel("vatvao").find({id_ct:$obj$$._id.toString()}).lean();Vatvao.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.vatvao=$old_data$$);$callback$$($error$$)})})},tdttno:$callback$$=>{setImmediate(async()=>{let $tdtts$$=await Tdttno.find({id_ct:$obj$$._id.toString()},{_id:1,tat_toan:1}).lean();if($tdtts$$.length>
|
|
52
52
|
0){if($tdtts$$.filter($t$$=>$t$$.tat_toan).length>0)return $callback$$(null);$tdtts$$=$tdtts$$.map($t$$=>$t$$._id.toString());if(await Tdttno_tt.findOne({id_tdtt:{$in:$tdtts$$}}))return $callback$$()}let $old_data$$=await global.getModel("tdttno").find({id_ct:$obj$$._id.toString()}).lean();Tdttno.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.tdttno=$old_data$$);$callback$$($error$$)})})},tdttco:$callback$$=>{setImmediate(async()=>{let $tdtts$$=await Tdttco.find({id_ct:$obj$$._id.toString()},
|
|
53
53
|
{_id:1,tat_toan:1}).lean();if($tdtts$$.length>0){if($tdtts$$.filter($t$$=>$t$$.tat_toan).length>0)return $callback$$(null);$tdtts$$=$tdtts$$.map($t$$=>$t$$._id.toString());if(await Tdttco_tt.findOne({id_tdtt:{$in:$tdtts$$}}))return $callback$$()}let $old_data$$=await global.getModel("tdttco").find({id_ct:$obj$$._id.toString()}).lean();Tdttco.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.tdttco=$old_data$$);$callback$$($error$$)})})},tdttno_tt:$callback$$=>{setImmediate(async()=>
|
|
54
|
-
{let $old_data$$=await global.getModel("tdttno_tt").find({id_ct:$obj$$._id.toString()}).lean();Tdttno_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.tdttno_tt=$old_data$$);if($error$$)return $callback$$($error$$);$obj$$.tdttnos?async.
|
|
55
|
-
function($e$$){$e$$&&console.error($e$$);$callback$$()}):$callback$$()})})},tdttco_tt:$callback$$=>{setImmediate(async()=>{let $old_data$$=await global.getModel("tdttco_tt").find({id_ct:$obj$$._id.toString()}).lean();Tdttco_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.tdttco_tt=$old_data$$);if($error$$)return $callback$$($error$$);$obj$$.tdttcos?async.
|
|
56
|
-
{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){$e$$&&console.error($e$$);$callback$$()}):$callback$$()})})}},async function($e$$){if($e$$){for(let $key$$ in $bookbackup$$)$bookbackup$$[$key$$].length>0&&await global.getModel($key$$.toString()).insertMany($bookbackup$$[$key$$]);console.error("
|
|
57
|
-
{$voucher_options$$||($voucher_options$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$ctrl$$.name},{option:1}).lean()||{}).option);if($voucher_options$$&&$voucher_options$$.option_webhooks&&($ctrl$$=$voucher_options$$.option_webhooks.find($w$$=>$w$$.action.toUpperCase()===$action$$.toUpperCase()&&$w$$.url))){$voucher_options$$=path.dirname(__dirname)+"/workers/webhook.js";if(!fs.existsSync($voucher_options$$))return console.error("webhook process is not exitst");
|
|
58
|
-
(global.webhookPool=new StaticPool($voucher_options$$,0,1));global.webhookPool.exec({data:$obj$$,webhook_configs:$ctrl$$},$response$$=>{$response$$.error?console.error("runWebhooks",$response$$.error):console.log($response$$)})}},getNextSequence=async function($id_app$$,$ma_ct$$,$field$$,$callback$$,$options$$={}){var $condition_qct_qcts$$={status:!0,field:$field$$,id_app:$id_app$$,$and:[{$or:[{ma_ct:"#",ma_ct_khac:{$regex:$ma_ct$$,$options:"i"}},{cac_ma_ct:$ma_ct$$.toLowerCase()},
|
|
59
|
-
|
|
60
|
-
await dmqct.find($condition_qct_qcts$$).lean();const $keys$$=Object.keys($options$$),$qct$$=$condition_qct_qcts$$.find($qct$$=>{if($qct$$.dieu_kien&&$keys$$.length>0)try{let $str_func$$=$qct$$.dieu_kien;if($str_func$$.indexOf("async ")>=0)return!1;$str_func$$.indexOf("return ")!==0&&($str_func$$=`return ${$str_func$$}`);return evalute($str_func$$,{...$options$$,master:{...$options$$},moment,numeral})}catch($e$$){return console.error("Error find quyen chung tu",$e$$,$qct$$.dieu_kien)
|
|
61
|
-
let $code$$=$qct$$?$qct$$._id.toString():$field$$;counter.getNextSequence($id_app$$,$ma_ct$$,$code$$,async function($error$$,$rs$$){if($error$$)console.error("auto create code for",$ma_ct$$,$code$$,$error$$),$callback$$($error$$);else{if($qct$$){let $tien_to$$=$qct$$.tien_to||"";if($tien_to$$.indexOf("return ")>=0&&$tien_to$$.indexOf("async ")<0)try{$tien_to$$=evalute($tien_to$$,{...$options$$,moment,numeral}),$tien_to$$=$tien_to$$.toString().trim()}catch($e$$){console.error("getNextSequence"
|
|
62
|
-
$qct$$.hau_to||"";if($hau_to$$.indexOf("return ")>=0&&$hau_to$$.indexOf("async ")<0)try{$hau_to$$=evalute($hau_to$$,{...$options$$,moment,numeral}),$hau_to$$=$hau_to$$.toString().trim()}catch($e$$){console.error("getNextSequence",$e$$)}!$qct$$.tu_dong_reset||$qct$$.tien_to_ht==void 0||$qct$$.hau_to_ht==void 0||$qct$$.tien_to_ht==$tien_to$$&&$qct$$.hau_to_ht==$hau_to$$||($rs$$=1,await counter.updateOne({id_app:$id_app$$,name:$ma_ct$$.toUpperCase(),field:$code$$},{sequence:$rs$$}))
|
|
63
|
-
0)+$rs$$;$error$$=$rs$$.toString();var $den_so_so_ky_tu_them$$=$qct$$.den_so;$den_so_so_ky_tu_them$$||=999999;$den_so_so_ky_tu_them$$=$den_so_so_ky_tu_them$$.toString().length-$error$$.length;$error$$=$den_so_so_ky_tu_them$$>0?($tien_to$$||"")+"0000000000000000000000".substring(0,$den_so_so_ky_tu_them$$)+$error$$+$hau_to$$:($tien_to$$||"")+$error$$+$hau_to$$;$qct$$.so_ht=$rs$$;$qct$$.tien_to_ht=$tien_to$$;$qct$$.hau_to_ht=$hau_to$$;await dmqct.updateOne({_id:$qct$$._id},$qct$$)}else $error
|
|
64
|
-
$rs$$={};$rs$$[$field$$]=$error$$;$callback$$(null,$rs$$)}})};
|
|
54
|
+
{let $old_data$$=await global.getModel("tdttno_tt").find({id_ct:$obj$$._id.toString()}).lean();Tdttno_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.tdttno_tt=$old_data$$);if($error$$)return $callback$$($error$$);$obj$$.tdttnos?async.map($obj$$.tdttnos,function($detail$$,$callback$$){setImmediate(()=>{Tdttno.findOneAndUpdate({_id:$detail$$.id_tdtt},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},
|
|
55
|
+
function($e$$){$e$$&&console.error($e$$);$callback$$()}):$callback$$()})})},tdttco_tt:$callback$$=>{setImmediate(async()=>{let $old_data$$=await global.getModel("tdttco_tt").find({id_ct:$obj$$._id.toString()}).lean();Tdttco_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.tdttco_tt=$old_data$$);if($error$$)return $callback$$($error$$);$obj$$.tdttcos?async.map($obj$$.tdttcos,function($detail$$,$callback$$){setImmediate(()=>{Tdttco.findOneAndUpdate({_id:$detail$$.id_tdtt},
|
|
56
|
+
{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){$e$$&&console.error($e$$);$callback$$()}):$callback$$()})})}},async function($e$$){if($e$$){for(let $key$$ in $bookbackup$$)$bookbackup$$[$key$$].length>0&&await global.getModel($key$$.toString()).insertMany($bookbackup$$[$key$$]);console.error("[controllerUtiles] [deletePost]",$e$$)}$callback$$($e$$,$obj$$,$bookbackup$$)})},runWebhooks=async($ctrl$$,$obj$$,$action$$,
|
|
57
|
+
$voucher_options$$)=>{$voucher_options$$||($voucher_options$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$ctrl$$.name},{option:1}).lean()||{}).option);if($voucher_options$$&&$voucher_options$$.option_webhooks&&($ctrl$$=$voucher_options$$.option_webhooks.find($w$$=>$w$$.action.toUpperCase()===$action$$.toUpperCase()&&$w$$.url))){$voucher_options$$=path.dirname(__dirname)+"/workers/webhook.js";if(!fs.existsSync($voucher_options$$))return console.error("webhook process is not exitst");
|
|
58
|
+
global.webhookPool||(global.webhookPool=new StaticPool($voucher_options$$,0,1));global.webhookPool.exec({data:$obj$$,webhook_configs:$ctrl$$},$response$$=>{$response$$.error?console.error("runWebhooks",$response$$.error):console.log($response$$)})}},getNextSequence=async function($id_app$$,$ma_ct$$,$field$$,$callback$$,$options$$={}){var $condition_qct_qcts$$={status:!0,field:$field$$,id_app:$id_app$$,$and:[{$or:[{ma_ct:"#",ma_ct_khac:{$regex:$ma_ct$$,$options:"i"}},{cac_ma_ct:$ma_ct$$.toLowerCase()},
|
|
59
|
+
{ma_ct:$ma_ct$$.toUpperCase()}]}]};$options$$.id_qct&&($condition_qct_qcts$$._id=$options$$.id_qct);if($options$$.ngay_ct){let $start_date$$=moment($options$$.ngay_ct).startOf("date").toDate(),$end_date$$=moment($options$$.ngay_ct).endOf("date").toDate();$condition_qct_qcts$$.$and.push({$or:[{tu_ngay:null},{tu_ngay:{$lte:$end_date$$}}]});$condition_qct_qcts$$.$and.push({$or:[{den_ngay:null},{den_ngay:{$gte:$start_date$$}}]})}$options$$.toObject&&($options$$=utils.convertObjectIdsToStrings($options$$.toObject()));
|
|
60
|
+
$condition_qct_qcts$$=await dmqct.find($condition_qct_qcts$$).lean();const $keys$$=Object.keys($options$$),$qct$$=$condition_qct_qcts$$.find($qct$$=>{if($qct$$.dieu_kien&&$keys$$.length>0)try{let $str_func$$=$qct$$.dieu_kien;if($str_func$$.indexOf("async ")>=0)return!1;$str_func$$.indexOf("return ")!==0&&($str_func$$=`return ${$str_func$$}`);return evalute($str_func$$,{...$options$$,master:{...$options$$},moment,numeral})}catch($e$$){return console.error("Error find quyen chung tu",$e$$,$qct$$.dieu_kien),
|
|
61
|
+
!1}else return!0});let $code$$=$qct$$?$qct$$._id.toString():$field$$;counter.getNextSequence($id_app$$,$ma_ct$$,$code$$,async function($error$$,$rs$$){if($error$$)console.error("auto create code for",$ma_ct$$,$code$$,$error$$),$callback$$($error$$);else{if($qct$$){let $tien_to$$=$qct$$.tien_to||"";if($tien_to$$.indexOf("return ")>=0&&$tien_to$$.indexOf("async ")<0)try{$tien_to$$=evalute($tien_to$$,{...$options$$,moment,numeral}),$tien_to$$=$tien_to$$.toString().trim()}catch($e$$){console.error("getNextSequence",
|
|
62
|
+
$e$$)}let $hau_to$$=$qct$$.hau_to||"";if($hau_to$$.indexOf("return ")>=0&&$hau_to$$.indexOf("async ")<0)try{$hau_to$$=evalute($hau_to$$,{...$options$$,moment,numeral}),$hau_to$$=$hau_to$$.toString().trim()}catch($e$$){console.error("getNextSequence",$e$$)}!$qct$$.tu_dong_reset||$qct$$.tien_to_ht==void 0||$qct$$.hau_to_ht==void 0||$qct$$.tien_to_ht==$tien_to$$&&$qct$$.hau_to_ht==$hau_to$$||($rs$$=1,await counter.updateOne({id_app:$id_app$$,name:$ma_ct$$.toUpperCase(),field:$code$$},{sequence:$rs$$}));
|
|
63
|
+
$rs$$=($qct$$.tu_so||0)+$rs$$;$error$$=$rs$$.toString();var $den_so_so_ky_tu_them$$=$qct$$.den_so;$den_so_so_ky_tu_them$$||=999999;$den_so_so_ky_tu_them$$=$den_so_so_ky_tu_them$$.toString().length-$error$$.length;$error$$=$den_so_so_ky_tu_them$$>0?($tien_to$$||"")+"0000000000000000000000".substring(0,$den_so_so_ky_tu_them$$)+$error$$+$hau_to$$:($tien_to$$||"")+$error$$+$hau_to$$;$qct$$.so_ht=$rs$$;$qct$$.tien_to_ht=$tien_to$$;$qct$$.hau_to_ht=$hau_to$$;await dmqct.updateOne({_id:$qct$$._id},$qct$$)}else $error$$=
|
|
64
|
+
$rs$$.toString();$rs$$={};$rs$$[$field$$]=$error$$;$callback$$(null,$rs$$)}})};
|
|
65
65
|
function checkReference($model$$,$obj$$,$fn$$,$keys$$){$model$$.referenceKeys?($keys$$||=_.keys($model$$.referenceKeys),async.map($keys$$,function($key$$,$callback$$){setImmediate(()=>{let $ref$$=$model$$.referenceKeys[$key$$];if(!$ref$$)return $callback$$();let $value$$=$obj$$[$key$$];$key$$==="_id"&&($value$$=$value$$.toString());if($value$$==void 0||$value$$==null||$value$$=="")return $callback$$();async.map($ref$$,function($r$$,$cb$$){setImmediate(()=>{let $model$$=mongoose.models[$r$$.model];
|
|
66
66
|
if($model$$){let $query$$={id_app:$obj$$.id_app};var $_w_k$$=$r$$.key;$_w_k$$&&($query$$[$_w_k$$]=$value$$);$r$$.where&&(_.isObject($r$$.where)&&($query$$=Object.assign($query$$,$r$$.where)),_.isFunction($r$$.where)&&($_w_k$$=$r$$.where($obj$$),$query$$=Object.assign($query$$,$_w_k$$)));$model$$.find($query$$).limit(1).lean().then(function($o$$){setImmediate(()=>{if($o$$&&$o$$.length>0){let $msgError$$;$msgError$$=$r$$.error?(new Function("obj","return `"+$r$$.error.replace("{{VALUE}}",$value$$)+
|
|
67
67
|
"`"))($obj$$):ERRORS.ERR_DATA_GENERATED;return $cb$$({error:$msgError$$,code:ERRORS.ERR_DATA_GENERATED_CODE})}$cb$$()})}).catch($error$$=>{$cb$$($error$$)})}else $cb$$()})},function($e$$){if($e$$)return $callback$$($e$$);$callback$$()})})},$error$$=>{$fn$$($error$$)})):$fn$$()}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
const moment=require("moment"),_=require("lodash"),permission=require("../libs/permission"),{JSONParser}=require("../libs/utils"),{getCacheReport,setCacheReport}=require("../libs/redis-cache"),cache_time=5,rptHandler=async($ctrl$$,$req$$,$callback$$,$res$$)=>{const $rptId$$=$ctrl$$.module,$module$$=$ctrl$$.module,$options$$=$ctrl$$.options;let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user);
|
|
2
|
-
{...$req$$.query,...$body$$};try{$query$$.tu_ngay&&($query$$.tu_ngay=moment($query$$.tu_ngay).startOf("date").toDate());$query$$.den_ngay&&($query$$.den_ngay=moment($query$$.den_ngay).endOf("date").toDate());$query$$.tu_ngay_kt&&($query$$.tu_ngay_kt=moment($query$$.tu_ngay_kt).startOf("date").toDate());$query$$.den_ngay_kt&&($query$$.den_ngay_kt=moment($query$$.den_ngay_kt).endOf("date").toDate());$query$$.tu_ngay_gio&&
|
|
3
|
-
($query$$.den_ngay=moment($query$$.den_ngay_gio).toDate());$query$$.tu_ngay_gio_kt&&($query$$.tu_ngay_kt=moment($query$$.tu_ngay_gio_kt).toDate());$query$$.den_ngay_gio_kt&&($query$$.den_ngay_kt=moment($query$$.den_ngay_gio_kt).toDate());for(let $q$$ in $query$$)if(!$query$$[$q$$])delete $query$$[$q$$];else if(_.isString($query$$[$q$$])&&($query$$[$q$$].indexOf("[")>=0||$query$$[$q$$].indexOf("{")>=0))try{$query$$[$q$$]=
|
|
4
|
-
$rptId$$)}$req$$.query=$query$$;const $_query$$=Object.assign({},$query$$);delete $_query$$.id_rpt;delete $_query$$.t;delete $_query$$.jsonstream;delete $_query$$.cType;delete $_query$$.refresh_required;delete $_query$$.isDrilldown;let $getData$$;const $getDataFromServer$$=$ctrl$$.getDataFunc();if($options$$.cache==0||$query$$.refresh_required||$options$$.stream)$getData$$=$getDataFromServer$$;else{let $cacheData$$=
|
|
5
|
-
$options$$.cache_time||cache_time);if($cacheData$$){let $_data$$=$cacheData$$.data;$getData$$=$_data$$?function($req$$,$callback$$){$callback$$(null,$_data$$,!1,!0);setImmediate(()=>{$getDataFromServer$$($req$$,($error$$,$data$$)=>{$data$$&&setCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$_query$$,{data:$data$$,time:new Date,query:$_query$$})})})}:$getDataFromServer$$}else $getData$$=$getDataFromServer$$}let $streamData$$=
|
|
6
|
-
$rows$$=[];$getData$$($req$$,async($error$$,$data$$,$stream$$,$from_cache$$)=>{if($error$$){if(!$sendHeader_yn$$||!$options$$.stream||!$res$$)return $callback$$({error:$error$$.message||$error$$});$_interval$$&&clearInterval($_interval$$);setTimeout(()=>{$res$$.end(JSON.stringify({error:$error$$.toString()}))},1E3)}else if($options$$.stream&&$res$$)switch($stream$$){case "begin":console.log("begin stream"
|
|
7
|
-
($res$$.setHeader("Content-Type","application/json"),$res$$.setHeader("status",200),$res$$.write(""));$sendHeader_yn$$=!0;$_interval$$=setInterval(()=>{console.log("running stream","log",$rptId$$,"...");$res$$.write("")},100);break;case "running":console.log("running stream",$rptId$$,"...");$res$$.write("");break;case "data":console.log("data stream",$rptId$$,"...");_.isArray($data$$)?$rows$$=$rows$$.concat($data$$)
|
|
8
|
-
$prechunk$$?$res$$.write(","+JSON.stringify($data$$)):$res$$.write(JSON.stringify($data$$));$prechunk$$=$data$$;break;case "end":$_interval$$&&clearInterval($_interval$$);setImmediate(()=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},$req$$.user.email,$req$$.user_agent,$req$$)});setImmediate(()=>{setCacheReport($req$$.user.email
|
|
9
|
-
query:$_query$$})});setTimeout(function(){console.log("end stream",$rptId$$,"...");$res$$.end();$callback$$(null,"__end_stream__")},1E3);break;default:console.log($stream$$,$rptId$$,"..."),$res$$.write("")}else setImmediate(()=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},$req$$.user.email,$req$$.user_agent,$req$$)}),$options$$.cache==
|
|
10
|
-
$rptId$$,$_query$$,{data:$data$$,time:new Date,query:$_query$$}),setImmediate(async()=>{let $report$$=$data$$;if(_.isArray($report$$)){if($query$$.fields){let $fields$$=$query$$.fields.split(",");$report$$=$report$$.map($item$$=>{let $_item$$={};$fields$$.forEach($field$$=>{$_item$$[$field$$]=$item$$[$field$$]});return $_item$$})}if($query$$.group_by&&$query$$.group_by_summary)try{$report$$=await $report$$.asyncGroupBy($query$$.group_by.split(",")
|
|
11
|
-
$e$$,$rptId$$,"..."),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}}$callback$$(null,$report$$)})})};$options$$.require_id_app===!1?$streamData$$():permission.hasRight($req$$.params.id_app,$req$$.user.email,$module$$,"view",($error$$,$hr$$)=>{$hr$$?$streamData$$():$callback$$({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n xem b\u00e1o c\u00e1o n\u00e0y"})},{notNeedRight:$notNeedRight$$})}catch($e$$){return $e$$.error
|
|
12
|
-
{handlerWithSession}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$,$res$$)=>{handlerWithSession(rptHandler,$ctrl$$,$req$$,$callback$$,$res$$)};module.exports=withSesssion;
|
|
1
|
+
const moment=require("moment"),_=require("lodash"),permission=require("../libs/permission"),{JSONParser}=require("../libs/utils"),{getCacheReport,setCacheReport}=require("../libs/redis-cache"),cache_time=5,{getCurrentSession}=require("../libs/sessionContext"),rptHandler=async($ctrl$$,$req$$,$callback$$,$res$$)=>{console.log(`\u2705 [rptHanlder] sessionID=${getCurrentSession()?._debugId}`);const $rptId$$=$ctrl$$.module,$module$$=$ctrl$$.module,$options$$=$ctrl$$.options;let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user);
|
|
2
|
+
delete $req$$.query.rpt;let $body$$={};_.isObject($req$$.body)&&($body$$=$req$$.body);let $query$$={...$req$$.query,...$body$$};try{$query$$.tu_ngay&&($query$$.tu_ngay=moment($query$$.tu_ngay).startOf("date").toDate());$query$$.den_ngay&&($query$$.den_ngay=moment($query$$.den_ngay).endOf("date").toDate());$query$$.tu_ngay_kt&&($query$$.tu_ngay_kt=moment($query$$.tu_ngay_kt).startOf("date").toDate());$query$$.den_ngay_kt&&($query$$.den_ngay_kt=moment($query$$.den_ngay_kt).endOf("date").toDate());$query$$.tu_ngay_gio&&
|
|
3
|
+
($query$$.tu_ngay=moment($query$$.tu_ngay_gio).toDate());$query$$.den_ngay_gio&&($query$$.den_ngay=moment($query$$.den_ngay_gio).toDate());$query$$.tu_ngay_gio_kt&&($query$$.tu_ngay_kt=moment($query$$.tu_ngay_gio_kt).toDate());$query$$.den_ngay_gio_kt&&($query$$.den_ngay_kt=moment($query$$.den_ngay_gio_kt).toDate());for(let $q$$ in $query$$)if(!$query$$[$q$$])delete $query$$[$q$$];else if(_.isString($query$$[$q$$])&&($query$$[$q$$].indexOf("[")>=0||$query$$[$q$$].indexOf("{")>=0))try{$query$$[$q$$]=
|
|
4
|
+
JSONParser($query$$[$q$$])}catch($e$$){console.error("[rptHanlder]can't parse json",$query$$[$q$$],$rptId$$)}$req$$.query=$query$$;const $_query$$=Object.assign({},$query$$);delete $_query$$.id_rpt;delete $_query$$.t;delete $_query$$.jsonstream;delete $_query$$.cType;delete $_query$$.refresh_required;delete $_query$$.isDrilldown;let $getData$$;const $getDataFromServer$$=$ctrl$$.getDataFunc();if($options$$.cache==0||$query$$.refresh_required||$options$$.stream)$getData$$=$getDataFromServer$$;else{let $cacheData$$=
|
|
5
|
+
await getCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$_query$$,$options$$.cache_time||cache_time);if($cacheData$$){let $_data$$=$cacheData$$.data;$getData$$=$_data$$?function($req$$,$callback$$){$callback$$(null,$_data$$,!1,!0);setImmediate(()=>{$getDataFromServer$$($req$$,($error$$,$data$$)=>{$data$$&&setCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$_query$$,{data:$data$$,time:new Date,query:$_query$$})})})}:$getDataFromServer$$}else $getData$$=$getDataFromServer$$}let $streamData$$=
|
|
6
|
+
function(){let $prechunk$$,$_interval$$,$sendHeader_yn$$,$rows$$=[];console.log(`\u2705 [rptHanlder] sessionID=${getCurrentSession()?._debugId}`);$getData$$($req$$,async($error$$,$data$$,$stream$$,$from_cache$$)=>{if($error$$){if(!$sendHeader_yn$$||!$options$$.stream||!$res$$)return $callback$$({error:$error$$.message||$error$$});$_interval$$&&clearInterval($_interval$$);setTimeout(()=>{$res$$.end(JSON.stringify({error:$error$$.toString()}))},1E3)}else if($options$$.stream&&$res$$)switch($stream$$){case "begin":console.log("begin stream",
|
|
7
|
+
$rptId$$,"...");$query$$.jsonstream?$res$$.setHeader("Content-Type","application/jsonstream"):($res$$.setHeader("Content-Type","application/json"),$res$$.setHeader("status",200),$res$$.write(""));$sendHeader_yn$$=!0;$_interval$$=setInterval(()=>{console.log("running stream","log",$rptId$$,"...");$res$$.write("")},100);break;case "running":console.log("running stream",$rptId$$,"...");$res$$.write("");break;case "data":console.log("data stream",$rptId$$,"...");_.isArray($data$$)?$rows$$=$rows$$.concat($data$$):
|
|
8
|
+
$rows$$.push($data$$);$query$$.jsonstream?$res$$.write(JSON.stringify($data$$)+"$$end%"):$prechunk$$?$res$$.write(","+JSON.stringify($data$$)):$res$$.write(JSON.stringify($data$$));$prechunk$$=$data$$;break;case "end":$_interval$$&&clearInterval($_interval$$);setImmediate(()=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},$req$$.user.email,$req$$.user_agent,$req$$)});setImmediate(()=>{setCacheReport($req$$.user.email,
|
|
9
|
+
$req$$.user.current_id_app,$rptId$$,$_query$$,{data:$rows$$,time:new Date,query:$_query$$})});setTimeout(function(){console.log("end stream",$rptId$$,"...");$res$$.end();$callback$$(null,"__end_stream__")},1E3);break;default:console.log($stream$$,$rptId$$,"..."),$res$$.write("")}else setImmediate(()=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},$req$$.user.email,$req$$.user_agent,$req$$)}),$options$$.cache==
|
|
10
|
+
0||$from_cache$$||setCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$_query$$,{data:$data$$,time:new Date,query:$_query$$}),setImmediate(async()=>{let $report$$=$data$$;if(_.isArray($report$$)){if($query$$.fields){let $fields$$=$query$$.fields.split(",");$report$$=$report$$.map($item$$=>{let $_item$$={};$fields$$.forEach($field$$=>{$_item$$[$field$$]=$item$$[$field$$]});return $_item$$})}if($query$$.group_by&&$query$$.group_by_summary)try{$report$$=await $report$$.asyncGroupBy($query$$.group_by.split(","),
|
|
11
|
+
$query$$.group_by_summary.split(","))}catch($e$$){return console.error("report groupBy data",$e$$,$rptId$$,"..."),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}}$callback$$(null,$report$$)})})};$options$$.require_id_app===!1?$streamData$$():permission.hasRight($req$$.params.id_app,$req$$.user.email,$module$$,"view",($error$$,$hr$$)=>{$hr$$?$streamData$$():$callback$$({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n xem b\u00e1o c\u00e1o n\u00e0y"})},{notNeedRight:$notNeedRight$$})}catch($e$$){return $e$$.error?
|
|
12
|
+
$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}},{handlerWithSession}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$,$res$$)=>{handlerWithSession(rptHandler,$ctrl$$,$req$$,$callback$$,$res$$)};module.exports=withSesssion;
|
package/server/libs/ckvt.js
CHANGED
|
@@ -2,11 +2,11 @@ const dmvt=global.getModel("dmvt"),sokho=global.getModel("sokho"),hanmucton=glob
|
|
|
2
2
|
module.exports=async($condition$$,$fn$$)=>{$fn$$||=()=>{};!$condition$$.ngay&&$condition$$.den_ngay&&($condition$$.ngay=$condition$$.den_ngay);let $ma_dvcs$$=$condition$$.ma_dvcs,$ma_kho$$=$condition$$.ma_kho,$ma_vt$$=$condition$$.ma_vt;if(_.isString($ma_vt$$)&&$ma_vt$$.indexOf("[")>=0&&$ma_vt$$.indexOf("]")>0)try{$ma_vt$$=JSON.parse($ma_vt$$),$ma_vt$$.length==0&&($ma_vt$$=void 0)}catch($e$$){console.error($e$$)}$ma_vt$$&&_.isArray($ma_vt$$)&&($ma_vt$$={$in:Object.assign($ma_vt$$)});let $id_app$$=
|
|
3
3
|
$condition$$.id_app;if(!await global.getModel("app").findOne({_id:$condition$$.id_app},{ngay_ks:1}).lean())return $fn$$("C\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i");let $ngay$$=moment($condition$$.ngay).endOf("date").toDate(),$ngay_ks$$=(await global.getModel("cdvttheongay").findOne({id_app:$id_app$$,den_ngay:{$lte:moment($ngay$$).startOf("date").toDate()}},{den_ngay:1}).sort({den_ngay:-1}).lean()||{}).den_ngay;$ngay_ks$$&&=moment($ngay_ks$$).endOf("date").toDate();let $ngay_tinh_dn$$=$condition$$.tu_ngay&&
|
|
4
4
|
new Date($condition$$.tu_ngay)<$ngay$$?moment($condition$$.tu_ngay).endOf("date").toDate():$ngay$$,$ngay_dn$$=moment($ngay_tinh_dn$$).startOf("year").toDate(),$nam$$,$cdvt$$;!$ngay_ks$$||$ngay_ks$$<$ngay_dn$$?($cdvt$$=global.getModel("cdvt"),$nam$$=$ngay_tinh_dn$$.getFullYear()):($cdvt$$=global.getModel("cdvttheongay"),$ngay_dn$$=moment($ngay_ks$$).startOf("date").add(1,"days").toDate());return new Promise(($resolve$$,$reject$$)=>{async.parallel({ckcapphat:$callback$$=>{setImmediate(()=>{ckvtcapphat($condition$$,
|
|
5
|
-
($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})},dn:$callback$$=>{setImmediate(()=>{const $c_dk$$={id_app:$id_app$$};$nam$$?$c_dk$$.nam=$nam
|
|
6
|
-
$condition$$.
|
|
7
|
-
($c_dk$$.
|
|
8
|
-
$
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})},dn:$callback$$=>{setImmediate(()=>{const $c_dk$$={id_app:$id_app$$};$nam$$?$c_dk$$.nam=$nam$$:$c_dk$$.den_ngay=$ngay_ks$$;$ma_kho$$&&($c_dk$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($c_dk$$.ma_dvcs=$ma_dvcs$$);$ma_vt$$&&($c_dk$$.ma_vt=$ma_vt$$);$condition$$.ma_lo&&($c_dk$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&($c_dk$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($c_dk$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($c_dk$$.ma_tt2=$condition$$.ma_tt2);
|
|
6
|
+
$condition$$.ma_tt3&&($c_dk$$.ma_tt3=$condition$$.ma_tt3);$cdvt$$.find($c_dk$$).lean().then($results$$=>{$callback$$(null,$results$$)}).catch($error$$=>{$callback$$($error$$)})})},hanmucton:$callback$$=>{setImmediate(()=>{const $c_dk$$={id_app:$id_app$$};$ma_kho$$&&($c_dk$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($c_dk$$.ma_dvcs=$ma_dvcs$$);$ma_vt$$&&($c_dk$$.ma_vt=$ma_vt$$);$condition$$.ma_lo&&($c_dk$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&($c_dk$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&
|
|
7
|
+
($c_dk$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($c_dk$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($c_dk$$.ma_tt3=$condition$$.ma_tt3);hanmucton.find($c_dk$$).lean().then($results$$=>{$callback$$(null,$results$$)}).catch($error$$=>{$callback$$($error$$)})})},ps:$callback$$=>{setImmediate(()=>{const $query$$={id_app:$id_app$$,ngay_ct:{$gte:$ngay_dn$$,$lte:$ngay$$}};$ma_kho$$&&($query$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($query$$.ma_dvcs=$ma_dvcs$$);$ma_vt$$&&($query$$.ma_vt=$ma_vt$$);
|
|
8
|
+
$condition$$.ma_lo&&($query$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&($query$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($query$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($query$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($query$$.ma_tt3=$condition$$.ma_tt3);$condition$$.id_ct&&($query$$.id_ct={$ne:$condition$$.id_ct});sokho.find($query$$,{ma_vt:1,ma_kho:1,ma_tt1:1,ma_tt2:1,ma_tt3:1,sl_nhap:1,sl_xuat:1,sl_nhap_qd:1,sl_xuat_qd:1,tien_nhap:1,tien_xuat:1}).lean().then($pss$$=>
|
|
9
|
+
{$pss$$=$pss$$.map($ps$$=>{$ps$$.sl_nhap=utils.round($ps$$.sl_nhap_qd,4);$ps$$.sl_xuat=utils.round($ps$$.sl_xuat_qd,4);return $ps$$});$callback$$(null,$pss$$)}).catch($error$$=>{$callback$$($error$$)})})},ton_kho_mac_dinh:$callback$$=>{setImmediate(()=>{let $query$$={id_app:$id_app$$,ton_kho_mac_dinh:{$nin:[null,void 0,0]}};$ma_vt$$&&($query$$.ma_vt=$ma_vt$$);dmvt.find($query$$,{ma_vt:1,ton_kho_mac_dinh:1}).lean().then($rs$$=>{$callback$$(null,$rs$$)}).catch($error$$=>{console.error($error$$)})})}},
|
|
10
|
+
($ckcapphat_error$$,$data_results$$)=>{if($ckcapphat_error$$)return $fn$$($ckcapphat_error$$),$reject$$(Error($ckcapphat_error$$));$ckcapphat_error$$=$data_results$$.ckcapphat.map($c$$=>{$c$$.ton00_capphat=$c$$.ton00;$c$$.du00_capphat=$c$$.du00;$c$$.ton00=0;$c$$.du00=0;return $c$$});$data_results$$=$data_results$$.dn.concat($data_results$$.ps).concat($ckcapphat_error$$).concat($data_results$$.ton_kho_mac_dinh).concat($data_results$$.hanmucton);($ckcapphat_error$$=$condition$$.groupBy||$condition$$.groupby)||
|
|
11
|
+
($ckcapphat_error$$=["ma_vt"]);if(_.isString($ckcapphat_error$$))if($ckcapphat_error$$.indexOf("[")>=0)try{$ckcapphat_error$$=JSON.parse($ckcapphat_error$$)}catch($e$$){console.error($e$$)}else $ckcapphat_error$$=$ckcapphat_error$$.split(",");$data_results$$.groupBy($ckcapphat_error$$,"sl_nhap sl_xuat ton00 du00 ton00_capphat du00_capphat tien_nhap tien_xuat ton_kho_mac_dinh ton_toi_thieu ton_toi_da".split(" "),($e$$,$groups$$)=>{if($e$$)return $fn$$($e$$),$reject$$(Error($e$$));setImmediate(()=>
|
|
12
|
+
{for(let $r$$ of $groups$$)$r$$.ton00=utils.round($r$$.ton00+$r$$.sl_nhap-$r$$.sl_xuat,4),$r$$.du00=Math.roundBy($r$$.du00,0)+Math.roundBy($r$$.tien_nhap,0)-Math.roundBy($r$$.tien_xuat,0),$r$$.sl_nhap=0,$r$$.sl_xuat=0,$r$$.tien_nhap=0,$r$$.tien_xuat=0,$r$$.ton=$r$$.ton00-($r$$.ton00_capphat>0?$r$$.ton00_capphat:0),$r$$.du=$r$$.du00-($r$$.du00_capphat>0?$r$$.du00_capphat:0);$fn$$(null,$groups$$);$resolve$$($groups$$)})})})})};
|
package/server/libs/dkvt.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
const sokho=global.getModel("sokho"),async=require("async"),_=require("lodash"),utils=require("./utils"),moment=require("moment")
|
|
2
|
-
module.exports=async function($condition$$,$fn$$){!$condition$$.ngay&&$condition$$.tu_ngay&&($condition$$.ngay=$condition$$.tu_ngay);if($condition$$&&$condition$$.ngay&&$condition$$.id_app){var $
|
|
1
|
+
const sokho=global.getModel("sokho"),async=require("async"),_=require("lodash"),utils=require("./utils"),moment=require("moment");
|
|
2
|
+
module.exports=async function($condition$$,$fn$$){!$condition$$.ngay&&$condition$$.tu_ngay&&($condition$$.ngay=$condition$$.tu_ngay);if($condition$$&&$condition$$.ngay&&$condition$$.id_app){var $ma_dvcs$$=$condition$$.ma_dvcs,$ma_kho$$=$condition$$.ma_kho,$ma_vt$$=$condition$$.ma_vt;_.isArray($ma_vt$$)&&($ma_vt$$={$in:$ma_vt$$});var $id_app$$=$condition$$.id_app;if(!await global.getModel("app").findOne({_id:$condition$$.id_app},{ngay_ks:1}).lean())return $fn$$("C\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i");
|
|
3
3
|
var $ngay$$=moment($condition$$.ngay).startOf("date").toDate(),$ngay_ks$$=(await global.getModel("cdvttheongay").findOne({id_app:$id_app$$,den_ngay:{$lte:moment($ngay$$).startOf("date").toDate()}},{den_ngay:1}).sort({den_ngay:-1}).lean()||{}).den_ngay;$ngay_ks$$&&=moment($ngay_ks$$).endOf("date").toDate();var $ngay_tinh_dn$$=moment($condition$$.ngay).startOf("date").toDate(),$ngay_dn$$=moment($ngay_tinh_dn$$).startOf("year").toDate();if(!$ngay_ks$$||$ngay_ks$$<$ngay_dn$$){var $cdvt$$=global.getModel("cdvt");
|
|
4
|
-
var $nam$$=$ngay_tinh_dn$$.getFullYear()}else $cdvt$$=global.getModel("cdvttheongay"),$ngay_dn$$=moment($ngay_ks$$).startOf("date").add(1,"days").toDate();async.parallel({dn:$callback$$=>{setImmediate(()=>{const $c_dk$$={id_app:$id_app$$};$nam$$?($c_dk$$.nam=$nam$$,console.log("[dkvt] lay cdvt theo n\u0103m kho\u00e1 s\u1ed5"))
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
utils.round($r$$.ton00+$r$$.sl_nhap-$r$$.sl_xuat,4),$r$$.du00=utils.round($r$$.du00,0)+utils.round($r$$.tien_nhap,0)-utils.round($r$$.tien_xuat,0),$r$$.sl_nhap=0,$r$$.sl_xuat=0,$r$$.tien_nhap=0,$r$$.tien_xuat=0;$fn$$(null,$groups$$)})})})}else $fn$$("B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: ngay,id_app")};
|
|
4
|
+
var $nam$$=$ngay_tinh_dn$$.getFullYear()}else $cdvt$$=global.getModel("cdvttheongay"),$ngay_dn$$=moment($ngay_ks$$).startOf("date").add(1,"days").toDate();async.parallel({dn:$callback$$=>{setImmediate(()=>{const $c_dk$$={id_app:$id_app$$};$nam$$?($c_dk$$.nam=$nam$$,console.log("[dkvt] lay cdvt theo n\u0103m kho\u00e1 s\u1ed5")):$c_dk$$.den_ngay=$ngay_ks$$;$ma_vt$$&&($c_dk$$.ma_vt=$ma_vt$$);$ma_kho$$&&($c_dk$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($c_dk$$.ma_dvcs=$ma_dvcs$$);$condition$$.ma_lo&&($c_dk$$.ma_lo=
|
|
5
|
+
$condition$$.ma_lo);$condition$$.han_sd&&($c_dk$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($c_dk$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($c_dk$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($c_dk$$.ma_tt3=$condition$$.ma_tt3);$cdvt$$.find($c_dk$$).lean().then($results$$=>{$results$$.joinModel2($id_app$$,"dmvt",{where:"ma_vt",fields:"tk_vt"},()=>{$callback$$(null,$results$$)})}).catch($error$$=>{$callback$$({message:$error$$.message})})})},ps:$callback$$=>{setImmediate(()=>
|
|
6
|
+
{const $query$$={id_app:$id_app$$,ngay_ct:{$gte:$ngay_dn$$,$lt:$ngay$$}};$ma_vt$$&&($query$$.ma_vt=$ma_vt$$);$ma_kho$$&&($query$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($query$$.ma_dvcs=$ma_dvcs$$);$condition$$.ma_lo&&($query$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&($query$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($query$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($query$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($query$$.ma_tt3=$condition$$.ma_tt3);sokho.find($query$$).lean().then($pss$$=>
|
|
7
|
+
{$pss$$=$pss$$.map($ps$$=>{$ps$$.sl_nhap=utils.round($ps$$.sl_nhap_qd,4);$ps$$.sl_xuat=utils.round($ps$$.sl_xuat_qd,4);return $ps$$});$callback$$(null,$pss$$)}).catch($error$$=>{$callback$$({message:$error$$.message})})})}},async($data_error$$,$groupBy_results$$)=>{if($data_error$$)return $fn$$($data_error$$);$data_error$$=$groupBy_results$$.dn.concat($groupBy_results$$.ps);($groupBy_results$$=$condition$$.groupBy||$condition$$.groupby)||($groupBy_results$$=["ma_vt"]);($groupBy_results$$.indexOf("ma_nvt")>=
|
|
8
|
+
0||$groupBy_results$$.indexOf("ma_nvt2")>=0||$groupBy_results$$.indexOf("ma_nv3")>=0||$groupBy_results$$.indexOf("ma_nvt4")>=0)&&await $data_error$$.asyncJoinModel2($id_app$$,"dmvt",{where:"ma_vt",fields:["ma_nvt","ma_nvt2","ma_nvt3","ma_nvt4"]});if(_.isString($groupBy_results$$))if($groupBy_results$$.indexOf("[")>=0)try{$groupBy_results$$=JSON.parse($groupBy_results$$)}catch($e$$){console.error($e$$)}else $groupBy_results$$=$groupBy_results$$.split(",");$data_error$$.groupBy($groupBy_results$$,"sl_nhap sl_xuat ton00 du00 tien_nhap tien_xuat".split(" "),
|
|
9
|
+
($e$$,$groups$$)=>{if($e$$)return $fn$$($e$$);setImmediate(()=>{for(let $r$$ of $groups$$)$r$$.ton00=utils.round($r$$.ton00+$r$$.sl_nhap-$r$$.sl_xuat,4),$r$$.du00=utils.round($r$$.du00,0)+utils.round($r$$.tien_nhap,0)-utils.round($r$$.tien_xuat,0),$r$$.sl_nhap=0,$r$$.sl_xuat=0,$r$$.tien_nhap=0,$r$$.tien_xuat=0;$fn$$(null,$groups$$)})})})}else $fn$$("B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: ngay,id_app")};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
const {getCurrentSession,runWithSession,isModelExcludedFromSession,isSessionActive}=require("./sessionContext"),DEBUG=process.env.SESSION_DEBUG==="true";function logDebug($prefix$$,$model$$,$method$$,$opts$$={}){DEBUG&&$opts$$.session&&console.log(`[${$prefix$$}] Model=${$model$$?.modelName||"?"} Method=${$method$$} Session=${$opts$$.session?$opts$$.session.id||$opts$$.session.client?.id||"(no id)":"none"}`)}
|
|
1
|
+
const {storage,getCurrentStore,getCurrentSession,runWithSession,isModelExcludedFromSession,isSessionActive}=require("./sessionContext"),DEBUG=process.env.SESSION_DEBUG==="true";function logDebug($prefix$$,$model$$,$method$$,$opts$$={}){DEBUG&&$opts$$.session&&console.log(`[${$prefix$$}] Model=${$model$$?.modelName||"?"} Method=${$method$$} Session=${$opts$$.session?$opts$$.session.id||$opts$$.session.client?.id||"(no id)":"none"}`)}
|
|
2
2
|
const writeMethods="save updateOne updateMany deleteOne deleteMany findOneAndUpdate findOneAndDelete findOneAndRemove insertMany create".split(" "),readMethods="find findOne findById findByIdAndUpdate findByIdAndDelete findByIdAndRemove aggregate count countDocuments distinct".split(" ");
|
|
3
|
-
[...writeMethods,...readMethods].forEach($method$$=>{const $original$$=mongoose.Model.prototype[$method$$];typeof $original$$==="function"&&(mongoose.Model.prototype[$method$$]=function(...$args$$){const $session$$=getCurrentSession(),$lastArg$$=$args$$[$args$$.length-1],$hasCallback$$=typeof $lastArg$$==="function";let $opts$$=$args$$[$hasCallback$$?$args$$.length-2:$args$$.length-1];if(typeof $opts$$!=="object"||Array.isArray($opts$$))$opts$$={},$hasCallback
|
|
4
|
-
$opts$$):$args$$.push($opts$$);!$session$$||$opts$$.session||isModelExcludedFromSession(this.constructor.modelName)?logDebug("NoSession",this,$method$$,{session:$opts$$.session}):isSessionActive($session$$)?($opts$$.session=$session$$,logDebug("AttachSession",this,$method$$,{session:$session$$})):console.warn(`[WARN] ${this.modelName}.${$method$$}(): session \u0111\u00e3 commit, t\u1ef1 \u0111\u1ed9ng b\u1ecf qua.`);$hasCallback$$&&($args$$[$args$$.length-1]=(...$cbArgs$$)=>
|
|
5
|
-
()=>$lastArg$$(...$cbArgs$$)));try{const $result$$=$original$$.apply(this,$args$$);$result$$?.then&&$result$$.then(()=>logDebug("OK",this,$method$$,{session:$opts$$.session})).catch($err$$=>{console.error(`[ERR] ${this.modelName}.${$method$$} Session=${$opts$$.session?.id||"none"}`,$err$$)});return $result$$}catch($err$$){throw console.error(`[THROW] ${this.modelName}.${$method$$}`,$err$$),$err$$;}})});
|
|
6
|
-
originalExec
|
|
7
|
-
this.model,$operation
|
|
8
|
-
|
|
3
|
+
[...writeMethods,...readMethods].forEach($method$$=>{const $original$$=mongoose.Model.prototype[$method$$];typeof $original$$==="function"&&(mongoose.Model.prototype[$method$$]=function(...$args$$){const $session$$=getCurrentSession(),$currentStore$$=getCurrentStore(),$lastArg$$=$args$$[$args$$.length-1],$hasCallback$$=typeof $lastArg$$==="function";let $opts$$=$args$$[$hasCallback$$?$args$$.length-2:$args$$.length-1];if(typeof $opts$$!=="object"||Array.isArray($opts$$))$opts$$={},$hasCallback$$?
|
|
4
|
+
$args$$.splice($args$$.length-1,0,$opts$$):$args$$.push($opts$$);!$session$$||$opts$$.session||isModelExcludedFromSession(this.constructor.modelName)?logDebug("NoSession",this,$method$$,{session:$opts$$.session}):isSessionActive($session$$)?($opts$$.session=$session$$,logDebug("AttachSession",this,$method$$,{session:$session$$})):console.warn(`[WARN] ${this.modelName}.${$method$$}(): session \u0111\u00e3 commit, t\u1ef1 \u0111\u1ed9ng b\u1ecf qua.`);$hasCallback$$&&($args$$[$args$$.length-1]=(...$cbArgs$$)=>
|
|
5
|
+
$currentStore$$?storage.run($currentStore$$,()=>$lastArg$$(...$cbArgs$$)):runWithSession($session$$,()=>$lastArg$$(...$cbArgs$$)));try{const $result$$=$original$$.apply(this,$args$$);$result$$?.then&&$result$$.then(()=>logDebug("OK",this,$method$$,{session:$opts$$.session})).catch($err$$=>{console.error(`[ERR] ${this.modelName}.${$method$$} Session=${$opts$$.session?.id||"none"}`,$err$$)});return $result$$}catch($err$$){throw console.error(`[THROW] ${this.modelName}.${$method$$}`,$err$$),$err$$;}})});
|
|
6
|
+
const originalExec=mongoose.Query.prototype.exec;
|
|
7
|
+
originalExec&&(mongoose.Query.prototype.exec=function(...$args$$){const $session$$=getCurrentSession(),$currentStore$$=getCurrentStore(),$modelName$$=this.model?.modelName||"UnknownModel",$operation$$=this.op||"unknownOp";var $cbIndex_isExcluded$$=isModelExcludedFromSession(this.model);$session$$&&isSessionActive($session$$)&&!$cbIndex_isExcluded$$&&!this.options.session?(this.options.session=$session$$,logDebug("AttachSession(Query)",this.model,$operation$$,{session:$session$$})):$session$$&&!isSessionActive($session$$)?
|
|
8
|
+
logDebug("SkipInvalidSession(Query)",this.model,$operation$$,{session:$session$$}):$cbIndex_isExcluded$$?logDebug("ExcludedModel(Query)",this.model,$operation$$):logDebug("NoSession(Query)",this.model,$operation$$,{session:this.options.session});$cbIndex_isExcluded$$=$args$$.findIndex($a$$=>typeof $a$$==="function");if($cbIndex_isExcluded$$!==-1){const $cb$$=$args$$[$cbIndex_isExcluded$$];$args$$[$cbIndex_isExcluded$$]=(...$cbArgs$$)=>$currentStore$$?storage.run($currentStore$$,()=>$cb$$(...$cbArgs$$)):
|
|
9
|
+
runWithSession($session$$,()=>$cb$$(...$cbArgs$$))}try{const $result$$=originalExec.apply(this,$args$$);$result$$?.then&&$result$$.then(()=>logDebug("OK(Query)",this.model,$operation$$,{session:this.options.session})).catch($err$$=>{console.error(`[ERR(Query)] ${$modelName$$}.${$operation$$} session=${this.options.session?.id||"none"}\n`,$err$$)});return $result$$}catch($err$$){throw console.error(`[THROW(Query)] ${$modelName$$}.${$operation$$}`,$err$$),$err$$;}});console.log("[mongoosePatch] \u2705 Auto session + debug logging enabled");
|
package/server/libs/post-book.js
CHANGED
|
@@ -2,19 +2,20 @@ const async=require("async"),utils=require("./utils"),tontucthoi=global.getModel
|
|
|
2
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$$)}):
|
|
3
3
|
$resolve$$($details$$)})};
|
|
4
4
|
post.prototype.remove=function($callback$$=()=>{}){let $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});async.parallel({sks:$callback$$=>{setImmediate(()=>{$model_book$$.modelName.toLowerCase()==="sokho"?
|
|
5
|
-
global.getModel("sokho").find({id_ct:$master$$._id.toString()}).lean().then(function($sks$$){$callback$$(null,$sks$$)}).catch($e$$=>{$callback$$($e$$)}):$callback$$(null,[])})}},($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);$model_book$$.deleteMany($query_delete$$,function($error$$){if($error$$)return $callback$$($error$$);$rs$$.sks.length>0
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
$
|
|
10
|
-
{_id:1}).lean();!$tdtt$$&&($tdtt$$=await global.getModel("
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
5
|
+
global.getModel("sokho").find({id_ct:$master$$._id.toString()}).lean().then(function($sks$$){$callback$$(null,$sks$$)}).catch($e$$=>{$callback$$($e$$)}):$callback$$(null,[])})}},($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);$model_book$$.deleteMany($query_delete$$,function($error$$){if($error$$)return $callback$$($error$$);$rs$$.sks.length>0&&tontucthoi.tinhTonTucThoi($rs$$.sks,$e$$=>{$e$$&&console.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]",
|
|
6
|
+
$e$$)});$callback$$()})})};
|
|
7
|
+
post.prototype.run=async function($callback$$=()=>{}){if(!this.details)return console.error("details not exists"),$callback$$(null);if(!this.master||!this.master._id)return console.error("[postbook] master is not exists",this.master),$callback$$(null);let $master$$=this.master;$master$$.toObject&&($master$$=$master$$.toObject());let $details$$=await this.runPrepare(this.prepare,this.details),$model_book$$=this.model_book;if($model_book$$.modelName.toLowerCase()==="tdttco"){var $rs$jscomp$1_tdtts_tdtts$$=await global.getModel("tdttco").find({id_ct:$master$$._id.toString()},
|
|
8
|
+
{_id:1,tat_toan:1}).lean();if($rs$jscomp$1_tdtts_tdtts$$.length>0){if($rs$jscomp$1_tdtts_tdtts$$.filter($t$$=>$t$$.tat_toan).length>0)return $callback$$(null);$rs$jscomp$1_tdtts_tdtts$$=$rs$jscomp$1_tdtts_tdtts$$.map($t$$=>$t$$._id.toString());if(await global.getModel("tdttco_tt").findOne({id_tdtt:{$in:$rs$jscomp$1_tdtts_tdtts$$}}))return $callback$$(null)}}if($model_book$$.modelName.toLowerCase()==="tdttno"&&($rs$jscomp$1_tdtts_tdtts$$=await global.getModel("tdttno").find({id_ct:$master$$._id.toString()},
|
|
9
|
+
{_id:1,tat_toan:1}).lean(),$rs$jscomp$1_tdtts_tdtts$$.length>0)){if($rs$jscomp$1_tdtts_tdtts$$.filter($t$$=>$t$$.tat_toan).length>0)return $callback$$(null);$rs$jscomp$1_tdtts_tdtts$$=$rs$jscomp$1_tdtts_tdtts$$.map($t$$=>$t$$._id.toString());if(await global.getModel("tdttno_tt").findOne({id_tdtt:{$in:$rs$jscomp$1_tdtts_tdtts$$}}))return $callback$$(null)}$model_book$$.modelName.toLowerCase()==="tdttco_tt"&&await Promise.all($details$$.filter($d$$=>$d$$.id_hd&&$d$$.id_tdtt).map($detail$$=>(async()=>
|
|
10
|
+
{let $tdtt$$=await global.getModel("tdttco").findOne({_id:$detail$$.id_tdtt},{_id:1}).lean();!$tdtt$$&&($tdtt$$=await global.getModel("tdttco").findOne({id_ct:$detail$$.id_hd},{_id:1}).lean())&&($detail$$.id_tdtt=$tdtt$$._id.toString())})()));$model_book$$.modelName.toLowerCase()==="tdttno_tt"&&await Promise.all($details$$.filter($d$$=>$d$$.id_hd&&$d$$.id_tdtt).map($detail$$=>(async()=>{let $tdtt$$=await global.getModel("tdttno").findOne({_id:$detail$$.id_tdtt},{_id:1}).lean();!$tdtt$$&&($tdtt$$=
|
|
11
|
+
await global.getModel("tdttno").findOne({id_ct:$detail$$.id_hd},{_id:1}).lean())&&($detail$$.id_tdtt=$tdtt$$._id.toString())})()));if($model_book$$.modelName.toLowerCase()==="sokho"||$model_book$$.modelName.toLowerCase()==="sokhott")await $details$$.asyncJoinModel2($master$$.id_app,Dmvt,{where:"ma_vt",fields:"tg_tk"}),$details$$=$details$$.filter($d$$=>$d$$.tg_tk),await $details$$.asyncJoinModel2($master$$.id_app,global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:["tu","mau",
|
|
12
|
+
{he_so_qd:"ty_le_qd"}]}),$details$$.forEach($detail$$=>{$detail$$.ma_kho=$detail$$.ma_kho||$master$$.ma_kho;$detail$$.he_so_qd=$detail$$.he_so_qd||1;$detail$$.mau&&$detail$$.tu?($detail$$.he_so_qd=$detail$$.tu/$detail$$.mau,$detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.tu/$detail$$.mau,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.tu/$detail$$.mau,round)):($detail$$.sl_xuat_qd=($detail$$.sl_xuat||0)*$detail$$.he_so_qd,$detail$$.sl_nhap_qd=($detail$$.sl_nhap||
|
|
13
|
+
0)*$detail$$.he_so_qd)});$model_book$$.modelName.toLowerCase()==="sokhokhongton"&&(await $details$$.asyncJoinModel2($master$$.id_app,Dmvt,{where:"ma_vt",fields:"tg_tk"}),$details$$=$details$$.filter($d$$=>$d$$.tg_tk==0),await $details$$.asyncJoinModel2($master$$.id_app,global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:["tu","mau",{he_so_qd:"ty_le_qd"}]}),$details$$.forEach($detail$$=>{$detail$$.ma_kho=$detail$$.ma_kho||$master$$.ma_kho;$detail$$.he_so_qd=$detail$$.he_so_qd||
|
|
14
|
+
1;$detail$$.mau&&$detail$$.tu?($detail$$.he_so_qd=$detail$$.tu/$detail$$.mau,$detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.tu/$detail$$.mau,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.tu/$detail$$.mau,round)):($detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.he_so_qd,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.he_so_qd,round))}));$model_book$$.modelName.toLowerCase()==="sokhonpp"&&(await $details$$.asyncJoinModel2($master$$.id_app,
|
|
15
|
+
global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:["tu","mau",{he_so_qd:"ty_le_qd"}]}),$details$$.forEach($detail$$=>{$detail$$.ma_kho=$detail$$.ma_kho||$master$$.ma_kho;$detail$$.he_so_qd=$detail$$.he_so_qd||1;$detail$$.mau&&$detail$$.tu?($detail$$.he_so_qd=$detail$$.tu/$detail$$.mau,$detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.tu/$detail$$.mau,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.tu/$detail$$.mau,round)):($detail$$.sl_xuat_qd=
|
|
16
|
+
utils.round(($detail$$.sl_xuat||0)*$detail$$.he_so_qd,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.he_so_qd,round))}));if($model_book$$.modelName.toLowerCase()==="vatra"||$model_book$$.modelName.toLowerCase()==="vatvao")if($rs$jscomp$1_tdtts_tdtts$$=await Promise.all($details$$.filter($r$$=>$r$$.so_hd&&$r$$.so_hd.toUpperCase()!==($master$$.ma_ct||"").toUpperCase()).map($detail$$=>(async()=>{let $v$$=await $model_book$$.findOne({id_app:$master$$.id_app,so_hd:$detail$$.so_hd,
|
|
17
|
+
ma_kh:$detail$$.ma_kh||$master$$.ma_kh,so_seri:$detail$$.so_seri,ky_hieu_hoa_don:$detail$$.ky_hieu_hoa_don,id_ct:{$ne:$master$$._id.toString()}});return $v$$?$v$$.so_hd:""})())),$rs$jscomp$1_tdtts_tdtts$$=$rs$jscomp$1_tdtts_tdtts$$.filter($r$$=>$r$$),$rs$jscomp$1_tdtts_tdtts$$.length>0)return $callback$$(`S\u1ed1 ho\u00e1 \u0111\u01a1n ${$rs$jscomp$1_tdtts_tdtts$$.join(",")} \u0111\u00e3 t\u1ed3n t\u1ea1i`);$details$$=$details$$.map(($detail$$,$line$$)=>{$detail$$.id_ct=$master$$._id.toString();$detail$$.ma_ct=
|
|
18
|
+
$master$$.ma_ct;$detail$$.so_ct=$master$$.so_ct;$detail$$.ngay_ct=$master$$.ngay_ct;for(let $attr$$ in $model_book$$.schema.paths)if($attr$$!="id_ct"&&$attr$$!="_id"&&$attr$$!="__v"&&$attr$$!="date_updated"&&$attr$$!="date_created"){let $v$$=$detail$$[$attr$$];$v$$!==void 0&&$v$$!==null&&$v$$!==""||$v$$===0||$master$$[$attr$$]===void 0||($detail$$[$attr$$]=$master$$[$attr$$])}$detail$$.line=$line$$;delete $detail$$.toObject;delete $detail$$._id;delete $detail$$.__v;return $detail$$});const $self$$=
|
|
19
|
+
this;$self$$.remove($error$$=>{if($error$$)return console.error("error delete data post",$error$$),$callback$$($error$$);if($details$$.length==0)return $callback$$(null,[]);$model_book$$.create($details$$,async($e$$,$rs$$)=>{if($e$$){console.error("\u0110\u00e3 c\u00f3 l\u1ed7i khi postdata",$e$$);var $contr_msg_error$$=$e$$.message||$e$$.error||$e$$.toString();$contr_msg_error$$.indexOf("E11000 duplicate")>=0&&$contr_msg_error$$.indexOf("id_ct_1_line_1")>=0?($rs$$=await $model_book$$.find({id_ct:$master$$._id.toString()}),
|
|
19
20
|
$rs$$.length>0?$callback$$(null,$rs$$):(console.error("error save data post",$e$$,$details$$),$self$$.remove(()=>{$callback$$($e$$)}))):(console.error("error save data post",$e$$,$details$$),$self$$.remove(()=>{$callback$$($e$$)}))}else $master$$.ma_ct?($contr_msg_error$$=global.controllers[$master$$.ma_ct.toUpperCase()])?await $contr_msg_error$$.model.findById($master$$._id)?$callback$$(null,$rs$$):(console.error("Ch\u1ee9ng t\u1eeb kh\u00f4ng t\u1ed3n t\u1ea1i. X\u00f3a s\u1ed5 s\u00e1ch",$master$$._id),
|
|
20
21
|
$self$$.remove(()=>{$callback$$("Ch\u1ee9ng t\u1eeb kh\u00f4ng t\u1ed3n t\u1ea1i")})):(console.log("not found controller",$master$$.ma_ct.toUpperCase()),$callback$$(null,$rs$$)):$callback$$(null,$rs$$),$rs$$&&$model_book$$.modelName.toLowerCase()==="sokho"&&setImmediate(()=>{tontucthoi.tinhTonTucThoi($rs$$,$e$$=>{$e$$&&console.error("L\u1ed7i t\u00ednh t\u1ed3n t\u1ee9c th\u1eddi v\u1eadt t\u01b0",$rs$$,$e$$)})})})})};module.exports=post;
|
|
@@ -6,7 +6,7 @@ $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$$)=>{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$$)}):
|
|
7
7
|
$resolve$$($details$$)})};
|
|
8
8
|
post.prototype.remove=function($callback$$=()=>{}){let $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});async.series({sks:$callback$$=>{setImmediate(()=>{global.getModel("sokho").find({id_ct:$master$$._id.toString()}).lean().then(function($sks$$){$callback$$(null,$sks$$)}).catch($e$$=>
|
|
9
|
-
{$callback$$($e$$)})})}},async($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);await global.getModel("sokho").deleteMany($query_delete$$);await global.getModel("sokhonpp").deleteMany($query_delete$$);await global.getModel("sokhokhongton").deleteMany($query_delete$$);$rs$$.sks.length>0
|
|
9
|
+
{$callback$$($e$$)})})}},async($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);await global.getModel("sokho").deleteMany($query_delete$$);await global.getModel("sokhonpp").deleteMany($query_delete$$);await global.getModel("sokhokhongton").deleteMany($query_delete$$);$rs$$.sks.length>0&&tontucthoi.tinhTonTucThoi($rs$$.sks,$e$$=>{$e$$&&console.error("[post-sokho] T\u00ednh t\u1ed3n t\u1ee9c th\u1eddi sau khi xo\u00e1 sokho c\u1ee7a v\u1eadt t\u01b0",$e$$)});$callback$$()})};
|
|
10
10
|
post.prototype.run=async function($callback$$=()=>{}){if(!this.details)return console.error("details not exists"),$callback$$(null);if(!this.master||!this.master._id)return console.error("masters not exists",this.master),$callback$$(null);let $master$$=this.master;$master$$.toObject&&($master$$=$master$$.toObject());let $details$$=await this.runPrepare(this.prepare,this.details);await $details$$.asyncJoinModel2($master$$.id_app,Dmvt,{where:"ma_vt",setFields:($item$$,$ref$$)=>{$item$$.tk_vt||($item$$.tk_vt=
|
|
11
11
|
$ref$$.tk_vt);$item$$.tk_gv||($item$$.tk_gv=$ref$$.tk_gv);$item$$.tg_tk=$ref$$.tg_tk;$item$$.xk_nvl=$ref$$.xk_nvl}});var $ps_kg_dm_sp_co_dm_sp_xk_nvl$$=$details$$.filter($p$$=>$p$$.xk_nvl&&$p$$.nxt==2);for(var $i$jscomp$1_i$$=0;$i$jscomp$1_i$$<$ps_kg_dm_sp_co_dm_sp_xk_nvl$$.length;$i$jscomp$1_i$$++)$ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].dinh_muc_nvl=await dinhmucsx($master$$.id_app,$ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].ma_vt,$ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].ma_tt1,
|
|
12
12
|
$ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].sl_xuat,$ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].ma_dvt);$details$$=$details$$.filter($d$$=>$d$$.tg_tk||$d$$.dinh_muc_nvl&&$d$$.dinh_muc_nvl.length>0);$ps_kg_dm_sp_co_dm_sp_xk_nvl$$=$details$$.filter($p$$=>$p$$.xk_nvl&&$p$$.dinh_muc_nvl&&$p$$.dinh_muc_nvl.length>0);for($i$jscomp$1_i$$=0;$i$jscomp$1_i$$<$ps_kg_dm_sp_co_dm_sp_xk_nvl$$.length;$i$jscomp$1_i$$++){const $p$$=$ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$];let $he_so_qd$$=1,$qd$$=await global.getModel("dmqddvt").findOne({id_app:$master$$.id_app,
|
|
@@ -1,7 +1,200 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const {AsyncLocalStorage}=require("node:async_hooks")
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
exports.
|
|
1
|
+
/** @fileoverview @preserve Prevent Closure Compiler rename this file */
|
|
2
|
+
'use strict';
|
|
3
|
+
/** @const */ const { AsyncLocalStorage } = require("node:async_hooks");
|
|
4
|
+
|
|
5
|
+
/** @const */ const storage = new AsyncLocalStorage();
|
|
6
|
+
|
|
7
|
+
exports.storage = storage;
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
exports.getCurrentStore = function() {
|
|
11
|
+
const store = storage.getStore();
|
|
12
|
+
return store;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Danh sách các model KHÔNG bao giờ được gắn session
|
|
17
|
+
* (ví dụ: các model ghi log, lịch sử, audit,...)
|
|
18
|
+
*/
|
|
19
|
+
const SESSION_EXCLUDE_MODELS = ["app","log","token","otp","cache", "notification","approve","email",'tontucthoi','listinfo','reportinfo','labelinfo'];
|
|
20
|
+
// ====== Thêm bộ đếm ID ======
|
|
21
|
+
let globalStoreCounter = 0;
|
|
22
|
+
let globalSessionCounter = 0;
|
|
23
|
+
/**
|
|
24
|
+
* Chạy một hàm trong context có session.
|
|
25
|
+
* Mọi câu lệnh Mongoose trong hàm này sẽ được gắn cùng session đó.
|
|
26
|
+
* @param {ClientSession} session - mongoose session
|
|
27
|
+
* @param {Function} fn - async function cần chạy
|
|
28
|
+
*/
|
|
29
|
+
exports.runWithSession = async function (session, fn) {
|
|
30
|
+
|
|
31
|
+
const existingStore = exports.getCurrentStore();
|
|
32
|
+
|
|
33
|
+
// Nếu đã có store rồi thì chỉ chạy trong context đó
|
|
34
|
+
if (existingStore) {
|
|
35
|
+
return fn();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const storeId = ++globalStoreCounter;
|
|
39
|
+
const sessionId = session?._debugId|| `txn-${++globalSessionCounter}`;
|
|
40
|
+
|
|
41
|
+
if (session && !session._debugId) session._debugId = sessionId; // Gắn id cho session để trace
|
|
42
|
+
|
|
43
|
+
console.log(`[runWithSession] start storeId=${storeId}, sessionId=${sessionId}`);
|
|
44
|
+
const context = { session,storeId, afterCommit: [] };
|
|
45
|
+
return storage.run(context, async () => {
|
|
46
|
+
try {
|
|
47
|
+
return await fn();
|
|
48
|
+
} finally {
|
|
49
|
+
//console.log(`[runWithSession] end storeId=${storeId}, sessionId=${sessionId}`);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Hàm bao bọc handler và session
|
|
57
|
+
* @param {*} handler
|
|
58
|
+
* @param {*} ctrl
|
|
59
|
+
* @param {*} req
|
|
60
|
+
* @param {*} callback
|
|
61
|
+
* @param {...any} extraArgs
|
|
62
|
+
*/
|
|
63
|
+
exports.handlerWithSession = async function (handler, ctrl, req, callback, ...extraArgs) {
|
|
64
|
+
const session = await mongoose.startSession();
|
|
65
|
+
|
|
66
|
+
try {
|
|
67
|
+
await exports.runWithSession(session, async () => {
|
|
68
|
+
const store = storage.getStore();
|
|
69
|
+
console.log(`🔥 [handlerWithSession] start transaction storeId=${store?.storeId},sessionId=${store?.session?._debugId}, ctrl=${ctrl.name}`);
|
|
70
|
+
await session.startTransaction();
|
|
71
|
+
|
|
72
|
+
let finished = false;
|
|
73
|
+
|
|
74
|
+
handler(ctrl, req, async (error, result) => {
|
|
75
|
+
if (finished) return;
|
|
76
|
+
finished = true;
|
|
77
|
+
|
|
78
|
+
try {
|
|
79
|
+
if (error) {
|
|
80
|
+
console.error("❌ [handlerWithSession] abort transaction...", ctrl.name, error);
|
|
81
|
+
await session.abortTransaction().catch(() => {});
|
|
82
|
+
callback(error);
|
|
83
|
+
} else {
|
|
84
|
+
console.log("✅ [handlerWithSession] commit transaction...", ctrl.name);
|
|
85
|
+
await session.commitTransaction();
|
|
86
|
+
|
|
87
|
+
// 🔥 Giữ lại danh sách afterCommit trước khi end session
|
|
88
|
+
const store = storage.getStore();
|
|
89
|
+
const afterCommitCallbacks = exports.getAfterCommitList();
|
|
90
|
+
const sid = store?.storeId || "no-store";
|
|
91
|
+
console.log(`[onAfterCommit] running storeId=${sid}, count=${afterCommitCallbacks.length}`);
|
|
92
|
+
|
|
93
|
+
await session.endSession();
|
|
94
|
+
|
|
95
|
+
// 🔥 Chạy callback sau khi session đã đóng
|
|
96
|
+
for (const cb of afterCommitCallbacks) {
|
|
97
|
+
try {
|
|
98
|
+
await cb();
|
|
99
|
+
} catch (err) {
|
|
100
|
+
console.error("[onAfterCommit error]", err);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
callback(null, result);
|
|
105
|
+
}
|
|
106
|
+
} catch (e) {
|
|
107
|
+
console.error("❌ [handlerWithSession] error during commit/abort", e);
|
|
108
|
+
await session.abortTransaction().catch(() => {});
|
|
109
|
+
callback(e);
|
|
110
|
+
} finally {
|
|
111
|
+
await session.endSession().catch(() => {});
|
|
112
|
+
// Xóa session trong store để tránh reuse nhầm
|
|
113
|
+
const store = storage.getStore();
|
|
114
|
+
if (store) store.session = null;
|
|
115
|
+
}
|
|
116
|
+
}, ...extraArgs);
|
|
117
|
+
});
|
|
118
|
+
} catch (e) {
|
|
119
|
+
console.error("❌ [handlerWithSession] abort transaction (outer)...", ctrl?.name, e);
|
|
120
|
+
try {
|
|
121
|
+
await session.abortTransaction().catch(() => {});
|
|
122
|
+
} finally {
|
|
123
|
+
await session.endSession().catch(() => {});
|
|
124
|
+
}
|
|
125
|
+
callback(e);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Thêm callback để chạy sau khi commit.
|
|
132
|
+
* - Nếu không có session => chạy ngay lập tức.
|
|
133
|
+
*/
|
|
134
|
+
exports.onAfterCommit = function (cb) {
|
|
135
|
+
const store = storage.getStore();
|
|
136
|
+
if (store && store.session) {
|
|
137
|
+
store.session.afterCommit = store.session.afterCommit || [];
|
|
138
|
+
store.session.afterCommit.push(cb);
|
|
139
|
+
console.log(`🔥 [onAfterCommit] added event.. storeId=${store.storeId}, count=${store.session.afterCommit.length}`);
|
|
140
|
+
} else {
|
|
141
|
+
// Không có session → chạy ngay
|
|
142
|
+
//console.log("[onAfterCommit] no session, running immediately");
|
|
143
|
+
Promise.resolve()
|
|
144
|
+
.then(cb)
|
|
145
|
+
.catch((err) => console.error("[onAfterCommit immediate error]", err));
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Lấy danh sách afterCommit hiện tại (dùng cho middleware)
|
|
151
|
+
*/
|
|
152
|
+
exports.getAfterCommitList = function () {
|
|
153
|
+
const store = storage.getStore();
|
|
154
|
+
return store && store.session ? store.session.afterCommit || [] : [];
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Chạy một hàm mà KHÔNG gắn session (dù đang trong transaction).
|
|
159
|
+
* Dùng cho các thao tác như ghi log, gửi email, lưu lịch sử...
|
|
160
|
+
* @param {Function} fn - async function cần chạy
|
|
161
|
+
*/
|
|
162
|
+
exports.runWithoutSession = async function (fn) {
|
|
163
|
+
return storage.run({ session: undefined }, fn);
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Lấy session hiện tại trong context.
|
|
168
|
+
* @returns {ClientSession|undefined}
|
|
169
|
+
*/
|
|
170
|
+
exports.getCurrentSession = function () {
|
|
171
|
+
const store = storage.getStore();
|
|
172
|
+
return store ? store.session : undefined;
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Kiểm tra xem model có được loại trừ khỏi session tự động không.
|
|
177
|
+
* @param {String|Model} model - model name hoặc đối tượng model
|
|
178
|
+
* @returns {Boolean}
|
|
179
|
+
*/
|
|
180
|
+
exports.isModelExcludedFromSession = function (model) {
|
|
181
|
+
const name = typeof model === "string" ? model : model?.modelName;
|
|
182
|
+
return !!(name && SESSION_EXCLUDE_MODELS.includes(name));
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Kiểm tra session còn hợp lệ (chưa commit hoặc abort)
|
|
187
|
+
* @param {ClientSession} session
|
|
188
|
+
* @returns {Boolean}
|
|
189
|
+
*/
|
|
190
|
+
exports.isSessionActive = function (session) {
|
|
191
|
+
if (!session) return false;
|
|
192
|
+
try {
|
|
193
|
+
// Một số driver Mongoose không expose state, nên ta kiểm tra gián tiếp:
|
|
194
|
+
return session.inTransaction(); // true nếu đang trong transaction
|
|
195
|
+
} catch {
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
console.log("[sessionContext] ✅ Loaded with model exclude & safety check");
|
package/server/libs/tinhgiatb.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
const ckvt=require("./ckvt"),sokho=global.getModel("sokho"),socai=global.getModel("socai"),dmvt=global.getModel("dmvt"),giatb=global.getModel("giatb"),dmqddvt=global.getModel("dmqddvt"),tinhgiatb1vt=require("./tinhgiatb1vt"),async=require("async"),_=require("lodash"),Controller=require("../controllers/controller"),moment=require("moment");
|
|
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
|
|
3
|
-
$condition$$.
|
|
4
|
-
$condition$$.
|
|
5
|
-
$gia$$.id_app=$id_app$$;$gia$$.ma_kho=$ma_kho$$;$gia$$.status=!0;$callback$$(null,$gia$$)})})},function($error$$,$bang_gia$$){if($error$$)return $fn$$($error$$);$error$$=[];for(let $t$$=$condition$$.tu_thang;$t$$<=$condition$$.den_thang;$t$$++)$error$$.push($t$$);async.map($error$$,function($t$$,$callback$$){async.map($bang_gia$$,function($gia$$,$callback$$){setImmediate(()=>{$gia$$.thang=$t$$;$gia$$.nam=$condition$$.nam;async.series({savetogiatb:function($callback$$){let $query_delete$$=
|
|
6
|
-
ma_vt:$gia$$.ma_vt,nam:$condition$$.nam,thang:$t$$};$ma_kho$$&&($query_delete$$.ma_kho=$ma_kho$$);giatb.deleteMany($query_delete$$,function($error$$){if($error$$)return $callback$$($error$$);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$$($error$$);$callback$$(null)})})},
|
|
7
|
-
$callback$$(null)})},function($error$$){if($error$$)return $fn$$($error$$);let $vouchers_x$$={},$vouchers_n$$={},$ma_vts$$=$bang_gia$$.map($v$$=>$v$$.ma_vt);async.parallel({xuat:function($callback$$){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=$ma_kho$$);sokho.find($query_sokho_x$$).lean().then(function($sks$$){if(!$sks
|
|
8
|
-
$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$$?$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()},
|
|
9
|
-
$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",$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$$($error$$);
|
|
1
|
+
const ckvt=require("./ckvt"),sokho=global.getModel("sokho"),socai=global.getModel("socai"),dmvt=global.getModel("dmvt"),giatb=global.getModel("giatb"),dmqddvt=global.getModel("dmqddvt"),tinhgiatb1vt=require("./tinhgiatb1vt"),async=require("async"),_=require("lodash"),Controller=require("../controllers/controller"),moment=require("moment"),{getCurrentSession}=require("./sessionContext");
|
|
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,$tu_ngay$$=moment(new Date($condition$$.nam,$condition$$.tu_thang-1,15)).startOf("month").toDate(),$den_ngay$$=moment(new Date($condition$$.nam,$condition$$.den_thang-1,15)).endOf("month").toDate(),$id_app$$=
|
|
3
|
+
$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);$condition$$.ma_vt&&($app_query_dmvt$$.ma_vt=$condition$$.ma_vt);
|
|
4
|
+
console.log(`\u2705 [tinhgiatb] t\u00ednh gi\u00e1 trung b\u00ecnh, kho:${$condition$$.ma_kho}, sessionID=${getCurrentSession()?._debugId}`);dmvt.find($app_query_dmvt$$).lean().then(function($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",
|
|
5
|
+
$query$$.ma_vt,$error$$),$callback$$($error$$);$gia$$.id_app=$id_app$$;$gia$$.ma_kho=$ma_kho$$;$gia$$.status=!0;$callback$$(null,$gia$$)})})},function($error$$,$bang_gia$$){if($error$$)return $fn$$($error$$);$error$$=[];for(let $t$$=$condition$$.tu_thang;$t$$<=$condition$$.den_thang;$t$$++)$error$$.push($t$$);async.map($error$$,function($t$$,$callback$$){async.map($bang_gia$$,function($gia$$,$callback$$){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$$){if($error$$)return $callback$$($error$$);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$$($error$$);$callback$$(null)})})},
|
|
7
|
+
function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null)})},function($error$$){if($error$$)return $fn$$($error$$);let $vouchers_x$$={},$vouchers_n$$={},$ma_vts$$=$bang_gia$$.map($v$$=>$v$$.ma_vt);async.parallel({xuat:function($callback$$){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=$ma_kho$$);sokho.find($query_sokho_x$$).lean().then(function($sks$$){if(!$sks$$||
|
|
8
|
+
$sks$$.length===0)return $callback$$(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$$?$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()},
|
|
9
|
+
($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",$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$$($error$$);
|
|
10
10
|
$callback$$(null,$vouchers_x$$)})}).catch($e$$=>{$callback$$($e$$)})})},nhap:function($callback$$){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$$);sokho.find($query_sokho_n$$,function($error$$,$sks$$){if($error$$)return $callback$$($error$$);if(!$sks$$||$sks$$.length===0)return $callback$$(null,$vouchers_n$$);async.map($sks$$,function($sk$$,
|
|
11
11
|
$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$$&&$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$$,
|
|
12
12
|
$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",$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$$($error$$);
|
|
@@ -1,6 +1,174 @@
|
|
|
1
|
-
const tontucthoiScheam=new Schema({
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
const tontucthoiScheam = new Schema({
|
|
2
|
+
id_app: {type: String},
|
|
3
|
+
nam: {type: Number},
|
|
4
|
+
ma_dvcs: {type: String, maxlength: 1024},
|
|
5
|
+
ma_vt: {type: String, uppercase: true, maxlength: 1024},
|
|
6
|
+
ma_kho: {type: String, uppercase: true, maxlength: 32},
|
|
7
|
+
ma_lo: {type: String, default: '', uppercase: true, maxlength: 32},
|
|
8
|
+
han_sd: {type: Date},
|
|
9
|
+
ma_tt1: {type: String, default: '', uppercase: true, maxlength: 32},
|
|
10
|
+
ma_tt2: {type: String, default: '', uppercase: true, maxlength: 32},
|
|
11
|
+
ma_tt3: {type: String, default: '', uppercase: true, maxlength: 32},
|
|
12
|
+
|
|
13
|
+
ton00: {type: Number, default: 0},
|
|
14
|
+
du00: {type: Number, default: 0},
|
|
15
|
+
du_nt00: {type: Number, default: 0},
|
|
16
|
+
|
|
17
|
+
kc_yn:{type:Boolean,default:false},
|
|
18
|
+
|
|
19
|
+
status: {type: Boolean, default: true},
|
|
20
|
+
date_created: {type: Date, default: Date.now},
|
|
21
|
+
date_updated: {type: Date, default: Date.now},
|
|
22
|
+
user_created: {type: String, default: ''},
|
|
23
|
+
user_updated: {type: String, default: ''}
|
|
24
|
+
});
|
|
25
|
+
if((global.configs||{}).createIndexes){
|
|
26
|
+
tontucthoiScheam.index({id_app: 1, nam: 1, ma_dvcs: 1, ma_vt: 1, ma_kho: 1,ma_lo:1,ma_tt1:1,ma_tt2:1,ma_tt3:1},{name:"tontucthoi_index_1"});
|
|
27
|
+
|
|
28
|
+
tontucthoiScheam.index({status: 1});
|
|
29
|
+
tontucthoiScheam.index({user_created: 1,visible_to: 1,visible_to_users: 1});
|
|
30
|
+
}
|
|
31
|
+
const tontucthoi = mongoose.models.tontucthoi || mongoose.model('tontucthoi', tontucthoiScheam);
|
|
32
|
+
|
|
33
|
+
const ckvt = require("../libs/ckvt");
|
|
34
|
+
const _ =require("lodash");
|
|
35
|
+
const {onAfterCommit} = require("../libs/sessionContext");
|
|
36
|
+
|
|
37
|
+
/** * Bộ đệm lưu trữ các hàm debounce đang hoạt động.
|
|
38
|
+
* Key sẽ là: `${id_app}:${ma_vt}`
|
|
39
|
+
*/
|
|
40
|
+
const debouncedCalculators = {};
|
|
41
|
+
const DEBOUNCE_WAIT_MS = 10 * 1000;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Đây là hàm tính toán thực tế, được tách ra.
|
|
45
|
+
* Nó sẽ được gọi bởi hàm debounce.
|
|
46
|
+
* @param {object} sk - Đối tượng sk (giống như sk gốc)
|
|
47
|
+
* @param {string} debouncerKey - Key để xóa chính nó khỏi bộ đệm sau khi chạy
|
|
48
|
+
*/
|
|
49
|
+
async function _runActualCalculation(sk, debouncerKey) {
|
|
50
|
+
//console.log(`[tinhTonTucThoi] 🔥 Bắt đầu chạy tính toán cho: ${debouncerKey}`);
|
|
51
|
+
try {
|
|
52
|
+
let query = {
|
|
53
|
+
id_app: sk.id_app,
|
|
54
|
+
ma_vt: sk.ma_vt
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// 1. Xóa tồn cũ
|
|
58
|
+
await tontucthoi.deleteMany(query);
|
|
59
|
+
|
|
60
|
+
// 2. Chuẩn bị query cho ckvt
|
|
61
|
+
query.groupBy = ["id_app", "ma_vt", "ma_kho", "ma_dvcs", "ma_lo", "ma_tt1", "ma_tt2", "ma_tt3", "han_sd"];
|
|
62
|
+
query.ngay = new Date();
|
|
63
|
+
|
|
64
|
+
// 3. Gọi ckvt (chuyển sang Promise)
|
|
65
|
+
const rs = await new Promise((resolve, reject) => {
|
|
66
|
+
ckvt(query, (e, rs) => e ? reject(e) : resolve(rs));
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
if (!rs || rs.length === 0) {
|
|
70
|
+
//console.log(`[tinhTonTucThoi] Không có kết quả ckvt cho: ${debouncerKey}`);
|
|
71
|
+
// Vẫn cần cập nhật dmvt về 0
|
|
72
|
+
await global.getModel("dmvt").updateOne(
|
|
73
|
+
{ id_app: sk.id_app, ma_vt: sk.ma_vt },
|
|
74
|
+
{ ton_kho_online_hien_tai: 0 }
|
|
75
|
+
);
|
|
76
|
+
return; // Kết thúc
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// 4. Lọc và join
|
|
80
|
+
let validRs = rs.filter(r => r.ma_vt && r.ma_kho && r.id_app);
|
|
81
|
+
|
|
82
|
+
await validRs.asyncJoinModel2(null, global.getModel("dmkho"), {
|
|
83
|
+
where: item => ({ id_app: item.id_app, ma_kho: item.ma_kho }),
|
|
84
|
+
fields: "la_kho_online"
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
if (validRs.length > 0) {
|
|
88
|
+
// 5. Tạo tồn mới
|
|
89
|
+
await tontucthoi.create(validRs);
|
|
90
|
+
|
|
91
|
+
// 6. Cập nhật dmvt
|
|
92
|
+
const ton_kho_online_hien_tai = validRs
|
|
93
|
+
.filter(r => r.la_kho_online)
|
|
94
|
+
.map(r => r.ton00 || 0)
|
|
95
|
+
.reduce((a, b) => a + b, 0);
|
|
96
|
+
|
|
97
|
+
await global.getModel("dmvt").updateOne(
|
|
98
|
+
{ id_app: sk.id_app, ma_vt: sk.ma_vt },
|
|
99
|
+
{ ton_kho_online_hien_tai }
|
|
100
|
+
);
|
|
101
|
+
console.log(`[tinhTonTucThoi] ✅ Cập nhật xong ${sk.ma_vt}, tồn online: ${ton_kho_online_hien_tai}`);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
} catch (e) {
|
|
105
|
+
console.error(`[tinhTonTucThoi] ❌ Lỗi khi tính toán cho ${debouncerKey}:`, e);
|
|
106
|
+
} finally {
|
|
107
|
+
// 🔥 Rất quan trọng: Xóa debouncer khỏi bộ đệm để tránh rò rỉ bộ nhớ
|
|
108
|
+
if (debouncerKey) {
|
|
109
|
+
delete debouncedCalculators[debouncerKey];
|
|
110
|
+
//console.log(`[tinhTonTucThoi] 🧹 Dọn dẹp debouncer cho: ${debouncerKey}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Hàm này giờ chỉ làm nhiệm vụ "lên lịch" (schedule) việc tính toán.
|
|
117
|
+
* Nó sẽ gọi hàm debounce, hàm này sẽ chờ 1 phút sau lệnh gọi CUỐI CÙNG
|
|
118
|
+
* trước khi thực thi `_runActualCalculation`.
|
|
119
|
+
*/
|
|
120
|
+
tontucthoi.tinhTonTucThoi = function(sks, cb) {
|
|
121
|
+
// Đảm bảo cb là một hàm để tránh lỗi
|
|
122
|
+
const finalCallback = cb || function(e) {
|
|
123
|
+
if (e) console.error("[tinhTonTucThoi] Lỗi khi lên lịch:", e);
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
onAfterCommit(() => {
|
|
127
|
+
try {
|
|
128
|
+
if (!_.isArray(sks)) {
|
|
129
|
+
sks = [sks];
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Lọc ra các sk hợp lệ và duy nhất theo app/ma_vt
|
|
133
|
+
// (Nếu gọi 5 lần cho cùng 1 ma_vt, ta chỉ cần lấy sk cuối cùng)
|
|
134
|
+
const uniqueSks = _.uniq(sks.reverse(), false, sk =>
|
|
135
|
+
sk ? `${sk.id_app}:${sk.ma_vt}` : null
|
|
136
|
+
).reverse();
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
for (const sk of uniqueSks) {
|
|
140
|
+
if (!sk || !sk.id_app || !sk.ma_vt) continue;
|
|
141
|
+
|
|
142
|
+
const key = `${sk.id_app}:${sk.ma_vt}`;
|
|
143
|
+
|
|
144
|
+
// Nếu chưa có debouncer cho key này, hãy tạo nó
|
|
145
|
+
if (!debouncedCalculators[key]) {
|
|
146
|
+
//console.log(`[tinhTonTucThoi] ⏳ Tạo debouncer mới cho: ${key} (delay ${DEBOUNCE_WAIT_MS}ms)`);
|
|
147
|
+
|
|
148
|
+
debouncedCalculators[key] = _.debounce(
|
|
149
|
+
// Hàm sẽ được gọi sau khi hết thời gian chờ
|
|
150
|
+
(latestSk) => {
|
|
151
|
+
// latestSk sẽ là giá trị sk của lần gọi CUỐI CÙNG
|
|
152
|
+
_runActualCalculation(latestSk, key);
|
|
153
|
+
},
|
|
154
|
+
DEBOUNCE_WAIT_MS,
|
|
155
|
+
false // false = chạy ở "trailing edge" (sau khi hết thời gian)
|
|
156
|
+
);
|
|
157
|
+
} else {
|
|
158
|
+
//console.log(`[tinhTonTucThoi] 🔄 Reset debouncer cho: ${key}`);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Gọi (hoặc reset) hàm debounce với dữ liệu sk mới nhất
|
|
162
|
+
debouncedCalculators[key](sk);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// 🔥 Quan trọng: Gọi callback ngay lập tức.
|
|
166
|
+
// Hàm này chỉ "lên lịch", nó không chờ phép tính hoàn thành.
|
|
167
|
+
finalCallback(null);
|
|
168
|
+
|
|
169
|
+
} catch (e) {
|
|
170
|
+
finalCallback(e);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
module.exports = tontucthoi;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const tinhgiatb=require("../../libs/tinhgiatb"),controller=require("../../controllers/controllerRPT"),_Notification=global.getModel("notification"),async=require("async"),utils=require("../../libs/utils");
|
|
1
|
+
const tinhgiatb=require("../../libs/tinhgiatb"),controller=require("../../controllers/controllerRPT"),_Notification=global.getModel("notification"),async=require("async"),utils=require("../../libs/utils"),{getCurrentSession}=require("../../libs/sessionContext");
|
|
2
2
|
module.exports=function($router$$){new controller($router$$,"tinhgiatb",async function($req$$,$callback$$){const $query$$=$req$$.query;if(!$query$$.nam||!$query$$.tu_thang||!$query$$.den_thang)return $callback$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: nam,tu_thang,den_thang");var $ds_kho_moment_query_kho$$=require("moment"),$ngay_ks_tu_ngay$$=$ds_kho_moment_query_kho$$([Number($query$$.nam),Number($query$$.tu_thang)-1,1]).startOf("month").toDate();if($ngay_ks_tu_ngay$$=
|
|
3
3
|
await utils.isBookLocked({id_app:$req$$.user.current_id_app,ngay_ct:$ngay_ks_tu_ngay$$}))return $callback$$(`\u0110\u00e3 kh\u00f3a s\u1ed5 \u0111\u1ebfn ng\u00e0y ${$ds_kho_moment_query_kho$$($ngay_ks_tu_ngay$$).format("DD/MM/YYYY")}`);const $id_app$$=$query$$.id_app;$ds_kho_moment_query_kho$$=[];$query$$.tinh_theo_kho&&!$query$$.ma_kho?($ds_kho_moment_query_kho$$={id_app:$id_app$$,status:!0},$ds_kho_moment_query_kho$$=(await global.getModel("dmkho").find($ds_kho_moment_query_kho$$,{ma_kho:1}).sort({stt:1}).lean()).map($r$$=>
|
|
4
|
-
$r$$.ma_kho)):$ds_kho_moment_query_kho$$=[$query$$.ma_kho];async.map($ds_kho_moment_query_kho$$,($ma_kho$$,$callback$$)=>{const $zquery$$=Object.assign({},$query$$);$zquery$$.ma_kho=$ma_kho$$;tinhgiatb($zquery$$,function($error$$){$error$$&&console.error("l\u1ed7i t\u00ednh gia trung b\u00ecnh:",$error$$,$zquery$$);$callback$$($error$$)})},$error$$=>{const $email$$=$req$$.user.email;$error$$?
|
|
5
|
-
$email$$,$error$$.message||$error$$,$error$$.message||$error$$,null,{id_app:$id_app$$},!0,$req$$.access_token,!0),$callback$$($error$$)):(console.info("\u0110\u00e3 t\u00ednh xong gi\u00e1 trung b\u00ecnh. Th\u00f4ng b\u00e1o t\u1edbi",$email$$),_Notification.createNotification($email$$,$email$$,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 t\u00ednh gi\u00e1 trung b\u00ecnh xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 t\u00ednh gi\u00e1 trung b\u00ecnh xong",
|
|
6
|
-
|
|
4
|
+
$r$$.ma_kho)):$ds_kho_moment_query_kho$$=[$query$$.ma_kho];console.log(`\u2705 [tinhgiatb] T\u00ednh gi\u00e1 trung b\u00ecnh, sessionID=${getCurrentSession()?._debugId}`);async.map($ds_kho_moment_query_kho$$,($ma_kho$$,$callback$$)=>{const $zquery$$=Object.assign({},$query$$);$zquery$$.ma_kho=$ma_kho$$;tinhgiatb($zquery$$,function($error$$){$error$$&&console.error("l\u1ed7i t\u00ednh gia trung b\u00ecnh:",$error$$,$zquery$$);$callback$$($error$$)})},$error$$=>{const $email$$=$req$$.user.email;$error$$?
|
|
5
|
+
(console.error("L\u1ed7i khi t\u00ednh gi\u00e1 trung b\u00ecnh",$error$$),_Notification.createNotification($email$$,$email$$,$error$$.message||$error$$,$error$$.message||$error$$,null,{id_app:$id_app$$},!0,$req$$.access_token,!0),$callback$$($error$$)):(console.info("\u0110\u00e3 t\u00ednh xong gi\u00e1 trung b\u00ecnh. Th\u00f4ng b\u00e1o t\u1edbi",$email$$),_Notification.createNotification($email$$,$email$$,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 t\u00ednh gi\u00e1 trung b\u00ecnh xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 t\u00ednh gi\u00e1 trung b\u00ecnh xong",
|
|
6
|
+
null,{id_app:$id_app$$},!0,$req$$.access_token,!0),$callback$$(null))})},{stream:!1,cache:!1,queue:!0,timeout:18E6,waiting_message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. B\u1ea1n c\u00f3 th\u1ec3 chuy\u1ec3n sang trang kh\u00e1c \u0111\u1ec3 l\u00e0m vi\u1ec7c. Khi ch\u01b0\u01a1ng tr\u00ecnh th\u1ef1c hi\u1ec7n xong s\u1ebd g\u1eedi th\u00f4ng b\u00e1o cho b\u1ea1n."})};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
const {runWithSession}=require("./libs/sessionContext.js");
|
|
2
|
-
exports.transactionMiddleware=function($options$$={autoCommit:!0}){return async($req$$,$res$$,$next$$)=>{const $session$$=await mongoose.startSession();let $finished$$=!1;try{await runWithSession($session$$,async()=>{await $session$$.startTransaction();$res$$.on("finish",async()=>{if(!$finished$$){$finished$$=!0;try{$res$$.statusCode<
|
|
3
|
-
await $
|
|
1
|
+
const mongoose=require("mongoose"),{runWithSession,getAfterCommitList}=require("./libs/sessionContext.js");
|
|
2
|
+
exports.transactionMiddleware=function($options$$={autoCommit:!0}){return async($req$$,$res$$,$next$$)=>{const $session$$=await mongoose.startSession();let $finished$$=!1,$committed$$=!1,$afterCommitCallbacks$$=[];try{await runWithSession($session$$,async()=>{await $session$$.startTransaction();const $store$$=require("node:async_hooks").AsyncLocalStorage.prototype.getStore?.call(runWithSession);$store$$&&($store$$.afterCommit=[]);$res$$.on("finish",async()=>{if(!$finished$$){$finished$$=!0;try{$res$$.statusCode<
|
|
3
|
+
400&&$options$$.autoCommit?(await $session$$.commitTransaction(),$committed$$=!0,console.log("[transactionMiddleware] \u2705 Transaction committed")):(await $session$$.abortTransaction(),console.log("[transactionMiddleware] \u26a0\ufe0f Transaction aborted"))}catch($err$$){console.error("[transactionMiddleware] Transaction finalize error:",$err$$)}finally{$afterCommitCallbacks$$=getAfterCommitList();try{await $session$$.endSession(),console.log("[transactionMiddleware] \ud83d\udd12 Session ended")}catch($e$$){console.warn("[transactionMiddleware] Warning: endSession failed:",
|
|
4
|
+
$e$$)}if($committed$$)try{const $callbacks$$=$afterCommitCallbacks$$;if($callbacks$$?.length){console.log(`[transactionMiddleware] \ud83d\udd01 Running ${$callbacks$$.length} afterCommit callbacks...`);for(const $cb$$ of $callbacks$$)try{await Promise.resolve($cb$$())}catch($cbErr$$){console.error("[afterCommit callback error]",$cbErr$$)}}}catch($err$$){console.error("[transactionMiddleware] afterCommit execution error:",$err$$)}}}});await $next$$()})}catch($err$$){$finished$$||($finished$$=!0,await $session$$.abortTransaction().catch(()=>
|
|
5
|
+
{}),await $session$$.endSession().catch(()=>{})),$next$$($err$$)}}};
|