UNPKG

flexbiz-server

Version:

Flexible Server

12 lines (11 loc) 5.45 kB
'use strict';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$jscomp$0$$,$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(new Date($query$$.tu_ngay)).startOf("date").toDate());$query$$.den_ngay&&($query$$.den_ngay=moment(new Date($query$$.den_ngay)).endOf("date").toDate());$query$$.tu_ngay_kt&&($query$$.tu_ngay_kt=moment(new Date($query$$.tu_ngay_kt)).startOf("date").toDate());$query$$.den_ngay_kt&&($query$$.den_ngay_kt=moment(new Date($query$$.den_ngay_kt)).endOf("date").toDate());for(let $q$$ in $query$$)if(!$query$$[$q$$])delete $query$$[$q$$]; else if(_.isString($query$$[$q$$])&&(0<=$query$$[$q$$].indexOf("[")||0<=$query$$[$q$$].indexOf("{")))try{$query$$[$q$$]=JSONParser($query$$[$q$$])}catch($e$$){console.error("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(0==$options$$.cache||$query$$.refresh_required||$options$$.stream)$getData$$=$getDataFromServer$$;else{let $cacheData$$=await getCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$_query$$,$options$$.cache_time||cache_time);if($cacheData$$){let $_data$$=$cacheData$$.data;$_data$$?(console.log("cache",$rptId$$,$_query$$,"..."),$getData$$=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$$})})})}):$getData$$=$getDataFromServer$$}else $getData$$=$getDataFromServer$$}let $streamData$$=function(){let $prechunk$$,$_interval$$,$sendHeader_yn$$,$rows$$=[];$getData$$($req$$,async($error$$,$data$$,$stream$$,$from_cache$$)=>{if($error$$){if(!$sendHeader_yn$$||!$options$$.stream||!$res$$)return $callback$jscomp$0$$({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",$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$$):$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,$req$$.user.current_id_app,$rptId$$,$_query$$,{data:$rows$$,time:new Date,query:$_query$$})});setTimeout(function(){console.log("end stream",$rptId$$,"...");$res$$.end()},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$$)}),0==$options$$.cache||$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(","),$query$$.group_by_summary.split(","))}catch($e$$){return console.error("report groupBy data",$e$$,$rptId$$,"..."),$e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$})}}$callback$jscomp$0$$(null,$report$$)})})};!1===$options$$.require_id_app?$streamData$$():permission.hasRight($req$$.params.id_app,$req$$.user.email,$module$$,"view", ($error$$,$hr$$)=>{$hr$$?$streamData$$():$callback$jscomp$0$$({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n xem b\u00e1o c\u00e1o n\u00e0y"})},{notNeedRight:$notNeedRight$$})}catch($e$$){return $e$$.error?$callback$jscomp$0$$($e$$):$callback$jscomp$0$$({error:$e$$.message||$e$$})}};module.exports=rptHandler;