flexbiz-server
Version:
Flexible Server
27 lines (26 loc) • 11.4 kB
JavaScript
'use strict';const validator=require("validator"),redisCache=require("../libs/redis-cache"),customerSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_kh:{type:String,uppercase:!0,required:!0,default:"",trim:!0,maxlength:32},ten_kh:{type:String,required:"Y\u00eau c\u1ea7u nh\u1eadp t\u00ean kh\u00e1ch h\u00e0ng",trim:!0,maxlength:1024},device_user_id:String,gioi_tinh:{type:String,maxlength:1024},ngay_sinh:Date,dia_chi:{type:String,maxlength:1024},xa_phuong:{type:String,maxlength:1024},
quan_huyen:{type:String,maxlength:1024},tinh_thanh:{type:String,maxlength:1024},location:Schema.Types.Mixed,dien_thoai:{type:String,maxlength:1024,trim:!0},dia_chi2:{type:String,maxlength:1024},xa_phuong2:{type:String,maxlength:1024},quan_huyen2:{type:String,maxlength:1024},tinh_thanh2:{type:String,maxlength:1024},location2:Schema.Types.Mixed,dien_thoai2:{type:String,maxlength:1024,trim:!0},fax:{type:String,maxlength:1024},email:{type:String,maxlength:1024},website:{type:String,maxlength:1024},ma_so_thue:{type:String,
maxlength:1024},phu_trach:{type:String,maxlength:1024},ten_phu_trach:String,loai_kh:{type:String,default:"",trim:!0,maxlength:1024},nh_kh:{type:String,default:"",trim:!0,maxlength:1024},ten_nh_kh:String,nh_kh2:[String],nh_kh3:[String],nh_kh4:[String],nh_kh5:[String],nh_kh6:[String],ma_nganh_hang:[String],khu_vuc_phu_trach:[],ma_kho_npp:String,ghi_chu:{type:String,default:"",trim:!0,maxlength:1024},isdistributor:{type:Boolean},ncc_yn:{type:Boolean,default:!0},kh_yn:{type:Boolean,default:!0},from_updated:{type:String,
default:"M",maxlength:1024},of_user:{type:String,lowercase:!0,maxlength:1024,set:function($of_user$$){this._previous_of_user=this.of_user;return $of_user$$}},group_user:String,default_password:{type:String},exfields:Schema.Types.Mixed,trang_thai:{type:String,default:"1"},activities:{},status:{type:Boolean,default:!0},ngay_mua_dau_tien:Date,ngay_mua_gan_nhat:Date,ngay_tuong_tac_gan_nhat:{type:Date,default:Date.now},latest_note:Schema.Types.Mixed,labels:[String],hinh_anh:String,date_created:{type:Date,
default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},visible_to:{type:Number,default:0},visible_to_users:[String],visible_to_usergroups:[String],update_right:[String],delete_right:[String],dataview_to:{type:Number,default:0},dataview_to_users:[String]},{toJSON:{virtuals:!0}});
customerSchema.pre("save",function($next$$){if(!this.of_user)return $next$$();const $self$$=this;if(this.isNew||this.of_user!=this._previous_of_user){let $condition$$={id_app:this.id_app,of_user:this.of_user,ma_kh:{$ne:this.ma_kh}};console.log("Check of_user, previous of_user:",this._previous_of_user,"new of_user:",this.of_user,"ma_kh:",this.ma_kh);mongoose.models.customer.find($condition$$,{ten_kh:1,ma_kh:1},($e$$,$khs$$)=>{0<$khs$$.length?$next$$(Error(`Ng\u01b0\u1eddi s\u1eed d\u1ee5ng '${$self$$.of_user}' \u0111\u00e3 \u0111\u01b0\u1ee3c g\u1eafn cho kh\u00e1ch h\u00e0ng '${$khs$$.map($kh$$=>
$kh$$.ma_kh+" - "+$kh$$.ten_kh).join(",")}'`)):$next$$()})}else $next$$()});const model=mongoose.models.customer||mongoose.model("customer",customerSchema);
(global.configs||{}).createIndexes&&(customerSchema.index({id_app:1}),customerSchema.index({ma_kh:1}),customerSchema.index({ten_kh:1}),customerSchema.index({loai_kh:1}),customerSchema.index({nh_kh:1}),customerSchema.index({nh_kh2:1}),customerSchema.index({nh_kh3:1}),customerSchema.index({nh_kh4:1}),customerSchema.index({nh_kh5:1}),customerSchema.index({isdistributor:1}),customerSchema.index({khu_vuc_phu_trach:1}),customerSchema.index({activities:1}),customerSchema.index({ma_nganh_hang:1}),customerSchema.index({ngay_mua_gan_nhat:1}),
customerSchema.index({ngay_mua_dau_tien:1}),customerSchema.index({ngay_tuong_tac_gan_nhat:1}),customerSchema.index({dien_thoai:1}),customerSchema.index({email:1}),customerSchema.index({tinh_thanh:1}),customerSchema.index({date_updated:-1}),customerSchema.index({date_created:-1}),customerSchema.index({user_created:1}),customerSchema.index({of_user:1}),customerSchema.index({ten_kh:"text",ma_kh:"text",dia_chi:"text",xa_phuong:"text",quan_huyen:"text",tinh_thanh:"text",dien_thoai:"text",email:"text",
ma_so_thue:"text",phu_trach:"text",ten_phu_trach:"text",nh_kh:"text",ten_nh_kh:"text"},{name:"customer_index"}),customerSchema.index({id_app:1,ma_kh:1},{unique:!0}),customerSchema.index({status:1}),customerSchema.index({user_created:1,visible_to:1,visible_to_users:1}),customerSchema.index({trang_thai:1}),model.on("index",async function($err$$){$err$$?(console.error("Customer index error",$err$$),(await model.aggregate([{$group:{_id:{id_app:"$id_app",ma_kh:"$ma_kh"},count:{$sum:1},ids:{$push:"$_id"}}},
{$match:{count:{$gt:1}}}])).forEach($d$$=>{console.info("customer duplication",$d$$._id,$d$$.ids);$d$$.ids.forEach(($id$$,$index$$)=>{0<$index$$&&console.info("you should delete customer",$id$$)})})):console.info("Customer indexing complete")}));
model.referenceKeys={ma_kh:[{model:"cdkh",key:"ma_kh",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u trong b\u1ea3ng c\u00e2n \u0111\u1ed1i kh\u00e1ch h\u00e0ng"},{model:"socai",key:"ma_kh_no",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u trong s\u1ed5 c\u00e1i"},{model:"socai",key:"ma_kh_co",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u s\u1ed5 c\u00e1i"},{model:"sokho",key:"ma_kh",
error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u s\u1ed5 kho"},{model:"so1",key:"ma_kh",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u \u1edf \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u01a1n \u0111\u1eb7t h\u00e0ng"},{model:"pbl",key:"ma_kh",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u \u1edf phi\u1ebfu b\u00e1n l\u1ebb"}]};
model.createCustomerCode=function($id_app$$,$ma_kh$$,$lanthu$$,$callback$$){$ma_kh$$=$ma_kh$$.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase();model.findOne({ma_kh:$ma_kh$$,id_app:$id_app$$},function($e$$,$rs$$){if($e$$)return $callback$$($e$$);if($rs$$)$lanthu$$+=1,$ma_kh$$=$ma_kh$$.substring(0,$ma_kh$$.length-$lanthu$$.toString().length)+$lanthu$$.toString(),model.createCustomerCode($id_app$$,$ma_kh$$,$lanthu$$,$callback$$);else return $callback$$(null,$ma_kh$$)})};
model.asyncCreateCustomerCode=async($id_app$$,$ma_kh$$,$lanthu$$)=>{$lanthu$$||($lanthu$$=0);32<$ma_kh$$.length&&($ma_kh$$=$ma_kh$$.substring(0,32));return new Promise($resolve$$=>{model.createCustomerCode($id_app$$,$ma_kh$$,$lanthu$$,($e$$,$rs$$)=>{$resolve$$($rs$$||"")})})};
model.getInfo=async($id_app$$,$condition$$,$fields$$)=>{$condition$$.id_app=$id_app$$;return new Promise(($resolve$$,$reject$$)=>{model.findOne($condition$$).lean().exec(($e$$,$rs$$)=>{if($e$$||!$rs$$)return $reject$$($e$$?$e$$.message:"Can't find customer information");$resolve$$($fields$$?$rs$$[$fields$$]:$rs$$)})})};
model.getList=async($id_app$$,$condition$$,$field$$)=>{$condition$$.id_app=$id_app$$;return new Promise(($resolve$$,$reject$$)=>{model.find($condition$$).lean().exec(($e$$,$rs$$)=>{if($e$$)return $reject$$(Error($e$$.message));$resolve$$($field$$?$rs$$.map($r$$=>$r$$[$field$$]):$rs$$)})})};
model.asyncCreateCustomer=async $data$$=>{if($data$$.of_user){var $_cust__cust$$=await model.findOne({id_app:$data$$.id_app,of_user:$data$$.of_user});if($_cust__cust$$)return $_cust__cust$$}$data$$.ma_kh||($data$$.ma_kh=await model.asyncCreateCustomerCode($data$$.id_app,$data$$.ten_kh));return($_cust__cust$$=await model.findOne({id_app:$data$$.id_app,ma_kh:$data$$.ma_kh}))?$_cust__cust$$:new Promise(($resolve$$,$reject$$)=>{$data$$.email&&!validator.isEmail($data$$.email)&&($data$$.email="");model.create($data$$,
($e$$,$rs$$)=>$e$$?$reject$$(Error($e$$.message)):$resolve$$($rs$$))})};model.buyVouchers=["SO1","SO9","HD2","HD1","PBL"];
model.updateActives=async $cust_o_kh$$=>{let $has_changed$$=!1,$_id$$,$kh$$;$cust_o_kh$$.ma_kh&&$cust_o_kh$$.id_app?($kh$$=await model.findOne({id_app:$cust_o_kh$$.id_app,ma_kh:$cust_o_kh$$.ma_kh},{_id:1,ngay_tuong_tac_gan_nhat:1,ngay_mua_gan_nhat:1,trang_thai:1}))&&($_id$$=$kh$$._id.toString()):($link_ngay_tuong_tac_gan_nhat$$=$cust_o_kh$$.id_kh||$cust_o_kh$$.id_link)&&global.mongoose.Types.ObjectId.isValid($link_ngay_tuong_tac_gan_nhat$$)&&($kh$$=await model.findOne({_id:$link_ngay_tuong_tac_gan_nhat$$},
{_id:1,ngay_tuong_tac_gan_nhat:1,ngay_mua_gan_nhat:1,trang_thai:1}))&&($_id$$=$kh$$._id.toString());if(!$kh$$)return{};let $ngay_mua_gan_nhat$$,$ngay_mua_dau_tien$$;var $link_ngay_tuong_tac_gan_nhat$$;let $trang_thai$$=$kh$$.trang_thai;$link_ngay_tuong_tac_gan_nhat$$=$kh$$.ngay_tuong_tac_gan_nhat;$cust_o_kh$$.date_created&&(!$kh$$.ngay_tuong_tac_gan_nhat||(new Date($kh$$.ngay_tuong_tac_gan_nhat)).getTime()<(new Date($cust_o_kh$$.date_created)).getTime())&&$_id$$!=($cust_o_kh$$._id||"").toString()&&
($link_ngay_tuong_tac_gan_nhat$$=$cust_o_kh$$.date_created,"3"==$kh$$.trang_thai&&($has_changed$$=!0,$trang_thai$$="5"));var $dhdt_dhgn$$=await global.getModel("sokho").findOne({ma_kh:$cust_o_kh$$.ma_kh,id_app:$cust_o_kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1,so_ct:1,ma_ct:1,ma_vt:1,gia_ban_nt:1}).sort({ngay_ct:1}).lean();$dhdt_dhgn$$||($dhdt_dhgn$$=await global.getModel("sokhonpp").findOne({ma_kh:$cust_o_kh$$.ma_kh,id_app:$cust_o_kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},
{ngay_ct:1,so_ct:1,ma_ct:1,ma_vt:1,gia_ban_nt:1}).sort({ngay_ct:1}).lean());if($dhdt_dhgn$$)$kh$$.ngay_mua_dau_tien&&(new Date($dhdt_dhgn$$.ngay_ct)).getTime()==(new Date($kh$$.ngay_mua_dau_tien)).getTime()||($has_changed$$=!0,$ngay_mua_dau_tien$$=$dhdt_dhgn$$.ngay_ct),"9"===$kh$$.trang_thai||"1"==$kh$$.trang_thai&&!$kh$$.ngay_mua_gan_nhat||($has_changed$$=!0,$trang_thai$$="1");else if($kh$$.ngay_mua_gan_nhat||$kh$$.ngay_mua_dau_tien)$has_changed$$=!0,$kh$$.ngay_mua_gan_nhat=null,$ngay_mua_dau_tien$$=
$ngay_mua_gan_nhat$$=$kh$$.ngay_mua_dau_tien=null,"1"==$kh$$.trang_thai&&($trang_thai$$="5");$dhdt_dhgn$$&&(($dhdt_dhgn$$=await global.getModel("sokho").findOne({ma_kh:$cust_o_kh$$.ma_kh,id_app:$cust_o_kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1}).sort({ngay_ct:-1}).lean())||await global.getModel("sokhonpp").findOne({ma_kh:$cust_o_kh$$.ma_kh,id_app:$cust_o_kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1}).sort({ngay_ct:-1}).lean(),!$dhdt_dhgn$$||
$kh$$.ngay_mua_gan_nhat&&(new Date($dhdt_dhgn$$.ngay_ct)).getTime()==(new Date($kh$$.ngay_mua_gan_nhat)).getTime()||($has_changed$$=!0,$ngay_mua_gan_nhat$$=$dhdt_dhgn$$.ngay_ct));$has_changed$$&&($ngay_mua_gan_nhat$$=$ngay_mua_gan_nhat$$||$kh$$.ngay_mua_gan_nhat,$ngay_mua_dau_tien$$=$ngay_mua_dau_tien$$||$kh$$.ngay_mua_dau_tien,$link_ngay_tuong_tac_gan_nhat$$=$link_ngay_tuong_tac_gan_nhat$$||$kh$$.ngay_tuong_tac_gan_nhat,await model.updateOne({_id:$_id$$},{ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,
ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$,trang_thai:$trang_thai$$}),$cust_o_kh$$=await model.findById($kh$$._id).lean(),redisCache.set("customer",$cust_o_kh$$));return{ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$}};module.exports=model;