add command: calculate_seed_bonus()

This commit is contained in:
xiaomlove
2022-04-21 20:02:08 +08:00
parent 1d3662af36
commit eb0c4cad8a
5 changed files with 99 additions and 15 deletions

View File

@@ -5515,8 +5515,16 @@ function get_smile($num)
function calculate_seed_bonus($uid): array
{
global $autoclean_interval_one;
global $donortimes_bonus, $perseeding_bonus, $maxseeding_bonus, $tzero_bonus, $nzero_bonus, $bzero_bonus, $l_bonus;
$settingBonus = \App\Models\Setting::get('bonus');
$settingMain = \App\Models\Setting::get('main');
$autoclean_interval_one = $settingMain['autoclean_interval_one'];
$donortimes_bonus = $settingBonus['donortimes'];
$perseeding_bonus = $settingBonus['perseeding'];
$maxseeding_bonus = $settingBonus['maxseeding'];
$tzero_bonus = $settingBonus['tzero'];
$nzero_bonus = $settingBonus['nzero'];
$bzero_bonus = $settingBonus['bzero'];
$l_bonus = $settingBonus['l'];
$sqrtof2 = sqrt(2);
$logofpointone = log(0.1);
@@ -5524,21 +5532,28 @@ function calculate_seed_bonus($uid): array
$pi = 3.141592653589793;
$valuetwo = $bzero_bonus * ( 2 / $pi);
$valuethree = $logofpointone / ($nzero_bonus - 1);
$timenow = TIMENOW;
$timenow = time();
$sectoweek = 7*24*60*60;
$A = 0;
$count = $torrent_count = 0;
$count = $torrent_peer_count = 0;
$logPrefix = "[CALCULATE_SEED_BONUS], uid: $uid";
$torrentres = sql_query("select torrents.added, torrents.size, torrents.seeders from torrents LEFT JOIN peers ON peers.torrent = torrents.id WHERE peers.userid = $uid AND peers.seeder ='yes' group by torrents.id, peers.peer_id");
while ($torrent = mysql_fetch_array($torrentres))
$sql = "select torrents.id, torrents.added, torrents.size, torrents.seeders, peers.id as peerID from torrents LEFT JOIN peers ON peers.torrent = torrents.id WHERE peers.userid = $uid AND peers.seeder ='yes' group by peers.torrent, peers.peer_id";
$torrentResult = \Nexus\Database\NexusDB::select($sql);
do_log("$logPrefix, sql: $sql, count: " . count($torrentResult));
foreach ($torrentResult as $torrent)
{
$weeks_alive = ($timenow - strtotime($torrent['added'])) / $sectoweek;
$gb_size = $torrent['size'] / 1073741824;
$temp = (1 - exp($valueone * $weeks_alive)) * $gb_size * (1 + $sqrtof2 * exp($valuethree * ($torrent['seeders'] - 1)));
do_log(sprintf(
"$logPrefix, torrent: %s, peer ID: %s, weeks: %s, size: %s GB, increase A: %s",
$torrent['id'], $torrent['peerID'], $weeks_alive, $gb_size, $temp
));
$A += $temp;
$count++;
$torrent_count++;
$torrent_peer_count++;
}
if ($count > $maxseeding_bonus)
$count = $maxseeding_bonus;
@@ -5547,12 +5562,12 @@ function calculate_seed_bonus($uid): array
$is_donor_until = $is_donor_info['donoruntil'];
$is_donor = $is_donor_info['donor'] == 'yes' && ($is_donor_until === null || $is_donor_until == '0000-00-00 00:00:00' || $is_donor_until >= date('Y-m-d H:i:s'));
$is_donor = intval($is_donor);
$log = "[CALCULATE_SEED_BONUS], user: $uid, original bonus: $all_bonus, is_donor: $is_donor, donortimes_bonus: $donortimes_bonus";
$log = "$logPrefix, original bonus: $all_bonus, is_donor: $is_donor, donortimes_bonus: $donortimes_bonus";
if ($is_donor && $donortimes_bonus > 0) {
$all_bonus = $all_bonus * $donortimes_bonus;
$log .= ", do multiple, all_bonus: $all_bonus";
}
$result = compact('seed_points','seed_bonus', 'all_bonus', 'A', 'count', 'torrent_count');
$result = compact('seed_points','seed_bonus', 'all_bonus', 'A', 'count', 'torrent_peer_count');
do_log("$log, result: " . json_encode($result));
return $result;
}