viewer_id = $param['viewer_id']; $this->sharer_id = $param['sharer_id']; } /** * Execute the job. * * @return void */ public function handle() { //查找分享者 try { //判断用户是否存在 $viewer = Viewer::find($this->sharer_id); if (empty($viewer)) { throw new \Exception("分享者不存在", 500); }else{ //检查是否已经生成过转账记录 $result = $this->checkMakeShareCash($this->viewer_id, $viewer->id); if (empty($result)) { //用户生成分享金额 $result = $this->makeShareCash($viewer, $type='main', null, $this->viewer_id); if ($result) { //寻找上级分享人 $this->getShareRoleViewer($viewer, $this->viewer_id); } } } } catch (\Exception $e) { \Log::error($e->getMessage().';line-'.$e->getLine()); } } public function checkMakeShareCash($register_viewer_id, $viewer_id) { $result = AssetLog::where('viewer_id', $viewer_id)->where('log_id', $register_viewer_id)->exists(); return $result; } public function getShareRoleViewer($viewer, $register_viewer_id) { $sharer_id = ViewerShare::where('viewer_id', $viewer->id)->where('type', 1)->value('sharer_id'); if ($sharer_id) { $sharer = Viewer::find($sharer_id); if (empty($sharer)) { return ; } //产生共享基金 $this->makeShareFund($sharer, $viewer, $register_viewer_id); // $result = $this->checkMakeShareCash($register_viewer_id, $sharer_id); // if (empty($result)) { // $result = $this->makeShareCash($sharer, $type="minor", $viewer, $register_viewer_id); // } $viewer = $sharer; } } /** * viewer 分享者 * type 分享类型 直接或者间接 * $previous_viewer 上一级分享人 */ public function makeShareCash($viewer, $type, $previous_viewer=null, $register_viewer_id) { try { //开启事务 \DB::beginTransaction(); //判断用户是否存在 if (empty($viewer)) { throw new \Exception("分享者不存在", 500); } //判断是否有分享角色 $share_role = $viewer->shareRole(); if (empty($share_role)) { throw new \Exception('分享者没有分享角色', 500); } //收益金额 $rule = $share_role->rule(); if ($type == 'main') { $share_values = $rule['share_values']; }else{ $previous_viewer_role = $previous_viewer->shareRole(); if (empty($previous_viewer)) { throw new \Exception("上一级分享人没有分享角色,viewer_id: ".$previous_viewer->id, 1); } $previous_viewer_role_name = $previous_viewer_role->name; switch ($previous_viewer_role_name) { case '普通推广员': $key = 'pt_share_values'; break; case '铜牌推广员': $key = 'tp_share_values'; break; case '银牌推广员': $key = 'yp_share_values'; break; default: $key = ''; break; } if ($key) { $share_values = $rule[$key]; }else{ throw new \Exception('分享者的上一级没有对应身份', 500); } } if ($share_values == 0) { throw new \Exception('分享者没有分享收益金额', 500); } $asset = Asset::firstOrCreate(['viewer_id'=>$viewer->id]); // $asset->increment('share_cash', $share_values); $score = (($asset->share_cash * 100) + ($asset->cash * 100)) / 100; //生成收益记录 $this->storeAssetLog($viewer->id, $share_values, $score, $register_viewer_id); //提交事务 \DB::commit(); return true; } catch (\Exception $e) { //回滚事务 \DB::rollBack(); \Log::error($e->getMessage().';line-'.$e->getLine()); return false; } } public function storeAssetLog($viewer_id, $share_values, $score, $register_viewer_id) { $log = new AssetLog; $log->viewer_id = $viewer_id; $log->num = $share_values; $log->type = 2; $log->log_id = $register_viewer_id; $log->score = $score; $log->save(); return ; } public function makeShareFund($viewer, $previous_viewer, $register_viewer_id) { try { //开启事务 \DB::beginTransaction(); //判断用户是否存在 if (empty($viewer)) { throw new \Exception("分享者不存在", 500); } //判断是否有分享角色 $share_role = $viewer->shareRole(); if (empty($share_role)) { throw new \Exception('分享者没有分享角色', 500); } //收益金额 $rule = $share_role->rule(); $viewer_role_name = $share_role->name; $previous_viewer_role = $previous_viewer->shareRole(); $previous_viewer_role_name = $previous_viewer_role->name; switch ($previous_viewer_role_name) { case '普通推广员': $key = 'pt_share_values'; break; case '铜牌推广员': $key = 'tp_share_values'; break; case '银牌推广员': $key = 'yp_share_values'; break; default: $key = ''; break; } //共享金额 if ($key) { $share_values =isset($rule[$key])?$rule[$key]:0; }else{ throw new \Exception('分享者的上一级没有对应身份', 500); } if ($share_values == 0) { throw new \Exception('分享者没有分享收益金额', 500); } //生成共享基金 $share_fund = ShareFund::first(); if (empty($share_fund)) { $share_fund = new ShareFund; $share_fund->balance_amount = 0; $share_fund->withdraw_amount = 0; $share_fund->save(); } $share_fund->increment('balance_amount', $share_values); //生成收益记录 $this->storeShareFundLog($viewer->id, $share_values, $share_fund->balance_amount, $register_viewer_id); //提交事务 \DB::commit(); return true; } catch (\Exception $e) { //回滚事务 \DB::rollBack(); \Log::error($e->getMessage().';line-'.$e->getLine()); return false; } } public function storeShareFundLog($viewer_id, $share_values, $balance_amount, $register_viewer_id) { $log = new ShareFundLog; $log->viewer_id = $viewer_id; $log->value = $share_values; $log->type = 'gain'; $log->other_viewer_id = $register_viewer_id; $log->balance_amount = $balance_amount; $log->status = 1; $log->save(); return ; } }