admin/app/Jobs/scanPostConcernQueueJob.php

174 lines
5.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Created by PhpStorm.
* User: dingran
* Date: 2018/7/6
* Time: 下午3:24
*/
namespace app\Jobs;
use app\common\models\Member;
use app\common\models\MemberShopInfo;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Yunshop\Commission\models\Agents;
use Yunshop\Poster\models\Poster;
use Yunshop\Poster\models\PosterQrcode;
use Yunshop\Poster\models\Qrcode;
class scanPostConcernQueueJob implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
/**
* 处理事件
*
* @var
*/
protected $postProcessor;
/**
* 当前公众号
*
* @var
*/
protected $uniacid;
/**
* 扫码关注者
*
* @var
*/
protected $from;
/**
* 海报用户
*
* @var
*/
protected $to;
/**
* 海报消息
*
* @var
*/
protected $msg;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($uniacid, $postProcessor)
{
$this->uniacid = $uniacid;
$this->postProcessor = $postProcessor;
$this->msg = $this->postProcessor->message;
$this->from = $this->postProcessor->message['fromusername'];
$this->to = $this->postProcessor->message['eventkey'];
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
\Log::debug('-------scan poster from-----', [$this->from]);
\Log::debug('-------scan poster to-------', [$this->to]);
//$from关注者用户是否存在存在验证上线
$from_member_model = MemberShopInfo::getMemberShopInfoByOpenid($this->from);
if (!is_null($from_member_model)) {
//\Log::debug('--------poster member is not null------');
$from_member_id = $from_member_model->member_id;
$from_parent_id = $from_member_model->parent_id;
//\Log::debug('------poster from member id----', [$from_member_id]);
//\Log::debug('------poster from parent id----', [$from_parent_id]);
//$to海报用户信息
$qrcodeId = $this->getPosterForUser($this->msg);
//\Log::debug('------poster qrcodeId-----', [$qrcodeId]);
$to_member_id = PosterQrcode::getRecommenderIdByQrcodeId($qrcodeId);
//\Log::debug('------poster to_member_id-----', [$to_member_id]);
$posterId = PosterQrcode::getPosterIdByQrcodeId($qrcodeId);
$poster = Poster::getPosterById($posterId);
if ($poster->auto_sub == 0) {
\Log::debug('-------------未开启了海报的"扫码关注成为下线"------------');
return;
}
if (!empty($to_member_id)
&& date('Ymd') == $from_member_model->created_at->format('Ymd')
&& $from_member_id != $to_member_id
&& 0 == $from_parent_id
) {
//$from->parent_id 是否为0是0改为$to->uid
$from_member_model->parent_id = $to_member_id;
//\Log::debug('------poster modify parent_id----');
$from_member_model->save();
//分销-会员关系链
Member::createRealtion($from_member_id, $to_member_id);
//更新分销商
$this->updateAgent($from_member_id);
}
} else {
\Log::debug('-----poster member is null by openid-----', [$this->from]);
}
}
private function getPosterForUser($msg)
{
$msgEvent = strtolower($msg['event']);
$msgEventKey = strtolower($msg['eventkey']);
if ($msgEvent == 'scan') {
$scene = $msgEventKey;
} else {
//如果用户之前未关注,进行关注后推送的 Event 是 "subscribe",
//推送的 EventKey 是以 "qrscene_" 为前缀,后面跟着二维码的参数值.
//因为需求中提到存在这种情况 -- "尽管之前已经关注,但还不是商城的会员",
//所以这里并不根据 Event 类型来判别是否是会员, 只是识别出二维码的特征值(场景值/场景字符串), 用于定位二维码 ID
$scene = substr($msgEventKey, strpos($msgEventKey, '_') + 1);
}
if (is_int($scene) && ($scene != 0)) { //临时二维码
$sceneId = $scene;
$qrcode = Qrcode::getQrcodeBySceneId($sceneId);
} else { //永久二维码
$sceneStr = $scene;
$qrcode = Qrcode::getForeverQrcodeBySceneStr($sceneStr);
}
return $qrcode->id;
}
private function updateAgent($from_member_id)
{
$from_member = MemberShopInfo::getMemberShopInfo($from_member_id);
$agent = Agents::getAgentByMemberId($from_member_id)->first();
if (!is_null($agent) && (0 == $agent->parent_id || $agent->parent_id != $from_member->parent_id)) {
$agent->parent_id = $from_member->parent_id;
$agent->parent = $from_member->relation;
$agent->save();
//\Log::debug('------poster modify agent----');
}
}
}