public static function scheduleStatusPriorityRankSql(): array
{
$tz = (string) config('app.timezone');
$today = Carbon::now($tz)->toDateString();
$now = Carbon::now($tz);
$sessionDaySql = 'ad.activity_id = activities.id AND ad.session_start_at IS NOT NULL AND ad.session_end_at IS NOT NULL AND ad.booking_deadline_at IS NOT NULL';
$online = '(activities.reservation_type IS NULL OR activities.reservation_type = \'\' OR activities.reservation_type = \''.self::RESERVATION_TYPE_ONLINE.'\')';
$sql = 'CASE
WHEN ('.$online.'
AND (SELECT COUNT(*) FROM activity_days ad WHERE '.$sessionDaySql.') > 0)
THEN
CASE
WHEN (SELECT MIN(ad.session_start_at) FROM activity_days ad WHERE '.$sessionDaySql.') > ? THEN 1
WHEN (SELECT MAX(ad.session_end_at) FROM activity_days ad WHERE '.$sessionDaySql.') < ? THEN 2
ELSE 0
END
WHEN activities.end_at IS NOT NULL AND DATE(activities.end_at) < ? THEN 2
WHEN activities.start_at IS NOT NULL AND DATE(activities.start_at) > ? THEN 1
ELSE 0
END';
return [$sql, [$now, $now, $today, $today]];
}
/**
* H5 活动列表:进行中 → 未开始 → 已结束;组内按开始时间、id。
*/
public function scopeOrderByScheduleStatusPriority(Builder $query): Builder