Files
nexusphp/app/Models/BonusLogs.php

194 lines
8.3 KiB
PHP
Raw Normal View History

2021-06-21 02:01:26 +08:00
<?php
namespace App\Models;
use Carbon\Carbon;
2026-01-29 20:24:36 +07:00
use Illuminate\Support\Arr;
2021-06-21 02:01:26 +08:00
class BonusLogs extends NexusModel
{
protected $table = 'bonus_logs';
2026-01-29 20:24:36 +07:00
protected $fillable = ['uid', 'business_type', 'old_total_value', 'value', 'new_total_value', 'comment', 'created_at', 'updated_at'];
2021-06-21 02:01:26 +08:00
2023-02-08 15:08:07 +08:00
public $timestamps = true;
2026-01-29 20:24:36 +07:00
const CATEGORY_COMMON = 'common';
const CATEGORY_SEEDING = 'seeding';
2023-02-08 15:08:07 +08:00
2021-06-21 02:01:26 +08:00
const DEFAULT_BONUS_CANCEL_ONE_HIT_AND_RUN = 10000;
2022-04-04 17:26:26 +08:00
const DEFAULT_BONUS_BUY_ATTENDANCE_CARD = 1000;
const DEFAULT_BONUS_BUY_TEMPORARY_INVITE = 500;
const DEFAULT_BONUS_BUY_RAINBOW_ID = 5000;
const DEFAULT_BONUS_BUY_CHANGE_USERNAME_CARD = 100000;
2026-03-29 21:42:43 +07:00
const DEFAULT_BONUS_SELF_ENABLE = 100000;
2021-06-21 02:01:26 +08:00
2025-09-08 11:57:33 +07:00
//扣除类1开始
2021-06-21 02:01:26 +08:00
const BUSINESS_TYPE_CANCEL_HIT_AND_RUN = 1;
2022-01-19 23:54:55 +08:00
const BUSINESS_TYPE_BUY_MEDAL = 2;
2022-04-04 17:26:26 +08:00
const BUSINESS_TYPE_BUY_ATTENDANCE_CARD = 3;
2022-06-08 14:15:59 +08:00
const BUSINESS_TYPE_STICKY_PROMOTION = 4;
const BUSINESS_TYPE_POST_REWARD = 5;
2022-07-25 03:31:19 +08:00
const BUSINESS_TYPE_EXCHANGE_UPLOAD = 6;
const BUSINESS_TYPE_EXCHANGE_INVITE = 7;
const BUSINESS_TYPE_CUSTOM_TITLE = 8;
const BUSINESS_TYPE_BUY_VIP = 9;
const BUSINESS_TYPE_GIFT_TO_SOMEONE = 10;
const BUSINESS_TYPE_NO_AD = 11;
const BUSINESS_TYPE_GIFT_TO_LOW_SHARE_RATIO = 12;
2022-08-10 17:38:05 +08:00
const BUSINESS_TYPE_LUCKY_DRAW = 13;
2022-09-17 14:59:46 +08:00
const BUSINESS_TYPE_EXCHANGE_DOWNLOAD = 14;
const BUSINESS_TYPE_BUY_TEMPORARY_INVITE = 15;
const BUSINESS_TYPE_BUY_RAINBOW_ID = 16;
const BUSINESS_TYPE_BUY_CHANGE_USERNAME_CARD = 17;
const BUSINESS_TYPE_GIFT_MEDAL = 18;
2023-02-11 16:08:48 +08:00
const BUSINESS_TYPE_BUY_TORRENT = 19;
2024-05-24 02:27:44 +08:00
const BUSINESS_TYPE_TASK_NOT_PASS_DEDUCT = 20;
const BUSINESS_TYPE_TASK_PASS_REWARD = 21;
2025-09-08 11:57:33 +07:00
const BUSINESS_TYPE_REWARD_TORRENT = 22;
2026-01-07 01:20:44 +07:00
const BUSINESS_TYPE_CLAIMED_UNREACHED = 23;
2026-03-29 21:42:43 +07:00
const BUSINESS_TYPE_SELF_ENABLE = 24;
2021-06-21 02:01:26 +08:00
2025-09-08 11:57:33 +07:00
//获得类普通获得1000 起步
2023-02-08 13:33:25 +08:00
const BUSINESS_TYPE_ROLE_WORK_SALARY = 1000;
2023-02-11 16:08:48 +08:00
const BUSINESS_TYPE_TORRENT_BE_DOWNLOADED = 1001;
const BUSINESS_TYPE_RECEIVE_REWARD = 1002;
2025-02-08 00:43:37 +08:00
const BUSINESS_TYPE_RECEIVE_GIFT = 1003;
2025-04-17 01:39:40 +07:00
const BUSINESS_TYPE_UPLOAD_TORRENT = 1004;
2025-09-08 11:57:33 +07:00
const BUSINESS_TYPE_TORRENT_BE_REWARD = 1005;
2026-01-07 01:20:44 +07:00
const BUSINESS_TYPE_CLAIMED_REACHED = 1006;
2023-02-08 13:33:25 +08:00
2025-09-08 11:57:33 +07:00
//获得类做种获得10000 起
2025-09-08 03:05:55 +07:00
const BUSINESS_TYPE_SEEDING_BASIC = 10000;
const BUSINESS_TYPE_SEEDING_DONOR_ADDITION = 10001;
const BUSINESS_TYPE_SEEDING_OFFICIAL_ADDITION = 10002;
const BUSINESS_TYPE_SEEDING_HAREM_ADDITION = 10003;
const BUSINESS_TYPE_SEEDING_MEDAL_ADDITION = 10004;
2022-04-04 17:26:26 +08:00
public static array $businessTypes = [
2021-06-21 02:01:26 +08:00
self::BUSINESS_TYPE_CANCEL_HIT_AND_RUN => ['text' => 'Cancel H&R'],
2022-01-19 23:54:55 +08:00
self::BUSINESS_TYPE_BUY_MEDAL => ['text' => 'Buy medal'],
2022-04-04 17:26:26 +08:00
self::BUSINESS_TYPE_BUY_ATTENDANCE_CARD => ['text' => 'Buy attendance card'],
2022-06-08 14:15:59 +08:00
self::BUSINESS_TYPE_STICKY_PROMOTION => ['text' => 'Buy torrent sticky promotion'],
self::BUSINESS_TYPE_POST_REWARD => ['text' => 'Reward post'],
2022-07-25 03:31:19 +08:00
self::BUSINESS_TYPE_EXCHANGE_UPLOAD => ['text' => 'Exchange upload'],
self::BUSINESS_TYPE_EXCHANGE_INVITE => ['text' => 'Exchange invite'],
self::BUSINESS_TYPE_CUSTOM_TITLE => ['text' => 'Custom title'],
self::BUSINESS_TYPE_BUY_VIP => ['text' => 'Buy VIP'],
self::BUSINESS_TYPE_GIFT_TO_SOMEONE => ['text' => 'Gift to someone'],
self::BUSINESS_TYPE_NO_AD => ['text' => 'No ad'],
self::BUSINESS_TYPE_GIFT_TO_LOW_SHARE_RATIO => ['text' => 'Gift to low share ratio'],
2022-08-10 17:38:05 +08:00
self::BUSINESS_TYPE_LUCKY_DRAW => ['text' => 'Lucky draw'],
2022-09-17 14:59:46 +08:00
self::BUSINESS_TYPE_EXCHANGE_DOWNLOAD => ['text' => 'Exchange download'],
self::BUSINESS_TYPE_BUY_TEMPORARY_INVITE => ['text' => 'Buy temporary invite'],
self::BUSINESS_TYPE_BUY_RAINBOW_ID => ['text' => 'Buy rainbow ID'],
self::BUSINESS_TYPE_BUY_CHANGE_USERNAME_CARD => ['text' => 'Buy change username card'],
self::BUSINESS_TYPE_GIFT_MEDAL => ['text' => 'Gift medal to someone'],
2023-02-11 16:08:48 +08:00
self::BUSINESS_TYPE_BUY_TORRENT => ['text' => 'Buy torrent'],
self::BUSINESS_TYPE_TASK_NOT_PASS_DEDUCT => ['text' => 'Task failure penalty'],
self::BUSINESS_TYPE_TASK_PASS_REWARD => ['text' => 'Task success reward'],
2025-09-08 11:57:33 +07:00
self::BUSINESS_TYPE_REWARD_TORRENT => ['text' => 'Reward torrent'],
2026-01-07 01:30:21 +07:00
self::BUSINESS_TYPE_CLAIMED_UNREACHED => ['text' => 'Claimed torrent unreached'],
2026-03-29 21:42:43 +07:00
self::BUSINESS_TYPE_SELF_ENABLE => ['text' => 'Self enable'],
2023-02-08 13:33:25 +08:00
self::BUSINESS_TYPE_ROLE_WORK_SALARY => ['text' => 'Role work salary'],
2023-02-11 16:08:48 +08:00
self::BUSINESS_TYPE_TORRENT_BE_DOWNLOADED => ['text' => 'Torrent be downloaded'],
self::BUSINESS_TYPE_RECEIVE_REWARD => ['text' => 'Receive reward'],
2025-02-08 00:43:37 +08:00
self::BUSINESS_TYPE_RECEIVE_GIFT => ['text' => 'Receive gift'],
2025-04-17 01:39:40 +07:00
self::BUSINESS_TYPE_UPLOAD_TORRENT => ['text' => 'Upload torrent'],
2025-09-08 11:57:33 +07:00
self::BUSINESS_TYPE_TORRENT_BE_REWARD => ['text' => 'Torrent be reward'],
2026-01-07 01:30:21 +07:00
self::BUSINESS_TYPE_CLAIMED_REACHED => ['text' => 'Claimed torrent reached'],
2025-09-08 11:57:33 +07:00
2025-09-08 03:05:55 +07:00
self::BUSINESS_TYPE_SEEDING_BASIC => ['text' => 'Seeding basic'],
self::BUSINESS_TYPE_SEEDING_DONOR_ADDITION => ['text' => 'Seeding donor addition'],
self::BUSINESS_TYPE_SEEDING_OFFICIAL_ADDITION => ['text' => 'Seeding official addition'],
self::BUSINESS_TYPE_SEEDING_HAREM_ADDITION => ['text' => 'Seeding harem addition'],
self::BUSINESS_TYPE_SEEDING_MEDAL_ADDITION => ['text' => 'Seeding medal addition'],
2021-06-21 02:01:26 +08:00
];
2026-01-29 20:24:36 +07:00
public static array $businessTypeSeeding = [
self::BUSINESS_TYPE_SEEDING_BASIC,
self::BUSINESS_TYPE_SEEDING_DONOR_ADDITION,
self::BUSINESS_TYPE_SEEDING_OFFICIAL_ADDITION,
self::BUSINESS_TYPE_SEEDING_HAREM_ADDITION,
self::BUSINESS_TYPE_SEEDING_MEDAL_ADDITION
];
2026-01-29 20:24:36 +07:00
public static function listBusinessTypeOptions($category = ''): array
{
$source = BonusLogs::$businessTypes;
if ($category == self::CATEGORY_COMMON) {
$source = Arr::except(BonusLogs::$businessTypes, BonusLogs::$businessTypeSeeding);
} else if ($category == self::CATEGORY_SEEDING) {
$source = Arr::only(BonusLogs::$businessTypes, BonusLogs::$businessTypeSeeding);
}
return self::listStaticProps($source, 'bonus-log.business_types', true);
}
public static function listCategoryOptions(bool $includeSeeding): array
{
$result = [
self::CATEGORY_COMMON => nexus_trans('bonus-log.category_common')
];
if ($includeSeeding) {
$result[self::CATEGORY_SEEDING] = nexus_trans('bonus-log.category_seeding');
}
return $result;
}
2023-01-31 16:38:21 +08:00
public function getBusinessTypeTextAttribute()
{
return nexus_trans('bonus-log.business_types.' . $this->business_type);
}
2021-06-21 02:01:26 +08:00
public static function getBonusForCancelHitAndRun()
{
$result = Setting::get('bonus.cancel_hr');
return $result ?? self::DEFAULT_BONUS_CANCEL_ONE_HIT_AND_RUN;
}
2022-04-04 17:26:26 +08:00
public static function getBonusForBuyAttendanceCard()
{
$result = Setting::get('bonus.attendance_card');
return $result ?? self::DEFAULT_BONUS_BUY_ATTENDANCE_CARD;
}
public static function getBonusForBuyTemporaryInvite()
{
$result = Setting::get('bonus.one_tmp_invite');
return $result ?? self::DEFAULT_BONUS_BUY_TEMPORARY_INVITE;
}
public static function getBonusForBuyRainbowId()
{
$result = Setting::get('bonus.rainbow_id');
return $result ?? self::DEFAULT_BONUS_BUY_RAINBOW_ID;
}
public static function getBonusForBuyChangeUsernameCard()
{
$result = Setting::get('bonus.change_username_card');
return $result ?? self::DEFAULT_BONUS_BUY_CHANGE_USERNAME_CARD;
}
public static function add(int $userId, float $old, float $delta, float $new, string $comment, int $businessType)
{
if (!isset(self::$businessTypes[$businessType])) {
throw new \InvalidArgumentException("Invalid business type: $businessType");
}
$nowStr = Carbon::now()->toDateTimeString();
return self::query()->create([
'business_type' => $businessType,
'uid' => $userId,
'old_total_value' => $old,
'value' => $delta,
'new_total_value' => $new,
2025-09-08 11:57:33 +07:00
'comment' => sprintf("[%s]%s", self::$businessTypes[$businessType]['text'], $comment ? " $comment" : ""),
'created_at' => $nowStr,
'updated_at' => $nowStr,
]);
}
2021-06-21 02:01:26 +08:00
}