flexbiz-server
Version:
Flexible Server
11 lines (10 loc) • 4.48 kB
JavaScript
const xlsx=require("node-xlsx"),{workerData}=require("worker_threads"),_=require("lodash"),v8=require("v8");require("../global");
const {postToParent,onParentMessage}=require("./worker-utils"),smartParseDate=($value$$,$forceParse$$=!1)=>{if($value$$===null||$value$$===void 0||$value$$ instanceof Date)return $value$$;if(typeof $value$$==="string"){var $d$$=$value$$.trim();if(!$d$$)return $value$$;var $matchVN_year$$=$d$$.match(/^(\d{1,2})[/-](\d{1,2})[/-](\d{4})$/);if($matchVN_year$$){const $day$$=parseInt($matchVN_year$$[1]),$month$$=parseInt($matchVN_year$$[2])-1;$matchVN_year$$=parseInt($matchVN_year$$[3]);const $d$$=new Date($matchVN_year$$,
$month$$,$day$$);if($d$$.getFullYear()===$matchVN_year$$&&$d$$.getMonth()===$month$$&&$d$$.getDate()===$day$$)return $d$$}if(/^(\d{4})[/-](\d{1,2})[/-](\d{1,2})$/.test($d$$)&&($d$$=new Date($d$$),!isNaN($d$$.getTime())))return $d$$}return $forceParse$$&&typeof $value$$==="number"&&$value$$>1E4?new Date(($value$$-25569)*86400*1E3):$value$$},normalizeKey=$str$$=>$str$$?$str$$.toString().toLowerCase().trim().replace(/["']/g,"").replace(/[,]/g,"_").replace(/\s+/g,"_").replace(/-/g,"_"):"";
let parse=function($columns_filePath$$,$callback$$,$columns_keys_options$$){Logger.info("[excelParser] Read file excel:",$columns_filePath$$);var $i$$=0,$data_f_map_columns$$={};$columns_keys_options$$&&($columns_keys_options$$.row_header_column&&($i$$=$columns_keys_options$$.row_header_column),$columns_keys_options$$.map_columns&&($data_f_map_columns$$=$columns_keys_options$$.map_columns));try{var $i_obj$$=xlsx.parse($columns_filePath$$,{cellDates:!0,defval:""});if($i_obj$$.length===0||!$i_obj$$[0].data||
$i_obj$$[0].data.length<$i$$+1)return $callback$$("File excel kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u ho\u1eb7c sai d\u00f2ng ti\u00eau \u0111\u1ec1");Logger.info("[excelParser] Parsing excel data...");const $data$$=$i_obj$$[0].data;$columns_filePath$$={};$columns_keys_options$$=[];var $d$$=$data$$[$i$$];for($i_obj$$=0;$i_obj$$<$d$$.length;$i_obj$$++){var $c_i_rawHeader$$=$d$$[$i_obj$$];let $finalKey$$="";if($data_f_map_columns$$["col"+$i_obj$$])$finalKey$$=$data_f_map_columns$$["col"+$i_obj$$],$columns_filePath$$[$finalKey$$]=
$c_i_rawHeader$$||$finalKey$$;else if($c_i_rawHeader$$){let $c_1$$=$c_i_rawHeader$$.lastIndexOf("("),$c_2$$=$c_i_rawHeader$$.lastIndexOf(")");if($c_1$$>0&&$c_2$$>0&&$c_1$$<$c_2$$)$finalKey$$=$c_i_rawHeader$$.substring($c_1$$+1,$c_2$$).trim(),_.has($columns_filePath$$,$finalKey$$)&&($finalKey$$+=$i_obj$$),$columns_filePath$$[$finalKey$$]=$c_i_rawHeader$$.substring(0,$c_1$$).trim();else{$finalKey$$=normalizeKey($c_i_rawHeader$$);if(_.has($columns_filePath$$,$finalKey$$)||!$finalKey$$)$finalKey$$+=$i_obj$$;
$columns_filePath$$[$finalKey$$]=$c_i_rawHeader$$}}else $c_i_rawHeader$$=$finalKey$$="col"+$i_obj$$;$columns_keys_options$$.push($finalKey$$)}$data_f_map_columns$$=[];for($i$$+=1;$i$$<$data$$.length;$i$$++){let $rowData$$=$data$$[$i$$];if($rowData$$&&$rowData$$.length!==0){$d$$={};for($c_i_rawHeader$$=0;$c_i_rawHeader$$<$columns_keys_options$$.length&&!($c_i_rawHeader$$>=$rowData$$.length);$c_i_rawHeader$$++){let $key$$=$columns_keys_options$$[$c_i_rawHeader$$],$val$$=$rowData$$[$c_i_rawHeader$$];
const $keyLower$$=$key$$.toLowerCase(),$isLikelyDateColumn$$=$keyLower$$.includes("ngay")||$keyLower$$.includes("date")||$keyLower$$.includes("han_sd");$d$$[$key$$]=smartParseDate($val$$,$isLikelyDateColumn$$)}$data_f_map_columns$$.push($d$$)}}Logger.info("[excelParser] \u0111\u00e3 parse xong data...");$callback$$(null,$data_f_map_columns$$,$columns_filePath$$)}catch($e$$){Logger.error("[excelParser] Critical Error:",$e$$),$callback$$($e$$.message||"L\u1ed7i kh\u00f4ng x\u00e1c \u0111\u1ecbnh khi \u0111\u1ecdc file Excel")}};
const handleMessage=$rawMsg$$=>{let $msg$$=$rawMsg$$;if(Buffer.isBuffer($rawMsg$$)||$rawMsg$$ instanceof Uint8Array)try{$msg$$=v8.deserialize($rawMsg$$)}catch($e$$){return Logger.error("[Worker] L\u1ed7i deserialize task:",$e$$),postToParent({error:"Deserialization failed"})}if($msg$$){if(_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){Logger.error("JSON Parse Error:",$e$$);postToParent({error:"Message is not valid JSON"});return}$msg$$.filePath&&parse($msg$$.filePath,function($err$$,
$data_f$$,$columns$$){postToParent({error:$err$$,data:$data_f$$,columns:$columns$$,id_task:$msg$$.id_task})},$msg$$.options)}else postToParent({error:"Empty message received"})};onParentMessage(handleMessage);workerData&&handleMessage(workerData);