diff --git a/services/vmix_json_service.py b/services/vmix_json_service.py index e6ad9de..889df7c 100644 --- a/services/vmix_json_service.py +++ b/services/vmix_json_service.py @@ -333,7 +333,10 @@ WHERE m.match_id = %s; conn.close() -def get_vmix_players_goal(match_id: int): +def get_vmix_players_goal2(match_id: int): + """запрос для получения игроков, забивших голы, с указанием минут и типа гола (основной, пенальти, автогол) + Иванов 23', 25' (дубли пишуться вместе) + """ query = """ WITH goal_events AS ( SELECT @@ -423,3 +426,95 @@ ORDER BY COALESCE(h.rn, a.rn); return cur.fetchall() finally: conn.close() + +def get_vmix_players_goal(match_id: int): + """запрос для получения игроков, забивших голы, с указанием минут и типа гола (основной, пенальти, автогол) + Каждый гол в отдельной строке, дубли по игроку не объединяются + """ + query = """ + WITH goal_events AS ( + SELECT + meu.side, + COALESCE(p.last_name, meu.player_name) AS last_name, + meu.seconds, + meu.id, + meu.type, + CASE + WHEN EXISTS ( + SELECT 1 + FROM match_events_ui m2 + WHERE m2.match_id = meu.match_id + AND m2.type = 'period_start_2h' + AND m2.seconds <= meu.seconds + ) THEN 2 + WHEN EXISTS ( + SELECT 1 + FROM match_events_ui m2 + WHERE m2.match_id = meu.match_id + AND m2.type = 'period_start_1h' + AND m2.seconds <= meu.seconds + ) THEN 1 + ELSE NULL + END AS period_no + FROM match_events_ui meu + LEFT JOIN players p ON p.id = meu.player_id + WHERE meu.match_id = %s + AND meu.type IN ('goal', 'penalty', 'own_goal') + ), + goal_rows AS ( + SELECT + side, + last_name, + seconds, + id, + last_name || ' ' || + ( + CASE + WHEN period_no = 1 AND seconds > 2700 + THEN '45''' || '+' || ((seconds - 2700) / 60)::int::text + + WHEN period_no = 2 AND seconds > 5400 + THEN '90''' || '+' || ((seconds - 5400) / 60)::int::text + + WHEN period_no = 2 + THEN (46 + ((seconds - 2700) / 60)::int)::text || '''' + + ELSE (1 + (seconds / 60)::int)::text || '''' + END + ) || + CASE + WHEN type = 'own_goal' THEN ' (АГ)' + WHEN type = 'penalty' THEN ' (П)' + ELSE '' + END AS player_goal + FROM goal_events + ), + home_rows AS ( + SELECT + ROW_NUMBER() OVER (ORDER BY seconds, id, last_name) AS rn, + player_goal AS player_name1 + FROM goal_rows + WHERE side = 'home' + ), + away_rows AS ( + SELECT + ROW_NUMBER() OVER (ORDER BY seconds, id, last_name) AS rn, + player_goal AS player_name2 + FROM goal_rows + WHERE side = 'away' + ) + SELECT + COALESCE(h.player_name1, '') AS player_name1, + COALESCE(a.player_name2, '') AS player_name2 + FROM home_rows h + FULL OUTER JOIN away_rows a ON a.rn = h.rn + ORDER BY COALESCE(h.rn, a.rn); + """ + + conn = get_connection() + try: + with conn.cursor() as cur: + cur.execute(query, (match_id,)) + return cur.fetchall() + finally: + conn.close()