| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | <?phpnamespace App\Jobs;use App\Models\Company;use App\Models\Member;use App\Models\EmailBatch;use App\Models\Email;use Illuminate\Bus\Queueable;use Illuminate\Queue\SerializesModels;use Illuminate\Queue\InteractsWithQueue;use Illuminate\Contracts\Queue\ShouldQueue;use Illuminate\Foundation\Bus\Dispatchable;class EmailBatchJob implements ShouldQueue{    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;    /**     * @var EmailBatch     */    private $EmailBatch;    /**     * EmailBatchJob constructor.     * @param EmailBatch $EmailBatch     */    public function __construct(EmailBatch $EmailBatch)    {        $this->EmailBatch = $EmailBatch;    }    /**     * Execute the job.     *     * @return void     */    public function handle()    {        $status = $this->getRuleStatus($this->EmailBatch->template->alias);        if ($status) {            if ($this->EmailBatch->emails) {                $emails=explode(",", $this->EmailBatch->emails);                foreach ($emails as $emails) {                    if (validator_check($emails, ['email'])) {                        $this->dispatchSms($emails);                        $this->EmailBatch->target_num++;                    }                    $this->EmailBatch->save();                }            } else {                $emails=$this->getEmails($this->EmailBatch->accept_member, $this->EmailBatch->accept_type);                if (!empty($emails)) {                    foreach ($emails as $emails) {                        if (validator_check($emails, ['email'])) {                            $this->dispatchSms($emails);                            $this->EmailBatch->target_num++;                        }                        $this->EmailBatch->save();                    }                }            }        }        if ($this->EmailBatch->target_num == 0) {            $this->EmailBatch->status=1;            $this->EmailBatch->save();        }    }    protected function getEmails($accept_member, $accept_type)    {        $where=[];        if ($accept_type) {            $where[]=["last_login_time",'<',time()-($accept_type==1?7:30)*24*60*60];        }        $memberEmail=Member::where($where)->pluck('email');        $companyEmail=Company::where($where)->pluck('email');        if ($accept_member == 0) {            return $memberEmail->concat($companyEmail);        } else {            return $accept_member==1?$companyEmail:$memberEmail;        }    }    protected function dispatchSms($emails)    {        $emailJob=new EmailJob($emails, $this->EmailBatch->template->alias, [], []);        $emailJob->setBatchId($this->EmailBatch->id);        dispatch($emailJob);    }    protected function getRuleStatus($alias)    {        $result = Email::where(['alias'=>$alias])->first();        if ($result) {            if ($result->status) {                return true;            }            return false;        } else {            return false;        }    }}
 |