0, 'starttime' => ['BETWEEN',[$starttime,$endtime]], 'notice_status' => 0, ]; $task_list = Db::name('lesson_slot')->where($map)->order('starttime asc')->limit(1)->select(); if(empty($task_list)){ echo 'empty'; exit; } foreach($task_list as $slot){ //找出这节课时的预约单 $map = [ 'order.order_status' => 10, 'order.slot_id' => $slot['id'], ]; $order_list = Db::name('lesson_order')->alias('order') ->field('lesson.name,lesson.name_en,user.firstname,user.lastname,user.email,user.lang,user.notice_type,user.whatsapp') ->join('user','order.user_id = user.id','LEFT') ->join('lesson','order.lesson_id = lesson.id','LEFT') ->where($map)->order('order.id asc')->select(); //$order_list = $this->list_lang($order_list,['name']); if(empty($order_list)){ continue; } //给这些预约单的用户发邮件 foreach($order_list as $order){ $obj = new Email(); $result = $obj ->to($order['email']) ->subject('Elin Dance Studio 明天开课!') ->message('Hi,'.$order['firstname']. ' ' .$order['lastname'].',您预约的['.$order['name'].']将于'.date('Y-m-d H:i:s',$slot['starttime']).'开课,请合理安排时间,准时来上课哦!') ->send(); } //这节课时,任务完成 $update = [ 'notice_status' => 1, ]; Db::name('lesson_slot')->where('id',$slot['id'])->update($update); } } //套餐将要到期,一个月,两周,一周,逐级通知,提醒三次。计划任务分别一小时执行一次 public function auto_package_order_notice_mon(){ $map = [ 'order.order_status' => 1, 'order.remain' => ['gt',0], 'order.endtime' => ['lt',time()+(86400*30)], 'order.notice_status' => 0, ]; $task_list = Db::name('package_order')->alias('order') ->field('order.id,order.endtime,p.name,p.name_en,user.firstname,user.lastname,user.email,user.lang,user.notice_type,user.whatsapp') ->join('lesson_package p','order.package_id = p.id','LEFT') ->join('user','order.user_id = user.id','LEFT') ->where($map)->order('endtime asc')->limit(5)->select(); if(empty($task_list)){ echo 'empty'; exit; } foreach($task_list as $order){ //给这些用户发邮件 $obj = new Email(); $result = $obj ->to($order['email']) ->subject('Elin Dance Studio 套餐一个月内到期提醒!') ->message('Hi,'.$order['firstname']. ' ' .$order['lastname'].',您购买的套餐['.$order['name'].']将于'.date('Y-m-d H:i:s',$order['endtime']).'过期,建议您在过期内使用完毕!') ->send(); //任务完成 $update = [ 'notice_status' => 1,//月通知已发送 ]; Db::name('package_order')->where('id',$order['id'])->update($update); } } public function auto_package_order_notice_2week(){ $map = [ 'order.order_status' => 1, 'order.remain' => ['gt',0], 'order.endtime' => ['lt',time()+(86400*14)], 'order.notice_status' => 1, ]; $task_list = Db::name('package_order')->alias('order') ->field('order.id,order.endtime,p.name,p.name_en,user.firstname,user.lastname,user.email,user.lang,user.notice_type,user.whatsapp') ->join('lesson_package p','order.package_id = p.id','LEFT') ->join('user','order.user_id = user.id','LEFT') ->where($map)->order('endtime asc')->limit(5)->select(); if(empty($task_list)){ echo 'empty'; exit; } foreach($task_list as $order){ //给这些用户发邮件 $obj = new Email(); $result = $obj ->to($order['email']) ->subject('Elin Dance Studio 套餐两周内到期提醒!') ->message('Hi,'.$order['firstname']. ' ' .$order['lastname'].',您购买的套餐['.$order['name'].']将于'.date('Y-m-d H:i:s',$order['endtime']).'过期,建议您在过期内使用完毕!') ->send(); //任务完成 $update = [ 'notice_status' => 2,//2周通知已发送 ]; Db::name('package_order')->where('id',$order['id'])->update($update); } } public function auto_package_order_notice_1week(){ $map = [ 'order.order_status' => 1, 'order.remain' => ['gt',0], 'order.endtime' => ['lt',time()+(86400*7)], 'order.notice_status' => 2, ]; $task_list = Db::name('package_order')->alias('order') ->field('order.id,order.endtime,p.name,p.name_en,user.firstname,user.lastname,user.email,user.lang,user.notice_type,user.whatsapp') ->join('lesson_package p','order.package_id = p.id','LEFT') ->join('user','order.user_id = user.id','LEFT') ->where($map)->order('endtime asc')->limit(5)->select(); if(empty($task_list)){ echo 'empty'; exit; } foreach($task_list as $order){ //给这些用户发邮件 $obj = new Email(); $result = $obj ->to($order['email']) ->subject('Elin Dance Studio 套餐一周内到期提醒!') ->message('Hi,'.$order['firstname']. ' ' .$order['lastname'].',您购买的套餐['.$order['name'].']将于'.date('Y-m-d H:i:s',$order['endtime']).'过期,建议您在过期内使用完毕!') ->send(); //任务完成 $update = [ 'notice_status' => 3,//2周通知已发送 ]; Db::name('package_order')->where('id',$order['id'])->update($update); } } /////////////////////////////////////////下面都是工具方法//////////////////////////////////////////////// //结果集信息里,多个字段需要翻译 private function list_lang($list,$field,$lang = ''){ if(!$list || empty($list)){ return $list; } foreach($list as $vo => $info){ $list[$vo] = $this->info_lang($info,$field); } return $list; } //单条信息里,多个字段需要翻译 private function info_lang($data,$field,$lang = ''){ if(!$data || empty($data)){ return $data; } foreach($data as $key => $val){ if(in_array($key,$field)){ if($lang == 'EN'){ $data[$key] = $data[$key.'_en']; unset($data[$key.'_en']); }else{ unset($data[$key.'_en']); } } } return $data; } }