更新增加统计【活动期间输赢总数据】

This commit is contained in:
2026-07-27 15:41:31 +08:00
parent f2543b9aa4
commit f91eb186ca
19 changed files with 375 additions and 122 deletions

View File

@@ -139,6 +139,11 @@ class Playx extends Api
return MallPointsConversion::configForConversion();
}
private function dailyPushSettlementDay(): string
{
return date('Y-m-d');
}
private function syncAssetByDailyPush(
string $playxUserId,
string $username,
@@ -146,7 +151,10 @@ class Playx extends Api
int $convertedPoints,
int $todayLimit,
bool $applyAssetDelta,
string $phone = ''
string $phone = '',
?array $pointsConfig = null,
?float $yesterdayWinLossNet = null,
?float $previousYesterdayWinLossNet = null
): ?MallUserAsset
{
$asset = $this->ensureAssetForPlayx($playxUserId, $username, $phone);
@@ -169,6 +177,16 @@ class Playx extends Api
MallPointsConversion::applyDailyConversionDelta($asset, $convertedPoints);
}
$asset->today_limit = $todayLimit;
if (is_array($pointsConfig) && $yesterdayWinLossNet !== null) {
MallPointsConversion::applyEventPeriodWinLossForDailyPush(
$asset,
$date,
$yesterdayWinLossNet,
$pointsConfig,
$this->dailyPushSettlementDay(),
$previousYesterdayWinLossNet
);
}
}
$asset->save();
@@ -234,7 +252,7 @@ class Playx extends Api
}
$pointsConfig = $this->getPointsConversionConfig();
$unlockRatio = floatval($pointsConfig['unlock_ratio'] ?? 0);
$settlementDay = $this->dailyPushSettlementDay();
$results = [];
$allDeduped = true;
@@ -255,8 +273,8 @@ class Playx extends Api
$exists = MallDailyPush::where('user_id', $playxUserId)->where('date', $date)->find();
if ($exists) {
$convertedPoints = MallPointsConversion::dailyConvertedPoints($date, floatval($yesterdayWinLossNet), $pointsConfig);
$todayLimit = intval(round(floatval($yesterdayTotalDeposit) * $unlockRatio));
$convertedPoints = MallPointsConversion::dailyConvertedPoints($date, floatval($yesterdayWinLossNet), $pointsConfig, $settlementDay);
$todayLimit = MallPointsConversion::dailyPushTodayLimit($date, floatval($yesterdayTotalDeposit), $pointsConfig, $settlementDay);
$asset = $this->syncAssetByDailyPush($playxUserId, $username, $date, $convertedPoints, $todayLimit, false, $phone);
if (!$asset) {
return $this->error(__('Failed to ensure PlayX user asset'));
@@ -283,16 +301,16 @@ class Playx extends Api
'lifetime_total_withdraw' => $lifetimeTotalWithdraw,
'create_time' => time(),
];
$convertedPoints = MallPointsConversion::dailyConvertedPoints($date, floatval($yesterdayWinLossNet), $pointsConfig);
$convertedPoints = MallPointsConversion::dailyConvertedPoints($date, floatval($yesterdayWinLossNet), $pointsConfig, $settlementDay);
$pushData['converted_points'] = $convertedPoints;
if ($lifetimeWinLossNet !== null) {
$pushData['lifetime_win_loss_net'] = $lifetimeWinLossNet;
}
MallDailyPush::create($pushData);
$todayLimit = intval(round(floatval($yesterdayTotalDeposit) * $unlockRatio));
$todayLimit = MallPointsConversion::dailyPushTodayLimit($date, floatval($yesterdayTotalDeposit), $pointsConfig, $settlementDay);
$asset = $this->syncAssetByDailyPush($playxUserId, $username, $date, $convertedPoints, $todayLimit, true, $phone);
$asset = $this->syncAssetByDailyPush($playxUserId, $username, $date, $convertedPoints, $todayLimit, true, $phone, $pointsConfig, floatval($yesterdayWinLossNet));
if (!$asset) {
throw new \RuntimeException(__('Failed to ensure PlayX user asset'));
}
@@ -336,9 +354,9 @@ class Playx extends Api
$exists = MallDailyPush::where('user_id', $playxUserId)->where('date', $date)->find();
if ($exists) {
$pointsConfig = $this->getPointsConversionConfig();
$unlockRatio = floatval($pointsConfig['unlock_ratio'] ?? 0);
$convertedPoints = MallPointsConversion::dailyConvertedPoints($date, floatval($yesterdayWinLossNet), $pointsConfig);
$todayLimit = intval(round(floatval($yesterdayTotalDeposit) * $unlockRatio));
$settlementDay = $this->dailyPushSettlementDay();
$convertedPoints = MallPointsConversion::dailyConvertedPoints($date, floatval($yesterdayWinLossNet), $pointsConfig, $settlementDay);
$todayLimit = MallPointsConversion::dailyPushTodayLimit($date, floatval($yesterdayTotalDeposit), $pointsConfig, $settlementDay);
$asset = $this->syncAssetByDailyPush(
$playxUserId,
strval($body['username'] ?? ''),
@@ -363,6 +381,7 @@ class Playx extends Api
Db::startTrans();
try {
$pointsConfig = $this->getPointsConversionConfig();
$settlementDay = $this->dailyPushSettlementDay();
$lifetimeWinLossNet = null;
if (isset($body['lifetime_win_loss_net']) && is_numeric($body['lifetime_win_loss_net'])) {
$lifetimeWinLossNet = floatval($body['lifetime_win_loss_net']);
@@ -377,15 +396,14 @@ class Playx extends Api
'lifetime_total_withdraw' => $body['lifetime_total_withdraw'] ?? 0,
'create_time' => time(),
];
$convertedPoints = MallPointsConversion::dailyConvertedPoints($date, floatval($yesterdayWinLossNet), $pointsConfig);
$convertedPoints = MallPointsConversion::dailyConvertedPoints($date, floatval($yesterdayWinLossNet), $pointsConfig, $settlementDay);
$pushData['converted_points'] = $convertedPoints;
if ($lifetimeWinLossNet !== null) {
$pushData['lifetime_win_loss_net'] = $lifetimeWinLossNet;
}
MallDailyPush::create($pushData);
$unlockRatio = floatval($pointsConfig['unlock_ratio'] ?? 0);
$todayLimit = intval(round(floatval($yesterdayTotalDeposit) * $unlockRatio));
$todayLimit = MallPointsConversion::dailyPushTodayLimit($date, floatval($yesterdayTotalDeposit), $pointsConfig, $settlementDay);
$asset = $this->syncAssetByDailyPush(
$playxUserId,
@@ -394,7 +412,9 @@ class Playx extends Api
$convertedPoints,
$todayLimit,
true,
$phone
$phone,
$pointsConfig,
floatval($yesterdayWinLossNet)
);
if (!$asset) {
throw new \RuntimeException(__('Failed to ensure PlayX user asset'));