love_php/app/Jobs/SignActitityMember.php
2026-04-02 09:20:51 +08:00

183 lines
6.1 KiB
PHP

<?php
namespace App\Jobs;
use App\Models\Live\Viewer;
use App\Models\Server\MerchantUser;
use App\Models\TouristOrder;
use App\Models\User;
use App\Models\Wechat;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class SignActitityMember implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $user_id;
public $tries = 1;
/**
* Create a new job instance.
* 参与活动用户完善性别 编号
*
* @return void
*/
public function __construct($user_id)
{
$this->user_id = $user_id;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//检测该用户是否参与saas端活动
$user_id = $this->user_id;
$user = User::find($user_id);
if(!$user) return ;
$m_user_id = $this->matchMerchantUser($user_id);
if(!$m_user_id) return ;
//参与 但是未编号 订单
$orders = TouristOrder::where('type','community')->whereIn('pay_status',[1,4])->where('account_id',$m_user_id)->whereNull('remark')->get();
foreach ($orders as $key => $value) {
$remark = $this->numMember($value);
if(!$remark) continue;
$value->update(['remark'=>$remark]);
}
}
//给嘉宾编号
public function numMember($tourist_order){
if($tourist_order->channel == 3 || $tourist_order->channel == '福恋小程序'){
$buy_channel = 2;
}else{
$buy_channel = 0;
}
//获取当前报名用户的性别
if($tourist_order->open_id){
$openid = $tourist_order->open_id;
}else{
$openid = MerchantUser::where('id',$tourist_order->account_id)->value('openid');
}
$sex = $this->getUserSexByOpenid($openid,$buy_channel);
if($sex == 0){
$sex = User::where('mobile',$tourist_order->mobile)->value('sex');
}
if($sex && $sex == 1){
//现有男嘉宾数量
$male_count = TouristOrder::where('type','community')->where('type_id',$tourist_order->type_id)->where('remark','like',"%男%")->count();
//当前男嘉宾数量加1
$male_count = $male_count + 1;
$remark = $male_count.'男';
}elseif($sex && $sex == 2){
//现有女嘉宾数量
$female_count = TouristOrder::where('type','community')->where('type_id',$tourist_order->type_id)->where('remark','like',"%女%")->count();
//当前女嘉宾数量加1
$female_count = $female_count + 1;
$remark = $female_count.'女';
}else{
$remark = null;
}
return $remark;
}
//根据福恋用户id 匹配saas用户id
public function matchMerchantUser($user_id){
$m_user = MerchantUser::where('user_id',$user_id)->first();
if($m_user){
return $m_user->id;
}
$openid = Wechat::where('user_id',$user_id)->value('official_openid');
if($openid){
$m_user = MerchantUser::where('openid',$openid)->first();
if($m_user){
return $m_user->id;
}
}
$openid = Viewer::where('user_id',$user_id)->value('openid');
if($openid){
$m_user = MerchantUser::where('openid',$openid)->first();
if($m_user){
return $m_user->id;
}
}
$user = User::find($user_id);
$m_user = MerchantUser::where('uuid',$user->uuid)->first();
if($m_user){
return $m_user->id;
}
return 0;
}
//根据openid获取用户性别
public function getUserSexByOpenid($openid,$channel=0){
$m_user = MerchantUser::where('openid',$openid)->first();
if($m_user && $m_user->sex && $m_user->sex != 0){
return $m_user->sex;
}
$viewer = Viewer::where('openid',$openid)->first();
if($viewer && $viewer->sex && $viewer->sex != 0){
return $viewer->sex;
}
$user_id = $this->getUseridByOpenid($openid,$channel);
if($user_id){
$user = User::withTrashed()->find($user_id);
if($user && $user->sex){
return $user->sex;
}
$wechat = Wechat::where('user_id',$user_id)->first();
if($wechat && $wechat->gender){
return $wechat->gender;
}
}
return 0;
}
//根据openid 获取用户id
//channel 0 saasH5 1福恋h5 2小程序
public function getUseridByOpenid($openid,$channel = 0){
if(empty($openid) || $openid == 'null') return 0;
if($channel == 2){
$wechat = Wechat::where('openid',$openid)->first();
if($wechat && $wechat->user_id){
$user_id = $wechat->user_id;
return $user_id;
}
return 0;
}else{
$merchant_user = MerchantUser::where('openid',$openid)->first();
if($merchant_user && $merchant_user->user_id){
$user_id = $merchant_user->user_id;
return $user_id;
}
if(!isset($user_id)){
$wechat = Wechat::where('official_openid',$openid)->first();
if($wechat && $wechat->user_id){
$user_id = $wechat->user_id;
return $user_id;
}
}
if(!isset($user_id)){
$viewer = Viewer::where('openid',$openid)->first();
if($viewer && $viewer->user_id){
$user_id = $viewer->user_id;
return $user_id;
}
}
if(!isset($user_id) && $merchant_user){
$wechat = Wechat::where('unionid',$merchant_user->unionid)->first();
if($wechat){
$user_id = $wechat->user_id;
return $user_id;
}
}
return 0;
}
}
}