flexbiz-server
Version:
Flexible Server
10 lines (9 loc) • 3.64 kB
JavaScript
const _=require("underscore"),{workerData}=require("worker_threads"),async=require("async");require("../global");const {evalute}=require("../libs/utils"),v8=require("v8"),{postToParent,onParentMessage}=require("./worker-utils");function exec($cong_thuc_func_string$$){$cong_thuc_func_string$$=$cong_thuc_func_string$$.indexOf("return ")<0?`return ${$cong_thuc_func_string$$}`:$cong_thuc_func_string$$;return evalute($cong_thuc_func_string$$)}
function calcGrid4Column($report$$,$column$$,$rowCallback$$,$callback$$){$report$$.filter($r$$=>$r$$.cong_thuc&&!$r$$[`cong_thuc_${$column$$}`]).forEach($r$$=>{$r$$[`cong_thuc_${$column$$}`]=$r$$.cong_thuc});let $string_cong_thucs_old$$="";async.forever($cb$$=>{let $cong_thucs$$=$report$$.filter($r$$=>$r$$[`cong_thuc_${$column$$}`]),$string_cong_thucs$$=$cong_thucs$$.map($r$$=>$r$$[`cong_thuc_${$column$$}`]).join("");if(!$string_cong_thucs$$)return $cb$$(-1);if($string_cong_thucs$$===$string_cong_thucs_old$$)return $cong_thucs$$.forEach($row$$=>
{Logger.error("Formular error",$row$$[`cong_thuc_${$column$$}`],$row$$);let $cong_thuc$$=$row$$[`cong_thuc_${$column$$}`].replace(/(\[\w+\])/g,"0");try{$row$$[$column$$]=exec($cong_thuc$$)}catch($e$$){$row$$[$column$$]=0}$row$$[`cong_thuc_${$column$$}`]=""}),$cb$$(-1);$string_cong_thucs_old$$=$string_cong_thucs$$;$cong_thucs$$.forEach($row$$=>{let $cong_thuc$$=$row$$[`cong_thuc_${$column$$}`];$report$$.filter($_row$$=>$cong_thuc$$.indexOf(`[${$_row$$.ma_so}]`)>=0).forEach($_row$$=>{if($_row$$[`cong_thuc_${$column$$}`])$cong_thuc$$=
$cong_thuc$$.split(`[${$_row$$.ma_so}]`).join("("+$_row$$[`cong_thuc_${$column$$}`]+")");else{let $value$$=0;try{($value$$=Number($_row$$[$column$$]))||($value$$=0)}catch($e$$){$value$$=0,Logger.error("value is not value",$value$$,"of row",$_row$$)}$cong_thuc$$=$cong_thuc$$.split(`[${$_row$$.ma_so}]`).join("("+$value$$+")")}});if($cong_thuc$$.indexOf("[")<0)try{$row$$[$column$$]=exec($cong_thuc$$),$row$$[`cong_thuc_${$column$$}`]="",$rowCallback$$(null,$row$$)}catch($e$$){Logger.error("Error when exec formula",
$e$$.message||$e$$,$cong_thuc$$),$row$$[$column$$]=0,$row$$[`cong_thuc_${$column$$}`]="",$rowCallback$$($e$$.message||$e$$,$row$$)}else $row$$[`cong_thuc_${$column$$}`]=$cong_thuc$$});$cb$$()},()=>{$callback$$()})}
function calcGrid($report$$,$number_columns$$,$callback$$){let $columns$$={};_.isString($number_columns$$)?$number_columns$$.split(",").forEach($c$$=>{$columns$$[$c$$]=()=>{}}):$columns$$=$number_columns$$;async.map(Object.keys($columns$$),($key$$,$cb$$)=>{setImmediate(()=>{calcGrid4Column($report$$,$key$$,$columns$$[$key$$],()=>{$cb$$()})})},()=>{$callback$$($report$$)})}
onParentMessage($msg$$=>{if($msg$$&&_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){Logger.error($e$$);postToParent({error:"msg is not valid"});return}const {report:$report$$,number_columns:$number_columns$$}=$msg$$;calcGrid($report$$,$number_columns$$,$rs$$=>{postToParent({result:$rs$$,id_task:$msg$$.id_task})})});
workerData&&(()=>{let $msg$$=workerData;if(Buffer.isBuffer($msg$$)||$msg$$ instanceof Uint8Array)try{$msg$$=v8.deserialize($msg$$)}catch($e$$){return Logger.error("[Worker] L\u1ed7i deserialize workerData:",$e$$),postToParent({error:"Init workerData failed: "+$e$$.message})}if(_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){return Logger.error($e$$),postToParent({error:"msg is not valid"})}const {report:$report$$,number_columns:$number_columns$$}=$msg$$;$report$$&&$number_columns$$?calcGrid($report$$,
$number_columns$$,$rs$$=>{postToParent({result:$rs$$,id_task:$msg$$.id_task})}):postToParent({error:"msg is not valid",id_task:$msg$$.id_task})})();