order-food-admin/app/Services/ActivityService.php

139 lines
4.4 KiB
PHP

<?php
namespace App\Services;
use DB;
use Carbon\Carbon;
use App\Models\{User,Order, ActivityOption, ActivityGood, ActivityUser, ActivityLog, LuckDrawOption, UserLuckLog};
/**
* Class OrderService
*
* @package App\Services
*/
class ActivityService
{
/**
* 抽奖
* $num 抽几次
*/
public function activityDarw($times = 1){
//获取配置比例
$options = ActivityOption::where('key_type', 0)->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();
}
}
}
}