From b0c41dfa5b5a97c013f48e182864ec8fb3cb5cfc Mon Sep 17 00:00:00 2001 From: Ruslan Date: Thu, 16 Oct 2025 14:28:50 +0500 Subject: [PATCH] fix --- .../parallel/border_crossing_flow.hpl | 150 +++++++----------- 1 file changed, 55 insertions(+), 95 deletions(-) diff --git a/mappings/info_recruits/citizen_tables/border_crossing/parallel/border_crossing_flow.hpl b/mappings/info_recruits/citizen_tables/border_crossing/parallel/border_crossing_flow.hpl index 83a5ee7..53b2f3d 100644 --- a/mappings/info_recruits/citizen_tables/border_crossing/parallel/border_crossing_flow.hpl +++ b/mappings/info_recruits/citizen_tables/border_crossing/parallel/border_crossing_flow.hpl @@ -79,31 +79,11 @@ Change job status on error Y - - Group by - Identify last row in a stream - Y - - - Identify last row in a stream - User defined Java expression - Y - - - User defined Java expression - Update - Y - Table input Table output Y - - Table output - Group by - Y - Update Change job status on error @@ -119,6 +99,16 @@ Filter rows Y + + Table output + sort_by_recruit_id + Y + + + sort_by_recruit_id + Update + Y + Abort @@ -290,59 +280,6 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}'); 304 - - Group by - GroupBy - - Y - - 1 - - none - - - N - N - ${java.io.tmpdir} - - - border_crossed_raw - is_border_crossed - MAX - - - N - - - recruit_id - - - N - grp - - - 688 - 176 - - - - Identify last row in a stream - DetectLastRow - - Y - - 1 - - none - - - last_row - - - 880 - 176 - - Table input TableInput @@ -356,20 +293,34 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}'); ervu-dashboard N - SELECT ri.recruit_id, - (string_agg(elem->>'dataVyezd', ', '))::date as date_crossing, - (string_agg(elem->>'dataVozvrashh', ', '))::date as return_date, - 1 as is_border_crossed + CASE + WHEN elem->>'dataVyezd' ~ '^\d{4}-\d{2}-\d{2}$' THEN (elem->>'dataVyezd')::date + ELSE NULL + END as date_crossing, + CASE + WHEN elem->>'dataVozvrashh' ~ '^\d{4}-\d{2}-\d{2}$' THEN (elem->>'dataVozvrashh')::date + ELSE NULL + END as return_date, + true as is_border_crossed FROM ervu_dashboard.recruits_info ri -JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id AND '${IDM_ID}' != '' -- Проверка на пустую строку - AND (ri.current_recruitment_id = '${IDM_ID}' or (ri.current_recruitment_id is null and ri.target_recruitment_id = '${IDM_ID}')) - AND '${M_R_CR_DATE}'::timestamp >= ri.created_at, -LATERAL jsonb_array_elements(info->'svedFL'->'extend'->'svedPeresechGran') as elem -WHERE jsonb_typeof(info->'svedFL'->'extend'->'svedPeresechGran') = 'array' - AND (elem->>'dataVyezd' IS NOT NULL OR elem->>'dataVozvrashh' IS NOT NULL) -GROUP BY ri.recruit_id; +JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id + AND '${IDM_ID}' != '' -- Проверка на пустую строку + AND (ri.current_recruitment_id = '${IDM_ID}' or (ri.current_recruitment_id is null and ri.target_recruitment_id = '${IDM_ID}')) + --AND '${M_R_CR_DATE}'::timestamp >= ri.created_at +JOIN LATERAL ( + SELECT elem + FROM jsonb_array_elements( + CASE + WHEN jsonb_typeof(ri.info->'svedFL'->'extend'->'svedPeresechGran') = 'array' + THEN ri.info->'svedFL'->'extend'->'svedPeresechGran' + ELSE '[]'::jsonb + END + ) as elem + WHERE (elem->>'dataVyezd' IS NOT NULL AND elem->>'dataVyezd' ~ '^\d{4}-\d{2}-\d{2}$') + OR (elem->>'dataVozvrashh' IS NOT NULL AND elem->>'dataVozvrashh' ~ '^\d{4}-\d{2}-\d{2}$') +) AS filtered_elems ON true Y @@ -437,11 +388,13 @@ GROUP BY ri.recruit_id; 10000 ervu-dashboard Y + = recruit_id recruit_id + ervu_dashboard citizen
@@ -459,8 +412,8 @@ GROUP BY ri.recruit_id;
- User defined Java expression - Janino + sort_by_recruit_id + SortRows Y @@ -469,17 +422,24 @@ GROUP BY ri.recruit_id; none - - border_crossed - border_crossed_raw == 1 - Boolean - -1 - -1 - - + N + ${java.io.tmpdir} + + + Y + N + N + 0 + recruit_id + N + + + srt + 1000000 + Y - 1104 + 688 176