UNPKG

flexbiz-server

Version:

Flexible Server

14 lines (13 loc) 6.62 kB
const moment=require("moment"),_=require("lodash"),permission=require("../libs/permission"),{JSONParser}=require("../libs/utils"),{getCacheReport,setCacheReport}=require("../libs/redis-cache"),{executeInTransaction}=require("../libs/sessionContext"),rptHandler=async($ctrl$$,$req$$,$callback$$,$res$$)=>{const $rptId$$=$ctrl$$.module,$module$$=$ctrl$$.module,$options$$=$ctrl$$.options;let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user);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&&($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$$]=JSONParser($query$$[$q$$])}catch($e$$){Logger.error("[rptHanlder]can't parse json", $query$$[$q$$],$rptId$$)}$req$$.query=$query$$;let $limit$$=Number($req$$.query.limit||20)||20,$page$$=Number($req$$.query.page||1)||1,$skip$$=($page$$-1)*$limit$$;$skip$$<0&&($skip$$=0);$query$$.pagination&&Logger.warn("[rptHandler] pagination",{rptId:$rptId$$,limit:$limit$$,page:$page$$,skip:$skip$$,id_session:$query$$.id_session});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($query$$.pagination&&$query$$.id_session&&!$query$$.refresh_required&&!$options$$.stream){Logger.info("[rptHandler] get cache",$rptId$$,$query$$.id_session,"...");let $cacheData$$=await getCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$query$$.id_session,$limit$$,$query$$.page,null);$getData$$=$cacheData$$&&$cacheData$$.pagination?function($req$$,$callback$$){$callback$$(null,$cacheData$$, !1,!0)}:$getDataFromServer$$}else $getData$$=$getDataFromServer$$;let $streamData$$=function(){let $prechunk$$,$_interval$$,$sendHeader_yn$$,$rows$$=[];$getData$$($req$$,async($error$$,$data$$,$stream$$,$from_cache$$)=>{if($error$$){Logger.error(`\u274c [rptHanlder] ${$rptId$$} l\u1ed7i:`,$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":Logger.info("begin stream",$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(()=>{Logger.info("running stream","log",$rptId$$,"...");$res$$.write("")},100);break;case "running":Logger.info("running stream",$rptId$$,"...");$res$$.write("");break; case "data":Logger.info("data stream",$rptId$$,"...");_.isArray($data$$)?$rows$$=$rows$$.concat($data$$):$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$$)});setTimeout(function(){Logger.info("end stream",$rptId$$,"...");$res$$.end();$callback$$(null,"__end_stream__")},1E3);break;default:Logger.info($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$$)}),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(","),$query$$.group_by_summary.split(","))}catch($e$$){return Logger.error("report groupBy data",$e$$,$rptId$$,"..."),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}}if($req$$.query.pagination&&!$from_cache$$)try{let $session$$= await setCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$report$$,JSON.stringify($_query$$)),$data_cache$$=$session$$.data_cache||[],$total$$=$data_cache$$.length;$callback$$(null,{...($session$$.info||{}),id_session:$session$$._id.toString(),data:$data_cache$$.slice($skip$$,$skip$$+$limit$$),pagination:{limit:$limit$$,page:$page$$,total:$total$$,totalPages:Math.ceil($total$$/$limit$$)}})}catch($e$$){Logger.error("[rptHandler] L\u1ed7i cache report",$e$$),$callback$$(null,$report$$)}else $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?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}},rptHandlerAsync=($ctrl$$,$req$$,$res$$)=>new Promise(($resolve$$,$reject$$)=>{rptHandler($ctrl$$,$req$$,($e$$, $rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)},$res$$)}),withSesssion=async($ctrl$$,$req$$,$callback$$,$res$$)=>{if($ctrl$$.options?.useSession)try{const $rs$$=await executeInTransaction(()=>rptHandlerAsync($ctrl$$,$req$$,$res$$));$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}else rptHandler($ctrl$$,$req$$,$callback$$,$res$$)};module.exports=withSesssion;