where('rate', '>', 0)->get(); $star_num = 1; $end_num = 1; foreach($options as $option){ $end_num += (int)($option->rate * 100); } $draw_nums = []; for($i = 0; $i<$times; $i++){ $draw_nums[] = rand($star_num, (int)$end_num); } //拿去中奖ID $draw_id = []; foreach($options as $option){ foreach($draw_nums as $key => $draw_num){ if($draw_num >= $star_num && $draw_num <=(int)($option->rate * 100 + $star_num)){ $draw_id[] = $option->id; unset($draw_nums[$key]); } } $star_num += (int)($option->rate * 100); } return $draw_id; } /** * 发放奖品 */ public function sendDraw(ActivityLog $activity_log){ $start_time = Carbon::now()->startOfDay(); $end_time = Carbon::now()->endOfDay(); //如果是吹牛奖 $niu_draw = ActivityOption::where('key_type', 0)->where('is_niu', 1)->pluck('id')->toArray();//可能多个ID都是吹牛 if(in_array($activity_log->draw_id, $niu_draw)){ //找到该用户当前最新一笔未取餐订单 $order = Order::where([ 'user_id'=>$activity_log->user_id, 'order_status'=>1, 'pay_status'=>1, 'shipping_status'=>0, 'is_niu'=>0]) ->whereBetween('created_at', [$start_time, $end_time]) ->orderBy('created_at', 'asc')->first(); if($order){ $order->update(['is_niu'=>1]); } } //发放奖品 if($activity_log->draw_id<10){ ActivityUser::where('user_id', $activity_log->user_id)->increment('award_'.$activity_log->draw_id); } $activity_log->status = 1; $activity_log->save(); } /** * 抽奖活动-抽奖 */ public function luckActivityDarw($activity_id, $times = 1){ //获取配置比例 $options = LuckDrawOption::where('activity_id', $activity_id)->where('draw_rate', '>', 0)->where(function($q){ $q->where('is_num', 0)->orWhereColumn('draw_num', '<', 'luck_num'); })->get(); $star_num = 1; $end_num = 1; foreach($options as $option){ $end_num += (int)($option->draw_rate * 100); } if($end_num < 10000){ $end_num = 10000; } $draw_nums = []; for($i = 0; $i<$times; $i++){ $draw_nums[] = rand($star_num, (int)$end_num); } //拿去中奖ID $draw_id = []; foreach($draw_nums as $key => $draw_num){ $star_num = 0; $option_status = false; foreach($options as $option){ if($draw_num >= $star_num && $draw_num <=(int)($option->draw_rate * 100 + $star_num)){ $draw_id[] = $option->id; $option_status = true; }else{ if(!$option_status && $option == $options->last()){ $draw_id[] = 0; } } $star_num += (int)($option->draw_rate * 100); } } // dd($draw_id); return $draw_id; } public function sendLuckDraw(UserLuckLog $userLuckLog){ $user = User::find($userLuckLog->user_id); if($user){ try{ DB::beginTransaction(); switch($userLuckLog->draw->draw_type){ case 1://优惠券 $user->sendTicket($userLuckLog->draw->draw_info, 0, '活动抽奖'); break; } $userLuckLog->log_status = 1; $userLuckLog->save(); DB::commit(); }catch (\Throwable $th) { DB::rollback(); $userLuckLog->log_status = -1; $userLuckLog->save(); } } } }