UNPKG

flexbiz-server

Version:

Flexible Server

11 lines (10 loc) 4.31 kB
const Vsocai=require("./vsocai"),dstktt=require("./dstktt"),moment=require("moment"),_=require("lodash"); module.exports=async function($condition$$,$fn$$,$options$$={model:"socaitt"}){try{if(!$condition$$||!$condition$$.ngay||!$condition$$.id_app)throw Error("ngay and id_app parameter required");const {id_app:$id_app$$,ma_dvcs:$ma_dvcs$$}=$condition$$,$ngay$$=moment($condition$$.ngay).endOf("date").toDate(),[$app$$,$lastLockData$$]=await Promise.all([global.getModel("app").findOne({_id:$id_app$$},{ngay_ks:1}).lean(),global.getModel("cdtktheongay").findOne({id_app:$id_app$$,den_ngay:{$lte:moment($ngay$$).startOf("date").toDate()}}, {den_ngay:1}).sort({den_ngay:-1}).lean()]);if(!$app$$)throw Error("C\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i");var $getGroupKey_ngay_ks_raw$$=$lastLockData$$?$lastLockData$$.den_ngay:null,$initItem_ngay_ks_formatted$$=$getGroupKey_ngay_ks_raw$$?moment($getGroupKey_ngay_ks_raw$$).endOf("date").toDate():null;const $startOfYear$$=moment($ngay$$).startOf("year").toDate();let $ngay_dn$$,$CdtkModel$$,$queryDauKy$$={id_app:$id_app$$};!$initItem_ngay_ks_formatted$$||$initItem_ngay_ks_formatted$$<$startOfYear$$? ($CdtkModel$$=global.getModel("cdtk"),$queryDauKy$$.nam=$ngay$$.getFullYear(),$ngay_dn$$=$startOfYear$$):($CdtkModel$$=global.getModel("cdtktheongay"),$queryDauKy$$.den_ngay=$initItem_ngay_ks_formatted$$,$ngay_dn$$=moment($getGroupKey_ngay_ks_raw$$).startOf("date").add(1,"days").toDate());let $tkQuery$$=$condition$$.tk||"";$tkQuery$$=_.isArray($tkQuery$$)?{$regex:$tkQuery$$.map($t$$=>"^"+$t$$).join("|")||"^",$options:"i"}:{$regex:"^"+$tkQuery$$,$options:"i"};const $accs$$=await new Promise(($resolve$$, $reject$$)=>{dstktt($id_app$$,$tkQuery$$,($err$$,$res$$)=>$err$$?$reject$$($err$$):$resolve$$($res$$))});let $groupBy$$=$condition$$.groupBy||["tk"];if(_.isString($groupBy$$))try{$groupBy$$=$groupBy$$.includes("[")?JSON.parse($groupBy$$):$groupBy$$.split(",")}catch($e$$){$groupBy$$=[$groupBy$$]}$groupBy$$=$groupBy$$.map($k$$=>$k$$.trim());$queryDauKy$$.tk={$in:$accs$$};$ma_dvcs$$&&($queryDauKy$$.ma_dvcs=$ma_dvcs$$);const $pDauKy$$=$CdtkModel$$.find($queryDauKy$$).lean().exec(),$pPhatSinh$$=(async()=> {const $queryPS$$={id_app:$id_app$$,ngay_ct:{$gte:$ngay_dn$$,$lte:$ngay$$},tk:{$in:$accs$$}};$ma_dvcs$$&&($queryPS$$.ma_dvcs=$ma_dvcs$$);$condition$$.ex_id_ct&&($queryPS$$.id_ct={$ne:$condition$$.ex_id_ct});return new Promise(($resolve$$,$reject$$)=>{Vsocai.find($queryPS$$,($err$$,$res$$)=>$err$$?$reject$$($err$$):$resolve$$($res$$),{model:$options$$.model,groupBy:$groupBy$$})})})(),[$dauKyResults$$,$phatSinhResults$$]=await Promise.all([$pDauKy$$,$pPhatSinh$$]),$dataMap$$=new Map;$getGroupKey_ngay_ks_raw$$= $item$$=>$groupBy$$.map($k$$=>$item$$[$k$$]||"").join("||");$initItem_ngay_ks_formatted$$=$keyData$$=>({...$keyData$$,du_no00:0,du_co00:0,du_no_nt00:0,du_co_nt00:0,ps_no:0,ps_co:0,ps_no_nt:0,ps_co_nt:0});for(const $item$$ of $dauKyResults$$){const $key$$=$getGroupKey_ngay_ks_raw$$($item$$);$dataMap$$.has($key$$)||$dataMap$$.set($key$$,$initItem_ngay_ks_formatted$$(_.pick($item$$,$groupBy$$)));const $current$$=$dataMap$$.get($key$$);$current$$.du_no00+=$item$$.du_no00||0;$current$$.du_co00+=$item$$.du_co00|| 0;$current$$.du_no_nt00+=$item$$.du_no_nt00||0;$current$$.du_co_nt00+=$item$$.du_co_nt00||0}for(const $item$$ of $phatSinhResults$$){const $key$$=$getGroupKey_ngay_ks_raw$$($item$$);$dataMap$$.has($key$$)||$dataMap$$.set($key$$,$initItem_ngay_ks_formatted$$(_.pick($item$$,$groupBy$$)));const $current$$=$dataMap$$.get($key$$);$current$$.ps_no+=$item$$.ps_no||0;$current$$.ps_co+=$item$$.ps_co||0;$current$$.ps_no_nt+=$item$$.ps_no_nt||0;$current$$.ps_co_nt+=$item$$.ps_co_nt||0}const $finalResult$$=Array.from($dataMap$$.values()).map($r$$=> {const $netDebit$$=$r$$.du_no00+$r$$.ps_no-($r$$.du_co00+$r$$.ps_co),$netDebitNt$$=$r$$.du_no_nt00+$r$$.ps_no_nt-($r$$.du_co_nt00+$r$$.ps_co_nt);$netDebit$$>=0?($r$$.du_no00=$netDebit$$,$r$$.du_co00=0):($r$$.du_no00=0,$r$$.du_co00=Math.abs($netDebit$$));$netDebitNt$$>=0?($r$$.du_no_nt00=$netDebitNt$$,$r$$.du_co_nt00=0):($r$$.du_no_nt00=0,$r$$.du_co_nt00=Math.abs($netDebitNt$$));$r$$.ps_no=0;$r$$.ps_co=0;$r$$.ps_no_nt=0;$r$$.ps_co_nt=0;return $r$$});$fn$$&&$fn$$(null,$finalResult$$);return $finalResult$$}catch($error$$){if($fn$$)$fn$$($error$$); else throw $error$$;}};