activity_service = $activity_service; } public function awardsOptions(Request $request){ return $this->success([ 'exchange_points'=>ActivityOption::findOrFail(13)->key_value, 'f_draw_points'=>ActivityOption::findOrFail(14)->key_value, 'activity_dec'=>ActivityOption::findOrFail(15)->key_value ]); } public function awardsName(Request $request){ $awrad_array = ActivityOption::where('key_type', 0) ->where(['is_niu'=>0]) ->pluck('key_name', 'id')->toArray(); return $this->success($awrad_array); } /** * 一发入魂兑换次数; */ public function pointToTimes(Request $request){ $user = auth('api')->user(); $times = 1; $points = $times*(ActivityOption::findOrFail(13)->key_value); if($user->points >= $points){ $res_data = []; try { DB::beginTransaction(); $user->decrement('points', $points); $user->increment('draw_num', $times); //记录积分消耗记录 PointsLog::create([ 'user_id'=>$user->id, 'type'=>2, 'points'=> 0-$points, 'now_points'=>$user->points, 'desc'=>'扭蛋:一发入魂', ]); DB::commit(); } catch (\Throwable $th) { DB::rollback(); return $this->error($th->getMessage()); } return $this->success('兑换成功'); }else{ return $this->error('剩余积分不足'); } } /** * 翻牌抽奖 */ public function toDraw(Request $request){ //消耗抽奖机会 $user = auth('api')->user(); if($user->draw_num > 0){ $res_data = []; try { DB::beginTransaction(); $user->decrement('draw_num'); //抽奖 $res_data = $this->activity_service->activityDarw(); //记录并发放结果 foreach($res_data as $draw_id){ $activity_log = new ActivityLog(); $activity_log->user_id = $user->id; $activity_log->draw_id = $draw_id; $activity_log->save(); SendActivityDrawJob::dispatch($activity_log); } DB::commit(); } catch (\Throwable $th) { DB::rollback(); return $this->error($th->getMessage()); } return $this->success($res_data); }else{ return $this->error('剩余抽奖次数不足'); } } /** * 五连必中 */ public function toDrawFive(Request $request){ //消耗积分抽5次 $user = auth('api')->user(); $times = 5; $points = ActivityOption::findOrFail(14)->key_value; if($user->points >= $points){ $res_data = []; try { DB::beginTransaction(); $user->decrement('points', $points); //记录积分消耗记录 PointsLog::create([ 'user_id'=>$user->id, 'type'=>3, 'points'=> 0-$points, 'now_points'=>$user->points, 'desc'=>'扭蛋:五连必中', ]); //抽奖 $res_data = $this->activity_service->activityDarw($times); //检查中奖结果中有没有is_niu,没有则随机替换一个现有奖品 $niu_list = ActivityOption::where('is_niu', 1)->pluck('id')->toArray(); if(count(array_intersect($res_data, $niu_list)) < 1){ $key = rand(0, count($res_data)-1); $draw_id = array_rand($niu_list); $res_data[$key] = $niu_list[$draw_id]; } //记录并发放结果 foreach($res_data as $draw_id){ $activity_log = new ActivityLog(); $activity_log->user_id = $user->id; $activity_log->draw_id = $draw_id; $activity_log->save(); SendActivityDrawJob::dispatch($activity_log); } DB::commit(); } catch (\Throwable $th) { DB::rollback(); return $this->error($th->getMessage()); } return $this->success($res_data); }else{ return $this->error('剩余积分不足'); } } /** * 抽奖活动 */ public function luckIndex($activity_id){ return LuckActivityResource::make(LuckDrawActivity::findOrFail($activity_id)); // $this->activity_service->luckActivityDarw(1,5); } /** * 抽奖活动-兑换次数 */ public function luckPointsToTimes($activity_id){ $user = auth('api')->user(); $times = 1; $time = Carbon::now(); $activity = LuckDrawActivity::findOrFail($activity_id); if($activity->start_time > $time){ return $this->error('活动暂未开启'); } if($activity->end_time < $time){ return $this->error('活动已经结束'); } $points = $times*($activity->one_draw); if($user->points >= $points){ try { DB::beginTransaction(); $user->decrement('points', $points); //新增活动抽奖次数 $user_luck_times = UserLuckTime::where(['user_id'=>$user->id,'activity_id'=>$activity->id])->first(); if($user_luck_times){ $user_luck_times->increment('times'); }else{ UserLuckTime::create([ 'user_id'=>$user->id, 'activity_id'=>$activity->id, 'times'=>1 ]); } //记录积分消耗记录 PointsLog::create([ 'user_id'=>$user->id, 'type'=>2, 'points'=> 0-$points, 'now_points'=>$user->points, 'desc'=>'抽奖活动:一发入魂', ]); DB::commit(); } catch (\Throwable $th) { DB::rollback(); return $this->error($th->getMessage()); } return $this->success('兑换成功'); }else{ return $this->error('剩余积分不足'); } } /** * 抽奖活动-单次抽奖 */ public function luckToDraw($activity_id){ //消耗抽奖机会 $user = auth('api')->user(); $time = Carbon::now(); $activity = LuckDrawActivity::findOrFail($activity_id); if($activity->start_time > $time){ return $this->error('活动暂未开启'); } if($activity->end_time < $time){ return $this->error('活动已经结束'); } $user_luck_times = UserLuckTime::where(['user_id'=>$user->id,'activity_id'=>$activity->id])->first(); if($user_luck_times && $user_luck_times->times > 0){ $res_data = []; try { DB::beginTransaction(); $user_luck_times->decrement('times'); //抽奖 $res_data = $this->activity_service->luckActivityDarw($activity->id); //记录并发放结果 $draw_id = $res_data[0]; // foreach($res_data as $draw_id){ $luck_log = new UserLuckLog(); $luck_log->user_id = $user->id; $luck_log->activity_id = $activity->id; $luck_log->draw_id = $draw_id; // $luck_log->ext = '恭喜抽中'; $luck_log->save(); if($draw_id){ LuckDrawOption::findOrFail($draw_id)->increment('luck_num'); SendLuckActivityDrawJob::dispatch($luck_log); } // } DB::commit(); } catch (\Throwable $th) { DB::rollback(); return $this->error($th->getMessage()); } $res_data = $this->drawIdToDrawName($res_data, $activity_id); return $this->success($res_data); }else{ return $this->error('剩余抽奖次数不足'); } } /** * 抽奖活动-五连抽 */ public function luckToDrawFive($activity_id){ //消耗积分抽5次 $user = auth('api')->user(); $times = 5; $time = Carbon::now(); $activity = LuckDrawActivity::findOrFail($activity_id); if($activity->start_time > $time){ return $this->error('活动暂未开启'); } if($activity->end_time < $time){ return $this->error('活动已经结束'); } $points = $activity->five_draw; if($user->points >= $points){ $res_data = []; try { DB::beginTransaction(); $user->decrement('points', $points); //记录积分消耗记录 PointsLog::create([ 'user_id'=>$user->id, 'type'=>3, 'points'=> 0-$points, 'now_points'=>$user->points, 'desc'=>'抽奖活动:五连必中', ]); //抽奖 $res_data = $this->activity_service->luckActivityDarw($activity->id, $times); //检查中奖结果中有没有五连必中,没有则随机替换一个现有奖品 $niu_list = LuckDrawOption::where('is_five', 1)->pluck('id')->toArray(); if(count($niu_list) > 0 && count(array_intersect($res_data, $niu_list)) < 1){ $key = rand(0, count($res_data)-1); $draw_id = array_rand($niu_list); $res_data[$key] = $niu_list[$draw_id]; } // dd($res_data); //记录并发放结果 foreach($res_data as $draw_id){ $luck_log = new UserLuckLog(); $luck_log->user_id = $user->id; $luck_log->activity_id = $activity->id; $luck_log->draw_id = $draw_id; // $luck_log->ext = '恭喜抽中'; $luck_log->save(); if($draw_id){ SendLuckActivityDrawJob::dispatch($luck_log); } } $up_res_data = array_filter($res_data); if($up_res_data){ LuckDrawOption::whereIn('id', $up_res_data)->increment('luck_num'); } DB::commit(); } catch (\Throwable $th) { DB::rollback(); return $this->error($th->getMessage()); } $res_data = $this->drawIdToDrawName($res_data, $activity_id); return $this->success($res_data); }else{ return $this->error('剩余积分不足'); } } /** * 奖品ID替换为奖品名称 */ private function drawIdToDrawName($draw_ids, $activity_id=0){ if(!is_array($draw_ids)){ $draw_ids = [$draw_ids]; } $luck_draw_options = LuckDrawOption::where('activity_id', $activity_id)->get()->keyBy('id'); $draw_name = []; foreach($draw_ids as $draw_id){ if(isset($luck_draw_options[$draw_id])){ $draw_name[] = [ 'draw_id' => $draw_id, 'draw_name' => $luck_draw_options[$draw_id]->draw_name, 'draw_image'=> $luck_draw_options[$draw_id]->draw_logo, ]; }else{ $draw_name[] = [ 'draw_id' => $draw_id, 'draw_name' => '谢谢参与', 'draw_image'=> '' ]; } } return $draw_name; } }