flexbiz-server
Version:
Flexible Server
11 lines (10 loc) • 4.34 kB
JavaScript
const Vsocai=require("./vsocai"),dstktt=require("./dstktt"),moment=require("moment"),_=require("lodash");
module.exports=async function($condition_getGroupKey$$,$fn$$,$options$$={model:"socai"}){try{if(!$condition_getGroupKey$$||!$condition_getGroupKey$$.ngay||!$condition_getGroupKey$$.id_app)throw Error("ngay and id_app parameter required");const {id_app:$id_app$$,ma_dvcs:$ma_dvcs$$,ma_kho:$ma_kho$$}=$condition_getGroupKey$$;var $initItem_ngay$$=moment($condition_getGroupKey$$.ngay).startOf("date").toDate();const [$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:$initItem_ngay$$}},{den_ngay:1}).sort({den_ngay:-1}).lean()]);if(!$app$$)throw Error("C\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i");let $ngay_ks$$=$lastLockData$$?$lastLockData$$.den_ngay:null;$ngay_ks$$&&=moment($ngay_ks$$).endOf("date").toDate();const $startOfYear$$=moment($initItem_ngay$$).startOf("year").toDate();let $ngay_dn$$,$CdtkModel$$,$queryDauKy$$={id_app:$id_app$$};!$ngay_ks$$||$ngay_ks$$<$startOfYear$$?
($CdtkModel$$=global.getModel("cdtk"),$queryDauKy$$.nam=$initItem_ngay$$.getFullYear(),$ngay_dn$$=$startOfYear$$):($CdtkModel$$=global.getModel("cdtktheongay"),$queryDauKy$$.den_ngay=$ngay_ks$$,$ngay_dn$$=moment($ngay_ks$$).startOf("date").add(1,"days").toDate());let $tkQuery$$=$condition_getGroupKey$$.tk||"";$tkQuery$$=_.isArray($tkQuery$$)?{$regex:$tkQuery$$.map($t$$=>"^"+$t$$).join("|")||"^",$options:"i"}:{$regex:"^"+$tkQuery$$,$options:"i"};let $groupBy$$=$condition_getGroupKey$$.groupBy||["tk"];
if(_.isString($groupBy$$))try{$groupBy$$=$groupBy$$.includes("[")?JSON.parse($groupBy$$):$groupBy$$.split(",")}catch($e$$){$groupBy$$=[$groupBy$$]}$groupBy$$=$groupBy$$.map($k$$=>$k$$.trim());const $accounts$$=await new Promise(($resolve$$,$reject$$)=>{dstktt($id_app$$,$tkQuery$$,($err$$,$accs$$)=>$err$$?$reject$$($err$$):$resolve$$($accs$$))});$ma_dvcs$$&&($queryDauKy$$.ma_dvcs=$ma_dvcs$$);$ma_kho$$&&($queryDauKy$$.ma_kho=$ma_kho$$);$queryDauKy$$.tk={$in:$accounts$$};const $pDauKy$$=$CdtkModel$$.find($queryDauKy$$).lean().exec(),
$queryPhatSinh$$={id_app:$id_app$$,ngay_ct:{$gte:$ngay_dn$$,$lt:$initItem_ngay$$},tk:{$in:$accounts$$}};$ma_dvcs$$&&($queryPhatSinh$$.ma_dvcs=$ma_dvcs$$);$ma_kho$$&&($queryPhatSinh$$.ma_kho=$ma_kho$$);const $pPhatSinh$$=new Promise(($resolve$$,$reject$$)=>{Vsocai.find($queryPhatSinh$$,($err$$,$res$$)=>$err$$?$reject$$($err$$):$resolve$$($res$$),{model:$options$$.model,groupBy:$groupBy$$})}),[$dauKyResults$$,$phatSinhResults$$]=await Promise.all([$pDauKy$$,$pPhatSinh$$]),$dataMap$$=new Map;$condition_getGroupKey$$=
$item$$=>$groupBy$$.map($k$$=>$item$$[$k$$]||"").join("||");$initItem_ngay$$=$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$$=$condition_getGroupKey$$($item$$);if(!$dataMap$$.has($key$$)){const $keyData$$=_.pick($item$$,$groupBy$$);$dataMap$$.set($key$$,$initItem_ngay$$($keyData$$))}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$$=$condition_getGroupKey$$($item$$);if(!$dataMap$$.has($key$$)){const $keyData$$=_.pick($item$$,$groupBy$$);$dataMap$$.set($key$$,$initItem_ngay$$($keyData$$))}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$$;}};