123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?php
- namespace App\Jobs;
- use App\Models\Company;
- use App\Models\Member;
- use App\Models\SmsBatch;
- use App\Models\SmsRule;
- use App\Validators\Rules\MobileRule;
- use Illuminate\Bus\Queueable;
- use Illuminate\Queue\SerializesModels;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- class SmsBatchJob implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- /**
- * @var SmsBatch
- */
- private $smsBatch;
- /**
- * Create a new job instance.
- *
- * @param SmsBatch $smsBatch
- */
- public function __construct(SmsBatch $smsBatch)
- {
- $this->smsBatch = $smsBatch;
- }
- /**
- * Execute the job.
- *
- * @return void
- */
- public function handle()
- {
- $status = $this->getRuleStatus($this->smsBatch->template->alias);
- if ($status) {
- if ($this->smsBatch->mobiles) {
- $mobiles=explode(",", $this->smsBatch->mobiles);
- foreach ($mobiles as $mobile) {
- if (validator_check($mobile, new MobileRule())) {
- $this->dispatchSms($mobile);
- $this->smsBatch->target_num++;
- }
- $this->smsBatch->save();
- }
- } else {
- $mobiles=$this->getMobiles($this->smsBatch->accept_member, $this->smsBatch->accept_type, $this->smsBatch->accept_time);
- if (!empty($mobiles)) {
- foreach ($mobiles as $mobile) {
- if (validator_check($mobile, new MobileRule())) {
- $this->dispatchSms($mobile);
- $this->smsBatch->target_num++;
- }
- $this->smsBatch->save();
- }
- }
- }
- }
- if ($this->smsBatch->target_num == 0) {
- $this->smsBatch->status=1;
- $this->smsBatch->save();
- }
- }
- protected function getMobiles($accept_member, $accept_type, $accetp_time)
- {
- $where=[];
- if ($accept_type) {
- $where[]=[$accept_type>2?"mobile_audit":"email_audit",$accept_type%2];
- }
- if ($accetp_time) {
- $where[]=["last_login_time",'<',time()-($accetp_time==1?7:30)*24*60*60];
- }
- $memberMobiles=Member::where($where)->pluck('mobile');
- $companyMobiles=Company::where($where)->pluck('mobile');
- if ($accept_member == 0) {
- return $memberMobiles->concat($companyMobiles);
- } else {
- return $accept_member==1?$companyMobiles:$memberMobiles;
- }
- }
- protected function dispatchSms($mobile)
- {
- $smsJob=new SmsJob($mobile, $this->smsBatch->template->alias, []);
- $smsJob->setBatchId($this->smsBatch->id);
- dispatch($smsJob);
- }
- protected function getRuleStatus($alias)
- {
- $result = SmsRule::where(['alias'=>$alias])->first();
- if ($result) {
- if ($result->status) {
- return true;
- }
- return false;
- } else {
- return false;
- }
- }
- }
|