flexbiz-server
Version:
Flexible Server
19 lines (18 loc) • 7.95 kB
JavaScript
const email=require("./email"),loadTemplate=require("./load-template"),async=require("async"),mailschedule=global.getModel("mailschedule"),mailTemplateAction=require("../actions/mailtemplate"),Contract=global.getModel("contract"),Customer=global.getModel("customer"),Mailaccount=global.getModel("mailaccount"),fork=require("child_process").fork,App=global.getModel("app"),underscore=require("underscore");
exports.define=function(){global.agenda&&(global.agenda.define("ConnectImapServer",{priority:"low",concurrency:1},function($job$$,$done$$){var $account$$=$job$$.attrs.data.obj;Mailaccount.findOne({_id:$account$$._id.toString(),status:!0},{_id:1}).lean().then(function($rs$$){if(!$rs$$)return $done$$();global.mailmanagement.startAccount($account$$,function($e$$){$e$$&&Logger.error($e$$);$done$$()})}).catch($e$$=>{Logger.error($e$$);$done$$()})}),global.agenda.define("Backup",{priority:"low",concurrency:1},
function($job$$,$done$$){$job$$=fork(__dirname+"/backup.js");$job$$.on("message",function($response$$){Logger.info("Finish backup data, error:",$response$$.error);$done$$()});$job$$.send({})}),global.agenda.define("SyncCustomer",{priority:"high",concurrency:100},function($job$$){Logger.info("sync customer",$job$$.attrs.data.obj)}),global.agenda.define("Warranty",{priority:"high",concurrency:50},function($job$$,$done$$){var $obj$$={};underscore.extend($obj$$,$job$$.attrs.data.obj);$obj$$.to=[{name:$obj$$.user_created,
address:$obj$$.user_created}];$obj$$.visible_to_users&&$obj$$.visible_to_users.forEach(function($u$$){$obj$$.to.push({name:$u$$,address:$u$$})});Contract.findOne({_id:$obj$$.id_hd}).lean().then(function($contract$$){if(!$contract$$)return $done$$(),Logger.error("Can't get contract info ",$obj$$.id_hd," ");$obj$$.contract=$contract$$;Customer.findOne({_id:$contract$$.id_kh}).lean().then(function($customer$$){if(!$customer$$)return $done$$(),Logger.error("can't get customer info ",$contract$$.id_kh,
" ");$obj$$.customer=$customer$$;App.findOne({_id:$customer$$.id_app}).lean().then(function($company$$){if(!$company$$)return $done$$(),Logger.error("can't get company info ",$contract$$.id_app," ");$obj$$.company=$company$$;loadTemplate("alert warranty.html",$obj$$,function($error$$,$html$$){email.sendHtml({to:$obj$$.to,subject:"Th\u00f4ng b\u00e1o h\u1ee3p \u0111\u1ed3ng \u0111\u1ebfn h\u1ea1n b\u1ea3o h\u00e0nh",html:$html$$},function($error$$){$error$$&&Logger.error("Khong the gui email nhac nho bao hanh\n"+
$error$$);$done$$()})})}).catch($e$$=>{Logger.error($e$$);$done$$()})}).catch($e$$=>{Logger.error($e$$);$done$$()})}).catch($e$$=>{Logger.error($e$$);$done$$()})}),global.agenda.define("Task",{priority:"high",concurrency:50},function($job$$,$done$$){var $obj$$={};underscore.extend($obj$$,$job$$.attrs.data.obj);App.findOne({_id:$obj$$.id_app},{participants:1}).lean().then(function($ap$$){if(!$ap$$)return Logger.error("Error send task notification","id app",$obj$$.id_app),$done$$();let $to$$=[];$obj$$.phu_trach===
$ap$$.user_created&&$to$$.push($obj$$.phu_trach);$obj$$.attends&&$obj$$.attends.forEach(function($attend$$){$attend$$.address!==$obj$$.phu_trach&&($attend$$.address===$ap$$.user_created||underscore.where($ap$$.participants,{email:$attend$$.address})>0)&&$to$$.push($attend$$)});$to$$.length>0?loadTemplate("alert task.html",$obj$$,function($error$$,$html$$){$to$$=[...(new Set($to$$))];App.emitEvent($obj$$.id_app,"task:alert",{_id:$obj$$._id,id_app:$obj$$.id_app,title:"Nh\u1eafc nh\u1edf c\u00f4ng vi\u1ec7c",
body:$html$$,code:"task",event:"task:alert",action:"TASK:ALERT"},null,$to$$,!0,!0);email.sendHtml({to:$to$$,subject:"Nh\u1eafc nh\u1edf c\u00f4ng vi\u1ec7c",html:$html$$},function($error$$){$error$$&&Logger.error("Khong the gui email nhac nho cong viec\n"+$error$$);$done$$()})}):$done$$()}).catch($e$$=>{Logger.error($e$$);$done$$()})}),global.agenda.define("SendEmail",{priority:"high",concurrency:20},function($job$$,$done$$){var $obj$$={};underscore.extend($obj$$,$job$$.attrs.data.obj);Logger.info("begin send email",
$obj$$.subject);mailTemplateAction.send($obj$$,$e$$=>{$e$$?mailschedule.update({_id:$obj$$._id.toString()},{error:$e$$,sent:!1,date_updated:new Date,nextRunAt:$job$$.attrs.nextRunAt},function($e$$){if($e$$)return Logger.info($e$$)}):$obj$$.repeat===0?mailschedule.remove({_id:$obj$$._id.toString()},function($e$$){$e$$&&Logger.info("Can't delete mail which sent:",$e$$)}):mailschedule.update({_id:$obj$$._id.toString()},{error:"",sent:!0,nextRunAt:$job$$.attrs.nextRunAt},function($e$$){$e$$&&Logger.info($e$$)});
$done$$()})}))};exports.getJob=async($name$$,$_id$$,$next$$)=>{if(!global.agenda)return $next$$("agenda is not start");try{let $job$$=(await global.agenda.jobs({name:$name$$})).find($job$$=>$job$$.attrs.data&&$job$$.attrs.data.id===$_id$$.toString());return $job$$?$next$$(null,$job$$):$next$$("Not found")}catch($e$$){$next$$($e$$.message)}};exports.deleteTaskJob=function($_id$$,$next$$){exports.deleteJob("Task",$_id$$,$next$$)};
exports.deleteWarrantyJob=function($_id$$,$next$$){exports.deleteJob("Warranty",$_id$$,$next$$)};exports.deleteMailJob=function($_id$$,$next$$){exports.deleteJob("SendEmail",$_id$$,$next$$)};
exports.deleteJob=async($name$$,$_id$$,$next$$)=>{if(!global.agenda)return Logger.info("Agenda is not started"),$next$$();$next$$||=function(){};try{let $jobs$$=await global.agenda.jobs({name:$name$$});$jobs$$?async.mapSeries($jobs$$,function($job$$,$callback$$){$job$$.attrs.data.id==$_id$$.toString()?$job$$.remove(function($err$$){$err$$&&Logger.info("Can't remove job\n"+$err$$);$callback$$($err$$)}):$callback$$()},function($e$$,$rs$$){$next$$($e$$,$rs$$)}):$next$$()}catch($e$$){Logger.info("err delete job",
$e$$.message),$next$$($e$$.message)}};exports.ConnectImapServer=function($account$$,$minutes$$){$minutes$$||=5;$account$$.schedule=new Date;$account$$.schedule.setMinutes($account$$.schedule.getMinutes()+$minutes$$);exports.createJob("ConnectImapServer",$account$$)};exports.createTaskJob=function($obj$$){exports.createJob("Task",$obj$$)};
exports.createWarrantyJob=function($obj$$){if($obj$$.reminder_yn){var $reminder$$=new Date($obj$$.start_date);$obj$$.reminder=$reminder$$;$obj$$.repeat=0;$obj$$.unit_time==1&&($reminder$$.setDate($reminder$$.getDate()+$obj$$.warranty_time),$obj$$.unit_time_name="ng\u00e0y");$obj$$.unit_time==2&&($reminder$$.setMonth($reminder$$.getMonth()+$obj$$.warranty_time),$obj$$.unit_time_name="th\u00e1ng");$obj$$.unit_time==3&&($obj$$.unit_time_name="n\u0103m",$reminder$$.setYear($reminder$$.getYear()+$obj$$.warranty_time));
exports.createJob("Warranty",$obj$$)}else exports.deleteWarrantyJob($obj$$._id,()=>{})};exports.createMailJob=function($obj$$){exports.createJob("SendEmail",$obj$$)};exports.createBackupJob=function($schedule$$,$repeat$$){$repeat$$||=1;exports.createJob("Backup",{_id:"backup",schedule:$schedule$$,repeat:$repeat$$})};
exports.createJob=function($name$$,$obj$$){global.agenda?($obj$$=JSON.parse(JSON.stringify($obj$$)),$obj$$.reminder&&!$obj$$.schedule&&($obj$$.schedule=$obj$$.reminder),$obj$$.schedule?($obj$$.send_type==0&&($obj$$.schedule=new Date,$obj$$.schedule.setSeconds($obj$$.schedule.getSeconds()+2)),exports.getJob($name$$,$obj$$._id.toString(),async($e$$,$job$$)=>{$job$$?(!$obj$$.repeat&&$job$$.attrs.lastRunAt?$job$$.schedule(new Date(2999,12,31)):$job$$.schedule($obj$$.schedule),$job$$.attrs.data.obj=$obj$$):
($job$$=global.agenda.create($name$$,{obj:$obj$$,id:$obj$$._id.toString()}),$job$$.schedule($obj$$.schedule));if($obj$$.repeat){var $time_repeat$$;$obj$$.repeat==1&&($time_repeat$$="1 day");$obj$$.repeat==2&&($time_repeat$$="1 week");$obj$$.repeat==3&&($time_repeat$$="1 month");$obj$$.repeat==4&&($time_repeat$$="3 months");$obj$$.repeat==5&&($time_repeat$$="12 months");$time_repeat$$?$job$$.repeatEvery($time_repeat$$):$job$$.repeatEvery(null)}else $job$$.repeatEvery(null);await $job$$.save()})):exports.deleteJob($name$$,
$obj$$._id.toString())):Logger.info("Agenda is not started")};