<?php
include __DIR__ . '/header.php';
$input = SFRequest::json();
//查询用户当前有多少票
$chance_num = TUserInfo::query()
->leftJoin('t_wechat_user','t_wechat_user.f_openid','=','user_info.f_open_id')
->where('f_open_id', (string)$input['f_open_id'])
->get();
$user_current_chance = object_array(json_decode($chance_num));
//有票扣一次,没有返回-1
if ($user_current_chance[0]['f_chance'] > 1&&$user_current_chance[0]['get_prize_num']>0) {
$chance = TUserInfo::query()
->where('f_open_id', (string)$input['f_open_id'])
->decrement('f_chance', 2, ['updated_at' => date('Y-m-d H:i:s')]);
TUserInfo::query()
->where('f_open_id', (string)$input['f_open_id'])
->decrement('get_prize_num', 1, ['updated_at' => date('Y-m-d H:i:s')]);
$data = TPrize::query()
->get();
$prize_arr = object_array(json_decode($data));
foreach ($prize_arr as $key => $val) {
$arr[$val['id']] = $val['rate'];
}
$rid = get_rand($arr); //根据概率获取奖项id
//如果抽中的奖品没库存了,就返回再接再厉了。中了库存-1,添加记录
if ($prize_arr[$rid - 1]['num'] === 0) {
$res['id'] = 7; //中奖项
$res['name'] = '再接再厉'; //中奖项
$status = 0;
} else {
//如果抽中的不是再接再厉正常-1,加记录,如果抽的再接再厉,不记录,不减库存
if ($prize_arr[$rid - 1]['id'] != 7) {
$result = TPrize::query()
->where('id', $prize_arr[$rid - 1]['id'])
->decrement('num', 1, ['updated_at' => date('Y-m-d H:i:s')]);
TRecord::query()
->insertGetId([
'f_open_id' => (string)$input['f_open_id'],
'user_name' =>$user_current_chance[0]['f_nickname'],
'action' => $prize_arr[$rid - 1]['prize'] . '当前库存' . ($prize_arr[$rid - 1]['num'] - (int)1),
'prize' => $prize_arr[$rid - 1]['prize'],
'create_at' => date('Y-m-d H:i:s'),
]);
$res['id'] = $prize_arr[$rid - 1]['id']; //中奖项
$res['name'] = $prize_arr[$rid - 1]['prize']; //中奖项
$status = 0;
} else {
$res['id'] = $prize_arr[$rid - 1]['id']; //中奖项
$res['name'] = $prize_arr[$rid - 1]['prize']; //中奖项
$status = 0;
}
}
}else if($user_current_chance[0]['get_prize_num']===0){
$status=-100;
$res['name']=null;
$res['id']=null;
} else {
$status = -1;
$res['name']=null;
$res['id']=null;
}
echo json_encode([
'id' => $res['id'],
'name' => $res['name'],
'status' => $status
]);
function object_array($array)
{
if (is_object($array)) {
$array = (array)$array;
}
if (is_array($array)) {
foreach ($array as $key => $value) {
$array[$key] = object_array($value);
}
}
return $array;
}
function get_rand($proArr)
{
$result = '';
//概率数组的总概率精度
$proSum = array_sum($proArr);
//概率数组循环
foreach ($proArr as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$result = $key;
break;
} else {
$proSum -= $proCur;
}
}
unset ($proArr);
return $result;
}
PHP转盘抽奖
最新推荐文章于 2023-02-01 16:42:22 发布