flexbiz-server
Version:
Flexible Server
29 lines (28 loc) • 11.5 kB
JavaScript
const moment=require("moment"),{createSocaiTC}=require("../libs/utils"),socaiSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_dvcs:{type:String,required:!0,maxlength:1024},id_ct:{type:String,required:!0,maxlength:1024,trim:!0},ma_ct:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},ma_gd:{type:String,default:"0",maxlength:32,trim:!0},ngay_ct:{type:Date,required:!0},ngay_ct_full:{type:Date},so_ct:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},ngay_hd:{type:Date},
so_hd:{type:String,uppercase:!0,maxlength:32,trim:!0},tk_no:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},tk_co:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},ma_kh_no:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_kh_co:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_nt:{type:String,default:"VND",required:!0,uppercase:!0,maxlength:32,trim:!0},ty_gia:{type:Number,default:1},tien_nt:{type:Number,default:0},tien:{type:Number,default:0},dien_giai:{type:String,
default:"",maxlength:1024},ong_ba:{type:String,default:"",maxlength:1024},ma_kho:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_bp:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_phi:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_hd:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_dt:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_nv:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_nv_giao_hang:{type:String,default:"",
uppercase:!0,maxlength:32,trim:!0},phu_xe:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_lo:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},han_sd:{type:Date},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_ca:{type:String,uppercase:!0,maxlength:32,trim:!0},ma_cp:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},
ma_sp:{type:String,default:"",uppercase:!0,maxlength:1024,trim:!0},ma_vt:{type:String,default:"",uppercase:!0,maxlength:1024,trim:!0},ma_dvt_sp:{type:String,maxlength:32,trim:!0},ma_tt1_sp:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt2_sp:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3_sp:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_cum_chi_tiet:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ten_cum_chi_tiet:{type:String,default:"",
maxlength:1024,trim:!0},ma_cong_doan:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},id_lenhsx:{type:String,maxlength:1024},id_cs:{type:String,maxlength:1024},id_cs_ck:{type:String,maxlength:1024},id_link:String,ma_ct_link:String,so_ct_link:String,id_ct_goc:String,ma_ct_goc:String,so_ct_goc:String,ngay_ct_goc:Date,pt_thanh_toan_goc:String,pt_thanh_toan:String,pt_thanh_toan2:String,trang_thai:{type:String,maxlength:32},nh_dk:{type:Number,default:0},id_kbbtpb:{type:String,maxlength:1024},
exfields:Schema.Types.Mixed,exfields_detail:Schema.Types.Mixed,flag:{type:String,maxlength:1024},gio:Number,ngay:Number,thang:Number,quy:Number,nam:Number,ma_kenh:String,ma_td1:Schema.Types.Mixed,ma_td2:Schema.Types.Mixed,ma_td3:Schema.Types.Mixed,ma_td4:Schema.Types.Mixed,ma_td5:Schema.Types.Mixed,ma_td6:Schema.Types.Mixed,ma_td7:Schema.Types.Mixed,ma_td8:Schema.Types.Mixed,ma_td9:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,
default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},id_client:String,listinfo_code:String},{toJSON:{virtuals:!0}});
(global.configs||{}).createIndexes&&(socaiSchema.index({id_app:1}),socaiSchema.index({id_app:1,ma_dvcs:1}),socaiSchema.index({id_app:1,ma_ct:1,so_ct:1}),socaiSchema.index({id_app:1,ma_ct:1}),socaiSchema.index({id_app:1,ma_nt:1,ngay_ct:-1}),socaiSchema.index({id_app:1,so_ct:1,ngay_ct:-1}),socaiSchema.index({id_app:1,gio:1}),socaiSchema.index({id_app:1,ngay:1}),socaiSchema.index({id_app:1,thang:1}),socaiSchema.index({id_app:1,quy:1}),socaiSchema.index({id_app:1,nam:-1}),socaiSchema.index({id_ct:1}),
socaiSchema.index({id_app:1,id_ct:1}),socaiSchema.index({id_app:1,ma_ct_goc:1,id_ct_goc:1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_bp:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_phi:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_hd:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_dt:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_nv:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_nv:1,ma_nv_giao_hang:1,phu_xe:1,ngay_ct:-1}),
socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_sp:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_kho:1,ma_vt:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_kenh:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_td1:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_td2:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_td3:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ma_vt:1,ma_tt1:1,ma_tt2:1,ma_tt3:1,ma_lo:1,han_sd:-1,
ngay_ct:-1}),socaiSchema.index({id_app:1,id_lenhsx:1}),socaiSchema.index({id_app:1,id_link:1}),socaiSchema.index({id_app:1,id_cs:1}),socaiSchema.index({id_app:1,id_cs_ck:1}),socaiSchema.index({id_app:1,id_ct:1,so_ct:-1,ma_kh_no:1,ma_kh_co:1,tk_no:1,tk_co:1,ngay_ct:-1}),socaiSchema.index({id_app:1,ma_kh_no:1,ma_kh_co:1,tk_no:1,tk_co:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_co:1,ngay_ct:-1}),socaiSchema.index({id_app:1,tk_no:1,tk_co:1,ngay_ct_full:-1}),
socaiSchema.index({id_app:1,tk_no:1,ma_kho:1,ngay_ct_full:-1}),socaiSchema.index({id_app:1,tk_co:1,ma_kho:1,ngay_ct_full:-1}),socaiSchema.index({id_app:1,date_created:-1}));
const {onAfterCommit,getCurrentSession,getCurrentStore}=require("../libs/sessionContext"),Logger=global.Logger||console,handleCreateSocaiTc=async $data$$=>{if($data$$)try{let $params$$=$data$$;typeof $data$$==="string"&&($params$$=JSON.parse($data$$));$params$$.id_app&&$params$$.ngay_ct&&await createSocaiTC($params$$.id_app,$params$$.ngay_ct,$params$$.ngay_ct)}catch($e$$){Logger.error("handleCreateSocaiTc error",$data$$,$e$$)}};
socaiSchema.pre("save",function($next$$){this.tien=this.ma_nt=="VND"?this.tien_nt=Math.roundBy(this.tien_nt,0):Math.roundBy(this.tien,0);this.ngay_ct_full=new Date(this.ngay_ct);var $ngay_ct_session$$=moment(this.ngay_ct);this.gio=$ngay_ct_session$$.get("hours");this.ngay=$ngay_ct_session$$.get("dates");this.quy=$ngay_ct_session$$.get("quarters");this.thang=$ngay_ct_session$$.get("months")+1;this.nam=$ngay_ct_session$$.get("year");this.ngay_ct=$ngay_ct_session$$.startOf("date").toDate();$ngay_ct_session$$=
getCurrentSession();const $store$$=getCurrentStore();$ngay_ct_session$$&&$store$$&&(this.$__param_store=$store$$,this.$__param_session=$store$$.session);$next$$()});
socaiSchema.post("save",async function($doc$$){const $capturedStore$$=this.$__param_store,$capturedSession$$=this.$__param_session,$handleSaveAfterCommit$$=async()=>{try{if(["SO1","HD2","HD1","PBL"].includes($doc$$.ma_ct)){const $updateCustomerLastBuy$$=async $ma_kh$$=>{if($ma_kh$$){var $dhgn$$=await global.getModel("socai").findOne({ma_kh_no:$ma_kh$$,id_app:$doc$$.id_app},{ngay_ct:1}).sort({ngay_ct:-1}).lean();if($dhgn$$){const $so_ngay_da_mua$$=moment().diff(moment($dhgn$$.ngay_ct),"days");await global.getModel("customer").updateOne({ma_kh:$ma_kh$$,
id_app:$doc$$.id_app},{ngay_mua_gan_nhat:$dhgn$$.ngay_ct,so_ngay_da_mua:$so_ngay_da_mua$$})}}},$promises$$=[];$doc$$.ma_kh_no&&$promises$$.push($updateCustomerLastBuy$$($doc$$.ma_kh_no));$doc$$.ma_kh_co&&$doc$$.ma_kh_co!==$doc$$.ma_kh_no&&$promises$$.push($updateCustomerLastBuy$$($doc$$.ma_kh_co));await Promise.all($promises$$)}await handleCreateSocaiTc({id_app:$doc$$.id_app,ngay_ct:$doc$$.ngay_ct})}catch($e$$){Logger.error("\u274c[socai] Error in handleSaveAfterCommit (socai):",$e$$)}};$capturedSession$$&&
$capturedStore$$?onAfterCommit($handleSaveAfterCommit$$,"X\u1eed l\u00fd s\u1ef1 ki\u1ec7n sau khi l\u01b0u socai",$capturedSession$$,$capturedStore$$):await $handleSaveAfterCommit$$()});
async function preDelete($next$$){try{let $query$$=this.getQuery(),$deletedDocsStr$$=(await global.getModel("socai").find($query$$,{id_app:1,ngay_ct:1}).lean()).map($r$$=>JSON.stringify({id_app:$r$$.id_app,ngay_ct:$r$$.ngay_ct}));this.$__deletedDocs=[...(new Set($deletedDocsStr$$))];const $session$$=this.options?.session||getCurrentSession(),$store$$=getCurrentStore();$session$$&&$store$$&&(this.$__param_store=$store$$,this.$__param_session=$store$$.session);$next$$()}catch($e$$){Logger.error("Error in socai preDelete",
$e$$),$next$$($e$$)}}
async function postDelete(){const $capturedStore$$=this.$__param_store,$capturedSession$$=this.$__param_session,$deletedDocs$$=this.$__deletedDocs;if($deletedDocs$$?.length){const $handleSaveAfterCommit$$=async()=>{const $promises$$=$deletedDocs$$.map($docStr$$=>handleCreateSocaiTc($docStr$$));await Promise.all($promises$$)};if($capturedSession$$&&$capturedStore$$)onAfterCommit($handleSaveAfterCommit$$,"X\u1eed l\u00fd s\u1ef1 ki\u1ec7n sau khi x\u00f3a socai",$capturedSession$$,$capturedStore$$);
else try{await $handleSaveAfterCommit$$()}catch($e$$){Logger.error("\u274c[socai] post delete immediate error:",$e$$)}}}
const handleInsertMany=async function($docs$$){const $session$$=getCurrentSession(),$store$$=getCurrentStore(),$handleBatch$$=async()=>{let $itemsToProcess$$=$docs$$.map($d$$=>({id_app:$d$$.id_app,ngay_ct:$d$$.ngay_ct}));for(let $item$$ of $itemsToProcess$$)await handleCreateSocaiTc($item$$)};if($session$$&&$store$$)onAfterCommit($handleBatch$$,"X\u1eed l\u00fd insertMany",$session$$,$store$$);else try{await $handleBatch$$()}catch($e$$){Logger.error("\u274c[socai] insertMany hook error:",$e$$)}};
socaiSchema.post("insertMany",handleInsertMany);socaiSchema.pre("deleteMany",preDelete);socaiSchema.post("deleteMany",postDelete);socaiSchema.pre("deleteOne",preDelete);socaiSchema.post("deleteOne",postDelete);const model=mongoose.models.socai||mongoose.model("socai",socaiSchema);if((global.configs||{}).createIndexes)model.on("index",async function($err$$){$err$$?Logger.error("socai index error",$err$$):console.info("socai indexing complete")});
model.getArise=async($query$$,$options$$={fields:void 0})=>{let $condition$$={ngay_ct:{$gte:$query$$.tu_ngay,$lte:$query$$.den_ngay},id_app:$query$$.id_app};$query$$.ma_dvcs&&($condition$$.ma_dvcs=$query$$.ma_dvcs);$query$$.ma_bp&&($condition$$.ma_bp=$query$$.ma_bp);$query$$.ma_hd&&($condition$$.ma_hd=$query$$.ma_hd);$query$$.ma_dt&&($condition$$.ma_dt=$query$$.ma_dt);$query$$.ma_sp&&($condition$$.ma_sp=$query$$.ma_sp);$query$$.ma_nv&&($condition$$.ma_nv=$query$$.ma_nv);$query$$.ma_phi&&($condition$$.ma_phi=
$query$$.ma_phi);$query$$.ma_kho&&($condition$$.ma_kho=$query$$.ma_kho);if($query$$.tk_no&&Array.isArray($query$$.tk_no)){var $tk_co_tk_no$$=$query$$.tk_no.reg();$condition$$.tk_no=$query$$.giam_tru_no?{$not:new RegExp($tk_co_tk_no$$)}:{$regex:$tk_co_tk_no$$,$options:"i"}}$query$$.tk_co&&Array.isArray($query$$.tk_co)&&($tk_co_tk_no$$=$query$$.tk_co.reg(),$condition$$.tk_co=$query$$.giam_tru_co&&$tk_co_tk_no$$?{$not:new RegExp($tk_co_tk_no$$)}:{$regex:$tk_co_tk_no$$,$options:"i"});return await model.find($condition$$,
$options$$.fields).lean()};module.exports=model;