概況計算でdiscard elapsed timeを考慮
This commit is contained in:
parent
3825228344
commit
63af49ba70
@ -19,6 +19,7 @@ class ProfileStatsComposer
|
|||||||
if (!$view->offsetExists('user')) {
|
if (!$view->offsetExists('user')) {
|
||||||
throw new \LogicException('View data "user" was not exist.');
|
throw new \LogicException('View data "user" was not exist.');
|
||||||
}
|
}
|
||||||
|
/** @var \App\User $user */
|
||||||
$user = $view->offsetGet('user');
|
$user = $view->offsetGet('user');
|
||||||
|
|
||||||
// 現在のオナ禁セッションの経過時間
|
// 現在のオナ禁セッションの経過時間
|
||||||
@ -35,35 +36,44 @@ class ProfileStatsComposer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 概況欄のデータ取得
|
// 概況欄のデータ取得
|
||||||
$average = DB::select(<<<'SQL'
|
$average = 0;
|
||||||
|
$divisor = 0;
|
||||||
|
$averageSources = DB::select(<<<'SQL'
|
||||||
SELECT
|
SELECT
|
||||||
avg(span) AS average
|
extract(epoch from ejaculated_date - lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC)) AS span,
|
||||||
|
discard_elapsed_time
|
||||||
FROM
|
FROM
|
||||||
(
|
ejaculations
|
||||||
SELECT
|
WHERE
|
||||||
extract(epoch from ejaculated_date - lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC)) AS span
|
user_id = :user_id
|
||||||
FROM
|
ORDER BY
|
||||||
ejaculations
|
ejaculated_date DESC
|
||||||
WHERE
|
LIMIT
|
||||||
user_id = :user_id
|
30
|
||||||
ORDER BY
|
|
||||||
ejaculated_date DESC
|
|
||||||
LIMIT
|
|
||||||
30
|
|
||||||
) AS temp
|
|
||||||
SQL
|
SQL
|
||||||
, ['user_id' => $user->id]);
|
, ['user_id' => $user->id]);
|
||||||
|
foreach ($averageSources as $item) {
|
||||||
|
// 経過時間記録対象外のレコードがあったら、それより古いデータは平均の計算に加えない
|
||||||
|
if ($item->discard_elapsed_time) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$average += $item->span;
|
||||||
|
$divisor++;
|
||||||
|
}
|
||||||
|
if ($divisor > 0) {
|
||||||
|
$average /= $divisor;
|
||||||
|
}
|
||||||
|
|
||||||
$summary = DB::select(<<<'SQL'
|
$summary = DB::select(<<<'SQL'
|
||||||
SELECT
|
SELECT
|
||||||
max(span) AS longest,
|
max(span) AS longest,
|
||||||
min(span) AS shortest,
|
min(span) AS shortest,
|
||||||
sum(span) AS total_times,
|
sum(span) AS total_times
|
||||||
count(*) AS total_checkins
|
|
||||||
FROM
|
FROM
|
||||||
(
|
(
|
||||||
SELECT
|
SELECT
|
||||||
extract(epoch from ejaculated_date - lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC)) AS span
|
extract(epoch from ejaculated_date - lead(ejaculated_date, 1, NULL) OVER (ORDER BY ejaculated_date DESC)) AS span,
|
||||||
|
discard_elapsed_time
|
||||||
FROM
|
FROM
|
||||||
ejaculations
|
ejaculations
|
||||||
WHERE
|
WHERE
|
||||||
@ -71,9 +81,13 @@ FROM
|
|||||||
ORDER BY
|
ORDER BY
|
||||||
ejaculated_date DESC
|
ejaculated_date DESC
|
||||||
) AS temp
|
) AS temp
|
||||||
|
WHERE
|
||||||
|
discard_elapsed_time = FALSE
|
||||||
SQL
|
SQL
|
||||||
, ['user_id' => $user->id]);
|
, ['user_id' => $user->id]);
|
||||||
|
|
||||||
$view->with(compact('latestEjaculation', 'currentSession', 'average', 'summary'));
|
$total = $user->ejaculations()->count();
|
||||||
|
|
||||||
|
$view->with(compact('latestEjaculation', 'currentSession', 'average', 'summary', 'total'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
@endif
|
@endif
|
||||||
|
|
||||||
<h6 class="font-weight-bold"><span class="oi oi-graph"></span> 概況</h6>
|
<h6 class="font-weight-bold"><span class="oi oi-graph"></span> 概況</h6>
|
||||||
<p class="card-text mb-0">平均記録: {{ Formatter::formatInterval($average[0]->average) }}</p>
|
<p class="card-text mb-0">平均記録: {{ Formatter::formatInterval($average) }}</p>
|
||||||
<p class="card-text mb-0">最長記録: {{ Formatter::formatInterval($summary[0]->longest) }}</p>
|
<p class="card-text mb-0">最長記録: {{ Formatter::formatInterval($summary[0]->longest) }}</p>
|
||||||
<p class="card-text mb-0">最短記録: {{ Formatter::formatInterval($summary[0]->shortest) }}</p>
|
<p class="card-text mb-0">最短記録: {{ Formatter::formatInterval($summary[0]->shortest) }}</p>
|
||||||
<p class="card-text mb-0">合計時間: {{ Formatter::formatInterval($summary[0]->total_times) }}</p>
|
<p class="card-text mb-0">合計時間: {{ Formatter::formatInterval($summary[0]->total_times) }}</p>
|
||||||
<p class="card-text">通算回数: {{ number_format($summary[0]->total_checkins) }}回</p>
|
<p class="card-text">通算回数: {{ number_format($total) }}回</p>
|
||||||
|
Loading…
Reference in New Issue
Block a user