flexbiz-server 12.6.13 → 12.6.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +439 -4
- package/package.json +4 -3
- package/server/agents/agents.js +1 -0
- package/server/agents/ai_memory_manager.js +6 -0
- package/server/agents/ceoAgent.js +43 -0
- package/server/agents/chatController.js +6 -0
- package/server/agents/cskhAgent.js +43 -0
- package/server/agents/flowAgent.js +43 -0
- package/server/agents/prompts/ceo.js +2 -0
- package/server/agents/prompts/flow.js +2 -0
- package/server/agents/staffAgent.js +44 -0
- package/server/agents/tools/financeTools.js +57 -0
- package/server/agents/tools/flowTools.js +36 -0
- package/server/agents/tools/kpiTools.js +104 -0
- package/server/agents/tools/masterDataTools.js +74 -0
- package/server/agents/tools/okrTools.js +21 -0
- package/server/agents/tools/ragTools.js +21 -0
- package/server/agents/tools/reportTools.js +43 -0
- package/server/agents/tools/staffTools.js +13 -0
- package/server/agents/tools/stockTools.js +41 -0
- package/server/agents/tools/systemTools.js +52 -0
- package/server/agents/tools/taskTools.js +23 -0
- package/server/agents/tools/utils.js +57 -0
- package/server/app.js +7 -7
- package/server/controllers/controller.js +31 -29
- package/server/controllers/controllerRPT.js +31 -29
- package/server/controllers/findHandler.js +22 -21
- package/server/controllers/importFromExcelHandler.js +17 -14
- package/server/controllers/importHandler.js +26 -41
- package/server/controllers/importHandler_old.js +41 -0
- package/server/controllers/rptHandler.js +14 -11
- package/server/controllers/viewHandler.js +7 -7
- package/server/flow/FlowEngine.js +49 -45
- package/server/flow/WebhookManager.js +1 -1
- package/server/flow/handlers.js +2 -2
- package/server/flow/nodes/userform.js +28 -0
- package/server/flow/utils.js +12 -4
- package/server/global.js +4 -3
- package/server/libs/cdpstk.js +1 -1
- package/server/libs/ckvt.js +12 -11
- package/server/libs/ckvtcapphat.js +5 -5
- package/server/libs/ckvtnpp.js +8 -8
- package/server/libs/ckvttt.js +6 -5
- package/server/libs/ctvt.js +7 -6
- package/server/libs/ctvtnpp.js +7 -6
- package/server/libs/ctvttt.js +6 -6
- package/server/libs/databanle.js +17 -18
- package/server/libs/databanle_old.js +18 -0
- package/server/libs/databanletheongay.js +25 -29
- package/server/libs/dktk.js +3 -3
- package/server/libs/dkvt.js +11 -11
- package/server/libs/dkvtnpp.js +7 -6
- package/server/libs/dkvttt.js +7 -6
- package/server/libs/docs.js +72 -36
- package/server/libs/dtbanletheosp.js +16 -19
- package/server/libs/fifo_dk.js +8 -0
- package/server/libs/fifo_group.js +4 -0
- package/server/libs/fifo_trace_query.js +12 -0
- package/server/libs/getGiaban.js +59 -70
- package/server/libs/getGiaban_old.js +70 -0
- package/server/libs/joinData.js +3 -3
- package/server/libs/joinData_bk.js +44 -0
- package/server/libs/kpistatus.js +24 -17
- package/server/libs/permission.js +54 -56
- package/server/libs/permission_old.js +58 -0
- package/server/libs/post-book.js +1 -1
- package/server/libs/post-socai.js +2 -1
- package/server/libs/post-sokho.js +11 -11
- package/server/libs/prototypes.js +13 -12
- package/server/libs/queryBuilding.js +11 -10
- package/server/libs/redis-cache.js +22 -10
- package/server/libs/sctcnkh.js +19 -17
- package/server/libs/socaitk.js +1 -1
- package/server/libs/thnxt.js +17 -14
- package/server/libs/thnxtnpp.js +8 -8
- package/server/libs/thnxttt.js +8 -7
- package/server/libs/tinhgia1vt_fifo.js +22 -0
- package/server/libs/tinhgiafifo.js +28 -0
- package/server/libs/utils.js +37 -19
- package/server/models/app.js +1 -1
- package/server/models/approve.js +8 -8
- package/server/models/cacheDataReport.js +2 -2
- package/server/models/cacheSessionReport.js +5 -1
- package/server/models/cdvt.js +2 -2
- package/server/models/checkin.js +2 -2
- package/server/models/chitietluongds.js +1 -1
- package/server/models/contract.js +1 -1
- package/server/models/csluongtheods.js +2 -2
- package/server/models/ctds2.js +7 -6
- package/server/models/custom_report.js +1 -0
- package/server/models/dmdt.js +2 -2
- package/server/models/dmkho.js +5 -4
- package/server/models/dmnvt.js +5 -4
- package/server/models/fifo_dk.js +2 -0
- package/server/models/fifo_lot.js +3 -0
- package/server/models/fifo_trace.js +4 -0
- package/server/models/flowpending.js +2 -0
- package/server/models/group.js +3 -5
- package/server/models/listinfo.js +61 -33
- package/server/models/schedule.js +4 -3
- package/server/models/task.js +1 -1
- package/server/models/trangthai.js +2 -2
- package/server/modules/lists/bg-fifo_dk.js +8 -0
- package/server/modules/lists/ls-checkin.js +1 -1
- package/server/modules/lists/ls-customer.js +23 -26
- package/server/modules/lists/ls-dmbp.js +5 -5
- package/server/modules/lists/ls-dmkho.js +7 -1
- package/server/modules/lists/ls-dmnhtask.js +1 -1
- package/server/modules/lists/ls-dmvt.js +52 -70
- package/server/modules/lists/ls-flowpending.js +3 -0
- package/server/modules/lists/ls-participant.js +6 -4
- package/server/modules/lists/ls-task.js +6 -6
- package/server/modules/reports/calc-tinhgiafifo.js +8 -0
- package/server/modules/reports/calc-tinhluong.js +17 -16
- package/server/modules/reports/rp-baoCaoFifoKy.js +1 -0
- package/server/modules/reports/rp-congviectheobp.js +4 -4
- package/server/modules/reports/rp-congviectheodt.js +1 -1
- package/server/modules/reports/rp-congviectheokh.js +1 -1
- package/server/modules/reports/rp-congviectheonv.js +1 -1
- package/server/modules/reports/rp-dtbanletheoct.js +22 -23
- package/server/modules/reports/rp-dtbanletheokh.js +17 -20
- package/server/modules/reports/rp-dtbanletheokho.js +15 -18
- package/server/modules/reports/rp-hoahong.js +1 -1
- package/server/modules/reports/rp-sctvt.js +1 -1
- package/server/modules/reports/rp-sosanhkhvatt2.js +1 -1
- package/server/modules/reports/rp-thnxt.js +8 -8
- package/server/modules/reports/rp-tongquannvbh.js +1 -1
- package/server/modules/systems/sys-app.js +5 -5
- package/server/modules/vouchers/vo-so1.js +14 -14
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
const
|
|
1
|
+
const async=require("async"),lodash=require("lodash"),moment=require("moment");require("./joinData");const {round}=require("./utils");Math.roundBy=round;
|
|
2
2
|
Date.prototype.nextDay=function($days_of_week_distances$$){if(!$days_of_week_distances$$||$days_of_week_distances$$.length===0)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 $days_of_week_distances$$.length>0?($d$$.setDate($d$$.getDate()+$days_of_week_distances$$[0]),
|
|
3
|
-
$d$$):null};Array.prototype.csum=function($field$$,$condition$$,$exclude$$){return
|
|
4
|
-
Array.prototype.cmax=function($field$$,$condition$$){return
|
|
5
|
-
Array.prototype.
|
|
6
|
-
($
|
|
7
|
-
$key
|
|
8
|
-
$
|
|
3
|
+
$d$$):null};Array.prototype.csum=function($field$$,$condition$$,$exclude$$){return lodash.reduce(this,function($sum$$,$row_v$$){if(!lodash.isMatch($row_v$$,$condition$$)||$exclude$$&&lodash.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)};
|
|
4
|
+
Array.prototype.cmax=function($field$$,$condition$$){return lodash.reduce(this,function($max$$,$row$$){let $v$$=$row$$[$field$$];return $condition$$&&!lodash.isMatch($row$$,$condition$$)||lodash.isUndefined($v$$)?$max$$:$max$$?lodash.isNumber($v$$)?$max$$>$v$$?$max$$:$v$$:lodash.isString($v$$)?$v$$.localeCompare($max$$)==1?$v$$:$max$$:$v$$:$v$$},null)};
|
|
5
|
+
Array.prototype.reg=function(){if(this.length==0)return"";let $tk$$;this.forEach(function($t$$){$t$$!==""&&($tk$$=$tk$$?$tk$$+"|^"+$t$$:"^"+$t$$)});return $tk$$};
|
|
6
|
+
Array.prototype.groupBy=function($fieldkey$$,$fieldsums$$,$fn$$,$options$$){const $self$$=this;setImmediate(()=>{const $groups$$=lodash.groupBy($self$$.filter($i$$=>$i$$),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"));$_key$$===!1&&($_key$$="false");$_key$$||$_key$$==0||($_key$$="");$key$$=$key$$||$key$$==0?$key$$+"_"+$_key$$.toString():$_key$$}lodash.isString($key$$)&&
|
|
7
|
+
($key$$=$key$$.trim());$key$$||="ZZZ"}else $key$$=$item$$[$fieldkey$$],lodash.isDate($key$$)&&($key$$=moment($key$$).format("YYYY-MM-DD")),$key$$===!1&&($key$$="false"),$key$$||$key$$==0||($key$$="__");return $key$$});async.map(lodash.keys($groups$$),function($key$$,$callback$$){setImmediate(()=>{let $value$$=$groups$$[$key$$],$r$$={};if(lodash.isArray($fieldkey$$)&&$value$$.length>0)for(let $k$$ of $fieldkey$$)$r$$[$k$$]=$value$$[0][$k$$],$r$$[$k$$]||$r$$[$k$$]==0||$r$$[$k$$]==0||($r$$[$k$$]="");
|
|
8
|
+
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$$);
|
|
9
|
+
$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$$)})};
|
|
9
10
|
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$$,
|
|
10
11
|
$model$$,$joinFields$$,$fn$$)};
|
|
11
|
-
Array.prototype.asyncJoinModel2=async function($id_app$$,$model$$,$joinFields$$,$options$$={cache:!0}){let $_this$$=this,$rs$$;if($_this$$.length>0&&($model$$=="trangthai"||$model$$?.modelName=="trangthai")){
|
|
12
|
-
$key$$=="ma_ct"?($item$$.listinfo_code||$item$$[$key$$]||"").toUpperCase():$item$$[$key$$];return $query$$})});$rs$$=await new Promise($resolve$$=>{$_this$$.joinModel9($id_app$$,$model$$,$joinFields$$,$rs$$=>{$resolve$$($rs$$)},$options$$)});let $joinFields_org$$=$joinFields$$.filter($j$$=>$j$$.where_org);$joinFields_org$$.length>0&&$_this$$.filter($r$$=>!$r$$.ten_trang_thai).length>0&&($joinFields_org$$.forEach($join$$=>{$join$$.where=
|
|
13
|
-
|
|
14
|
-
$ref$$.color||$item$$.color)}});$_this$$.filter($r$$=>$r$$.id_app).joinModel9($_this$$[0].id_app,"trangthaiapp",$joinFields$$,$rs$$=>{$resolve$$($rs$$)},$options$$)});return $rs$$}return new Promise($resolve$$=>{$_this$$.joinModel9($id_app$$,$model$$,$joinFields$$,$rs$$=>{$resolve$$($rs$$)},$options$$)})};
|
|
12
|
+
Array.prototype.asyncJoinModel2=async function($id_app$$,$model$$,$joinFields$$,$options$$={cache:!0}){let $_this$$=this,$rs$$;if($_this$$.length>0&&($model$$=="trangthai"||$model$$?.modelName=="trangthai")){lodash.isArray($joinFields$$)||($joinFields$$=[$joinFields$$]);if($_this$$[0].listinfo_code&&$_this$$[0].listinfo_code.toUpperCase()!=$_this$$[0].ma_ct){$joinFields$$.forEach($join$$=>{typeof $join$$.where=="object"&&($join$$.where_org={...$join$$.where},$join$$.where=$item$$=>{const $query$$=
|
|
13
|
+
{};for(let $key$$ in $join$$.where_org)$query$$[$join$$.where[$key$$]]=$key$$=="ma_ct"?($item$$.listinfo_code||$item$$[$key$$]||"").toUpperCase():$item$$[$key$$];return $query$$})});$rs$$=await new Promise($resolve$$=>{$_this$$.joinModel9($id_app$$,$model$$,$joinFields$$,$rs$$=>{$resolve$$($rs$$)},$options$$)});let $joinFields_org$$=$joinFields$$.filter($j$$=>$j$$.where_org);$joinFields_org$$.length>0&&$_this$$.filter($r$$=>!$r$$.ten_trang_thai).length>0&&($joinFields_org$$.forEach($join$$=>{$join$$.where=
|
|
14
|
+
{...$join$$.where_org}}),await new Promise($resolve$$=>{$_this$$.filter($r$$=>!$r$$.ten_trang_thai).joinModel9($id_app$$,$model$$,$joinFields_org$$,$rs$$=>{$resolve$$($rs$$)},$options$$)}))}else $rs$$=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$$=>{$joinFields$$.forEach($join$$=>{$join$$.fields=[];$join$$.setFields=($item$$,$ref$$)=>{$ref$$&&$ref$$.ten_trang_thai&&
|
|
15
|
+
($item$$.ten_trang_thai=$ref$$.ten_trang_thai,$item$$.color=$ref$$.color||$item$$.color)}});$_this$$.filter($r$$=>$r$$.id_app).joinModel9($_this$$[0].id_app,"trangthaiapp",$joinFields$$,$rs$$=>{$resolve$$($rs$$)},$options$$)});return $rs$$}return new Promise($resolve$$=>{$_this$$.joinModel9($id_app$$,$model$$,$joinFields$$,$rs$$=>{$resolve$$($rs$$)},$options$$)})};
|
|
15
16
|
Array.prototype.joinModel2=function($id_app$$,$model$$,$joinFields$$,$fn$$,$options$$={cache:!0}){this.length>0&&!lodash.isArray($id_app$$)&&(typeof $model$$=="string"||$model$$.collection)?this.asyncJoinModel2($id_app$$,$model$$,$joinFields$$,$options$$).then($rs$$=>{$fn$$&&$fn$$($rs$$)}):this.joinModel9($id_app$$,$model$$,$joinFields$$,$fn$$,$options$$)};
|
|
16
|
-
Array.prototype.crossJoin=function($otherArray$$,$where$$={},$fn$$){setImmediate(()=>{let $newArray$$=[];for(let $e1$$ of this){const $_otherArray$$=$otherArray$$.filter($otherItem$$=>{if(
|
|
17
|
+
Array.prototype.crossJoin=function($otherArray$$,$where$$={},$fn$$){setImmediate(()=>{let $newArray$$=[];for(let $e1$$ of this){const $_otherArray$$=$otherArray$$.filter($otherItem$$=>{if(lodash.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($_otherArray$$.length===0)$newArray$$.push($e1$$);else for(let $item$$ of $_otherArray$$)$newArray$$.push({...$e1$$,
|
|
17
18
|
...$item$$})}$fn$$($newArray$$)})};Array.prototype.asyncCrossJoin=function($otherArray$$,$where$$){let $_this$$=this;return new Promise($resolve$$=>{$_this$$.crossJoin($otherArray$$,$where$$,$rs$$=>{$resolve$$($rs$$)})})};
|
|
18
19
|
Array.prototype.pivot=function($rowFields$$,$colPivot$$,$allKeys_colSum$$,$fn$$,$options$$={},$log$$=()=>{}){$log$$("pivot:start");const $data$$=this;if(!$data$$||$data$$.length===0)return $fn$$(null,{data:[],cols:[]});const $sumFields$$=Array.isArray($allKeys_colSum$$)?$allKeys_colSum$$:$allKeys_colSum$$?[$allKeys_colSum$$]:[],$maxFields$$=$options$$.colMax?Array.isArray($options$$.colMax)?$options$$.colMax:[$options$$.colMax]:[];if(!Array.isArray($rowFields$$)||$rowFields$$.length===0){const $firstItem$$=
|
|
19
20
|
$data$$[0];$allKeys_colSum$$=Object.keys($firstItem$$);const $excludeKeys$$=new Set([$colPivot$$,...$sumFields$$,...$maxFields$$,"_id","date_created","date_updated","__key","__v"]);$rowFields$$=$allKeys_colSum$$.filter($key$$=>!$excludeKeys$$.has($key$$)&&$firstItem$$[$key$$]&&!lodash.isNumber($firstItem$$[$key$$]))}setImmediate(()=>{try{$log$$("pivot:processing");const $resultMap$$=new Map,$colValuesSet$$=new Set;for(let $i$$=0;$i$$<$data$$.length;$i$$++){const $item$$=$data$$[$i$$],$colVal$$=$item$$[$colPivot$$];
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
const ALLOWED_FIELDS={},BLOCKED_FIELDS="password secret_key token __v hash salt".split(" "),OPERATOR_MAP={eq:"$eq",ne:"$ne",gt:"$gt",gte:"$gte",lt:"$lt",lte:"$lte","in":"$in",nin:"$nin",contains:"$regex",regex:"$regex"},escapeRegex=$hasStartAnchor_text$$=>{if(typeof $hasStartAnchor_text$$!=="string")return $hasStartAnchor_text$$;var $escapedBody_pattern$$=$hasStartAnchor_text$$;let $hasEndAnchor$$=$hasStartAnchor_text$$=!1;$escapedBody_pattern$$.startsWith("^")&&($hasStartAnchor_text
|
|
2
|
-
|
|
3
|
-
$type$$==="boolean"?$value$$==="true"||$value$$===!0:$value$$:$value$$,tryMergeValues=($existingVal$$,$newVal$$)=>{if(typeof $existingVal$$==="object"&&$existingVal$$!==null&&!Array.isArray($existingVal$$)&&typeof $newVal$$==="object"&&$newVal$$!==null&&!Array.isArray($newVal$$)){const $existingKeys$$=Object.keys($existingVal$$);if(!Object.keys($newVal$$).some($k$$=>$existingKeys$$.includes($k$$)))return{...$existingVal$$,...$newVal$$}}return null},buildSearchQuery=$dbField_queryNode$$=>
|
|
4
|
-
operator:$operator$$,value:$value$$}=$dbField_queryNode$$;$dbField_queryNode$$=$field$$;let $type$$=null;var $childConditions_config_isStrict_mongoOp$$=ALLOWED_FIELDS&&Object.keys(ALLOWED_FIELDS).length>0;if($field$$==="_id"||$field$$==="id")$dbField_queryNode$$="_id",$type$$="objectId";else if($childConditions_config_isStrict_mongoOp$$){$childConditions_config_isStrict_mongoOp$$=ALLOWED_FIELDS[$field$$];if(!$childConditions_config_isStrict_mongoOp$$)return null
|
|
5
|
-
$type$$=$childConditions_config_isStrict_mongoOp$$.type}else if(BLOCKED_FIELDS.includes($field$$))return null;$childConditions_config_isStrict_mongoOp$$=OPERATOR_MAP[$operator$$];if(!$childConditions_config_isStrict_mongoOp$$)return null;let $finalVal$$=$value$$;if($operator$$==="contains")return{[$dbField_queryNode$$]:{[$childConditions_config_isStrict_mongoOp$$]:new RegExp(escapeRegex(String($value$$)),"i")}};if($operator$$===
|
|
6
|
-
"i")}};if($operator$$==="in"||$operator$$==="nin"){const $arr$$=Array.isArray($value$$)?$value$$:[$value$$];$finalVal$$=$arr$$.map($v$$=>castValue($v$$,$type$$)).filter(($v$$,$i$$)=>$v$$!==null||$arr$$[$i$$]===null);return{[$dbField_queryNode$$]:{[$childConditions_config_isStrict_mongoOp$$]:$finalVal$$}}}$finalVal$$=castValue($value$$,$type$$);return $finalVal$$===null&&$type$$==="number"?
|
|
7
|
-
Array.isArray($dbField_queryNode$$.filters)){$childConditions_config_isStrict_mongoOp$$=$dbField_queryNode$$.filters.map($childNode$$=>buildSearchQuery($childNode$$)).filter($cond$$=>$cond$$!==null&&Object.keys($cond$$).length>0);if($childConditions_config_isStrict_mongoOp$$.length===0)return{};
|
|
8
|
-
{const $val$$=$cond$$[$key$$];if($key$$==="$and")Array.isArray($val$$)?$conflictConditions$$.push(...$val$$):$conflictConditions$$.push({[$key$$]:$val$$});else if($key$$.startsWith("$"))$conflictConditions$$.push({[$key$$]:$val$$});else if($finalQuery$$[$key$$]===
|
|
9
|
-
delete $finalQuery$$[$key$$])}})});if($conflictConditions$$.length>0){if(Object.keys($finalQuery$$).length===0)return $conflictConditions$$.length===1?$conflictConditions$$[0]:{$and:$conflictConditions$$};$conflictConditions$$.length===1&&$conflictConditions$$[0].$or
|
|
10
|
-
Object.entries(OPERATOR_MAP).forEach(([$k$$,$v$$])=>MONGO_TO_OP_MAP[$v$$]=$k$$);const MAX_DEPTH=5,IS_STRICT_MODE=ALLOWED_FIELDS&&Object.keys(ALLOWED_FIELDS).length>0;let GLOBAL_ALIAS_MAP=null;
|
|
1
|
+
const ALLOWED_FIELDS={},BLOCKED_FIELDS="password secret_key token __v hash salt".split(" "),OPERATOR_MAP={eq:"$eq",ne:"$ne",gt:"$gt",gte:"$gte",lt:"$lt",lte:"$lte","in":"$in",nin:"$nin",contains:"$regex",regex:"$regex",exists:"$exists"},escapeRegex=$hasStartAnchor_text$$=>{if(typeof $hasStartAnchor_text$$!=="string")return $hasStartAnchor_text$$;var $escapedBody_pattern$$=$hasStartAnchor_text$$;let $hasEndAnchor$$=$hasStartAnchor_text$$=!1;$escapedBody_pattern$$.startsWith("^")&&($hasStartAnchor_text$$=
|
|
2
|
+
!0,$escapedBody_pattern$$=$escapedBody_pattern$$.substring(1));$escapedBody_pattern$$.endsWith("$")&&$escapedBody_pattern$$.length>0&&($hasEndAnchor$$=!0,$escapedBody_pattern$$=$escapedBody_pattern$$.substring(0,$escapedBody_pattern$$.length-1));$escapedBody_pattern$$=$escapedBody_pattern$$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return($hasStartAnchor_text$$?"^":"")+$escapedBody_pattern$$+($hasEndAnchor$$?"$":"")},castValue=($value$$,$type$$)=>$type$$?$type$$==="number"?Number($value$$):$type$$===
|
|
3
|
+
"date"?new Date($value$$):$type$$==="boolean"?$value$$==="true"||$value$$===!0:$value$$:$value$$,tryMergeValues=($existingVal$$,$newVal$$)=>{if(typeof $existingVal$$==="object"&&$existingVal$$!==null&&!Array.isArray($existingVal$$)&&typeof $newVal$$==="object"&&$newVal$$!==null&&!Array.isArray($newVal$$)){const $existingKeys$$=Object.keys($existingVal$$);if(!Object.keys($newVal$$).some($k$$=>$existingKeys$$.includes($k$$)))return{...$existingVal$$,...$newVal$$}}return null},buildSearchQuery=$dbField_queryNode$$=>
|
|
4
|
+
{if($dbField_queryNode$$.field){const {field:$field$$,operator:$operator$$,value:$value$$}=$dbField_queryNode$$;$dbField_queryNode$$=$field$$;let $type$$=null;var $childConditions_config_isStrict_mongoOp$$=ALLOWED_FIELDS&&Object.keys(ALLOWED_FIELDS).length>0;if($field$$==="_id"||$field$$==="id")$dbField_queryNode$$="_id",$type$$="objectId";else if($childConditions_config_isStrict_mongoOp$$){$childConditions_config_isStrict_mongoOp$$=ALLOWED_FIELDS[$field$$];if(!$childConditions_config_isStrict_mongoOp$$)return null;
|
|
5
|
+
$dbField_queryNode$$=$childConditions_config_isStrict_mongoOp$$.dbField;$type$$=$childConditions_config_isStrict_mongoOp$$.type}else if(BLOCKED_FIELDS.includes($field$$))return null;$childConditions_config_isStrict_mongoOp$$=OPERATOR_MAP[$operator$$];if(!$childConditions_config_isStrict_mongoOp$$)return null;let $finalVal$$=$value$$;if($operator$$==="contains")return{[$dbField_queryNode$$]:{[$childConditions_config_isStrict_mongoOp$$]:new RegExp(escapeRegex(String($value$$)),"i")}};if($operator$$===
|
|
6
|
+
"regex")return{[$dbField_queryNode$$]:{[$childConditions_config_isStrict_mongoOp$$]:new RegExp(String($value$$),"i")}};if($operator$$==="in"||$operator$$==="nin"){const $arr$$=Array.isArray($value$$)?$value$$:[$value$$];$finalVal$$=$arr$$.map($v$$=>castValue($v$$,$type$$)).filter(($v$$,$i$$)=>$v$$!==null||$arr$$[$i$$]===null);return{[$dbField_queryNode$$]:{[$childConditions_config_isStrict_mongoOp$$]:$finalVal$$}}}$finalVal$$=castValue($value$$,$type$$);return $finalVal$$===null&&$type$$==="number"?
|
|
7
|
+
null:$childConditions_config_isStrict_mongoOp$$==="$eq"?{[$dbField_queryNode$$]:$finalVal$$}:{[$dbField_queryNode$$]:{[$childConditions_config_isStrict_mongoOp$$]:$finalVal$$}}}if($dbField_queryNode$$.logic&&Array.isArray($dbField_queryNode$$.filters)){$childConditions_config_isStrict_mongoOp$$=$dbField_queryNode$$.filters.map($childNode$$=>buildSearchQuery($childNode$$)).filter($cond$$=>$cond$$!==null&&Object.keys($cond$$).length>0);if($childConditions_config_isStrict_mongoOp$$.length===0)return{};
|
|
8
|
+
if($dbField_queryNode$$.logic==="OR")return{$or:$childConditions_config_isStrict_mongoOp$$};const $finalQuery$$={},$conflictConditions$$=[];$childConditions_config_isStrict_mongoOp$$.forEach($cond$$=>{Object.keys($cond$$).forEach($key$$=>{const $val$$=$cond$$[$key$$];if($key$$==="$and")Array.isArray($val$$)?$conflictConditions$$.push(...$val$$):$conflictConditions$$.push({[$key$$]:$val$$});else if($key$$.startsWith("$"))$conflictConditions$$.push({[$key$$]:$val$$});else if($finalQuery$$[$key$$]===
|
|
9
|
+
void 0)$finalQuery$$[$key$$]=$val$$;else{const $mergedVal$$=tryMergeValues($finalQuery$$[$key$$],$val$$);$mergedVal$$?$finalQuery$$[$key$$]=$mergedVal$$:($conflictConditions$$.push({[$key$$]:$finalQuery$$[$key$$]}),$conflictConditions$$.push({[$key$$]:$val$$}),delete $finalQuery$$[$key$$])}})});if($conflictConditions$$.length>0){if(Object.keys($finalQuery$$).length===0)return $conflictConditions$$.length===1?$conflictConditions$$[0]:{$and:$conflictConditions$$};$conflictConditions$$.length===1&&$conflictConditions$$[0].$or&&
|
|
10
|
+
$finalQuery$$.$or===void 0?$finalQuery$$.$or=$conflictConditions$$[0].$or:$finalQuery$$.$and=$conflictConditions$$}return $finalQuery$$}return{}};exports.buildSearchQuery=buildSearchQuery;const MONGO_TO_OP_MAP={};Object.entries(OPERATOR_MAP).forEach(([$k$$,$v$$])=>MONGO_TO_OP_MAP[$v$$]=$k$$);const MAX_DEPTH=5,IS_STRICT_MODE=ALLOWED_FIELDS&&Object.keys(ALLOWED_FIELDS).length>0;let GLOBAL_ALIAS_MAP=null;
|
|
11
|
+
IS_STRICT_MODE&&(GLOBAL_ALIAS_MAP={},Object.entries(ALLOWED_FIELDS).forEach(([$alias$$,$config$$])=>{GLOBAL_ALIAS_MAP[$config$$.dbField]=$alias$$}));
|
|
11
12
|
const isOperatorObject=$val$$=>!$val$$||typeof $val$$!=="object"||$val$$ instanceof Date||Array.isArray($val$$)||$val$$._bsontype==="ObjectID"||$val$$.toString&&$val$$.toString().match(/^[0-9a-fA-F]{24}$/)?!1:Object.keys($val$$).some($k$$=>$k$$.startsWith("$")),convertLegacyQuery=($mongoQuery$$,$currentDepth$$=0)=>{if($currentDepth$$>MAX_DEPTH)return Logger.warn("[Convert] \u26a0\ufe0f Max depth exceeded"),null;const $group$$={logic:"AND",filters:[]};if(!$mongoQuery$$||typeof $mongoQuery$$!=="object")return $group$$;
|
|
12
13
|
Object.keys($mongoQuery$$).forEach($key$$=>{if(!["__proto__","constructor","prototype"].includes($key$$)){var $value$$=$mongoQuery$$[$key$$];if($key$$==="$or"||$key$$==="$and"){if(Array.isArray($value$$)){var $subGroup$$={logic:$key$$==="$or"?"OR":"AND",filters:[]};$value$$.forEach($convertedChild_subQuery$$=>{($convertedChild_subQuery$$=convertLegacyQuery($convertedChild_subQuery$$,$currentDepth$$+1))&&$convertedChild_subQuery$$.filters.length>0&&$subGroup$$.filters.push($convertedChild_subQuery$$)});
|
|
13
14
|
$subGroup$$.filters.length>0&&$group$$.filters.push($subGroup$$)}}else if(!$key$$.startsWith("$")){var $aliasField$$=$key$$,$isAllowed$$=!1;$key$$==="_id"||$key$$==="id"?($aliasField$$="_id",$isAllowed$$=!0):IS_STRICT_MODE?GLOBAL_ALIAS_MAP[$key$$]&&($aliasField$$=GLOBAL_ALIAS_MAP[$key$$],$isAllowed$$=!0):BLOCKED_FIELDS.includes($key$$)||($isAllowed$$=!0);$isAllowed$$&&(isOperatorObject($value$$)?Object.keys($value$$).forEach($mongoOp$$=>{if(!["__proto__","constructor"].includes($mongoOp$$)){var $newOp$$=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const async=require("async"),underscore=require("underscore"),{onAfterCommit
|
|
2
|
-
|
|
1
|
+
const async=require("async"),underscore=require("underscore"),{onAfterCommit}=require("./sessionContext"),models=[{name:"user",key:["email"]},{name:"participant",key:["email"]},{name:"usergroup",key:["_id"]},{name:"dmvt",key:["ma_vt"]},{name:"customer",key:["ma_kh","_id"]},{name:"app",key:["_id"]},{name:"group",key:["_id"]},{name:"dokho",key:["_id"]},{name:"dvcs",key:["_id","ma_dvcs"]},{name:"dmkho",key:["ma_kho","_id"]},{name:"dmbp",key:["ma_bp","_id"]},{name:"dmnv",key:["ma_nv","_id"]},{name:"dmphi",
|
|
2
|
+
key:["ma_phi","_id"]},{name:"dmdt",key:["ma_dt","_id"]},{name:"account",key:["tk"]},{name:"trangthai",key:[$obj$$=>`:trangthai:ma_ct:${$obj$$.ma_ct}:ma_trang_thai:${$obj$$.ma_trang_thai}`,$obj$$=>`:trangthai:ma_trang_thai:${$obj$$.ma_trang_thai}:ma_ct:${$obj$$.ma_ct}`]},{name:"trangthaiapp",key:[$obj$$=>`${$obj$$._id.toString()}:ma_ct:${$obj$$.ma_ct}:ma_trang_thai:${$obj$$.ma_trang_thai}`,$obj$$=>`${$obj$$._id.toString()}:ma_trang_thai:${$obj$$.ma_trang_thai}:ma_ct:${$obj$$.ma_ct}`]}];
|
|
3
3
|
exports.sortObjectKeys=$obj$$=>Object.keys($obj$$).sort().reduce(($acc$$,$key$$)=>({...$acc$$,[$key$$]:$obj$$[$key$$]}),{});
|
|
4
4
|
exports.generateRedisKey=($d_session_modelName$$,$query_query_sorted$$,$id_app$$,$key$jscomp$11_val$$)=>{$query_query_sorted$$=exports.sortObjectKeys($query_query_sorted$$);$d_session_modelName$$=$d_session_modelName$$||"";if(!$key$jscomp$11_val$$&&$query_query_sorted$$._id)$d_session_modelName$$="flex:"+$query_query_sorted$$._id;else if($key$jscomp$11_val$$){if(typeof $key$jscomp$11_val$$=="function")return $key$jscomp$11_val$$($query_query_sorted$$).replace(/\./g,"_");if($key$jscomp$11_val$$!==
|
|
5
5
|
"id_app"&&$query_query_sorted$$[$key$jscomp$11_val$$]!==void 0&&$query_query_sorted$$[$key$jscomp$11_val$$]!==null){var $key$$=$query_query_sorted$$[$key$jscomp$11_val$$];$d_session_modelName$$=$d_session_modelName$$?`${$d_session_modelName$$}:${$key$jscomp$11_val$$}:${$key$$}`:`${$key$jscomp$11_val$$}:${$key$$}`}}else for($key$$ in $query_query_sorted$$)$key$$!=="id_app"&&$query_query_sorted$$[$key$$]!==void 0&&$query_query_sorted$$[$key$$]!==null&&($key$jscomp$11_val$$=$query_query_sorted$$[$key$$],
|
|
@@ -12,11 +12,23 @@ exports.remove=async function($model_name$$,$obj$$,$callback$$=()=>{}){onAfterCo
|
|
|
12
12
|
global.clientRedis.set($_key$jscomp$2_key$$,"")});if($obj$$){let $query_caches$$=await global.getModel("cache").find({data:{$regex:$obj$$._id.toString()}},{query:1,id_app:1,key:1}).lean();$query_caches$$.length>0&&(Logger.info("[setCahceReport] clear all relative cache",$model_name$$,$query_caches$$.length),await Promise.all($query_caches$$.map($r$$=>global.getModel("cache").deleteMany({id_app:$r$$.id_app,key:$r$$.key,query:$r$$.query}))))}if(["dmgiaban","dmchietkhau","dmkhuyenmai","dmtt","dmnckkm"].indexOf($model_name$$)>=
|
|
13
13
|
0||$model_name$$.indexOf("ecom")==0)await global.getModel("cache").deleteMany({id_app:$obj$$.id_app,key:"dmvt"}),await global.getModel("cache").deleteMany({id_app:"system",key:"dmvt"});$callback$$(null)})};exports.setObject=async($key$$,$object$$)=>new Promise($res$$=>{global.clientRedis.set($key$$,JSON.stringify($object$$),function($err$$){$err$$&&Logger.error("[Redis Cache] Kh\u00f4ng th\u1ebb cache data t\u1edbi redis",$err$$);return $res$$($object$$)})});
|
|
14
14
|
exports.getObject=async $key$$=>new Promise(($res$$,$rej$$)=>{global.clientRedis.get($key$$,function($err$$,$reply$$){if($err$$)return $rej$$($err$$);if($reply$$)try{return $res$$(JSON.parse($reply$$))}catch($e$$){return $rej$$($e$$)}else return $res$$({})})});
|
|
15
|
-
exports.updateObject=async($key$$,$data$$)=>{if($data$$&&$key$$){if(typeof $data$$!="object")throw Error("Data must be an object");var $object$$=await exports.getObject($key$$);if(Object.keys($object$$).length==0)throw Error("Not found object");$object$$={...$object$$,...$data$$};return exports.setObject($key$$,$object$$)}};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
$
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
exports.updateObject=async($key$$,$data$$)=>{if($data$$&&$key$$){if(typeof $data$$!="object")throw Error("Data must be an object");var $object$$=await exports.getObject($key$$);if(Object.keys($object$$).length==0)throw Error("Not found object");$object$$={...$object$$,...$data$$};return exports.setObject($key$$,$object$$)}};const CHUNK_SIZE=1E3,CONCURRENCY=6,DELETE_TIMEOUT=3E4,WAIT_TIMEOUT_MS=6E4,POLL_INTERVAL_MS=300,_pendingJobs=new Map;
|
|
16
|
+
class Semaphore{constructor($n$$){this._n=$n$$;this._q=[]}acquire(){return this._n>0?(this._n--,Promise.resolve()):new Promise($r$$=>this._q.push($r$$))}release(){this._q.length>0?this._q.shift()():this._n++}}async function withSemaphore($sem$$,$fn$$){await $sem$$.acquire();try{return await $fn$$()}finally{$sem$$.release()}}function*chunks($arr$$,$size$$){for(let $i$$=0;$i$$<$arr$$.length;$i$$+=$size$$)yield $arr$$.slice($i$$,$i$$+$size$$)}
|
|
17
|
+
function parseData($data$$){if(Array.isArray($data$$))return{data_cache:$data$$,info:{}};if(!$data$$||typeof $data$$!=="object")return{data_cache:[$data$$],info:{}};const $info$$={...$data$$};for(const $key$$ of["data","rows","list"])if(Array.isArray($data$$[$key$$]))return delete $info$$[$key$$],{data_cache:$data$$[$key$$],info:$info$$};return{data_cache:[$data$$],info:{}}}
|
|
18
|
+
async function _insertChunksBackground($sessionDoc$$,$data_cache$$,$id_app$$,$user_created$$,$code$$){const $sessionModel$$=global.getModel("cacheSessionReport"),$dataModel$$=global.getModel("cacheDataReport"),$sessionId$$=$sessionDoc$$._id.toString(),$sem$$=new Semaphore(CONCURRENCY),$baseRow$$={id_session:$sessionId$$,user_created:$user_created$$,id_app:$id_app$$,code:$code$$};let $failed$$=!1;$id_app$$=[];let $chunkIdx$$=0;for(const $chunk$$ of chunks($data_cache$$,CHUNK_SIZE)){const $idx$$=$chunkIdx$$++,
|
|
19
|
+
$rows$$=$chunk$$.map($d$$=>({...$baseRow$$,row:$d$$}));$id_app$$.push(withSemaphore($sem$$,async()=>{if(!$failed$$)try{await $dataModel$$.collection.insertMany($rows$$,{ordered:!1})}catch($err$$){throw $failed$$=!0,Logger.error(`[setCacheReport] chunk ${$idx$$}/${$chunkIdx$$} failed`,{sessionId:$sessionId$$,code:$code$$,size:$rows$$.length,err:$err$$.message}),$err$$;}}))}try{await Promise.all($id_app$$),await $sessionModel$$.updateOne({_id:$sessionDoc$$._id},{$set:{status:"ready",ready_at:new Date,
|
|
20
|
+
inserted_rows:$data_cache$$.length}}),Logger.info("[setCacheReport] session ready",{sessionId:$sessionId$$,total:$data_cache$$.length})}catch($err$$){await Promise.all([$sessionModel$$.updateOne({_id:$sessionDoc$$._id},{$set:{status:"failed",error:$err$$.message,failed_at:new Date}}),$dataModel$$.deleteMany({id_session:$sessionId$$})]).catch($cleanupErr$$=>{Logger.error("[setCacheReport] cleanup after failure also failed",{sessionId:$sessionId$$,cleanupErr:$cleanupErr$$.message})})}finally{_pendingJobs.delete($sessionId$$)}}
|
|
21
|
+
exports.setCacheReport=async($user_created$$,$id_app$$,$code$$,$data$jscomp$2_job_session_sessionModel$$,$key$$=null)=>{$id_app$$=$id_app$$||"system";console.time(`[setCacheReport]${$user_created$$}${$id_app$$}${$code$$}${$key$$}`);const {data_cache:$data_cache$$,info:$info$$}=parseData($data$jscomp$2_job_session_sessionModel$$);$data$jscomp$2_job_session_sessionModel$$=global.getModel("cacheSessionReport");var $deletePromise_sessionDoc$$=$key$$?$data$jscomp$2_job_session_sessionModel$$.deleteMany({id_app:$id_app$$,
|
|
22
|
+
user_created:$user_created$$,code:$code$$,key:$key$$,status:"ready"}).maxTimeMS(DELETE_TIMEOUT):Promise.resolve(),$createPromise_sessionId$$=$data$jscomp$2_job_session_sessionModel$$.create({id_app:$id_app$$,user_created:$user_created$$,code:$code$$,key:$key$$,info:$info$$,status:"pending",total_rows:$data_cache$$.length,inserted_rows:0});[,$deletePromise_sessionDoc$$]=await Promise.all([$deletePromise_sessionDoc$$,$createPromise_sessionId$$]);$createPromise_sessionId$$=$deletePromise_sessionDoc$$._id.toString();
|
|
23
|
+
$data_cache$$.length>0?($data$jscomp$2_job_session_sessionModel$$=_insertChunksBackground($deletePromise_sessionDoc$$,$data_cache$$,$id_app$$,$user_created$$,$code$$),_pendingJobs.set($createPromise_sessionId$$,$data$jscomp$2_job_session_sessionModel$$)):await $data$jscomp$2_job_session_sessionModel$$.updateOne({_id:$deletePromise_sessionDoc$$._id},{$set:{status:"ready",ready_at:new Date,inserted_rows:0}});$data$jscomp$2_job_session_sessionModel$$=$deletePromise_sessionDoc$$.toObject?$deletePromise_sessionDoc$$.toObject():
|
|
24
|
+
$deletePromise_sessionDoc$$;$data$jscomp$2_job_session_sessionModel$$.data_cache=$data_cache$$;console.timeEnd(`[setCacheReport]${$user_created$$}${$id_app$$}${$code$$}${$key$$}`);return $data$jscomp$2_job_session_sessionModel$$};
|
|
25
|
+
async function waitForReady($sessionId$$,$timeoutMs$$=WAIT_TIMEOUT_MS){var $sessionModel$$=global.getModel("cacheSessionReport"),$deadline_inProcessJob$$=_pendingJobs.get($sessionId$$);if($deadline_inProcessJob$$){$sessionModel$$=new Promise(($_$$,$reject$$)=>setTimeout(()=>$reject$$(Error(`[getCacheReport] timeout waiting for session ${$sessionId$$}`)),$timeoutMs$$));try{await Promise.race([$deadline_inProcessJob$$,$sessionModel$$])}catch($err$$){if($err$$.message.includes("timeout"))throw $err$$;
|
|
26
|
+
}}else{for($deadline_inProcessJob$$=Date.now()+$timeoutMs$$;Date.now()<$deadline_inProcessJob$$;){const $s$$=await $sessionModel$$.findOne({_id:$sessionId$$},{status:1}).lean();if(!$s$$)throw Error(`Session ${$sessionId$$} not found`);if($s$$.status==="ready")return;if($s$$.status==="failed")throw Error(`Session ${$sessionId$$} failed to cache`);await new Promise($r$$=>setTimeout($r$$,POLL_INTERVAL_MS))}throw Error(`[getCacheReport] timeout waiting for session ${$sessionId$$}`);}}
|
|
27
|
+
exports.getCacheReport=async($dataModel$jscomp$1_user_created$$,$id_app$$,$code$$,$dataQuery_id_session_query_session_session$$,$limit_parsedLimit$$=null,$page_parsedPage$$=null,$key$$=null)=>{if(!$dataQuery_id_session_query_session_session$$&&!$key$$||$dataQuery_id_session_query_session_session$$&&!global.mongoose.Types.ObjectId.isValid($dataQuery_id_session_query_session_session$$))return null;var $freshSession_sessionModel$$=global.getModel("cacheSessionReport");$dataModel$jscomp$1_user_created$$=
|
|
28
|
+
global.getModel("cacheDataReport");$dataQuery_id_session_query_session_session$$=$dataQuery_id_session_query_session_session$$?{id_app:$id_app$$,_id:$dataQuery_id_session_query_session_session$$}:{id_app:$id_app$$,code:$code$$,key:$key$$};Logger.info("[getCacheReport] find session",$dataQuery_id_session_query_session_session$$);$dataQuery_id_session_query_session_session$$=await $freshSession_sessionModel$$.findOne($dataQuery_id_session_query_session_session$$).lean();if(!$dataQuery_id_session_query_session_session$$||
|
|
29
|
+
$dataQuery_id_session_query_session_session$$.id_app!==$id_app$$||$dataQuery_id_session_query_session_session$$.code!==$code$$||$dataQuery_id_session_query_session_session$$.status===void 0)return null;$code$$=$dataQuery_id_session_query_session_session$$._id.toString();$dataQuery_id_session_query_session_session$$.status==="pending"&&(Logger.info("[getCacheReport] session pending, waiting...",{sid:$code$$}),await waitForReady($code$$));$freshSession_sessionModel$$=$dataQuery_id_session_query_session_session$$.status!==
|
|
30
|
+
"pending"?$dataQuery_id_session_query_session_session$$:await $freshSession_sessionModel$$.findOne({_id:$dataQuery_id_session_query_session_session$$._id}).lean();if(!$freshSession_sessionModel$$||$freshSession_sessionModel$$.status!=="ready")throw Error(`[getCacheReport] session ${$code$$} is not ready (status: ${$freshSession_sessionModel$$?.status})`);$limit_parsedLimit$$=Number($limit_parsedLimit$$)>0?Number($limit_parsedLimit$$):null;$page_parsedPage$$=Number($page_parsedPage$$)>0?Number($page_parsedPage$$):
|
|
31
|
+
1;$dataQuery_id_session_query_session_session$$=$limit_parsedLimit$$?($page_parsedPage$$-1)*$limit_parsedLimit$$:0;$dataQuery_id_session_query_session_session$$=$dataModel$jscomp$1_user_created$$.find({id_app:$id_app$$,id_session:$code$$}).skip($dataQuery_id_session_query_session_session$$);$limit_parsedLimit$$&&$dataQuery_id_session_query_session_session$$.limit($limit_parsedLimit$$);const [$cached$$,$total$$]=await Promise.all([$dataQuery_id_session_query_session_session$$.lean(),$limit_parsedLimit$$?
|
|
32
|
+
$dataModel$jscomp$1_user_created$$.countDocuments({id_app:$id_app$$,id_session:$code$$}):Promise.resolve(null)]);$id_app$$=$total$$??$cached$$.length;return{...($freshSession_sessionModel$$.info||{}),id_session:$code$$,status:"ready",data:$cached$$.map($c$$=>$c$$.row),pagination:{total:$id_app$$,page:$page_parsedPage$$,limit:$limit_parsedLimit$$,totalPages:$limit_parsedLimit$$?Math.ceil($id_app$$/$limit_parsedLimit$$):1}}};
|
|
33
|
+
exports.cleanupStaleSessions=async($cutoff_olderThanMs_staleSessions$$=18E5)=>{const $sessionModel$$=global.getModel("cacheSessionReport"),$dataModel$$=global.getModel("cacheDataReport");$cutoff_olderThanMs_staleSessions$$=new Date(Date.now()-$cutoff_olderThanMs_staleSessions$$);$cutoff_olderThanMs_staleSessions$$=await $sessionModel$$.find({status:{$in:["pending","failed"]},createdAt:{$lt:$cutoff_olderThanMs_staleSessions$$}},{_id:1}).lean();if($cutoff_olderThanMs_staleSessions$$.length===0)return 0;
|
|
34
|
+
const $staleIds$$=$cutoff_olderThanMs_staleSessions$$.map($s$$=>$s$$._id.toString()),$staleObjIds$$=$cutoff_olderThanMs_staleSessions$$.map($s$$=>$s$$._id);await Promise.all([$sessionModel$$.deleteMany({_id:{$in:$staleObjIds$$}}),$dataModel$$.deleteMany({id_session:{$in:$staleIds$$}})]);Logger.info(`[cleanupStaleSessions] removed ${$cutoff_olderThanMs_staleSessions$$.length} stale sessions`);return $cutoff_olderThanMs_staleSessions$$.length};
|
package/server/libs/sctcnkh.js
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
const Vsocai=require("./vsocai"),dkcn=require("./dkcn"),async=require("async"),moment=require("moment"),permistion=require("./permission");
|
|
2
|
-
module.exports=async function($condition$$){if(!$condition$$.id_app||!$condition$$.tu_ngay||!$condition$$.den_ngay)throw Error("B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1 id_app,tu_ngay,den_ngay");$condition$$.tk||($condition$$.tk="131");$condition$$.tu_ngay=moment($condition$$.tu_ngay).startOf("
|
|
3
|
-
|
|
4
|
-
[{phu_trach:{$in:$Customer_ds_phu_trach$$}},{of_user:{$in:$Customer_ds_phu_trach$$}}]}$Customer_ds_phu_trach$$=global.getModel("customer");$condition$$.ma_kh=await $Customer_ds_phu_trach$$.getList($condition$$.id_app,$_q__q$jscomp$1__q$jscomp$
|
|
5
|
-
$condition$$.phu_trach_nv),$_q__q$jscomp$1__q$jscomp$
|
|
6
|
-
$_q__q$jscomp$1__q$jscomp$2_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$$=(await global.getModel("dmnv").find($_q__q$jscomp$1__q$jscomp$
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
$
|
|
12
|
-
$
|
|
13
|
-
|
|
14
|
-
$
|
|
15
|
-
$
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
($
|
|
2
|
+
module.exports=async function($condition$$){if(!$condition$$.id_app||!$condition$$.tu_ngay||!$condition$$.den_ngay)throw Error("B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1 id_app,tu_ngay,den_ngay");$condition$$.tk||($condition$$.tk="131");$condition$$.tu_ngay=moment($condition$$.tu_ngay).startOf("day").toDate();$condition$$.den_ngay=moment($condition$$.den_ngay).endOf("day").toDate();const {id_app:$id_app$$}=$condition$$;if(!$condition$$.ma_kh&&($condition$$.nh_kh||$condition$$.phu_trach)){var $_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$=
|
|
3
|
+
{};$condition$$.nh_kh&&($_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$.nh_kh=$condition$$.nh_kh);if($condition$$.phu_trach){var $Customer_ds_phu_trach$$=await permistion.dsDangPhuTrach($condition$$.id_app,$condition$$.phu_trach);$Customer_ds_phu_trach$$.push($condition$$.phu_trach);$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$.$or=
|
|
4
|
+
[{phu_trach:{$in:$Customer_ds_phu_trach$$}},{of_user:{$in:$Customer_ds_phu_trach$$}}]}$Customer_ds_phu_trach$$=global.getModel("customer");$condition$$.ma_kh=await $Customer_ds_phu_trach$$.getList($condition$$.id_app,$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$,"ma_kh")}!$condition$$.ma_nv&&$condition$$.phu_trach_nv&&($_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$=
|
|
5
|
+
await permistion.dsDangPhuTrach($condition$$.id_app,$condition$$.phu_trach_nv),$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$.push($condition$$.phu_trach_nv),$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$={id_app:$condition$$.id_app,$or:[{phu_trach:{$in:$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$}},
|
|
6
|
+
{user:{$in:$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$}}]},$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$=(await global.getModel("dmnv").find($_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$,{ma_nv:1}).lean()).map($nv$$=>$nv$$.ma_nv),
|
|
7
|
+
$condition$$.ma_nv={$in:$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$});!$condition$$.ma_nv_giao_hang&&$condition$$.phu_trach_gia_hang&&($_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$=await permistion.dsDangPhuTrach($id_app$$,$condition$$.phu_trach_gia_hang),$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$.push($condition$$.phu_trach_gia_hang),
|
|
8
|
+
$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$={id_app:$id_app$$,$or:[{phu_trach:{$in:$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$}},{user:{$in:$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$}}]},$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$=
|
|
9
|
+
(await global.getModel("dmnv").find($_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$,{ma_nv:1}).lean()).map($nv$$=>$nv$$.ma_nv),$condition$$.ma_nv_giao_hang={$in:$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$});!$condition$$.phu_xe&&$condition$$.phu_trach_phu_xe&&($_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$=
|
|
10
|
+
await permistion.dsDangPhuTrach($id_app$$,$condition$$.phu_trach_phu_xe),$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$.push($condition$$.phu_trach_phu_xe),$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$={id_app:$id_app$$,$or:[{phu_trach:{$in:$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$}},
|
|
11
|
+
{user:{$in:$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$}}]},$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$=(await global.getModel("dmnv").find($_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$,{ma_nv:1}).lean()).map($nv$$=>$nv$$.ma_nv),
|
|
12
|
+
$condition$$.phu_xe={$in:$_q__q$jscomp$1__q$jscomp$2__q$jscomp$3_ds_phu_trach$jscomp$1_ds_phu_trach$jscomp$2_ds_phu_trach$jscomp$3_ma_nvs_ma_nvs$jscomp$1_ma_nvs$$});$condition$$.bu_tru=!0;$condition$$.groupBy=$condition$$.groupBy||["tk","ma_kh"];return new Promise(($resolve$$,$reject$$)=>{async.parallel({dk:$callback$$=>{const $query$$={...$condition$$};$query$$.ngay=$condition$$.tu_ngay;dkcn($query$$,function($data_error$$,$result$$){if($data_error$$)return $callback$$($data_error$$);$data_error$$=
|
|
13
|
+
{systotal:1,sysorder:0,bold:!0,dien_giai:"\u0110\u1ea7u k\u1ef3",ps_no:$result$$.csum("du_no00"),ps_co:$result$$.csum("du_co00"),ps_no_nt:$result$$.csum("du_no_nt00"),ps_co_nt:$result$$.csum("du_co_nt00")};$callback$$(null,$data_error$$)})},ps:$callback$$=>{const $query$$={id_app:$condition$$.id_app,tk:{$regex:"^"+$condition$$.tk,$options:"i"},ngay_ct:{$gte:$condition$$.tu_ngay,$lte:$condition$$.den_ngay}};$condition$$.ma_dvcs&&($query$$.ma_dvcs=$condition$$.ma_dvcs);$condition$$.ma_kh&&($query$$.ma_kh=
|
|
14
|
+
$condition$$.ma_kh);$condition$$.ma_kho&&($query$$.ma_kho=$condition$$.ma_kho);$condition$$.ma_bp&&($query$$.ma_bp=$condition$$.ma_bp);$condition$$.ma_phi&&($query$$.ma_phi=$condition$$.ma_phi);$condition$$.ma_nv&&($query$$.ma_nv=$condition$$.ma_nv);$condition$$.ma_nv_giao_hang&&($query$$.ma_nv_giao_hang=$condition$$.ma_nv_giao_hang);$condition$$.phu_xe&&($query$$.phu_xe=$condition$$.phu_xe);$condition$$.ma_hd&&($query$$.ma_hd=$condition$$.ma_hd);$condition$$.ma_dt&&($query$$.ma_dt=$condition$$.ma_dt);
|
|
15
|
+
Vsocai.find($query$$,($error$$,$result$$)=>{if($error$$)return $callback$$($error$$);$result$$.forEach($r$$=>{$r$$.systotal=0;$r$$.sysorder=5;$r$$.bold=!1});$error$$={systotal:1,sysorder:6,bold:!0,dien_giai:"T\u1ed5ng c\u1ed9ng ph\u00e1t sinh",ps_no:$result$$.csum("ps_no"),ps_co:$result$$.csum("ps_co"),ps_no_nt:$result$$.csum("ps_no_nt"),ps_co_nt:$result$$.csum("ps_co_nt")};$result$$.push($error$$);$result$$.push({systotal:0,sysorder:2,bold:!0,dien_giai:"Ph\u00e1t sinh trong k\u1ef3",ps_no:0,ps_co:0,
|
|
16
|
+
ps_no_nt:0,ps_co_nt:0});$callback$$(null,$result$$)},{groupBy:"id_app ma_dvcs id_ct ma_ct ma_gd ngay_ct ngay_ct_full listinfo_code so_ct ngay_hd so_hd tk tk_du ma_kh ong_ba ma_nt ty_gia dien_giai ma_bp id_lenhsx ma_phi ma_hd ma_dt ma_nv ma_cp ma_kho".split(" "),sortData:!0})}},async($data$jscomp$1_error$$,$results_so_ck$$)=>{if($data$jscomp$1_error$$)return $reject$$($data$jscomp$1_error$$);$data$jscomp$1_error$$=$results_so_ck$$.ps;await $data$jscomp$1_error$$.filter($i$$=>$i$$.ma_ct&&$i$$.id_ct).asyncJoinModel2($id_app$$,
|
|
17
|
+
$item$$=>$item$$.ma_ct.toLowerCase(),{where:{id_ct:"_id"},fields:[{ma_kh_thuc:"ma_kh"}]});$data$jscomp$1_error$$.push($results_so_ck$$.dk);$results_so_ck$$=$data$jscomp$1_error$$.csum("ps_no",{systotal:1})-$data$jscomp$1_error$$.csum("ps_co",{systotal:1});let $so_ck_nt$$=$data$jscomp$1_error$$.csum("ps_no_nt",{systotal:1})-$data$jscomp$1_error$$.csum("ps_co",{systotal:1});const $dong_cuoi_ky$$={systotal:1,sysorder:9,bold:!0,dien_giai:"Cu\u1ed1i k\u1ef3",ps_no:0,ps_co:0,ps_no_nt:0,ps_co_nt:0};$results_so_ck$$>
|
|
18
|
+
0&&($dong_cuoi_ky$$.ps_no=$results_so_ck$$);$so_ck_nt$$>0&&($dong_cuoi_ky$$.ps_no_nt=$so_ck_nt$$);$results_so_ck$$<0&&($dong_cuoi_ky$$.ps_co=Math.abs($results_so_ck$$));$so_ck_nt$$<0&&($dong_cuoi_ky$$.ps_co_nt=Math.abs($so_ck_nt$$));$data$jscomp$1_error$$.push($dong_cuoi_ky$$);$data$jscomp$1_error$$=$data$jscomp$1_error$$.sort(($a$$,$b$$)=>{var $date2Diff_dateDiff_soCtDiff_sysorderDiff$$=$a$$.sysorder-$b$$.sysorder;if($date2Diff_dateDiff_soCtDiff_sysorderDiff$$!==0)return $date2Diff_dateDiff_soCtDiff_sysorderDiff$$;
|
|
19
|
+
$date2Diff_dateDiff_soCtDiff_sysorderDiff$$=new Date($a$$.ngay_ct_full)-new Date($b$$.ngay_ct_full);if($date2Diff_dateDiff_soCtDiff_sysorderDiff$$!==0)return $date2Diff_dateDiff_soCtDiff_sysorderDiff$$;$date2Diff_dateDiff_soCtDiff_sysorderDiff$$=new Date($a$$.date_created)-new Date($b$$.date_created);if($date2Diff_dateDiff_soCtDiff_sysorderDiff$$!==0)return $date2Diff_dateDiff_soCtDiff_sysorderDiff$$;$date2Diff_dateDiff_soCtDiff_sysorderDiff$$=$a$$.so_ct.localeCompare($b$$.so_ct);return $date2Diff_dateDiff_soCtDiff_sysorderDiff$$!==
|
|
20
|
+
0?$date2Diff_dateDiff_soCtDiff_sysorderDiff$$:($b$$.ps_no>0)-($a$$.ps_no>0)});$resolve$$($data$jscomp$1_error$$)})})};
|
package/server/libs/socaitk.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const Vsocai=require("./vsocai"),Customer=global.getModel("customer"),dktk=require("./dktk"),async=require("async"),moment=require("moment");
|
|
2
|
-
module.exports=async $condition$$=>{if(!($condition$$.id_app&&$condition$$.tk&&$condition$$.tu_ngay&&$condition$$.den_ngay))throw Error("B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1 id_app,tk,tu_ngay,den_ngay");$condition$$.tu_ngay=moment($condition$$.tu_ngay).startOf("
|
|
2
|
+
module.exports=async $condition$$=>{if(!($condition$$.id_app&&$condition$$.tk&&$condition$$.tu_ngay&&$condition$$.den_ngay))throw Error("B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1 id_app,tk,tu_ngay,den_ngay");$condition$$.tu_ngay=moment($condition$$.tu_ngay).startOf("day").toDate();$condition$$.den_ngay=moment($condition$$.den_ngay).endOf("day").toDate();$condition$$.bu_tru=!0;const $id_app$$=$condition$$.id_app;return new Promise(($resolve$$,$reject$$)=>{async.parallel({dk:function($callback$$){const $query$$=
|
|
3
3
|
{...$condition$$};$query$$.ngay=$condition$$.tu_ngay;dktk($query$$,function($data_error$$,$result$$){if($data_error$$)return $callback$$($data_error$$);$data_error$$={systotal:1,sysorder:0,bold:!0,dien_giai:"\u0110\u1ea7u k\u1ef3",ps_no:$result$$.csum("du_no00"),ps_co:$result$$.csum("du_co00"),ps_no_nt:$result$$.csum("du_no_nt00"),ps_co_nt:$result$$.csum("du_co_nt00")};$callback$$(null,$data_error$$)})},ps:function($callback$$){const $query$$={id_app:$condition$$.id_app,tk:{$regex:"^"+$condition$$.tk,
|
|
4
4
|
$options:"i"},ngay_ct:{$gte:$condition$$.tu_ngay,$lte:$condition$$.den_ngay}};$condition$$.ma_dvcs&&($query$$.ma_dvcs=$condition$$.ma_dvcs);Vsocai.find($query$$,function($error$$,$result$$){if($error$$)return $callback$$($error$$);$result$$.forEach(function($r$$){$r$$.systotal=0;$r$$.sysorder=5;$r$$.bold=!1});$error$$={systotal:1,sysorder:6,bold:!0,dien_giai:"T\u1ed5ng c\u1ed9ng ph\u00e1t sinh",ps_no:$result$$.csum("ps_no"),ps_co:$result$$.csum("ps_co"),ps_no_nt:$result$$.csum("ps_no_nt"),ps_co_nt:$result$$.csum("ps_co_nt")};
|
|
5
5
|
$result$$.push($error$$);$result$$.push({systotal:0,sysorder:2,bold:!0,dien_giai:"Ph\u00e1t sinh trong k\u1ef3",ps_no:0,ps_co:0,ps_no_nt:0,ps_co_nt:0});$callback$$(null,$result$$)},{groupBy:!0,sortData:!0,model:$condition$$.model_socai||"socai"})}},async function($data$jscomp$1_error$$,$results_so_ck_nt$$){if($data$jscomp$1_error$$)return $reject$$($data$jscomp$1_error$$);$data$jscomp$1_error$$=$results_so_ck_nt$$.ps;$data$jscomp$1_error$$.push($results_so_ck_nt$$.dk);await $data$jscomp$1_error$$.asyncJoinModel2($id_app$$,
|
package/server/libs/thnxt.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
const dkvt=require("./dkvt"),sokho=global.getModel("sokho"),dmvt=global.getModel("dmvt"),_=require("lodash"),utils=require("./utils"),
|
|
2
|
-
module.exports=async function($condition$$,$fn$$,$log$$=()=>{}){$log$$("stocksummary: prepare condition");
|
|
3
|
-
const $f_sl$$=$app_processData$$.options?.f_sl??4,$f_tien$$=$app_processData$$.options?.f_tien??0;let $groupBy$$=$condition$$.groupBy||$condition$$.groupby||["ma_vt"];if(_.isString($groupBy$$))try{$groupBy$$=$groupBy$$.includes("[")?
|
|
4
|
-
$
|
|
5
|
-
$query$$={id_app:$id_app$$,ngay_ct:{$gte:$isGroupByKho_ma_vt_tu_ngay$$,$lte:$den_ngay$$}};$condition$$.ma_kho&&($query$$.ma_kho=$condition$$.ma_kho);$condition$$.ma_dvcs&&
|
|
6
|
-
$
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
$
|
|
10
|
-
$groupBy$$),ton_dau:0,du_dau:0,sl_nhap:0,sl_xuat:0,tien_nhap:0,tien_xuat:0,ten_vt:$row$$.ten_vt||"",dvt:$row$$.dvt||
|
|
11
|
-
$
|
|
12
|
-
$
|
|
13
|
-
($a$$.ma_vt||"").localeCompare($b$$.ma_vt||"");return $cmpVt$$!==0?$cmpVt$$:($a$$.ma_kho||"").localeCompare($b$$.ma_kho||"")});if($condition$$.
|
|
14
|
-
|
|
1
|
+
const dkvt=require("./dkvt"),sokho=global.getModel("sokho"),dmvt=global.getModel("dmvt"),_=require("lodash"),utils=require("./utils"),moment=require("moment");
|
|
2
|
+
module.exports=async function($condition$$,$fn$$,$log$$=()=>{}){$log$$("stocksummary: prepare condition");try{if(!($condition$$&&$condition$$.tu_ngay&&$condition$$.den_ngay&&$condition$$.id_app))throw Error("L\u1ed7i: B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: tu_ngay, den_ngay, id_app");const $id_app$$=$condition$$.id_app;let $ds_ma_kho$$;$condition$$.ma_kho&&(Array.isArray($condition$$.ma_kho)?$ds_ma_kho$$=[...$condition$$.ma_kho]:typeof $condition$$.ma_kho=="string"&&($ds_ma_kho$$=
|
|
3
|
+
await global.getModel("dmkho").getAllChildrenGroup($id_app$$,$condition$$.ma_kho)));var $app_processData$$=await global.getModel("app").findOne({_id:$id_app$$},{options:1}).lean();if(!$app_processData$$)throw Error("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");const $f_sl$$=$app_processData$$.options?.f_sl??4,$f_tien$$=$app_processData$$.options?.f_tien??0;let $groupBy$$=$condition$$.groupBy||$condition$$.groupby||["ma_vt"];if(_.isString($groupBy$$))try{$groupBy$$=$groupBy$$.includes("[")?
|
|
4
|
+
JSON.parse($groupBy$$):$groupBy$$.split(",")}catch($e$$){$groupBy$$=["ma_vt"]}if(_.isString($condition$$.ma_vt)&&$condition$$.ma_vt.includes("["))try{$condition$$.ma_vt=JSON.parse($condition$$.ma_vt),$condition$$.ma_vt.length===0&&($condition$$.ma_vt=void 0)}catch($e$$){}const $pDauKy$$=new Promise(($resolve$$,$reject$$)=>{$log$$("stocksummary: calculate balance begin");const $result$$=dkvt({...$condition$$,ngay:$condition$$.tu_ngay},($err$$,$res$$)=>{if($err$$)return $reject$$($err$$);$resolve$$($res$$)});
|
|
5
|
+
$result$$&&$result$$.then&&$result$$.then($resolve$$).catch($reject$$)}),$pPhatSinh$$=(async()=>{$log$$("stocksummary: calculate araising");var $isGroupByKho_ma_vt_tu_ngay$$=moment($condition$$.tu_ngay).startOf("day").toDate();const $den_ngay$$=moment($condition$$.den_ngay).endOf("day").toDate(),$query$$={id_app:$id_app$$,ngay_ct:{$gte:$isGroupByKho_ma_vt_tu_ngay$$,$lte:$den_ngay$$}};$ds_ma_kho$$?$query$$.ma_kho={$in:$ds_ma_kho$$}:$condition$$.ma_kho&&($query$$.ma_kho=$condition$$.ma_kho);$condition$$.ma_dvcs&&
|
|
6
|
+
($query$$.ma_dvcs=$condition$$.ma_dvcs);$condition$$.ma_kh&&($query$$.ma_kh=$condition$$.ma_kh);if($isGroupByKho_ma_vt_tu_ngay$$=$condition$$.ma_vt)_.isArray($isGroupByKho_ma_vt_tu_ngay$$)?$query$$.ma_vt={$in:$isGroupByKho_ma_vt_tu_ngay$$}:$query$$.ma_vt=$isGroupByKho_ma_vt_tu_ngay$$;["ma_lo","ma_tt1","ma_tt2","ma_tt3"].forEach($f$$=>{$condition$$[$f$$]&&($query$$[$f$$]=$condition$$[$f$$])});$isGroupByKho_ma_vt_tu_ngay$$=$groupBy$$.includes("ma_kho");!$condition$$.exclude_ct_dc||$condition$$.ma_kho||
|
|
7
|
+
$isGroupByKho_ma_vt_tu_ngay$$||($query$$.ma_ct={$nin:["PNC","PXC"]});return sokho.aggregate([{$match:$query$$},{$group:{_id:{ma_vt:"$ma_vt",ma_kho:"$ma_kho",ma_dvcs:"$ma_dvcs",ma_kh:"$ma_kh",ma_lo:"$ma_lo",ma_tt1:"$ma_tt1",ma_tt2:"$ma_tt2",ma_tt3:"$ma_tt3"},sl_nhap:{$sum:"$sl_nhap_qd"},sl_xuat:{$sum:"$sl_xuat_qd"},tien_nhap:{$sum:"$tien_nhap"},tien_xuat:{$sum:"$tien_xuat"}}},{$project:{_id:0,ma_vt:"$_id.ma_vt",ma_kho:"$_id.ma_kho",ma_kh:"$_id.ma_kh",ma_dvcs:"$_id.ma_dvcs",ma_lo:"$_id.ma_lo",ma_tt1:"$_id.ma_tt1",
|
|
8
|
+
ma_tt2:"$_id.ma_tt2",ma_tt3:"$_id.ma_tt3",sl_nhap:1,sl_xuat:1,tien_nhap:1,tien_xuat:1}}])})(),[$dnData$$,$psData$$]=await Promise.all([$pDauKy$$,$pPhatSinh$$]),$allMaVt$$=new Set;$dnData$$.forEach($d$$=>$d$$.ma_vt&&$allMaVt$$.add($d$$.ma_vt));$psData$$.forEach($d$$=>$d$$.ma_vt&&$allMaVt$$.add($d$$.ma_vt));let $dmvtMap$$=new Map;$allMaVt$$.size>0&&(await dmvt.find({id_app:$id_app$$,ma_vt:{$in:[...$allMaVt$$]}},{ma_vt:1,ten_vt:1,dvt:1,ma_nvt:1,ma_nvt2:1,ma_nvt3:1,ma_nvt4:1}).lean()).forEach($d$$=>$dmvtMap$$.set($d$$.ma_vt,
|
|
9
|
+
$d$$));$log$$("stocksummary: group by");const $dataMap$$=new Map,$getGroupKey$$=$item$$=>$groupBy$$.map($k$$=>$item$$[$k$$]||"").join("||");$app_processData$$=($JSCompiler_temp_const$jscomp$0$$,$type$$)=>{for(const $row$$ of $JSCompiler_temp_const$jscomp$0$$){$row$$.ma_vt&&$dmvtMap$$.has($row$$.ma_vt)&&($JSCompiler_temp_const$jscomp$0$$=$dmvtMap$$.get($row$$.ma_vt),$row$$.ten_vt=$JSCompiler_temp_const$jscomp$0$$.ten_vt,$row$$.dvt=$JSCompiler_temp_const$jscomp$0$$.dvt,$row$$.ma_nvt=$JSCompiler_temp_const$jscomp$0$$.ma_nvt,
|
|
10
|
+
$row$$.ma_nvt2=$JSCompiler_temp_const$jscomp$0$$.ma_nvt2,$row$$.ma_nvt3=$JSCompiler_temp_const$jscomp$0$$.ma_nvt3,$row$$.ma_nvt4=$JSCompiler_temp_const$jscomp$0$$.ma_nvt4);const $key$$=$getGroupKey$$($row$$);if(!$dataMap$$.has($key$$)){$JSCompiler_temp_const$jscomp$0$$=$dataMap$$;var $JSCompiler_temp_const$$=$JSCompiler_temp_const$jscomp$0$$.set;var $JSCompiler_inline_result$$={..._.pick($row$$,$groupBy$$),ton_dau:0,du_dau:0,sl_nhap:0,sl_xuat:0,tien_nhap:0,tien_xuat:0,ten_vt:$row$$.ten_vt||"",dvt:$row$$.dvt||
|
|
11
|
+
""};$JSCompiler_temp_const$$.call($JSCompiler_temp_const$jscomp$0$$,$key$$,$JSCompiler_inline_result$$)}$JSCompiler_temp_const$jscomp$0$$=$dataMap$$.get($key$$);$type$$==="dn"?($JSCompiler_temp_const$jscomp$0$$.ton_dau+=$row$$.ton00||0,$JSCompiler_temp_const$jscomp$0$$.du_dau+=$row$$.du00||0):$type$$==="ps"&&($JSCompiler_temp_const$jscomp$0$$.sl_nhap+=$row$$.sl_nhap||0,$JSCompiler_temp_const$jscomp$0$$.sl_xuat+=$row$$.sl_xuat||0,$JSCompiler_temp_const$jscomp$0$$.tien_nhap+=$row$$.tien_nhap||0,$JSCompiler_temp_const$jscomp$0$$.tien_xuat+=
|
|
12
|
+
$row$$.tien_xuat||0)}};$app_processData$$($dnData$$,"dn");$app_processData$$($psData$$,"ps");let $result$$=Array.from($dataMap$$.values()).map($r$$=>{$r$$.ton_dau=utils.round($r$$.ton_dau,$f_sl$$);$r$$.du_dau=Math.roundBy($r$$.du_dau,$f_tien$$);$r$$.sl_nhap=utils.round($r$$.sl_nhap,$f_sl$$);$r$$.sl_xuat=utils.round($r$$.sl_xuat,$f_sl$$);$r$$.tien_nhap=Math.roundBy($r$$.tien_nhap,$f_tien$$);$r$$.tien_xuat=Math.roundBy($r$$.tien_xuat,$f_tien$$);$r$$.ton_cuoi=utils.round($r$$.ton_dau+$r$$.sl_nhap-$r$$.sl_xuat,
|
|
13
|
+
$f_sl$$);$r$$.du_cuoi=Math.roundBy($r$$.du_dau+$r$$.tien_nhap-$r$$.tien_xuat,$f_tien$$);return $r$$});$result$$=$result$$.filter($r$$=>Math.abs($r$$.ton_dau)+Math.abs($r$$.du_dau)+Math.abs($r$$.sl_nhap)+Math.abs($r$$.tien_nhap)+Math.abs($r$$.sl_xuat)+Math.abs($r$$.tien_xuat)+Math.abs($r$$.ton_cuoi)+Math.abs($r$$.du_cuoi)!==0);$result$$.sort(($a$$,$b$$)=>{const $cmpVt$$=($a$$.ma_vt||"").localeCompare($b$$.ma_vt||"");return $cmpVt$$!==0?$cmpVt$$:($a$$.ma_kho||"").localeCompare($b$$.ma_kho||"")});if($condition$$.ma_dvt)await $result$$.asyncJoinModel2($condition$$.id_app,
|
|
14
|
+
"dmvt",{where:"ma_vt",fields:"ma_dvt"}),await $result$$.asyncJoinModel2($condition$$.id_app,"dmqddvt",{where:$item$$=>({ma_vt:$item$$.ma_vt,ma_dvt:$condition$$.ma_dvt}),setFields:($item$$,$he_so_qd_ref$$)=>{$he_so_qd_ref$$&&$he_so_qd_ref$$.tu?($item$$.ma_dvt_bc=$condition$$.ma_dvt,$he_so_qd_ref$$=$he_so_qd_ref$$.mau/$he_so_qd_ref$$.tu,$item$$.sl_xuat_qd_bc=$he_so_qd_ref$$*($item$$.sl_xuat||0),$item$$.sl_nhap_qd_bc=$he_so_qd_ref$$*($item$$.sl_nhap||0),$item$$.ton_dau_qd_bc=$he_so_qd_ref$$*($item$$.ton_dau||
|
|
15
|
+
0),$item$$.ton_cuoi_qd_bc=$he_so_qd_ref$$*($item$$.ton_cuoi||0)):($item$$.ma_dvt_bc=$item$$.ma_dvt,$item$$.ton_dau_qd_bc=$item$$.ton_dau,$item$$.ton_cuoi_qd_bc=$item$$.ton_cuoi,$item$$.sl_xuat_qd_bc=$item$$.sl_xuat,$item$$.sl_nhap_qd_bc=$item$$.sl_nhap)}});else for(let $item$$ of $result$$)$item$$.ma_dvt_bc=$item$$.ma_dvt,$item$$.ton_dau_qd_bc=$item$$.ton_dau,$item$$.ton_cuoi_qd_bc=$item$$.ton_cuoi,$item$$.sl_xuat_qd_bc=$item$$.sl_xuat,$item$$.sl_nhap_qd_bc=$item$$.sl_nhap;if($condition$$.tinh_tong_cong||
|
|
16
|
+
$condition$$.chi_hien_tong_cong){let $total_row$$={bold:!0,ten_vt:"T\u1ed5ng c\u1ed9ng",ton_dau:0,du_dau:0,sl_nhap:0,sl_xuat:0,tien_nhap:0,tien_xuat:0,ton_cuoi:0,du_cuoi:0};$result$$.forEach($r$$=>{$total_row$$.ton_dau+=$r$$.ton_dau||0;$total_row$$.du_dau+=$r$$.du_dau||0;$total_row$$.sl_nhap+=$r$$.sl_nhap||0;$total_row$$.sl_xuat+=$r$$.sl_xuat||0;$total_row$$.tien_nhap+=$r$$.tien_nhap||0;$total_row$$.tien_xuat+=$r$$.tien_xuat||0;$total_row$$.ton_cuoi+=$r$$.ton_cuoi||0;$total_row$$.du_cuoi+=$r$$.du_cuoi||
|
|
17
|
+
0});$condition$$.chi_hien_tong_cong?$result$$=[$total_row$$]:$result$$.push($total_row$$)}return $fn$$?$fn$$(null,$result$$,$groupBy$$):$result$$}catch($error$$){Logger.error("StockSummary Error:",$error$$);if($fn$$)return $fn$$($error$$.message||$error$$);throw $error$$;}};
|
package/server/libs/thnxtnpp.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const dkvt=require("./dkvtnpp"),sokho=global.getModel("sokhonpp"),dmvt=global.getModel("dmvt"),async=require("async"),underscore=require("underscore"),utils=require("./utils");
|
|
2
|
-
module.exports=async function($condition$$,$fn$$,$log$$=()=>{}){$log$$("stocksummary: prepare condition");if($condition$$&&$condition$$.tu_ngay&&$condition$$.den_ngay&&$condition$$.id_app){var $id_app$$=$condition$$.id_app,$
|
|
3
|
-
$condition$$.groupBy||$condition$$.groupby;$groupBy$$||=["ma_vt"];if(underscore.isString($groupBy$$))if($groupBy$$.indexOf("[")>=0)try{$groupBy$$=JSON.parse($groupBy$$)}catch($e$$){Logger.error($e$$)}else $groupBy$$=$groupBy$$.split(",");if(underscore.isString($condition$$.ma_vt)
|
|
4
|
-
{$log$$("stocksummary: calculate balance begin");dkvt($condition$$,function($error$$,$result$$){if($error$$)return $callback$$($error$$);$result$$.joinModel2($id_app$$,dmvt,{where:"ma_vt",fields:["ma_nvt","ma_nvt2","ma_nvt3","ma_nvt4"]},
|
|
5
|
-
$
|
|
6
|
-
"PXC"]});$condition$$.ma_kh&&($query$$.ma_kh=$condition$$.ma_kh);$log$$("stocksummary: calculate araising");sokho.find($query$$).lean().then($pss$$=>{$pss$$=$pss$$.map($ps$$=>{$ps$$.sl_nhap
|
|
7
|
-
{const $data$$=$results$$.dn.concat($results$$.ps);$log$$("stocksummary: group by");$data$$.groupBy($groupBy$$,[{name:"ton_dau",value:"ton00"},{name:"du_dau",value:"du00"},"sl_nhap","sl_xuat",
|
|
8
|
-
utils.round($r$$.ton_dau
|
|
9
|
-
$log$$("stocksummary: finish");$fn$$(null,$e$jscomp$2_result$$)})})})}else $fn$$("L\u1ed7i: B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: tu_ngay,den_ngay,id_app")};
|
|
2
|
+
module.exports=async function($condition$$,$fn$$,$log$$=()=>{}){$log$$("stocksummary: prepare condition");if($condition$$&&$condition$$.tu_ngay&&$condition$$.den_ngay&&$condition$$.id_app){var $id_app$$=$condition$$.id_app,$ds_ma_kho$$;$condition$$.ma_kho&&(Array.isArray($condition$$.ma_kho)?$ds_ma_kho$$=[...$condition$$.ma_kho]:typeof $condition$$.ma_kho=="string"&&($ds_ma_kho$$=await global.getModel("dmkho").getAllChildrenGroup($id_app$$,$condition$$.ma_kho)));var $app$$=await global.getModel("app").findOne({_id:$id_app$$},
|
|
3
|
+
{options:1}).lean();if(!$app$$)return $fn$$("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");var $f_sl$$=($app$$.options||{}).f_sl==void 0?4:($app$$.options||{}).f_sl,$f_tien$$=($app$$.options||{}).f_tien||0,$groupBy$$=$condition$$.groupBy||$condition$$.groupby;$groupBy$$||=["ma_vt"];if(underscore.isString($groupBy$$))if($groupBy$$.indexOf("[")>=0)try{$groupBy$$=JSON.parse($groupBy$$)}catch($e$$){Logger.error($e$$)}else $groupBy$$=$groupBy$$.split(",");if(underscore.isString($condition$$.ma_vt)&&
|
|
4
|
+
$condition$$.ma_vt.indexOf("[")>=0&&$condition$$.ma_vt.indexOf("]")>0)try{$condition$$.ma_vt=JSON.parse($condition$$.ma_vt),$condition$$.ma_vt.length==0&&($condition$$.ma_vt=void 0)}catch($e$$){Logger.error($e$$)}async.parallel({dn:function($callback$$){setImmediate(()=>{$log$$("stocksummary: calculate balance begin");dkvt($condition$$,function($error$$,$result$$){if($error$$)return $callback$$($error$$);$result$$.joinModel2($id_app$$,dmvt,{where:"ma_vt",fields:["ma_nvt","ma_nvt2","ma_nvt3","ma_nvt4"]},
|
|
5
|
+
()=>{$callback$$(null,$result$$)})})})},ps:function($callback$$){setImmediate(()=>{let $ma_vt$$=$condition$$.ma_vt;underscore.isArray($ma_vt$$)&&($ma_vt$$={$in:$ma_vt$$});let $query$$={id_app:$id_app$$,ngay_ct:{$gte:$condition$$.tu_ngay,$lte:$condition$$.den_ngay}};$ds_ma_kho$$?$query$$.ma_kho={$in:$ds_ma_kho$$}:$condition$$.ma_kho&&($query$$.ma_kho=$condition$$.ma_kho);$condition$$.ma_dvcs&&($query$$.ma_dvcs=$condition$$.ma_dvcs);$ma_vt$$&&($query$$.ma_vt=$ma_vt$$);$condition$$.ma_lo&&($query$$.ma_lo=
|
|
6
|
+
$condition$$.ma_lo);$condition$$.ma_tt1&&($query$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($query$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($query$$.ma_tt3=$condition$$.ma_tt3);!$condition$$.exclude_ct_dc||$condition$$.ma_kho||$groupBy$$.find($g$$=>$g$$==="ma_kho")||($query$$.ma_ct={$nin:["PNC","PXC"]});$condition$$.ma_kh&&($query$$.ma_kh=$condition$$.ma_kh);$log$$("stocksummary: calculate araising");sokho.find($query$$).lean().then($pss$$=>{$pss$$=$pss$$.map($ps$$=>{$ps$$.sl_nhap=
|
|
7
|
+
$ps$$.sl_nhap_qd;$ps$$.sl_xuat=$ps$$.sl_xuat_qd;return $ps$$});$pss$$.joinModel2($id_app$$,dmvt,{where:"ma_vt",fields:["ma_nvt","ma_nvt2","ma_nvt3","ma_nvt4"]},()=>{$callback$$(null,$pss$$)})}).catch($error$$=>{$callback$$($error$$)})})}},function($error$$,$results$$){$error$$?$fn$$($error$$):setImmediate(()=>{const $data$$=$results$$.dn.concat($results$$.ps);$log$$("stocksummary: group by");$data$$.groupBy($groupBy$$,[{name:"ton_dau",value:"ton00"},{name:"du_dau",value:"du00"},"sl_nhap","sl_xuat",
|
|
8
|
+
"tien_nhap","tien_xuat"],($e$jscomp$2_result$$,$groups$$)=>{if($e$jscomp$2_result$$)return $fn$$($e$jscomp$2_result$$);for(let $r$$ of $groups$$)$r$$.ton_dau=utils.round($r$$.ton_dau||0,$f_sl$$),$r$$.sl_nhap=utils.round($r$$.sl_nhap||0,$f_sl$$),$r$$.sl_xuat=utils.round($r$$.sl_xuat||0,$f_sl$$),$r$$.ton_cuoi=utils.round($r$$.ton_dau+$r$$.sl_nhap-$r$$.sl_xuat,$f_sl$$),$r$$.du_dau=utils.round($r$$.du_dau||0,$f_tien$$),$r$$.du_cuoi=Math.roundBy($r$$.du_dau,$f_tien$$)+Math.roundBy($r$$.tien_nhap,$f_tien$$)-
|
|
9
|
+
Math.roundBy($r$$.tien_xuat,$f_tien$$);$e$jscomp$2_result$$=underscore.filter($groups$$,function($r$$){return Math.abs($r$$.ton_dau)+Math.abs($r$$.du_dau)+Math.abs($r$$.sl_nhap)+Math.abs($r$$.tien_nhap)+Math.abs($r$$.sl_xuat)+Math.abs($r$$.tien_xuat)+Math.abs($r$$.ton_cuoi)+Math.abs($r$$.du_cuoi)!==0});$log$$("stocksummary: finish");$fn$$(null,$e$jscomp$2_result$$)})})})}else $fn$$("L\u1ed7i: B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: tu_ngay,den_ngay,id_app")};
|
package/server/libs/thnxttt.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
const dkvt=require("./dkvttt"),sokho=global.getModel("sokhott"),dmvt=global.getModel("dmvt"),async=require("async"),underscore=require("underscore"),utils=require("./utils");
|
|
2
|
-
module.exports=async function($condition$$,$fn$$,$log$$=()=>{}){$log$$("stocksummary: prepare condition");if($condition$$&&$condition$$.tu_ngay&&$condition$$.den_ngay&&$condition$$.id_app){var $id_app$$=$condition$$.id_app,$
|
|
3
|
-
$condition$$.groupBy||$condition$$.groupby;$groupBy$$||=["ma_vt"];if(underscore.isString($groupBy$$))if($groupBy$$.indexOf("[")>=0)try{$groupBy$$=JSON.parse($groupBy$$)}catch($e$$){Logger.error($e$$)}else $groupBy$$=$groupBy$$.split(",");if(underscore.isString($condition$$.ma_vt)
|
|
4
|
-
{$log$$("stocksummary: calculate balance begin");dkvt($condition$$,function($error$$,$result$$){if($error$$)return $callback$$($error$$);$result$$.joinModel2($id_app$$,dmvt,{where:"ma_vt",fields:["ma_nvt","ma_nvt2","ma_nvt3","ma_nvt4"]},
|
|
5
|
-
$
|
|
6
|
-
"PXC"]});$log$$("stocksummary: calculate araising");sokho.find($query$$).lean().then($pss$$=>{$pss$$=$pss$$.map($ps$$=>{$ps$$.sl_nhap=$ps$$.sl_nhap_qd;$ps$$.sl_xuat=$ps$$.sl_xuat_qd;return $ps$$})
|
|
7
|
-
$data$$.groupBy($groupBy$$,[{name:"ton_dau",value:"ton00"},{name:"du_dau",value:"du00"},"sl_nhap","sl_xuat","tien_nhap","tien_xuat"],($e$jscomp$2_result$$,$groups$$)=>{if($e$jscomp$2_result$$)return $fn$$($e$jscomp$2_result$$);
|
|
8
|
-
|
|
2
|
+
module.exports=async function($condition$$,$fn$$,$log$$=()=>{}){$log$$("stocksummary: prepare condition");if($condition$$&&$condition$$.tu_ngay&&$condition$$.den_ngay&&$condition$$.id_app){var $id_app$$=$condition$$.id_app,$ds_ma_kho$$;$condition$$.ma_kho&&(Array.isArray($condition$$.ma_kho)?$ds_ma_kho$$=[...$condition$$.ma_kho]:typeof $condition$$.ma_kho=="string"&&($ds_ma_kho$$=await global.getModel("dmkho").getAllChildrenGroup($id_app$$,$condition$$.ma_kho)));var $app$$=await global.getModel("app").findOne({_id:$id_app$$},
|
|
3
|
+
{options:1}).lean();if(!$app$$)return $fn$$("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");var $f_sl$$=($app$$.options||{}).f_sl==void 0?4:($app$$.options||{}).f_sl,$f_tien$$=($app$$.options||{}).f_tien||0,$groupBy$$=$condition$$.groupBy||$condition$$.groupby;$groupBy$$||=["ma_vt"];if(underscore.isString($groupBy$$))if($groupBy$$.indexOf("[")>=0)try{$groupBy$$=JSON.parse($groupBy$$)}catch($e$$){Logger.error($e$$)}else $groupBy$$=$groupBy$$.split(",");if(underscore.isString($condition$$.ma_vt)&&
|
|
4
|
+
$condition$$.ma_vt.indexOf("[")>=0&&$condition$$.ma_vt.indexOf("]")>0)try{$condition$$.ma_vt=JSON.parse($condition$$.ma_vt),$condition$$.ma_vt.length==0&&($condition$$.ma_vt=void 0)}catch($e$$){Logger.error($e$$)}async.parallel({dn:function($callback$$){setImmediate(()=>{$log$$("stocksummary: calculate balance begin");dkvt($condition$$,function($error$$,$result$$){if($error$$)return $callback$$($error$$);$result$$.joinModel2($id_app$$,dmvt,{where:"ma_vt",fields:["ma_nvt","ma_nvt2","ma_nvt3","ma_nvt4"]},
|
|
5
|
+
()=>{$callback$$(null,$result$$)})})})},ps:function($callback$$){setImmediate(()=>{let $ma_vt$$=$condition$$.ma_vt;underscore.isArray($ma_vt$$)&&($ma_vt$$={$in:$ma_vt$$});let $query$$={id_app:$id_app$$,ngay_ct:{$gte:$condition$$.tu_ngay,$lte:$condition$$.den_ngay}};$ds_ma_kho$$?$query$$.ma_kho={$in:$ds_ma_kho$$}:$condition$$.ma_kho&&($query$$.ma_kho=$condition$$.ma_kho);$condition$$.ma_dvcs&&($query$$.ma_dvcs=$condition$$.ma_dvcs);$ma_vt$$&&($query$$.ma_vt=$ma_vt$$);$condition$$.ma_lo&&($query$$.ma_lo=
|
|
6
|
+
$condition$$.ma_lo);$condition$$.ma_tt1&&($query$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($query$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($query$$.ma_tt3=$condition$$.ma_tt3);!$condition$$.exclude_ct_dc||$condition$$.ma_kho||$groupBy$$.find($g$$=>$g$$==="ma_kho")||($query$$.ma_ct={$nin:["PNC","PXC"]});$log$$("stocksummary: calculate araising");sokho.find($query$$).lean().then($pss$$=>{$pss$$=$pss$$.map($ps$$=>{$ps$$.sl_nhap=$ps$$.sl_nhap_qd;$ps$$.sl_xuat=$ps$$.sl_xuat_qd;return $ps$$});
|
|
7
|
+
$pss$$.joinModel2($id_app$$,dmvt,{where:"ma_vt",fields:["ma_nvt","ma_nvt2","ma_nvt3","ma_nvt4"]},()=>{$callback$$(null,$pss$$)})}).catch($error$$=>{$callback$$($error$$)})})}},function($error$$,$results$$){$error$$?$fn$$($error$$):setImmediate(()=>{const $data$$=$results$$.dn.concat($results$$.ps);$log$$("stocksummary: group by");$data$$.groupBy($groupBy$$,[{name:"ton_dau",value:"ton00"},{name:"du_dau",value:"du00"},"sl_nhap","sl_xuat","tien_nhap","tien_xuat"],($e$jscomp$2_result$$,$groups$$)=>{if($e$jscomp$2_result$$)return $fn$$($e$jscomp$2_result$$);
|
|
8
|
+
for(let $r$$ of $groups$$)$r$$.ton_dau=utils.round($r$$.ton_dau||0,$f_sl$$),$r$$.sl_nhap=utils.round($r$$.sl_nhap||0,$f_sl$$),$r$$.sl_xuat=utils.round($r$$.sl_xuat||0,$f_sl$$),$r$$.ton_cuoi=utils.round($r$$.ton_dau+$r$$.sl_nhap-$r$$.sl_xuat,$f_sl$$),$r$$.du_dau=utils.round($r$$.du_dau||0,$f_tien$$),$r$$.du_cuoi=Math.roundBy($r$$.du_dau,$f_tien$$)+Math.roundBy($r$$.tien_nhap,$f_tien$$)-Math.roundBy($r$$.tien_xuat,$f_tien$$);$e$jscomp$2_result$$=underscore.filter($groups$$,function($r$$){return Math.abs($r$$.ton_dau)+
|
|
9
|
+
Math.abs($r$$.du_dau)+Math.abs($r$$.sl_nhap)+Math.abs($r$$.tien_nhap)+Math.abs($r$$.sl_xuat)+Math.abs($r$$.tien_xuat)+Math.abs($r$$.ton_cuoi)+Math.abs($r$$.du_cuoi)!==0});$log$$("stocksummary: finish");$fn$$(null,$e$jscomp$2_result$$)})})})}else $fn$$("L\u1ed7i: B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: tu_ngay,den_ngay,id_app")};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const sokho=global.getModel("sokho"),FifoLot=global.getModel("fifo_lot"),FifoTrace=global.getModel("fifo_trace"),getFifoDauKy=require("./fifo_dk"),{normalizeGroupBy,getGroupKeyFromRow,groupKeyToDoc}=require("./fifo_group");
|
|
2
|
+
module.exports=async function($condition_deleteLotQuery$$,$fn$$){if(!($condition_deleteLotQuery$$?.ma_vt&&$condition_deleteLotQuery$$?.tu_ngay&&$condition_deleteLotQuery$$?.den_ngay&&$condition_deleteLotQuery$$?.id_app))return $fn$$("L\u1ed7i: Y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: tu_ngay, den_ngay, id_app, ma_vt");try{const {id_app:$id_app$$,tu_ngay:$tu_ngay$$,den_ngay:$den_ngay$$}=$condition_deleteLotQuery$$,$round$$=$condition_deleteLotQuery$$.round||0;var $i_nam$$=$condition_deleteLotQuery$$.nam;
|
|
3
|
+
const $thang$$=$condition_deleteLotQuery$$.thang,$groupFields$$=normalizeGroupBy($condition_deleteLotQuery$$.group_by);var $ma_kho_qk$$=$groupFields$$.includes("ma_kho")?null:$condition_deleteLotQuery$$.ma_kho||null;const $isSingle$$=!Array.isArray($condition_deleteLotQuery$$.ma_vt),$validListMaVt$$=($isSingle$$?[$condition_deleteLotQuery$$.ma_vt]:$condition_deleteLotQuery$$.ma_vt).filter(Boolean);if($validListMaVt$$.length===0)return $fn$$(null,$isSingle$$?{}:[]);const $querySoKho$$={id_app:$id_app$$,
|
|
4
|
+
ngay_ct_full:{$gte:$tu_ngay$$,$lt:$den_ngay$$},ma_vt:{$in:$validListMaVt$$},$or:[{nxt:1},{nxt:2}]};$ma_kho_qk$$&&($querySoKho$$.ma_kho=$ma_kho_qk$$);const [$dauKyQueues$$,$soKhoRows$$]=await Promise.all([getFifoDauKy({id_app:$id_app$$,ma_vts:$validListMaVt$$,tu_ngay:$tu_ngay$$,ma_kho:$ma_kho_qk$$,nam:$i_nam$$,thang:$thang$$}),$condition_deleteLotQuery$$.soKhoRows?Promise.resolve($condition_deleteLotQuery$$.soKhoRows):sokho.find($querySoKho$$).sort({ngay_ct_full:1,_id:1}).lean()]);$condition_deleteLotQuery$$=
|
|
5
|
+
{id_app:$id_app$$,ma_vt:{$in:$validListMaVt$$}};$groupFields$$.includes("ma_kho")||($condition_deleteLotQuery$$.ma_kho=$ma_kho_qk$$||null);var $fifoLotQuery_idCtXuatTrongKy$$=[...(new Set($soKhoRows$$.filter($r$$=>$r$$.nxt===2).map($r$$=>$r$$.id_ct).filter(Boolean)))];const $deleteOps$$=[FifoLot.deleteMany($condition_deleteLotQuery$$)];$fifoLotQuery_idCtXuatTrongKy$$.length>0&&$deleteOps$$.push(FifoTrace.deleteMany({id_app:$id_app$$,id_ct_xuat:{$in:$fifoLotQuery_idCtXuatTrongKy$$}}));await Promise.all($deleteOps$$);
|
|
6
|
+
$fifoLotQuery_idCtXuatTrongKy$$={id_app:$id_app$$,ma_vt:{$in:$validListMaVt$$},sl_con:{$ne:0},ngay_nhap:{$lt:$tu_ngay$$}};$groupFields$$.includes("ma_kho")||($fifoLotQuery_idCtXuatTrongKy$$.ma_kho=$ma_kho_qk$$||null);var $existingFifoLots_tien_xuat_kq$$=await FifoLot.find($fifoLotQuery_idCtXuatTrongKy$$).sort({ma_vt:1,ngay_nhap:1,id_sokho:1}).lean();const $fifoQueues$$=new Map;for(const $lot$$ of $existingFifoLots_tien_xuat_kq$$){const $groupKey$$=$groupFields$$.length>0?$groupFields$$.map($f$$=>
|
|
7
|
+
$lot$$[$f$$]||"").join("|"):"",$qk$$=`${$lot$$.ma_vt}||${$groupKey$$}`;$fifoQueues$$.has($qk$$)||$fifoQueues$$.set($qk$$,[]);$fifoQueues$$.get($qk$$).push({_id:$lot$$._id,ma_vt:$lot$$.ma_vt,id_sokho:$lot$$.id_sokho,id_ct:$lot$$.id_ct,ma_ct:$lot$$.ma_ct,so_ct:$lot$$.so_ct||"",ngay_nhap:$lot$$.ngay_nhap,sl_nhap:$lot$$.sl_nhap,sl_da_xuat:$lot$$.sl_da_xuat||0,sl_con:$lot$$.sl_con,gia:$lot$$.gia,tien_nhap:$lot$$.tien_nhap,tien_con:$lot$$.tien_con,ma_dvt:$lot$$.ma_dvt||"",he_so_qd:$lot$$.he_so_qd||1,_groupKey:$groupKey$$,
|
|
8
|
+
_fromFifoLot:!0})}for(const $ma_vt$$ of $validListMaVt$$)if($ma_kho_qk$$=`${$ma_vt$$}||${""}`,!$fifoQueues$$.has($ma_kho_qk$$)){var $fromDauKy_tracePending$$=$dauKyQueues$$.get($ma_vt$$)||[];$fromDauKy_tracePending$$.length>0&&$fifoQueues$$.set($ma_kho_qk$$,$fromDauKy_tracePending$$.map($lot$$=>({_id:null,ma_vt:$ma_vt$$,id_sokho:null,id_ct:null,ma_ct:$lot$$.nguon==="fifo_dk"?"fifo_dk":"dkvt",so_ct:$lot$$.nguon==="fifo_dk"?$lot$$.so_ct_goc||"":"T\u1ed3n \u0111\u1ea7u k\u1ef3",ngay_nhap:$lot$$.ngay_nhap,
|
|
9
|
+
sl_nhap:$lot$$.sl_con,sl_da_xuat:0,sl_con:$lot$$.sl_con,gia:$lot$$.gia,tien_nhap:$lot$$.tien_con,tien_con:$lot$$.tien_con,ma_dvt:$lot$$.ma_dvt||"",he_so_qd:$lot$$.he_so_qd||1,_groupKey:"",_fromDauKy:!0,_nguon:$lot$$.nguon})))}const $ketQua$$=new Map;$fromDauKy_tracePending$$=[];const $detailIndexCounter$$=new Map;for(const $row$$ of $soKhoRows$$){const $rowGroupKey$$=getGroupKeyFromRow($row$$,$groupFields$$),$qk$$=`${$row$$.ma_vt}||${$rowGroupKey$$}`;$fifoQueues$$.has($qk$$)||$fifoQueues$$.set($qk$$,
|
|
10
|
+
[]);const $queue$$=$fifoQueues$$.get($qk$$);$ketQua$$.has($qk$$)||$ketQua$$.set($qk$$,{ma_vt:$row$$.ma_vt,groupKey:$rowGroupKey$$,tongSl:0,tongTien:0});const $kq$$=$ketQua$$.get($qk$$),$groupDoc$$=groupKeyToDoc($groupFields$$,$rowGroupKey$$);if($row$$.nxt===1){const $sl_nhap_qd$$=$row$$.sl_nhap_qd||$row$$.sl_nhap||0,$tien_nhap$$=$row$$.tien_nhap||0,$gia_nhap$$=Math.abs($sl_nhap_qd$$)>1E-4?$tien_nhap$$/$sl_nhap_qd$$:0;Math.abs($sl_nhap_qd$$)>1E-4&&$queue$$.push({_id:null,ma_vt:$row$$.ma_vt,id_sokho:$row$$._id,
|
|
11
|
+
id_ct:$row$$.id_ct,ma_ct:$row$$.ma_ct,so_ct:$row$$.so_ct||"",ngay_nhap:$row$$.ngay_ct_full||$row$$.ngay_ct,sl_nhap:$sl_nhap_qd$$,sl_da_xuat:0,sl_con:$sl_nhap_qd$$,gia:$gia_nhap$$,tien_nhap:$tien_nhap$$,tien_con:$tien_nhap$$,ma_dvt:$row$$.ma_dvt||"",he_so_qd:$row$$.he_so_qd||1,_isNew:!0,_groupKey:$rowGroupKey$$,_groupDoc:$groupDoc$$})}else if($row$$.nxt===2){let $sl_can_xuat$$=$row$$.sl_xuat_qd||$row$$.sl_xuat||0;$ma_kho_qk$$=$sl_can_xuat$$;const $counterKey$$=`${$row$$.id_ct}__${$row$$.ma_vt}__${$rowGroupKey$$}`,
|
|
12
|
+
$detailIdx$$=$row$$.line!==void 0&&$row$$.line!==null?$row$$.line:$row$$.detail_index!==void 0?$row$$.detail_index:$detailIndexCounter$$.get($counterKey$$)||0;$row$$.line!==void 0&&$row$$.line!==null||$detailIndexCounter$$.set($counterKey$$,($detailIndexCounter$$.get($counterKey$$)||0)+1);for($existingFifoLots_tien_xuat_kq$$=0;$sl_can_xuat$$>1E-4&&$queue$$.length>0;){const $lot$$=$queue$$[0];if($lot$$.sl_con<=1E-4){$queue$$.shift();continue}const $sl_tu_lo$$=Math.min($sl_can_xuat$$,$lot$$.sl_con),
|
|
13
|
+
$tien_tu_lo$$=$sl_tu_lo$$*$lot$$.gia,$sl_con_truoc$$=$lot$$.sl_con;$lot$$.sl_da_xuat=($lot$$.sl_da_xuat||0)+$sl_tu_lo$$;$lot$$.sl_con-=$sl_tu_lo$$;$lot$$.tien_con=$lot$$.sl_con*$lot$$.gia;$existingFifoLots_tien_xuat_kq$$+=$tien_tu_lo$$;$sl_can_xuat$$-=$sl_tu_lo$$;$fromDauKy_tracePending$$.push({_lot_ref:$lot$$,id_app:$id_app$$,ma_vt:$row$$.ma_vt,...$groupDoc$$,nam:$i_nam$$,thang:$thang$$,id_fifo_lot:$lot$$._id,id_sokho_nhap:$lot$$.id_sokho||null,id_ct_nhap:$lot$$.id_ct||null,ma_ct_nhap:$lot$$.ma_ct||
|
|
14
|
+
"",so_ct_nhap:$lot$$.so_ct||"",ngay_nhap:$lot$$.ngay_nhap,gia_nhap:$lot$$.gia,id_ct_xuat:$row$$.id_ct,ma_ct_xuat:$row$$.ma_ct,so_ct_xuat:$row$$.so_ct||"",ngay_xuat:$row$$.ngay_ct_full||$row$$.ngay_ct,detail_index:$detailIdx$$,sl_xuat_lo:$sl_tu_lo$$,gia_von:$lot$$.gia,tien_xuat_lo:$tien_tu_lo$$,sl_lo_truoc_xuat:$sl_con_truoc$$,sl_lo_sau_xuat:$lot$$.sl_con});$lot$$.sl_con<=1E-4&&$queue$$.shift()}if($sl_can_xuat$$>1E-4){const $giaFb$$=$queue$$.length>0?$queue$$[0].gia:0;$existingFifoLots_tien_xuat_kq$$+=
|
|
15
|
+
$sl_can_xuat$$*$giaFb$$;const $amLot$$={_id:null,ma_vt:$row$$.ma_vt,id_sokho:$row$$._id,id_ct:$row$$.id_ct,ma_ct:$row$$.ma_ct,so_ct:$row$$.so_ct||"",ngay_nhap:$row$$.ngay_ct_full||$row$$.ngay_ct,sl_nhap:-$sl_can_xuat$$,sl_da_xuat:0,sl_con:-$sl_can_xuat$$,gia:$giaFb$$,tien_nhap:-$sl_can_xuat$$*$giaFb$$,tien_con:-$sl_can_xuat$$*$giaFb$$,ma_dvt:$row$$.ma_dvt||"",he_so_qd:$row$$.he_so_qd||1,_isNew:!0,_amLo:!0,_groupKey:$rowGroupKey$$,_groupDoc:$groupDoc$$};$queue$$.unshift($amLot$$);$fromDauKy_tracePending$$.push({_lot_ref:$amLot$$,
|
|
16
|
+
id_app:$id_app$$,ma_vt:$row$$.ma_vt,...$groupDoc$$,nam:$i_nam$$,thang:$thang$$,id_fifo_lot:null,id_sokho_nhap:null,id_ct_nhap:null,ma_ct_nhap:"kho_am",so_ct_nhap:"",ngay_nhap:$row$$.ngay_ct_full||$row$$.ngay_ct,gia_nhap:$giaFb$$,id_ct_xuat:$row$$.id_ct,ma_ct_xuat:$row$$.ma_ct,so_ct_xuat:$row$$.so_ct||"",ngay_xuat:$row$$.ngay_ct_full||$row$$.ngay_ct,detail_index:$detailIdx$$,sl_xuat_lo:$sl_can_xuat$$,gia_von:$giaFb$$,tien_xuat_lo:$sl_can_xuat$$*$giaFb$$,sl_lo_truoc_xuat:0,sl_lo_sau_xuat:-$sl_can_xuat$$});
|
|
17
|
+
Logger.warn(`[tinhgia1vt_fifo] \u26a0\ufe0f Kho \u00e2m VT ${$row$$.ma_vt} | Nh\u00f3m: ${$rowGroupKey$$} | Thi\u1ebfu ${$sl_can_xuat$$}`)}$kq$$.tongSl+=$ma_kho_qk$$;$kq$$.tongTien+=$existingFifoLots_tien_xuat_kq$$}}const $finalResult$$=Array.from($ketQua$$.values()).map($kq$$=>{let $gia$$=0;$kq$$.tongSl>1E-4&&($gia$$=Math.roundBy($kq$$.tongTien/$kq$$.tongSl,$round$$),$gia$$<0&&($gia$$=0));const $queue$$=$fifoQueues$$.get(`${$kq$$.ma_vt}||${$kq$$.groupKey}`)||[];return{ma_vt:$kq$$.ma_vt,groupKey:$kq$$.groupKey,
|
|
18
|
+
gia:$gia$$,tongSl:$kq$$.tongSl,tongTien:$kq$$.tongTien,tonCuoi:$queue$$.reduce(($s$$,$l$$)=>$s$$+$l$$.sl_con,0),duCuoi:$queue$$.reduce(($s$$,$l$$)=>$s$$+$l$$.tien_con,0),giaCuoi:$queue$$[0]?.gia||0}}),$allLotRefs$$=new Set;for(const $tp$$ of $fromDauKy_tracePending$$)$allLotRefs$$.add($tp$$._lot_ref);for(const [,$queue$$]of $fifoQueues$$)for(const $lot$$ of $queue$$)Math.abs($lot$$.sl_con)>=1E-4&&$allLotRefs$$.add($lot$$);const $allLotsDoc$$=[],$seenLotKeys$$=new Set;for(const $lot$$ of $allLotRefs$$){const $dedupKey$$=
|
|
19
|
+
`${$lot$$.ma_vt}|${(new Date($lot$$.ngay_nhap)).getTime()}|${$lot$$.id_sokho?.toString()||""}|${$lot$$._groupKey||""}`;if($seenLotKeys$$.has($dedupKey$$))continue;$seenLotKeys$$.add($dedupKey$$);const {_id:$_id$$,_isNew:$_isNew$$,_fromFifoLot:$_fromFifoLot$$,_fromDauKy:$_fromDauKy$$,_nguon:$_nguon$$,_amLo:$_amLo$$,_isExisting:$_isExisting$$,_lot_ref:$_lot_ref$$,_groupKey:$_groupKey$$,_groupDoc:$_groupDoc$$,...$lotDoc$$}=$lot$$,$gDoc$$=$_groupDoc$$||groupKeyToDoc($groupFields$$,$_groupKey$$||"");$allLotsDoc$$.push({_lotRef:$lot$$,
|
|
20
|
+
doc:{...$lotDoc$$,id_app:$id_app$$,...$gDoc$$,nam:$i_nam$$,thang:$thang$$},keepInDB:Math.abs($lot$$.sl_con)>=1E-4})}const $insertedAll$$=$allLotsDoc$$.length>0?await FifoLot.insertMany($allLotsDoc$$.map($x$$=>$x$$.doc),{ordered:!0}):[];for($i_nam$$=0;$i_nam$$<$insertedAll$$.length;$i_nam$$++)$allLotsDoc$$[$i_nam$$]._lotRef._id=$insertedAll$$[$i_nam$$]._id;const $zeroLotIds$$=$insertedAll$$.filter(($_$$,$i$$)=>!$allLotsDoc$$[$i$$].keepInDB).map($l$$=>$l$$._id);$zeroLotIds$$.length>0&&await FifoLot.deleteMany({_id:{$in:$zeroLotIds$$}});
|
|
21
|
+
const $traceToInsert$$=$fromDauKy_tracePending$$.map($tp$$=>{const {_lot_ref:$_lot_ref$$,...$traceDoc$$}=$tp$$;return{...$traceDoc$$,id_fifo_lot:$_lot_ref$$._id||null}});$traceToInsert$$.length>0&&await FifoTrace.insertMany($traceToInsert$$,{ordered:!1});Logger.info(`[tinhgia1vt_fifo] \u2705 ${$validListMaVt$$.length} VT | group_by:[${$groupFields$$}] | `+`${$insertedAll$$.length-$zeroLotIds$$.length} l\u00f4 \u2192 fifo_lot | `+`${$traceToInsert$$.length} trace \u2192 fifo_trace`);return $fn$$(null,
|
|
22
|
+
$isSingle$$?$finalResult$$[0]||{}:$finalResult$$)}catch($error$$){return Logger.error("[tinhgia1vt_fifo] Error:",$error$$),$fn$$($error$$)}};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const ckvt=require("./ckvt"),sokho=global.getModel("sokho"),socai=global.getModel("socai"),dmvt=global.getModel("dmvt"),dmqddvt=global.getModel("dmqddvt"),tinhgia1vtFifo=require("./tinhgia1vt_fifo"),_=require("lodash"),Controller=require("../controllers/controller"),moment=require("moment"),{getCurrentSession}=require("./sessionContext"),{normalizeGroupBy,getGroupKeyFromDetail}=require("./fifo_group"),getRawData=$doc$$=>typeof $doc$$.toObject==="function"?$doc$$.toObject():$doc$$,tinhGiaFifoPromise=
|
|
2
|
+
$query$$=>new Promise(($resolve$$,$reject$$)=>tinhgia1vtFifo($query$$,($err$$,$data$$)=>$err$$?$reject$$($err$$):$resolve$$($data$$))),postDataPromise=($data$$,$ctrl$$)=>new Promise(($resolve$$,$reject$$)=>Controller.postData($data$$,$ctrl$$,($err$$,$rs$$)=>$err$$?$reject$$($err$$):$resolve$$($rs$$),{kiem_tra_han_muc_cong_no:!1}));
|
|
3
|
+
module.exports=async function($condition$$,$callback$$){try{if(!($condition$$?.tu_thang&&$condition$$?.den_thang&&$condition$$?.nam&&$condition$$?.id_app))throw Error("L\u1ed7i: Y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: tu_thang, den_thang, nam, id_app");const $den_thang$$=Number($condition$$.den_thang),$id_app$$=$condition$$.id_app,$tu_ngay$$=moment(new Date($condition$$.nam,Number($condition$$.tu_thang)-1,15)).startOf("month").toDate(),$den_ngay$$=moment(new Date($condition$$.nam,$den_thang$$-1,
|
|
4
|
+
15)).endOf("month").toDate();var $query_dmvt_session$$=getCurrentSession();const $groupFields$$=normalizeGroupBy($condition$$.group_by),$ma_kho$$=$groupFields$$.includes("ma_kho")?null:$condition$$.ma_kho||null,$app$$=await global.getModel("app").findOne({_id:$id_app$$},{options:1}).lean();if(!$app$$)throw Error("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");const $f_tien$$=($app$$.options||{}).f_tien||0;Logger.info(`\ud83d\udd25[tinhgiafifo] Start | Kho: ${$ma_kho$$} | group_by: [${$groupFields$$}] | Session: ${$query_dmvt_session$$?._debugId}`);
|
|
5
|
+
const $dmqdList$$=await dmqddvt.find({id_app:$id_app$$}).lean(),$mapQuyDoi$$=new Map;$dmqdList$$.forEach($qd$$=>{$mapQuyDoi$$.set(`${$qd$$.ma_vt}-${$qd$$.ma_dvt}`,($qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd)||1)});const $getHeSoQuyDoi$$=($ma_vt$$,$ma_dvt$$)=>$ma_dvt$$?$mapQuyDoi$$.get(`${$ma_vt$$}-${$ma_dvt$$}`)||1:1;$query_dmvt_session$$={id_app:$id_app$$,gia_xuat:"2"};$condition$$.ma_nvt&&($query_dmvt_session$$.ma_nvt=$condition$$.ma_nvt);$condition$$.ma_ncc&&($query_dmvt_session$$.ma_ncc=$condition$$.ma_ncc);
|
|
6
|
+
$condition$$.ma_vt&&($query_dmvt_session$$.ma_vt=$condition$$.ma_vt);const $listVt$$=await dmvt.find($query_dmvt_session$$).lean();if($listVt$$.length===0)return Logger.info("[tinhgiafifo] Kh\u00f4ng c\u00f3 v\u1eadt t\u01b0 FIFO n\u00e0o c\u1ea7n t\u00ednh."),$callback$$?$callback$$(null,[]):[];const $ma_vts$$=$listVt$$.map($d$$=>$d$$.ma_vt);Logger.info(`\ud83d\ude80 [tinhgiafifo] T\u00ednh gi\u00e1 FIFO cho ${$ma_vts$$.length} v\u1eadt t\u01b0...`);const $giaDatas$$=await tinhGiaFifoPromise({id_app:$id_app$$,
|
|
7
|
+
tu_ngay:$tu_ngay$$,den_ngay:$den_ngay$$,ma_vt:$ma_vts$$,ma_kho:$ma_kho$$,group_by:$groupFields$$,nam:$condition$$.nam,thang:$den_thang$$,round:$f_tien$$}),$bang_gia$$=(Array.isArray($giaDatas$$)?$giaDatas$$:[$giaDatas$$]).filter(Boolean),$mapGiaTB$$=new Map,$giaTBAccum$$=new Map;for(const $g$$ of $bang_gia$$){if(!$g$$.ma_vt)continue;const $cur$$=$giaTBAccum$$.get($g$$.ma_vt);$cur$$?($cur$$.tongSl+=$g$$.tongSl||0,$cur$$.tongTien+=$g$$.tongTien||0):$giaTBAccum$$.set($g$$.ma_vt,{tongSl:$g$$.tongSl||
|
|
8
|
+
0,tongTien:$g$$.tongTien||0})}for(const [$ma_vt$$,$acc$$]of $giaTBAccum$$)$mapGiaTB$$.set($ma_vt$$,$acc$$.tongSl>0?Math.roundBy($acc$$.tongTien/$acc$$.tongSl,$f_tien$$):0);Logger.info("[tinhgiafifo] \ud83d\ude80 \u0110ang l\u1ea5y danh s\u00e1ch ch\u1ee9ng t\u1eeb...");let $vouchers_x$$=new Map,$vouchers_n$$=new Map;const $id_ct_need_delete$$=[],$fetchVouchersByMaCt$$=async $groupedSks$$=>{const $results$$=new Map,$deleteIds$$=[];await Promise.all(Object.entries($groupedSks$$).map(async([$ma_ct$$,
|
|
9
|
+
$listSk$$])=>{try{const $ctrl$$=global.controllers[$ma_ct$$.toUpperCase()],$Model$$=$ctrl$$?$ctrl$$.getProperty("model"):mongoose.models[$ma_ct$$.toLowerCase()];if($Model$$){var $ids$$=[...(new Set($listSk$$.map($s$$=>$s$$.id_ct)))],$foundVouchers$$=await $Model$$.find({_id:{$in:$ids$$}}).lean(),$foundIds$$=new Set;for(const $v$$ of $foundVouchers$$)$results$$.set($v$$._id.toString(),$v$$),$foundIds$$.add($v$$._id.toString());$ids$$.forEach($id$$=>{$foundIds$$.has($id$$.toString())||$deleteIds$$.push($id$$)})}else Logger.warn(`\u26a0\ufe0f [tinhgiafifo] Kh\u00f4ng t\u00ecm th\u1ea5y model: ${$ma_ct$$}`)}catch($err$$){throw Logger.error(`\u274c[tinhgiafifo] L\u1ed7i load ch\u1ee9ng t\u1eeb ${$ma_ct$$}:`,
|
|
10
|
+
$err$$.message),$err$$;}}));return{vouchers:$results$$,deleteIds:$deleteIds$$}};await Promise.all([(async()=>{var $q_res_sks$$={id_app:$id_app$$,ngay_ct_full:{$gte:$tu_ngay$$,$lte:$den_ngay$$},nxt:2,ma_vt:{$in:$ma_vts$$},px_gia_dd:!1};$ma_kho$$&&($q_res_sks$$.ma_kho=$ma_kho$$);$q_res_sks$$=await sokho.find($q_res_sks$$).lean();$q_res_sks$$=await $fetchVouchersByMaCt$$(_.groupBy($q_res_sks$$,"ma_ct"));$q_res_sks$$.vouchers.forEach(($v$$,$k$$)=>$vouchers_x$$.set($k$$,$v$$));$id_ct_need_delete$$.push(...$q_res_sks$$.deleteIds)})(),
|
|
11
|
+
(async()=>{var $q$jscomp$1_res$jscomp$1_sks$$={id_app:$id_app$$,ngay_ct_full:{$gte:$tu_ngay$$,$lte:$den_ngay$$},nxt:1,ma_vt:{$in:$ma_vts$$},pn_gia_tb:!0,ma_ct:{$ne:"PXC"}};$ma_kho$$&&($q$jscomp$1_res$jscomp$1_sks$$.ma_kho=$ma_kho$$);$q$jscomp$1_res$jscomp$1_sks$$=await sokho.find($q$jscomp$1_res$jscomp$1_sks$$).lean();$q$jscomp$1_res$jscomp$1_sks$$=await $fetchVouchersByMaCt$$(_.groupBy($q$jscomp$1_res$jscomp$1_sks$$,"ma_ct"));$q$jscomp$1_res$jscomp$1_sks$$.vouchers.forEach(($v$$,$k$$)=>$vouchers_n$$.set($k$$,
|
|
12
|
+
$v$$));$id_ct_need_delete$$.push(...$q$jscomp$1_res$jscomp$1_sks$$.deleteIds)})(),(async()=>{if($ma_kho$$){const $q$$={id_app:$id_app$$,ma_ct:"PNC",ngay_ct_full:{$gte:$tu_ngay$$,$lte:$den_ngay$$},$or:[{ma_kho_x:$ma_kho$$},{"details.ma_kho_x":$ma_kho$$}],"details.px_gia_dd":!1};(await global.getModel("pnc").find($q$$).lean()).forEach($p$$=>$vouchers_n$$.set($p$$._id.toString(),$p$$))}})()]);$id_ct_need_delete$$.length>0&&(await sokho.deleteMany({id_app:$id_app$$,id_ct:{$in:$id_ct_need_delete$$}}),
|
|
13
|
+
await socai.deleteMany({id_app:$id_app$$,id_ct:{$in:$id_ct_need_delete$$}}));const $FifoTrace$$=global.getModel("fifo_trace"),$fifoTraceQuery$$={id_app:$id_app$$,nam:$condition$$.nam,thang:$den_thang$$};$groupFields$$.includes("ma_kho")||($fifoTraceQuery$$.ma_kho=$ma_kho$$||null);const $fifoTraceKy$$=await $FifoTrace$$.find($fifoTraceQuery$$).lean();Logger.info(`[tinhgiafifo] fifo_trace records: ${$fifoTraceKy$$.length}`);const $mapFifo$$=new Map;for(const $tr$$ of $fifoTraceKy$$){const $trGroupKey$$=
|
|
14
|
+
$groupFields$$.length>0?$groupFields$$.map($f$$=>$tr$$[$f$$]||"").join("|"):"",$key$$=`${$tr$$.id_ct_xuat}__${$tr$$.ma_vt}__${$trGroupKey$$}`,$cur$$=$mapFifo$$.get($key$$);$cur$$?($cur$$.tong_sl+=$tr$$.sl_xuat_lo,$cur$$.tong_tien+=$tr$$.tien_xuat_lo):$mapFifo$$.set($key$$,{tong_sl:$tr$$.sl_xuat_lo,tong_tien:$tr$$.tien_xuat_lo,gia_von_tb:0})}for(const [,$v$$]of $mapFifo$$)$v$$.gia_von_tb=$v$$.tong_sl>0?$v$$.tong_tien/$v$$.tong_sl:0;const $allVouchers$$=_.sortBy([...$vouchers_x$$.values(),...$vouchers_n$$.values()],
|
|
15
|
+
$v$$=>(new Date($v$$.ngay_ct_full||$v$$.ngay_ct)).getTime()),$modifiedIds$$=new Set;for(const $voucher$$ of $allVouchers$$){let $isModified$$=!1;const $isPhieuNhap$$=$vouchers_n$$.has($voucher$$._id.toString()),$idCtStr$$=$voucher$$._id.toString();if($isPhieuNhap$$)$voucher$$.details&&$voucher$$.details.forEach($d$$=>{const $he_so_qd$$=$getHeSoQuyDoi$$($d$$.ma_vt,$d$$.ma_dvt);if(!($condition$$.ma_vt&&$condition$$.ma_vt!==$d$$.ma_vt||!($d$$.pn_gia_tb||$voucher$$.ma_ct==="PNC"&&!$d$$.px_gia_dd||$voucher$$.ma_ct===
|
|
16
|
+
"PKK"&&!$d$$.px_gia_dd)||$ma_kho$$&&$ma_kho$$!==$d$$.ma_kho&&$ma_kho$$!==$d$$.ma_kho_x&&$ma_kho$$!==$voucher$$.ma_kho&&$ma_kho$$!==$voucher$$.ma_kho_n)){var $gia_tb$$=$mapGiaTB$$.get($d$$.ma_vt)||0;$d$$.gia_von=$d$$.gia_von_nt=$gia_tb$$*$he_so_qd$$;$voucher$$.ma_ct==="PNC"||$voucher$$.ma_ct==="PKK"?($d$$.tien_xuat_nt=Math.roundBy(($d$$.sl_xuat||0)*$d$$.gia_von,$f_tien$$),$d$$.tien_xuat=$d$$.tien_xuat_nt):($d$$.tien_nhap_nt=Math.roundBy(($d$$.sl_nhap||0)*$d$$.gia_von,$f_tien$$),$d$$.tien_nhap=$d$$.tien_nhap_nt);
|
|
17
|
+
$isModified$$=!0}}),$voucher$$.details_doi&&$voucher$$.details_doi.forEach($d$$=>{if(!($condition$$.ma_vt&&$condition$$.ma_vt!==$d$$.ma_vt||!$d$$.pn_gia_tb||$ma_kho$$&&$ma_kho$$!==$d$$.ma_kho)){const $he_so_qd$$=$getHeSoQuyDoi$$($d$$.ma_vt,$d$$.ma_dvt),$gia_tb$$=$mapGiaTB$$.get($d$$.ma_vt)||0;$d$$.gia_von=$d$$.gia_von_nt=$gia_tb$$*$he_so_qd$$;$d$$.tien_xuat_nt=Math.roundBy(($d$$.sl_xuat||0)*$d$$.gia_von,$f_tien$$);$d$$.tien_xuat=$d$$.tien_xuat_nt;$isModified$$=!0}});else{const $apGiaFifo$$=$d$$=>
|
|
18
|
+
{if($d$$.px_gia_dd||$condition$$.ma_vt&&$condition$$.ma_vt!==$d$$.ma_vt)return!1;var $detailGroupKey$$=getGroupKeyFromDetail($d$$,$voucher$$,$groupFields$$);if(!$groupFields$$.includes("ma_kho")&&$ma_kho$$){var $detKho_he_so_qd$$=$d$$.ma_kho||$d$$.ma_kho_x||$voucher$$.ma_kho||$voucher$$.ma_kho_x;if($detKho_he_so_qd$$&&$detKho_he_so_qd$$!==$ma_kho$$)return!1}$detailGroupKey$$=$mapFifo$$.get(`${$idCtStr$$}__${$d$$.ma_vt}__${$detailGroupKey$$}`)||null;if(!$detailGroupKey$$)return!1;$detKho_he_so_qd$$=
|
|
19
|
+
$getHeSoQuyDoi$$($d$$.ma_vt,$d$$.ma_dvt);const $sl_xuat$$=$d$$.sl_xuat||$d$$.sl_km||0;$d$$.gia_von=$d$$.gia_von_nt=$detailGroupKey$$.gia_von_tb/($detKho_he_so_qd$$||1);$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy($sl_xuat$$*$d$$.gia_von,$f_tien$$);return!0};$voucher$$.details&&$voucher$$.details.forEach($d$$=>{$condition$$.ma_vt&&$condition$$.ma_vt!==$d$$.ma_vt||$d$$.px_gia_dd||$ma_kho$$&&$ma_kho$$!==($d$$.ma_kho||$d$$.ma_kho_x||$voucher$$.ma_kho||$voucher$$.ma_kho_x)||$d$$.combo&&$d$$.combo.length!==
|
|
20
|
+
0||$apGiaFifo$$($d$$)&&($isModified$$=!0);if($d$$.combo&&$d$$.combo.length>0&&!$d$$.px_gia_dd){let $totalTienCombo$$=0;$d$$.combo.forEach($c$$=>{$condition$$.ma_vt&&$condition$$.ma_vt!==$c$$.ma_vt||$ma_kho$$&&$ma_kho$$!==($d$$.ma_kho||$d$$.ma_kho_x||$voucher$$.ma_kho||$voucher$$.ma_kho_x)||$apGiaFifo$$($c$$)&&($isModified$$=!0);$totalTienCombo$$+=$c$$.tien_xuat_nt||0});$d$$.tien_xuat=$d$$.tien_xuat_nt=$totalTienCombo$$;$d$$.gia_von=$d$$.gia_von_nt=Math.roundBy($d$$.sl_xuat?$totalTienCombo$$/$d$$.sl_xuat:
|
|
21
|
+
0,0)}$d$$.promotion&&$d$$.promotion.details_km&&$d$$.promotion.details_km.forEach($km$$=>{$condition$$.ma_vt&&$condition$$.ma_vt!==$km$$.ma_vt||$km$$.px_gia_dd||$ma_kho$$&&$ma_kho$$!==($km$$.ma_kho||$voucher$$.ma_kho||$voucher$$.ma_kho_x)||$apGiaFifo$$($km$$)&&($isModified$$=!0)})});$voucher$$.details_doi&&$voucher$$.details_doi.forEach($d$$=>{$condition$$.ma_vt&&$condition$$.ma_vt!==$d$$.ma_vt||$d$$.px_gia_dd||$ma_kho$$&&$ma_kho$$!==($d$$.ma_kho||$voucher$$.ma_kho||$voucher$$.ma_kho_x)||$apGiaFifo$$($d$$)&&
|
|
22
|
+
($isModified$$=!0)})}if($isModified$$&&!$modifiedIds$$.has($idCtStr$$)){$modifiedIds$$.add($idCtStr$$);const $voucherData$$=getRawData($voucher$$),{_id:$_id$$,...$updatePayload$$}=$voucherData$$,$ctrl$$=global.controllers[$voucher$$.ma_ct.toUpperCase()];await ($ctrl$$?$ctrl$$.getProperty("model"):mongoose.models[$voucher$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher$$._id},$updatePayload$$);$ctrl$$&&$ctrl$$.post&&await postDataPromise($voucherData$$,$ctrl$$)}}Logger.info("[tinhgiafifo] Ki\u1ec3m tra ch\u00eanh l\u1ec7ch...");
|
|
23
|
+
const $query_ckvt$$={id_app:$id_app$$,ngay:$den_ngay$$,chenh_lech:1};$condition$$.ma_vt&&($query_ckvt$$.ma_vt=$condition$$.ma_vt);$condition$$.ma_kho&&($query_ckvt$$.ma_kho=$condition$$.ma_kho);const $du_cuoi_ky$$=await new Promise(($resolve$$,$reject$$)=>ckvt($query_ckvt$$,($err$$,$data$$)=>$err$$?$reject$$($err$$):$resolve$$($data$$))),$validDuCuoiKy$$=_.filter($du_cuoi_ky$$,$r$$=>$r$$.du00!==0&&($r$$.ton00==0||Math.abs($r$$.ton00)<.001)),$descVouchersX$$=_.sortBy([...$vouchers_x$$.values()],$v$$=>
|
|
24
|
+
-(new Date($v$$.ngay_ct_full||$v$$.ngay_ct)).getTime()),$descVouchersN$$=_.sortBy([...$vouchers_n$$.values()],$v$$=>-(new Date($v$$.ngay_ct_full||$v$$.ngay_ct)).getTime()),$chung_tu_chenh_lech$$=new Map;for(const $vt$$ of $validDuCuoiKy$$){let $d_voucher$$=$descVouchersX$$.find($x$$=>{const $det$$=($x$$.details||[]).find($vc$$=>$vc$$.ma_vt==$vt$$.ma_vt&&!$vc$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===$vc$$.ma_kho||$ma_kho$$===$x$$.ma_kho));return $det$$?($det$$.tien_xuat_nt+=$vt$$.du00,$det$$.tien_xuat=
|
|
25
|
+
Math.roundBy($det$$.tien_xuat_nt,$f_tien$$),$det$$.sl_xuat&&($det$$.gia_von=$det$$.gia_von_nt=Math.roundBy($det$$.tien_xuat_nt/$det$$.sl_xuat,0)),!0):!1});$d_voucher$$||=$descVouchersN$$.find($n$$=>{const $det$$=($n$$.details||[]).find($vc$$=>$vc$$.ma_vt==$vt$$.ma_vt&&!$vc$$.pn_gia_tb&&(!$ma_kho$$||$ma_kho$$===$vc$$.ma_kho||$ma_kho$$===$n$$.ma_kho));return $det$$?($det$$.tien_nhap_nt-=$vt$$.du00,$det$$.tien_nhap=Math.roundBy($det$$.tien_nhap_nt,$f_tien$$),$det$$.sl_nhap&&($det$$.gia_von=$det$$.gia_von_nt=
|
|
26
|
+
Math.roundBy($det$$.tien_nhap_nt/$det$$.sl_nhap,0)),!0):!1});$d_voucher$$&&$chung_tu_chenh_lech$$.set($d_voucher$$._id.toString(),$d_voucher$$)}if($chung_tu_chenh_lech$$.size>0){Logger.info(`\u26a0\ufe0f [tinhgiafifo] B\u00f9 ch\u00eanh l\u1ec7ch ${$chung_tu_chenh_lech$$.size} ch\u1ee9ng t\u1eeb...`);for(const $voucher$$ of $chung_tu_chenh_lech$$.values()){const $voucherData$$=getRawData($voucher$$),$ctrl$$=global.controllers[$voucherData$$.ma_ct.toUpperCase()];await ($ctrl$$?$ctrl$$.getProperty("model"):
|
|
27
|
+
mongoose.models[$voucherData$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher$$._id},$voucherData$$);$ctrl$$&&$ctrl$$.post&&await postDataPromise($voucherData$$,$ctrl$$)}}await $bang_gia$$.asyncJoinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:"ten_vt"}]);Logger.info(`\u2705 [tinhgiafifo] Done. ${$bang_gia$$.length} v\u1eadt t\u01b0 | ${$modifiedIds$$.size} ch\u1ee9ng t\u1eeb \u0111\u00e3 c\u1eadp nh\u1eadt.`);return $callback$$?$callback$$(null,$bang_gia$$):$bang_gia$$}catch($e$$){Logger.error("\u274c [tinhgiafifo] Critical Error:",
|
|
28
|
+
$e$$);if($callback$$)return $callback$$($e$$);throw $e$$;}};
|