Browse Source

概率优化

master
wanghongjun 2 years ago
parent
commit
ff318ee940
  1. 28
      app/logic/ZoneLogic.php

28
app/logic/ZoneLogic.php

@ -611,9 +611,10 @@ class ZoneLogic
*/ */
protected static function judgeUserRate():array protected static function judgeUserRate():array
{ {
$residue_amount = 0;
$usage_rate = 0;
try { try {
$rate = SettingModel::settingLoad('amount_probability') ?: '0.5'; $rate = SettingModel::settingLoad('amount_probability') ?: '0.5';
$residue_amount = 0;
# 最近一次充值金额 # 最近一次充值金额
$lastRechargeAmount = RechargeRecords::lastRechargeAmount([['user_id','=',self::$user_id]]); $lastRechargeAmount = RechargeRecords::lastRechargeAmount([['user_id','=',self::$user_id]]);
@ -623,6 +624,7 @@ class ZoneLogic
$recharge_time = $lastRechargeAmount['recharge_time']; // 充值时间 $recharge_time = $lastRechargeAmount['recharge_time']; // 充值时间
$recharge_amount = $lastRechargeAmount['recharge_amount']; // 充值金额 $recharge_amount = $lastRechargeAmount['recharge_amount']; // 充值金额
$usage_amount = $lastRechargeAmount['usage_amount']; // 充值金额
$estimate_awards_amount = round($recharge_amount * $rate,2); // 预估中奖金额 $estimate_awards_amount = round($recharge_amount * $rate,2); // 预估中奖金额
# 充值后消费金额 # 充值后消费金额
@ -643,6 +645,19 @@ class ZoneLogic
return ['status' => 1]; return ['status' => 1];
} }
# 使用金额充值金额占比
$usage_amount_rate = round($usage_amount / $recharge_amount,4);
# 中奖金额小于预估金额 且 使用占比 展示小于 中奖概率时 加码
$rateHalf = round($rate / 2,4);
if ($sum_amount < $estimate_awards_amount && $usage_amount_rate > $rateHalf && $usage_amount_rate < $rate) {
$usage_rate = round($sum_amount / $recharge_amount,4);
}
# 如果使用金额概率 达到 中奖概率 加码
$temp_rate = round($usage_amount_rate/$rate,4);
if ($temp_rate >= ($rateHalf + $rate)) {
$usage_rate = $temp_rate;
}
} }
} catch (\Exception $e) { } catch (\Exception $e) {
@ -651,7 +666,8 @@ class ZoneLogic
return [ return [
'status' => 0, 'status' => 0,
'residue_amount' => $residue_amount 'residue_amount' => $residue_amount,
'usage_rate' => $usage_rate
]; ];
} }
@ -673,15 +689,17 @@ class ZoneLogic
$item['awards'] = 0; $item['awards'] = 0;
} else { } else {
//if (($item['amount'] * $sumCount) < $judgeRate['residue_amount']) { //if (($item['amount'] * $sumCount) < $judgeRate['residue_amount']) {
if ($judgeRate['usage_rate']) {
$zoneGoodsData = self::$zoneGoodsData; $zoneGoodsData = self::$zoneGoodsData;
$ceilAmount = ceil($item['amount'] / $zoneGoodsData['price']); $ceilAmount = ceil($item['amount'] / $zoneGoodsData['price']);
if ($ceilAmount >= 5) { if ($ceilAmount >= 5) {
$item['probability'] = $item['probability'] * 2; $item['probability'] = $item['probability'] * 2;
}elseif($item['amount'] > $zoneGoodsData['price']) { }elseif($item['amount'] > $zoneGoodsData['price']) {
$rand = rand_float(0,$item['probability'] * 3); $rand = rand_float(0,$item['probability']);
$item['probability'] += $rand; $item['probability'] += $rand;
} else { } else {
$item['probability'] += rand_float(0,1 - $item['probability']); $item['probability'] += rand_float(0,$judgeRate['usage_rate']);
}
} }
//} //}
} }
@ -698,7 +716,7 @@ class ZoneLogic
protected static function restrictAmount($selectedPattern,$sumAmount) protected static function restrictAmount($selectedPattern,$sumAmount)
{ {
$judgeRateData = self::$judgeRateData; $judgeRateData = self::$judgeRateData;
if (!$judgeRateData['status'] && $sumAmount >= $judgeRateData['residue_amount']) { if (!$judgeRateData['status'] && $sumAmount > $judgeRateData['residue_amount']) {
$selectedPattern['id'] = 0; $selectedPattern['id'] = 0;
$selectedPattern['awards'] = 0; $selectedPattern['awards'] = 0;
} }

Loading…
Cancel
Save