103 lines
3.3 KiB
PHP
103 lines
3.3 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
namespace App\Console\Commands;
|
|||
|
|
|
|||
|
|
use Illuminate\Console\Command;
|
|||
|
|
use App\Models\ActivityMember;
|
|||
|
|
use App\Models\Activity;
|
|||
|
|
use App\Models\Message;
|
|||
|
|
use App\Jobs\SendSmsBatch;
|
|||
|
|
|
|||
|
|
class SendActivitySmsBeforeBeginning extends Command
|
|||
|
|
{
|
|||
|
|
/**
|
|||
|
|
* The name and signature of the console command.
|
|||
|
|
*
|
|||
|
|
* @var string
|
|||
|
|
*/
|
|||
|
|
protected $signature = 'command:send_sms_to_activity_members';
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* The console command description.
|
|||
|
|
*
|
|||
|
|
* @var string
|
|||
|
|
*/
|
|||
|
|
protected $description = '活动开始前15分钟 发送短信通知';
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Create a new command instance.
|
|||
|
|
*
|
|||
|
|
* @return void
|
|||
|
|
*/
|
|||
|
|
public function __construct()
|
|||
|
|
{
|
|||
|
|
parent::__construct();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Execute the console command.
|
|||
|
|
*
|
|||
|
|
* @return mixed
|
|||
|
|
*/
|
|||
|
|
//每1分钟调一次接口
|
|||
|
|
public function handle()
|
|||
|
|
{
|
|||
|
|
//获取活动开始前15分钟的活动
|
|||
|
|
$now_date = date('Y-m-d H:i:s');
|
|||
|
|
$send_time = date('Y-m-d H:i:s',strtotime('+15 minutes',strtotime($now_date)));
|
|||
|
|
$activities = Activity::whereBetween('start_time',[$now_date,$send_time])->get();
|
|||
|
|
if (!empty($activities)){//要发送通知的活动
|
|||
|
|
foreach ($activities as $activity) {
|
|||
|
|
$message = '【福恋】恭喜您,您参加的“'.$activity->theme.'”活动报名成功,请于'.$activity->start_time.'准时参与。如有问题,请联系:18922809346,退订回N';
|
|||
|
|
$members = ActivityMember::where('activity_id',$activity->id)->where('is_joined',1)->get();
|
|||
|
|
$mobile = [];
|
|||
|
|
foreach ($members as $member) {
|
|||
|
|
$result = $this->isSendSms($activity,$member);
|
|||
|
|
if ($result) { //没有发送过 就发
|
|||
|
|
$mobile[] = $result;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if(!empty($mobile) && is_array($mobile)){
|
|||
|
|
//批量发送
|
|||
|
|
$array = [
|
|||
|
|
'mobile' => $mobile,
|
|||
|
|
'message' => $message
|
|||
|
|
];
|
|||
|
|
//添加记录
|
|||
|
|
$this->addSmsRecord($mobile,$activity);
|
|||
|
|
SendSmsBatch::dispatch($array)->onQueue('love');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//判断是否发送过该短信
|
|||
|
|
public function isSendSms($activity,$member){
|
|||
|
|
$code = '活动短信通知'.$activity->id;
|
|||
|
|
$is_send = Message::where('phone',$member->mobile)->where('code',$code)->count();
|
|||
|
|
if ($is_send) {
|
|||
|
|
return false;
|
|||
|
|
}else{
|
|||
|
|
return $member->mobile;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//增加短信记录
|
|||
|
|
public function addSmsRecord($mobile,$activity){
|
|||
|
|
$code = '活动短信通知'.$activity->id;
|
|||
|
|
$message = '【福恋】恭喜您,您参加的“'.$activity->theme.'”活动报名成功,请于'.$activity->start_time.'准时参与。如有问题,请联系4000401707,退订回N';
|
|||
|
|
if(!empty($mobile) && is_array($mobile)){
|
|||
|
|
foreach($mobile as $mob){
|
|||
|
|
Message::create([
|
|||
|
|
'phone'=>$mob,
|
|||
|
|
'message'=>$message,
|
|||
|
|
'code'=>$code,
|
|||
|
|
'confirmed'=>1,
|
|||
|
|
'ip' => request() ? request()->ip() : '127.0.0.1',
|
|||
|
|
'is_click'=>0,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|