UNPKG

flexbiz-server

Version:

Flexible Server

16 lines (15 loc) 7.15 kB
const _=require("lodash"),moment=require("moment"),numeral=require("numeral"),utils=require("../../libs/utils"),getCategory=async($id_app_rs$$,$ten_nh_kh$$)=>{let $nh_kh$$=await global.getModel("group").findOne({id_app:$id_app_rs$$,group_name:$ten_nh_kh$$,group_type:"CUSTOMER"}).lean();if($nh_kh$$)return $nh_kh$$;$id_app_rs$$=await global.getModel("group").create({id_app:$id_app_rs$$,group_name:$ten_nh_kh$$,group_type:"CUSTOMER"});return $id_app_rs$$=utils.convertObjectIdsToStrings($id_app_rs$$.toObject())}, mapData=async($id_app$$,$payload$$)=>{if(!$payload$$)return[];_.isArray($payload$$)||($payload$$=[$payload$$]);let $categorys$$=[...(new Set($payload$$.filter($p$$=>$p$$.ten_nh_kh||$p$$.category).map($p$$=>($p$$.ten_nh_kh||$p$$.category).toString())))];$categorys$$=await Promise.all($categorys$$.map($category$$=>getCategory($id_app$$,$category$$)));return $payload$$.map($cat_item$$=>{let $_item$$={...$cat_item$$};$cat_item$$.ma_kh||($_item$$.ma_kh=$cat_item$$.id);$cat_item$$.name&&($_item$$.ten_kh= $cat_item$$.name);$cat_item$$.address&&($_item$$.dia_chi=$cat_item$$.address);$cat_item$$.phone&&($_item$$.dien_thoai=$cat_item$$.phone);$_item$$.ten_nh_kh=$_item$$.ten_nh_kh||$cat_item$$.category;$cat_item$$=$categorys$$.find($c$$=>$c$$.group_name===$_item$$.ten_nh_kh);$_item$$.nh_kh=($cat_item$$?._id||"").toString();return $_item$$})},create=async($id_app$$,$khs_payload$$,$update_yn$$=!1)=>{$khs_payload$$=(await mapData($id_app$$,$khs_payload$$)).filter($c$$=>$c$$.ten_kh);return await Promise.all($khs_payload$$.map($kh$$=> (async()=>{var $$or_exists_query_check_rs$$=[];$kh$$.ma_kh&&$$or_exists_query_check_rs$$.push({ma_kh:$kh$$.ma_kh});$kh$$.dien_thoai&&$$or_exists_query_check_rs$$.push({dien_thoai:$kh$$.dien_thoai});$kh$$.fb_id&&$$or_exists_query_check_rs$$.push({fb_id:$kh$$.fb_id});if($$or_exists_query_check_rs$$.length>0&&($$or_exists_query_check_rs$$={id_app:$id_app$$,$or:$$or_exists_query_check_rs$$},$$or_exists_query_check_rs$$=await global.getModel("customer").findOne($$or_exists_query_check_rs$$).lean()))return $update_yn$$&& (delete $kh$$.ma_kh,delete $kh$$._id,await global.getModel("customer").updateOne({_id:$$or_exists_query_check_rs$$._id},$kh$$)),$$or_exists_query_check_rs$$=$$or_exists_query_check_rs$$.toObject?utils.convertObjectIdsToStrings($$or_exists_query_check_rs$$.toObject()):$$or_exists_query_check_rs$$,{...$$or_exists_query_check_rs$$,...$kh$$};$kh$$.id_app=$id_app$$;$kh$$.user_created="flow";$kh$$.status=!0;$kh$$.trang_thai=$kh$$.trang_thai||"0";delete $kh$$._id;$kh$$.ma_kh||($kh$$.ma_kh=await global.getModel("customer").asyncCreateCustomerCode($id_app$$, $kh$$.ten_kh));$$or_exists_query_check_rs$$=await global.getModel("customer").create($kh$$);return $$or_exists_query_check_rs$$=$$or_exists_query_check_rs$$.toObject?utils.convertObjectIdsToStrings($$or_exists_query_check_rs$$.toObject()):$$or_exists_query_check_rs$$})()))},list=async($id_app$$,$query_rs$$,$fields$$)=>{$fields$$?_.isString($fields$$)&&($fields$$=$fields$$.split(",").reduce(($a$$,$b$$)=>{$a$$[$b$$]=1},{})):$fields$$={ma_kh:1,ten_kh:1,email:1,dien_thoai:1,fb_id:1,page_id:1,gioi_tinh:1, dia_chi:1,tinh_thanh:1,quan_huyen:1,xa_phuong:1};$query_rs$$.id_app=$id_app$$;if($query_rs$$.sinh_nhat_ngay||$query_rs$$.ngay_sinh_hom_nay){var $currentDay_today$$=$query_rs$$.sinh_nhat_ngay?new Date($query_rs$$.sinh_nhat_ngay):new Date;Logger.info("[customerNode] check sinh nh\u1eadt h\u00f4m nay",$currentDay_today$$,$query_rs$$.sinh_nhat_ngay,$query_rs$$.ngay_sinh_hom_nay);const $currentMonth$$=$currentDay_today$$.getMonth()+1;$currentDay_today$$=$currentDay_today$$.getDate();const $serverTimezone$$= Intl.DateTimeFormat().resolvedOptions().timeZone;$query_rs$$.$expr=$query_rs$$.$expr||{};$query_rs$$.$expr.$and=$query_rs$$.$expr.$and||[];$query_rs$$.$expr.$and.push({$eq:[{$month:{date:"$ngay_sinh",timezone:$serverTimezone$$}},$currentMonth$$]});$query_rs$$.$expr.$and.push({$eq:[{$dayOfMonth:{date:"$ngay_sinh",timezone:$serverTimezone$$}},$currentDay_today$$]});delete $query_rs$$.sinh_nhat_ngay;delete $query_rs$$.ngay_sinh_hom_nay}$query_rs$$=await global.getModel("customer").aggregate([{$match:$query_rs$$}, {$project:$fields$$}]);await $query_rs$$.filter($r$$=>$r$$.nh_kh).asyncJoinModel2($id_app$$,"customer",{where:{nh_kh:"_id"},fields:{ten_nh_kh:"group_name"}});return $query_rs$$}; async function customerHandler($flowState_id_app$$,$node_rs$jscomp$3_rs$jscomp$4_rs$$,$payload$$,$abortSignal$$){const $nodeInstanceId$$=`${$flowState_id_app$$.instanceId}-${$node_rs$jscomp$3_rs$jscomp$4_rs$$.id}`;if($abortSignal$$.aborted)throw Logger.info(`[${$nodeInstanceId$$}] customer node aborted before logging.`),new DOMException("Aborted by signal","AbortError");$flowState_id_app$$=$flowState_id_app$$.flowDefinition.id_app;switch($node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.action){case "create":$node_rs$jscomp$3_rs$jscomp$4_rs$$= await create($flowState_id_app$$,$payload$$,!1);if($abortSignal$$.aborted)throw Logger.info(`[${$nodeInstanceId$$}] customer node aborted before finish.`),new DOMException("Aborted by signal","AbortError");return $node_rs$jscomp$3_rs$jscomp$4_rs$$;case "createorupdate":$node_rs$jscomp$3_rs$jscomp$4_rs$$=await create($flowState_id_app$$,$payload$$,!0);if($abortSignal$$.aborted)throw Logger.info(`[${$nodeInstanceId$$}] customer node aborted before finish.`),new DOMException("Aborted by signal","AbortError"); return $node_rs$jscomp$3_rs$jscomp$4_rs$$;case "list":let $query$$=$node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.query;$query$$||={};if(_.isString($query$$))try{const $sandbox$$={payload:$payload$$,console,moment,numeral,_};$query$$.indexOf("return ")<=0&&($query$$=`return ${$query$$}`);$query$$=utils.evalute($query$$,$sandbox$$)}catch($e$$){throw"\u0110i\u1ec1u ki\u1ec7n l\u1ea5y d\u1eef li\u1ec7u kh\u00f4ng h\u1ee3p l\u1ec7";}$node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.nh_kh&&(_.isArray($node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.nh_kh)? $query$$.nh_kh={$in:$node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.nh_kh}:$query$$.nh_kh=$node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.nh_kh);$node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.trang_thai&&(_.isArray($node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.trang_thai)?$query$$.trang_thai={$in:$node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.trang_thai}:$query$$.trang_thai=$node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.trang_thai);$node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.ngay_sinh_hom_nay&&($query$$.ngay_sinh_hom_nay=$node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.ngay_sinh_hom_nay); $node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.kh_co_fb_id&&($query$$.fb_id={$exists:!0});$node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.kh_co_dien_thoai&&($query$$.dien_thoai={$exists:!0});$payload$$?.query&&_.isObject($payload$$.query)&&!_.isArray($payload$$.query)&&($query$$={...$query$$,...$payload$$.query});$node_rs$jscomp$3_rs$jscomp$4_rs$$=await list($flowState_id_app$$,$query$$,$payload$$?.fields||$node_rs$jscomp$3_rs$jscomp$4_rs$$.data?.fields);if($abortSignal$$.aborted)throw Logger.info(`[${$nodeInstanceId$$}] customer node aborted before finish.`), new DOMException("Aborted by signal","AbortError");return $node_rs$jscomp$3_rs$jscomp$4_rs$$}}module.exports=customerHandler;