UNPKG

flexbiz-server

Version:

Flexible Server

30 lines (29 loc) 12.9 kB
'use strict';const _=require("underscore"),async=require("async"),moment=require("moment"),cachedKeys=require("./redis-cache").cachedKeys(),{round}=require("./utils"),lodash=require("lodash");Math.roundBy=round; Date.prototype.nextDay=function($days_of_week_distances$$){if(!$days_of_week_distances$$||0===$days_of_week_distances$$.length)return null;let $d$$=new Date(this.getTime());$days_of_week_distances$$=$days_of_week_distances$$.map($day_of_week_distance$$=>{($day_of_week_distance$$=($day_of_week_distance$$+7-$d$$.getDay())%7)||($day_of_week_distance$$=7);return $day_of_week_distance$$}).sort(($a$$,$b$$)=>$a$$-$b$$);return 0<$days_of_week_distances$$.length?($d$$.setDate($d$$.getDate()+$days_of_week_distances$$[0]), $d$$):null};Array.prototype.csum=function($field$$,$condition$$,$exclude$$){return _.reduce(this,function($sum$$,$row_v$$){if(!_.isMatch($row_v$$,$condition$$)||$exclude$$&&_.isMatch($row_v$$,$exclude$$))return $sum$$;$row_v$$=Number($row_v$$[$field$$]||0)||0;isNaN($row_v$$)&&($row_v$$=0);return $sum$$+$row_v$$},0)}; Array.prototype.cmax=function($field$$,$condition$$){return _.reduce(this,function($max$$,$row$$){let $v$$=$row$$[$field$$];return $condition$$&&!_.isMatch($row$$,$condition$$)||lodash.isUndefined($v$$)?$max$$:$max$$?lodash.isNumber($v$$)?$max$$>$v$$?$max$$:$v$$:lodash.isString($v$$)?1==$v$$.localeCompare($max$$)?$v$$:$max$$:$v$$:$v$$},null)};Array.prototype.reg=function(){if(0==this.length)return"";let $tk$$;this.forEach(function($t$$){""!==$t$$&&($tk$$=$tk$$?$tk$$+"|^"+$t$$:"^"+$t$$)});return $tk$$}; Array.prototype.groupBy=function($fieldkey$$,$fieldsums$$,$fn$$,$options$$){const $self$$=this;setImmediate(()=>{const $groups$$=_.groupBy($self$$,function($item$$){let $key$$="";if(lodash.isArray($fieldkey$$)){for(let $k$$ of $fieldkey$$){let $_key$$=$item$$[$k$$];lodash.isDate($_key$$)&&($_key$$=moment($_key$$).format("YYYY-MM-DD"));!1===$_key$$&&($_key$$="false");$_key$$||0==$_key$$||($_key$$="");$key$$=$key$$||0==$key$$?$key$$+"_"+$_key$$.toString():$_key$$}lodash.isString($key$$)&&($key$$=$key$$.trim()); $key$$||($key$$="ZZZ")}else $key$$=$item$$[$fieldkey$$],lodash.isDate($key$$)&&($key$$=moment($key$$).format("YYYY-MM-DD")),!1===$key$$&&($key$$="false"),$key$$||0==$key$$||($key$$="__");return $key$$});async.map(_.keys($groups$$),function($key$$,$callback$$){setImmediate(()=>{let $value$$=$groups$$[$key$$],$r$$={};if(lodash.isArray($fieldkey$$)&&0<$value$$.length)for(let $k$$ of $fieldkey$$)$r$$[$k$$]=$value$$[0][$k$$],$r$$[$k$$]||0==$r$$[$k$$]||0==$r$$[$k$$]||($r$$[$k$$]="");else $r$$[$fieldkey$$]= $key$$;$fieldsums$$.forEach(function($f$$){lodash.isObject($f$$)?$r$$[$f$$.name]=$value$$.map($v$$=>$v$$[$f$$.value]||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0):$r$$[$f$$]=$value$$.map($v$$=>$v$$[$f$$]||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)});$options$$&&$options$$.fieldmaxs&&$options$$.fieldmaxs.forEach(function($f$$){lodash.isObject($f$$)?$r$$[$f$$.name]=$value$$.cmax($f$$.value):$r$$[$f$$]=$value$$.cmax($f$$)});$callback$$(null,$r$$)})},function($error$$,$result$$){if($error$$)return $fn$$($error$$);$fn$$(null, $result$$)})})};Array.prototype.asyncGroupBy=function($fieldkey$$,$fieldsums$$,$options$$){let $_this$$=this;return new Promise(($resolve$$,$reject$$)=>{$_this$$.groupBy($fieldkey$$,$fieldsums$$,($error$$,$rs$$)=>{if($error$$)return $reject$$($error$$);$resolve$$($rs$$)},$options$$)})}; Array.prototype.joinModel=function($id_app$$,$model$$,$joinFields$$,$fn$$){lodash.isArray($joinFields$$)&&$joinFields$$.forEach($join$$=>{if($join$$.where){let $_where$$={};for(let $key$$ in $join$$.where)$_where$$[$join$$.where[$key$$]]=$key$$;$join$$.where=$_where$$}});lodash.isArray($id_app$$)&&lodash.isArray($model$$)&&$model$$.forEach($join$$=>{if($join$$.where){let $_where$$={};for(let $key$$ in $join$$.where)$_where$$[$join$$.where[$key$$]]=$key$$;$join$$.where=$_where$$}});this.joinModel2($id_app$$, $model$$,$joinFields$$,$fn$$)};const getFields=$fields$$=>{lodash.isArray($fields$$)||($fields$$=[$fields$$]);return $fields$$=$fields$$.map(function($map$$){if(lodash.isObject($map$$)){var $rs$jscomp$1_value$$=$map$$.value;if($map$$.name&&$rs$jscomp$1_value$$)return{[$rs$jscomp$1_value$$]:1};$rs$jscomp$1_value$$={};for(let $key$$ in $map$$)$rs$jscomp$1_value$$[$map$$[$key$$]]=1;return $rs$jscomp$1_value$$}return{[$map$$]:1}}).reduce(($a$$,$b$$)=>({...$a$$,...$b$$}),{})}; Array.prototype.joinModel9=function($id_app$$,$model$jscomp$0$$,$joinFields$$,$fn$$,$options$$={cache:!0}){let $self$$=this,$cache_join$$={};setImmediate(()=>{if(lodash.isArray($id_app$$)){let $model_1$$=$id_app$$,$joinFields_1$$=$model$jscomp$0$$,$fn_1$$=$joinFields$$;$id_app$$=void 0;$model$jscomp$0$$=$model_1$$;$joinFields$$=$joinFields_1$$;$fn$$=$fn_1$$}$joinFields$$&&($joinFields$$=lodash.cloneDeep($joinFields$$));$fn$$||($fn$$=()=>{});let $model_origin$$;lodash.isArray($model$jscomp$0$$)||($model_origin$$= $model$jscomp$0$$);(new Promise($resolve$$=>{setImmediate(()=>{lodash.isArray($joinFields$$)||($joinFields$$=[$joinFields$$]);$joinFields$$.forEach($join$$=>{$join$$.fields_need_get_data||lodash.isArray($model$jscomp$0$$)||$join$$.setFields||$join$$.asyncSetFields||!$join$$.fields||lodash.isFunction($join$$.fields)||($join$$.fields_need_get_data=getFields($join$$.fields))});lodash.isArray($model$jscomp$0$$)?$resolve$$($model$jscomp$0$$):$resolve$$([])})})).then($model$$=>{async.mapSeries($self$$, function($item$$,$callback$jscomp$0$$){setImmediate(()=>{async.mapSeries($joinFields$$,function($join$$,$callback$$){setImmediate(()=>{let $query$$={};if($join$$.where)if(lodash.isFunction($join$$.where))$query$$=$join$$.where($item$$)||{};else{if(lodash.isString($join$$.where)){var $bkey_k$$=$join$$.where;$join$$.where={};$join$$.where[$bkey_k$$]=$bkey_k$$}for(let $akey$$ in $join$$.where)if($bkey_k$$=$join$$.where[$akey$$],lodash.isObject($bkey_k$$)?$query$$[$akey$$]=$bkey_k$$:$query$$[$bkey_k$$]= $item$$[$akey$$],!("_id"!=$bkey_k$$||$item$$[$akey$$]&&global.mongoose.Types.ObjectId.isValid($item$$[$akey$$])))return $callback$$(null)}if($join$$.akey&&$join$$.bkey){if(!("_id"!=$join$$.bkey||$item$$[$join$$.akey]&&global.mongoose.Types.ObjectId.isValid($item$$[$join$$.akey])))return $callback$$(null);$query$$[$join$$.bkey]=$item$$[$join$$.akey]}let $_model$$;($_model$$="function"!==typeof $model_origin$$||$model_origin$$.findOne?$model_origin$$:$model_origin$$($item$$))&&$_model$$.schema&&($_model$$.schema.paths.id_app? $query$$.id_app=$item$$.id_app||$query$$.id_app:delete $query$$.id_app);let $b$$=_.findWhere($model$$,$query$$);(new Promise($resolve$jscomp$0$$=>{if($_model$$&&!$b$$){let $d_session$$="";if($query$$._id)$d_session$$="stp:"+$query$$._id;else{for(let $key$$ in $query$$)"id_app"!==$key$$&&$query$$[$key$$]&&($d_session$$=$d_session$$?$d_session$$+":"+$key$$+":"+$query$$[$key$$]:$key$$+":"+$query$$[$key$$]);$d_session$$=$query$$.id_app?"id_app:"+$query$$.id_app+":"+$d_session$$:($id_app$$||"")+":"+$d_session$$}(new Promise($resolve$$=> {setImmediate(()=>{$options$$.cache&&$d_session$$&&$_model$$.collection&&$_model$$.collection.name&&cachedKeys[$_model$$.collection.name.substring(0,$_model$$.collection.name.length-1)]?global.clientRedis.get($d_session$$,function($err$$,$reply$$){$resolve$$($reply$$)}):$resolve$$()})})).then($rep$$=>{setImmediate(async()=>{if($rep$$)$b$$=JSON.parse($rep$$),$resolve$jscomp$0$$($b$$);else{let $q$$={};for($fields$jscomp$1_key$$ in $query$$)$q$$[$fields$jscomp$1_key$$]=$query$$[$fields$jscomp$1_key$$]; if(0===Object.keys($q$$).length)return $resolve$jscomp$0$$(null);$id_app$$&&($q$$.id_app=$id_app$$);if(""==$q$$._id||$q$$._id&&!global.mongoose.Types.ObjectId.isValid($q$$._id))return $resolve$jscomp$0$$(null);var $fields$jscomp$1_key$$=$join$$.fields_need_get_data;if(lodash.isString($_model$$)){if(!mongoose.models[$_model$$])return $resolve$jscomp$0$$(null);$_model$$=mongoose.models[$_model$$]}try{let $_key$$=`${JSON.stringify($q$$)}-${$fields$jscomp$1_key$$?JSON.stringify($fields$jscomp$1_key$$): ""}`;if($cache_join$$[$_key$$])$b$$=$cache_join$$[$_key$$];else{const $rs$$=await $_model$$.findOne($q$$,$fields$jscomp$1_key$$).lean().exec();$rs$$&&($rs$$._id=$rs$$._id.toString(),$b$$=$rs$$,$cache_join$$[$_key$$]=$b$$)}$resolve$jscomp$0$$($b$$)}catch($e$$){console.error($e$$,$q$$),$resolve$jscomp$0$$($b$$)}}})})}else $resolve$jscomp$0$$($b$$)})).then(()=>{setImmediate(()=>{$b$$||($b$$={});$join$$.fields||$join$$.setFields||$join$$.asyncSetFields?($join$$.fields&&(lodash.isFunction($join$$.fields)? $join$$.fields($item$$,$b$$):(lodash.isArray($join$$.fields)||($join$$.fields=[$join$$.fields]),$join$$.fields.forEach(function($map$$){if(lodash.isObject($map$$)){let $name$$=$map$$.name,$value$$=$map$$.value;if($name$$&&$value$$)$item$$[$name$$]=$b$$[$value$$];else for(let $key$$ in $map$$)$item$$[$key$$]=$b$$[$map$$[$key$$]]}else $item$$[$map$$]=$b$$[$map$$]}))),$join$$.setFields&&$join$$.setFields($item$$,$b$$),$join$$.asyncSetFields?setImmediate(async()=>{try{await $join$$.asyncSetFields($item$$, $b$$,()=>{$callback$$(null)})}catch($e$$){console.error($e$$),$callback$$(null)}}):$callback$$(null)):$callback$$(null)})})})},function($error$$){setImmediate(()=>{if($error$$)return $callback$jscomp$0$$($error$$);$callback$jscomp$0$$()})})})},function($error$$){setImmediate(()=>{$error$$&&console.error($error$$);try{"function"==typeof $fn$$?$fn$$($self$$):console.log("joinmodel fn is not function",typeof $fn$$)}catch($e$$){console.error($e$$,$fn$$)}})})}).catch($error$$=>{console.error($error$$); try{"function"==typeof $fn$$?$fn$$($self$$):console.log("joinmodel fn is not function",typeof $fn$$)}catch($e$$){console.error($e$$,$fn$$)}})})}; Array.prototype.asyncJoinModel2=async function($id_app$$,$model$$,$joinFields$$,$options$$={cache:!0}){let $_this$$=this;if(0<$_this$$.length&&("trangthai"==$model$$||$model$$.collection&&"trangthais"==$model$$.collection.name)){let $rs$jscomp$0$$=await new Promise($resolve$$=>{$_this$$.joinModel9($id_app$$,$model$$,$joinFields$$,$rs$$=>{$resolve$$($rs$$)},$options$$)});$_this$$[0].id_app&&$_this$$[0].ten_trang_thai&&await new Promise($resolve$$=>{$_this$$.filter($r$$=>$r$$.id_app&&$r$$.ten_trang_thai).joinModel9($_this$$[0].id_app, "trangthaiapp",{where:$joinFields$$.where,setFields:($item$$,$ref$$)=>{$ref$$&&$ref$$.ten_trang_thai&&($item$$.ten_trang_thai=$ref$$.ten_trang_thai,$item$$.color=$ref$$.color||$item$$.color)}},$rs$$=>{$resolve$$($rs$$)},$options$$)});return $rs$jscomp$0$$}return new Promise($resolve$$=>{$_this$$.joinModel9($id_app$$,$model$$,$joinFields$$,$rs$$=>{$resolve$$($rs$$)},$options$$)})}; Array.prototype.joinModel2=function($id_app$$,$model$$,$joinFields$$,$fn$$,$options$$={cache:!0}){0<this.length&&!lodash.isArray($id_app$$)&&("string"==typeof $model$$||$model$$.collection)?this.asyncJoinModel2($id_app$$,$model$$,$joinFields$$,$options$$).then($rs$$=>{$fn$$&&$fn$$($rs$$)}):this.joinModel9($id_app$$,$model$$,$joinFields$$,$fn$$,$options$$)}; Array.prototype.crossJoin=function($otherArray$$,$where$$={},$fn$$){setImmediate(()=>{let $newArray$$=[];for(let $e1$$ of this){const $_otherArray$$=$otherArray$$.filter($otherItem$$=>{if(_.isArray($where$$))for(let $key$$ of $where$$){if($e1$$[$key$$]!=$otherItem$$[$key$$])return!1}else for(let $key$$ in $where$$)if($e1$$[$key$$]!=$otherItem$$[$where$$[$key$$]])return!1;return!0});if(0===$_otherArray$$.length)$newArray$$.push($e1$$);else for(let $item$$ of $_otherArray$$)$newArray$$.push({...$e1$$, ...$item$$})}$fn$$($newArray$$)})};Array.prototype.asyncCrossJoin=function($otherArray$$,$where$$){let $_this$$=this;return new Promise($resolve$$=>{$_this$$.crossJoin($otherArray$$,$where$$,$rs$$=>{$resolve$$($rs$$)})})}; Array.prototype.pivot=function($rowFields$$,$colPivot$$,$colSum$$,$fn$$,$options$$={},$log$$=()=>{}){setImmediate(()=>{$log$$("pivot:start");this.groupBy($colPivot$$,[],($e$jscomp$0$$,$colFields$$)=>{$log$$("pivot:group by col");$colFields$$=_.pluck($colFields$$,$colPivot$$);this.groupBy($rowFields$$,[],($e$$,$report$$)=>{setImmediate(()=>{$log$$("pivot:group by row");for(let $r$$ of $report$$)for(let $c$$ of $colFields$$){let $w$$={};$w$$[$colPivot$$]=$c$$;$rowFields$$.forEach(function($rf$$){$w$$[$rf$$]= $r$$[$rf$$]});lodash.isArray($colSum$$)?$colSum$$.forEach($cs$$=>{$r$$[$c$$.toString()+$cs$$]=this.csum($cs$$,$w$$)}):$r$$[$c$$.toString()+$colSum$$]=this.csum($colSum$$,$w$$);$options$$.colMax&&(lodash.isArray($options$$.colMax)?$options$$.colMax.forEach($cs$$=>{$r$$[$c$$.toString()+$cs$$]=this.cmax($cs$$,$w$$)}):$r$$[$c$$.toString()+$options$$.colMax]=this.cmax($options$$.colMax,$w$$))}$log$$("pivot:finish");$fn$$(null,{data:$report$$,cols:$colFields$$})})},$options$$)})})}; Array.prototype.asyncPivot=function($rowFields$$,$colPivot$$,$colSum$$,$options$$={},$log$$=()=>{}){let $_this$$=this;return new Promise(($resolve$$,$reject$$)=>{$_this$$.pivot($rowFields$$,$colPivot$$,$colSum$$,($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)},$options$$,$log$$)})};