other_user_id = $array['user_id']; $this->from_openid = $array['from_openid']; $this->type = $array['type']; $this->num = isset($array['num']) ? $array['num'] : 1; } /** * Execute the job. * * @return void */ public function handle() { //是否是推荐人 $user_id = Wechat::where('openid', $this->from_openid)->value('user_id'); $referre = Referre::where("user_id", $user_id)->first(); //获取当前渠道对应的类型 $scoreStatusArr = config('score.status'); $scoreStatus = ''; foreach ($scoreStatusArr as $k => $item) { if(in_array($this->type, $item)){ $scoreStatus = array_search($this->type, $item); continue; } } if (empty($referre)) {//不是推荐人 //短信通知、 $user = User::find($user_id); $other_user = User::find($this->other_user_id); if (empty($user) || empty($other_user)) { return ; } switch ($this->type){ case 'register': $ms = $user->name.'您好,您的好友'.$other_user->name.'应邀加入福恋,您成功获得'.$this->num.'个福分的奖励,感谢您的参与!'; break; case 'approve': $ms = $user->name.'您好,您的好友'.$other_user->name.'已完成实名认证,您成功获得'.$this->num.'个福分的奖励,感谢您的参与!'; break; case 'rank': $ms = $user->name.'您好,您的好友'.$other_user->name.'已购买vip,您成功获得'.$this->num.'个福分的奖励,感谢您的参与!'; break; case 'love': $ms = $user->name.'您好,您的好友'.$other_user->name.'已购买脱单服务,您成功获得'.$this->num.'个福分的奖励,感谢您的参与!'; break; } $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, $this->num, $scoreStatus); 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 = $referre->register_amount; $amount = $referre->register_amount * 100; $desc = '推荐注册用户奖励(福恋小程序)'; $referre->increment('num', $this->num); //转账 $trade_no = $this->getTradeNO(); $history->trade_no = $trade_no; $history->save(); $result = WechatService::userTransfer($trade_no, $this->from_openid, $amount, $desc); }elseif ($this->type === 'approve') { $history->amount = $referre->approve_amount; $amount = $referre->approve_amount * 100; $desc = '推荐认证用户奖励(福恋小程序)'; // return; //转账 $trade_no = $this->getTradeNO(); $history->trade_no = $trade_no; $history->save(); $result = WechatService::userTransfer($trade_no, $this->from_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, $scoreStatus = '') { $scoreObj = Score::where('user_id', $user_id)->first(); if (empty($scoreObj)) { $scoreObj = Score::create([ 'user_id'=>$user_id, ]); } if (empty($score)) { return ; } $status = 0; if(is_numeric($scoreStatus)){ $scoreObj->cash_amount = $scoreObj->cash_amount + $score; $status = 1; } //2020/11/12 11:10开始不送福分 // $scoreObj->remain_amount = $scoreObj->remain_amount + $score; // $scoreObj->save(); switch ($this->type){ case 'register': $msgHeader = '注册'; break; case 'approve': $msgHeader = '推荐人认证'; break; case 'rank': $msgHeader = '推荐人购买VIP'; break; case 'love': $msgHeader = '推荐人购买脱单服务'; break; } ScoreHistory::create([ 'user_id'=>$user_id, 'other_user_id' => $this->other_user_id, 'type'=>'gained', 'amount'=>$score, 'value'=>$scoreObj->remain_amount, 'message'=>$msgHeader.'赠送福分', 'status'=>$status, 'source'=>$scoreStatus, ]); $array['message'] = $msgHeader.'赠送福分'; $array['user_id'] = $user_id; $array['type'] = 'gained'; $array['score'] = $score; $array['other_user_id'] = $this->other_user_id; $array['status'] = 1; 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; } }