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

158 lines
4.8 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
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Models\Wechat;
use App\Models\Referre;
use App\Models\ReferreAwardHistory;
use App\Services\WechatService;
use App\Models\Message;
use App\Models\Score;
use App\Models\ScoreHistory;
use App\Models\User;
use App\Repositories\Eloquent\SmsRepository as Sms;
use App\Jobs\SyncScore;
use App\Utils\Messenger;
class OfficialReferreAward implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $tries = 1;
protected $other_user_id;
protected $from_user_id;
protected $type;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($array)
{
$this->other_user_id = $array['user_id'];
$this->from_user_id = $array['from_user_id'];
$this->type = $array['type'];
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//是否是推荐人
$user_id = $this->from_user_id;
$referre = Referre::where("user_id", $user_id)->first();
if (empty($referre)) {//不是推荐人
//短信通知、
$user = User::find($user_id);
$other_user = User::find($this->other_user_id);
if (empty($user) || empty($user)) {
return ;
}
$ms = $user->name.'您好,您的好友'.$other_user->name.'应邀加入福恋您成功获得1个福分的奖励感谢您的参与!';
$message = Message::where('phone', $user->mobile)->where('message', $ms)->first();
if (empty($message)) {
if ($user->mobile != '18898888797') {
$this->sentMessage($user->mobile, $ms);
}
}
//赠送一福分
$this->scoreRecharge($user_id, 1);
return ;
}
//创建奖励记录
$history = new ReferreAwardHistory();
$history->user_id = $user_id;
$history->other_user_id = $this->other_user_id;
$history->type = $this->type;
if ($this->type === 'register') {//注册
$history->amount = 1;
$amount = 1 * 100;
$desc = '推荐注册用户奖励(福恋小程序)';
$referre->increment('num', 1);
}elseif ($this->type === 'approve') {
$history->amount = 2;
$amount = 2 * 100;
$desc = '推荐认证用户奖励(福恋小程序)';
}
//转账
$trade_no = $this->getTradeNO();
$history->trade_no = $trade_no;
$history->save();
$afficial_openid = Wechat::where('user_id', $user_id)->value('afficial_openid');
$result = WechatService::officialUserTransfer($trade_no, $afficial_openid, $amount, $desc);
if (empty($result)) {
$history->is_hooked = -1;
$history->save();
}
}
public function getTradeNO()
{
$dateline = time();
$mix_1 = rand(100, 999);
$mix_2 = rand(100, 999);
return $dateline . $mix_1 . $mix_2;
}
/**
* 添加积分
* @param Request $request [description]
* @param int $user_id 用户id
* @return [type] [description]
*/
public function scoreRecharge($user_id, $score)
{
$scoreObj = Score::where('user_id', $user_id)->first();
if (empty($scoreObj)) {
$scoreObj = Score::create([
'user_id'=>$user_id,
'remain_amount'=>0,
]);
}
if (empty($score)) {
return ;
}
//2020/11/12开始不送福分
// $scoreObj->remain_amount = $scoreObj->remain_amount + $score;
// $scoreObj->save();
ScoreHistory::create([
'user_id'=>$user_id,
'type'=>'gained',
'amount'=>$score,
'value'=>$scoreObj->remain_amount,
'message'=>'注册赠送福分'
]);
$array['message'] = '注册赠送福分';
$array['user_id'] = $user_id;
$array['type'] = 'gained';
$array['score'] = $score;
$array['other_user_id'] = $this->other_user_id;
SyncScore::dispatch($array)->onQueue('love');
return;
}
//发送普通消息
function sentMessage($mobile, $message){
if (empty($mobile)) {
return true;
}
Message::create([
'phone'=>$mobile,
'message'=>$message,
'confirmed' => 1,
'ip' => request()?request()->ip():'127.0.0.1',
]);
Messenger::sendSMS($mobile, $message);
return true;
}
}