UNPKG

flexbiz-server

Version:

Flexible Server

27 lines (25 loc) 10.3 kB
'use strict';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"); class controllerRPT{constructor($router$$,$rptId$$,$fecthData$$,$options$$={}){this.module=$rptId$$;this.router=$router$$;this.options=$options$$;this.fecthDataFunc=$fecthData$$;this.notNeedRight=async($user$$,$_options$$={})=>{let $nnr$$=$options$$.notNeedRight;_.isFunction($nnr$$)&&($nnr$$=$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(0<=$func_string_rptInfo$$.handle_data_expression_server.indexOf("async "))return $callback$$("async function is not allow");$func_string_rptInfo$$=`return (async ()=>{ try{ ${$func_string_rptInfo$$.handle_data_expression_server} }catch(e){ return {error:e} } })`;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|| $e$$)}}$callback$$(null,$data_response$$)};this.getDataFunc=()=>{console.log("get data from server",$rptId$$,"...");return $options$$.stream?$fecthData$$:($req$$,$callback$$)=>{$fecthData$$($req$$,($e$jscomp$0$$,$data$$)=>{this.handleResult($req$$,{error:$e$jscomp$0$$,result:$data$$},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})}};global.report_controllers[$rptId$$.toUpperCase()]=this;this.base_path=!1===$options$$.require_id_app?"/":"/:id_app/";const $mainRoute$$=async($ip_req$$,$res$$)=>{if($options$$.stream)handlers.rptHandler(this, $ip_req$$,($e$$,$rs$$)=>{if($e$$)return $e$$.error?$res$$.status(500).send($e$$):$res$$.status(500).send({error:$e$$.message||$e$$});$res$$.send($rs$$)},$res$$);else{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$}=$ip_req$$;var $_req_user_agent$$=$ip_req$$.header("user-agent");$ip_req$$=$ip_req$$.headers["x-forwarded-for"]||$ip_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_req$$,files:$files$$},global.reportMainPool&&!global.reportMainPool.fullQueue()&&0!=$options$$.queue){const $id_task$$=`report-${crypto.randomBytes(20).toString("hex")}`;$options$$.waiting_message&&$res$$.send([{message:$options$$.waiting_message,status_task:`${configs.api_url||configs.domain}/task-status/${$id_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($response$$.error)return $res$$.status(400).send($response$$.error); $res$$.send($response$$.result)}})})}else $options$$.waiting_message&&$res$$.send([{message:$options$$.waiting_message}]),handlers.rptHandler(this,$_req_user_agent$$,($e$$,$returnvalue$$)=>{if(!$options$$.waiting_message){if($e$$)return $res$$.status(400).send($e$$);$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$$.headers["x-forwarded-for"]||$ip$jscomp$1_req$$.connection.remoteAddress;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()&& 0!=$options$$.queue){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$$=>{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","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$6_result$$,$returnvalue$$)=>{if($e$jscomp$6_result$$)return $res$$.status(400).send($e$jscomp$6_result$$);$e$jscomp$6_result$$=$returnvalue$$.data;switch($returnvalue$$.type){case "xlsx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats");$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".xlsx");$res$$.end($e$jscomp$6_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$6_result$$,"binary");$res$$.end(null,"binary");break;default:$res$$.send($e$jscomp$6_result$$)}})}catch($e$$){$res$$.status(400).send($e$$)}};$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$$){setImmediate(()=>{try{this.fecthDataFunc($req$$,$callback$$)}catch($e$$){console.error($e$$),$callback$$($e$$.message)}})}createRoute($routeName$$,$callbackRoute_handler$$,$_options$$={method:"GET"}){const $self$$=this;$_options$$.method=$_options$$.method?$_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$$.headers["x-forwarded-for"]||$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()){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$4_returnvalue$$=>{if($response$jscomp$4_returnvalue$$.error)return $res$$.status(400).send($response$jscomp$4_returnvalue$$.error); $response$jscomp$4_returnvalue$$=$response$jscomp$4_returnvalue$$.result;const $result$$=$response$jscomp$4_returnvalue$$.data;switch($response$jscomp$4_returnvalue$$.type){case "xlsx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats");$res$$.setHeader("Content-Disposition","attachment; filename="+$self$$.module+".xlsx");$res$$.end($result$$,"binary");break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition", "attachment; filename="+$self$$.module+".docx");$res$$.write($result$$,"binary");$res$$.end(null,"binary");break;default:$res$$.send($result$$)}})}else handlers.rptCreateRouteHandler(this,$_req$jscomp$2_user_agent$$,($e$jscomp$9_result$$,$returnvalue$$)=>{if($e$jscomp$9_result$$)return $res$$.status(400).send($e$jscomp$9_result$$);$e$jscomp$9_result$$=$returnvalue$$.data;switch($returnvalue$$.type){case "xlsx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats");$res$$.setHeader("Content-Disposition", "attachment; filename="+$self$$.module+".xlsx");$res$$.end($e$jscomp$9_result$$,"binary");break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition","attachment; filename="+$self$$.module+".docx");$res$$.write($e$jscomp$9_result$$,"binary");$res$$.end(null,"binary");break;default:$res$$.send($e$jscomp$9_result$$)}})}catch($e$$){$res$$.status(400).send($e$$)}};"DELETE"==$_options$$.method?this.router.route(`${this.base_path+ this.module}/${$routeName$$}`).delete($callbackRoute_handler$$):"POST"==$_options$$.method?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).post($callbackRoute_handler$$):"PUT"==$_options$$.method?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).put($callbackRoute_handler$$):this.router.route(`${this.base_path+this.module}/${$routeName$$}`).get($callbackRoute_handler$$)}}module.exports=controllerRPT;