diff --git a/mappings/info_recruits/citizen_tables/drivers_licence/drivers_licence_job.hwf b/mappings/info_recruits/citizen_tables/drivers_licence/drivers_licence_job.hwf index a5ec1d2..2fac9bc 100644 --- a/mappings/info_recruits/citizen_tables/drivers_licence/drivers_licence_job.hwf +++ b/mappings/info_recruits/citizen_tables/drivers_licence/drivers_licence_job.hwf @@ -116,7 +116,7 @@ N Y N - 1072 + 1040 608 @@ -228,7 +228,6 @@ CURRENT_WORKFLOW - N N 240 diff --git a/mappings/info_recruits/citizen_tables/drivers_licence/parallel/drivers_licence_flow.hpl b/mappings/info_recruits/citizen_tables/drivers_licence/parallel/drivers_licence_flow.hpl index be0ad74..d53be1a 100644 --- a/mappings/info_recruits/citizen_tables/drivers_licence/parallel/drivers_licence_flow.hpl +++ b/mappings/info_recruits/citizen_tables/drivers_licence/parallel/drivers_licence_flow.hpl @@ -21,63 +21,68 @@ - Create job execution record - Table input - Y - - - Filter rows - Change job status on success + driver_lisence_job_create + drivers_licence_input Y Detect empty stream - Change job status on success + driver_licence_success_job Y - Change job status on error + driver_license_failure_job Abort Y - Table output - Change job status on error + drivers_licence_output + driver_license_failure_job Y - Update - Change job status on error + update_drivers_licence_flags + driver_license_failure_job Y - Table output - sort_by_recruit_id + drivers_licence_input + drivers_licence_output Y - Update + drivers_licence_input + Detect empty stream + Y + + + drivers_licence_input + driver_licence_group_by_recruit_id + Y + + + driver_licence_group_by_recruit_id + driver_licence_java_expression + Y + + + driver_licence_java_expression + update_drivers_licence_flags + Y + + + drivers_licence_output + Identify last row in a stream + Y + + + Identify last row in a stream Filter rows Y - sort_by_recruit_id - Identify last row in a stream 2 - Y - - - Identify last row in a stream 2 - Update - Y - - - Table input - Table output - Y - - - Table input - Detect empty stream + Filter rows + driver_licence_success_job Y @@ -97,12 +102,12 @@ 0 - 1456 - 496 + 1632 + 512 - Change job status on error + driver_license_failure_job ExecSql Y @@ -118,8 +123,11 @@ ervu-dashboard + Y + N + Y Y N @@ -131,14 +139,15 @@ WHERE job_name = '${JOB_NAME}' and recruitment_id = '${IDM_ID}'; + - 1088 - 496 + 1376 + 512 - Change job status on success + driver_licence_success_job ExecSql Y @@ -151,8 +160,11 @@ and recruitment_id = '${IDM_ID}'; ervu-dashboard + Y + N + Y N N @@ -163,14 +175,15 @@ WHERE job_name = '${JOB_NAME}' and recruitment_id = '${IDM_ID}'; + - 1456 - 176 + 816 + 208 - Create job execution record + driver_lisence_job_create ExecSql Y @@ -183,8 +196,11 @@ and recruitment_id = '${IDM_ID}'; ervu-dashboard + N + N + Y N N @@ -192,10 +208,11 @@ and recruitment_id = '${IDM_ID}'; VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}'); + 288 - 320 + 512 @@ -212,7 +229,7 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}'); 560 - 176 + 208 @@ -244,15 +261,15 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}'); - Change job status on success + driver_licence_success_job - 1456 - 320 + 1120 + 208 - Identify last row in a stream 2 + Identify last row in a stream DetectLastRow N @@ -265,12 +282,85 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}'); last_row - 1104 - 320 + 1120 + 352 - Table input + driver_licence_java_expression + Janino + + Y + + 1 + + none + + + + has_driver_license + has_driver_license_raw == 1 + Boolean + -1 + -1 + + + + has_tractor_license + has_tractor_license_raw == 1 + Boolean + -1 + -1 + + + + + 848 + 752 + + + + driver_licence_group_by_recruit_id + GroupBy + + Y + + 1 + + none + + + N + N + ${java.io.tmpdir} + + + has_driver_license_raw + is_has_driver_license + MAX + + + has_tractor_license_raw + is_has_tractor_license + MAX + + + N + + + recruit_id + + + N + grp + + + 560 + 752 + + + + drivers_licence_input TableInput N @@ -282,93 +372,105 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}'); ervu-dashboard N + WITH -base AS ( - SELECT - ri.recruit_id recruit_id, - ri.info - FROM ervu_dashboard.recruits_info ri - JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id AND '${IDM_ID}' != '' -- Проверка на пустую строку - AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}' - WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' - OR ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL - OR ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL -), -all_data AS ( - SELECT - ri.recruit_id, - to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataSved', 'YYYY-MM-DD') AS source_update_date, - ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'kodStatus' AS status,-- статус удостоверения // 1 - действителен, 2 - недействителен - ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'serNomDok' AS licence_series, -- серия и номер - NULL AS licence_number, -- ?серия и номер в одном поле? - array_to_string(array( - SELECT kat->>'naimKatTS' - FROM jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS kat - WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'), ',') AS categories,-- категории водительских удостоверений - to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataVydDok', 'YYYY-MM-DD') AS start_date,-- дата выдачи - to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'srokDeistvDok', 'YYYY-MM-DD') AS close_date,-- срок действия - NULL AS replacement_date, - NULL AS return_date, - false AS tractor_driver - FROM base ri - WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' + base AS ( + SELECT + ri.recruit_id, + ri.info + FROM ervu_dashboard.recruits_info ri + JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id + WHERE ('${IDM_ID}' != '' AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}') + AND ( + jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' + OR (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM') IS NOT NULL + OR (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM') IS NOT NULL + ) + ), + all_data AS ( + -- Водительские удостоверения + SELECT + ri.recruit_id, + (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->> 'id') as source_id, + to_date((ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataSved'), 'YYYY-MM-DD') AS source_update_date, + (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'kodStatus') AS status, + (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'serNomDok') AS licence_series, + NULL AS licence_number, + array_to_string(array( + SELECT kat->>'naimKatTS' + FROM jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS kat + ), ',') AS categories, + to_date((ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataVydDok'), 'YYYY-MM-DD') AS start_date, + to_date((ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'srokDeistvDok'), 'YYYY-MM-DD') AS close_date, + NULL AS replacement_date, + NULL AS return_date, + false AS tractor_driver + FROM base ri + WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' - UNION ALL + UNION ALL - SELECT - ri.recruit_id, - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataSved', 'YYYY-MM-DD') AS source_update_date, - '1' AS status, -- статус удостоверения тракториста // ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'kodStatusUTM' - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'serUTM' AS licence_series, -- серия удостоверения тракториста - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'nomUTM' AS licence_number, -- номер удостоверения тракториста - (SELECT array_to_string(ARRAY(SELECT jsonb_array_elements_text( - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->'extend'->'kodKatUTM')), ',')) AS categories, -- категории удостоверений тракториста - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVydUTM', 'YYYY-MM-DD') AS start_date, -- дата выдачи - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') AS close_date, -- дата окончания действия - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataZameny', 'YYYY-MM-DD') AS replacement_date, -- дата замены - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVozvr', 'YYYY-MM-DD') AS return_date, -- дата возврата - true AS tractor_driver - FROM base ri - WHERE ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL + -- Действительные удостоверения тракториста + SELECT + ri.recruit_id, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->> 'id') as source_id, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataSved'), 'YYYY-MM-DD') AS source_update_date, + '1' AS status, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'serUTM') AS licence_series, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'nomUTM') AS licence_number, + (SELECT array_to_string(ARRAY( + SELECT jsonb_array_elements_text(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->'extend'->'kodKatUTM') + ), ',')) AS categories, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVydUTM'), 'YYYY-MM-DD') AS start_date, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM'), 'YYYY-MM-DD') AS close_date, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataZameny'), 'YYYY-MM-DD') AS replacement_date, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVozvr'), 'YYYY-MM-DD') AS return_date, + true AS tractor_driver + FROM base ri + WHERE (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM') IS NOT NULL - UNION ALL + UNION ALL - SELECT - ri.recruit_id, - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataSved', 'YYYY-MM-DD') AS source_update_date, - '0' AS status, -- статус удостоверения тракториста // ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'kodStatusUTM' - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'serUTM' AS licence_series, -- серия удостоверения тракториста - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'nomUTM' AS licence_number, -- номер удостоверения тракториста - (SELECT array_to_string(ARRAY(SELECT jsonb_array_elements_text( - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->'extend'->'kodKatUTM')), ',')) AS categories, -- категории удостоверений тракториста - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVydUTM', 'YYYY-MM-DD') AS start_date, -- дата выдачи - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') AS close_date, -- дата окончания действия - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataZameny', 'YYYY-MM-DD') AS replacement_date, -- дата замены - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVozvr', 'YYYY-MM-DD') AS return_date, -- дата возврата - true AS tractor_driver - FROM base ri - WHERE ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL -) + -- Просроченные удостоверения тракториста + SELECT + ri.recruit_id, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->> 'id') as source_id, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataSved'), 'YYYY-MM-DD') AS source_update_date, + '0' AS status, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'serUTM') AS licence_series, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'nomUTM') AS licence_number, + (SELECT array_to_string(ARRAY( + SELECT jsonb_array_elements_text(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->'extend'->'kodKatUTM') + ), ',')) AS categories, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVydUTM'), 'YYYY-MM-DD') AS start_date, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataOkonchUTM'), 'YYYY-MM-DD') AS close_date, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataZameny'), 'YYYY-MM-DD') AS replacement_date, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVozvr'), 'YYYY-MM-DD') AS return_date, + true AS tractor_driver + FROM base ri + WHERE (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM') IS NOT NULL + ) SELECT - *, - CASE - WHEN tractor_driver is false and status = '1' THEN true - ELSE false - END AS has_driver_license, -- tractor_license // имеет удостоверение тракториста в citizen - CASE - WHEN tractor_driver is true and status = '1' THEN true - ELSE false - END AS tractor_license -- has_driver_license // признак наличия водительского удостоверения -FROM all_data + *, + CASE + WHEN tractor_driver = false AND status = '1' THEN 1 + ELSE 0 + END AS is_has_driver_license, + CASE + WHEN tractor_driver = true AND status = '1' THEN 1 + ELSE 0 + END AS is_has_tractor_license +FROM all_data +ORDER BY recruit_id Y 560 - 320 + 512 - Table output + drivers_licence_output TableOutput Y @@ -425,6 +527,10 @@ FROM all_data source_update_date source_update_date + + source_id + source_id + N N @@ -441,12 +547,12 @@ FROM all_data Y - 736 - 320 + 1120 + 512 - Update + update_drivers_licence_flags Update Y @@ -469,7 +575,7 @@ FROM all_data citizen
tractor_license - tractor_license + has_tractor_license has_driver_license @@ -480,48 +586,14 @@ FROM all_data Y - 1328 - 320 - -
- - sort_by_recruit_id - SortRows - - Y - - 1 - - none - - - ${java.io.tmpdir} - srt - 100000 - - N - - Y - - - recruit_id - Y - N - N - 0 - N - - - - - 912 - 320 + 1376 + 752 - Table output - Change job status on error + drivers_licence_output + driver_license_failure_job Y error_description @@ -532,8 +604,8 @@ FROM all_data - Update - Change job status on error + update_drivers_licence_flags + driver_license_failure_job Y error_description diff --git a/mappings/info_recruits/citizen_tables/drivers_licence/parallel/drivers_licence_flow_delta.hpl b/mappings/info_recruits/citizen_tables/drivers_licence/parallel/drivers_licence_flow_delta.hpl index 497ae31..c46594e 100644 --- a/mappings/info_recruits/citizen_tables/drivers_licence/parallel/drivers_licence_flow_delta.hpl +++ b/mappings/info_recruits/citizen_tables/drivers_licence/parallel/drivers_licence_flow_delta.hpl @@ -21,68 +21,103 @@ - Create job execution record - Table input + driver_lisence_failure_job + Abort 2 Y - Detect empty stream - Change job status on success + driver_license_job_create + Table input 2 Y - Filter rows - Change job status on success + Detect empty stream 2 + driver_licence_success_job Y - Change job status on error - Abort + driver_licence_insert_or_update + driver_lisence_failure_job Y - Insert / update - Change job status on error + Table input 2 + Detect empty stream 2 Y - Update - Change job status on error + update_driver_licence_flag + driver_lisence_failure_job Y - Table input - Detect empty stream + Table input 2 + driver_licence_need_update_filter Y - Table input - Insert / update + driver_licence_group_by_recruit_id + driver_licence_java_expression Y - Insert / update - sort_by_recruit_id + Table input 2 + driver_licence_group_by_recruit_id Y - Update - Filter rows + driver_licence_java_expression + update_driver_licence_flag Y - sort_by_recruit_id - Identify last row in a stream 2 + Table input 2 + driver_licence_need_delete_filter Y - Identify last row in a stream 2 - Update + driver_licence_need_update_filter + driver_licence_insert_or_update + Y + + + driver_licence_need_delete_filter + delete_act_tractor + Y + + + delete_act_tractor + driver_lisence_failure_job + Y + + + Filter rows 2 + Unique rows + Y + + + Unique rows + driver_licence_success_job + Y + + + driver_licence_insert_or_update + Identify last row in a stream 2 2 + Y + + + delete_act_tractor + Identify last row in a stream 2 2 + Y + + + Identify last row in a stream 2 2 + Filter rows 2 Y - Abort + Abort 2 Abort Y @@ -97,12 +132,341 @@ 0 - 1392 - 528 + 1744 + 1328 - Change job status on error + driver_license_job_create + ExecSql + + Y + + 1 + + none + + + + + ervu-dashboard + + N + + N + + Y + N + N + UPDATE etl.job_execution +SET + status = 'DELTA_PROCESSING', + execution_datetime = DEFAULT, + error_description = NULL +where job_name = '${JOB_NAME}' +and recruitment_id = '${IDM_ID}'; + + + + 432 + 1264 + + + + Detect empty stream 2 + DetectEmptyStream + + Y + + 1 + + none + + + + + 768 + 976 + + + + Filter rows 2 + FilterRows + + Y + + 1 + + none + + + + + + + = + last_row + N + - + + N + -1 + constant + -1 + Y + Boolean + + + + Unique rows + + + 1744 + 1184 + + + + Identify last row in a stream 2 2 + DetectLastRow + + N + + 1 + + none + + + last_row + + + 1552 + 1184 + + + + Table input 2 + TableInput + + N + + 1 + + none + + + ervu-dashboard + N + + WITH + base AS ( + SELECT + ri.recruit_id recruit_id, + ri.info, + jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' as has_driver_license_info, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM') IS NOT NULL as has_akt_utm_info, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM') IS NOT NULL as has_pred_utm_info, + CASE + WHEN jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' + THEN to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataSved', 'YYYY-MM-DD') + END as driver_update_date, + CASE + WHEN ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL + THEN to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataSved', 'YYYY-MM-DD') + END as akt_update_date, + CASE + WHEN ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL + THEN to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataSved', 'YYYY-MM-DD') + END as pred_update_date + FROM ervu_dashboard.recruits_info ri + JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id AND '${IDM_ID}' != '' -- Проверка на пустую строку + AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}' + WHERE (jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' + OR ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL + OR ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL) + ), + all_data AS ( + SELECT + ri.recruit_id, + (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->> 'id') as source_id, + ri.driver_update_date AS source_update_date, + ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'kodStatus' AS status, + ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'serNomDok' AS licence_series, + NULL AS licence_number, + array_to_string(array( + SELECT kat->>'naimKatTS' + FROM jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS kat + WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'), ',') AS categories, + to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataVydDok', 'YYYY-MM-DD') AS start_date, + to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'srokDeistvDok', 'YYYY-MM-DD') AS close_date, + NULL AS replacement_date, + NULL AS return_date, + false AS tractor_driver, + ri.driver_update_date > '${MAX_SOURCE_UPDATE_DATE}'::date as need_update, + false as need_to_delete + FROM base ri + where ri.has_driver_license_info + + UNION ALL + + SELECT + ri.recruit_id, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->> 'id') as source_id, + ri.akt_update_date AS source_update_date, + '1' AS status, + ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'serUTM' AS licence_series, + ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'nomUTM' AS licence_number, + (SELECT array_to_string(ARRAY(SELECT jsonb_array_elements_text( + ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->'extend'->'kodKatUTM')), ',')) AS categories, + to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVydUTM', 'YYYY-MM-DD') AS start_date, + to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') AS close_date, + to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataZameny', 'YYYY-MM-DD') AS replacement_date, + to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVozvr', 'YYYY-MM-DD') AS return_date, + true AS tractor_driver, + ri.akt_update_date > '${MAX_SOURCE_UPDATE_DATE}'::date as need_update, + NOT ri.has_akt_utm_info as need_to_delete + FROM base ri + + UNION ALL + + SELECT + ri.recruit_id, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->> 'id') as source_id, + ri.pred_update_date AS source_update_date, + '0' AS status, + ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'serUTM' AS licence_series, + ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'nomUTM' AS licence_number, + (SELECT array_to_string(ARRAY(SELECT jsonb_array_elements_text( + ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->'extend'->'kodKatUTM')), ',')) AS categories, + to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVydUTM', 'YYYY-MM-DD') AS start_date, + to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') AS close_date, + to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataZameny', 'YYYY-MM-DD') AS replacement_date, + to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVozvr', 'YYYY-MM-DD') AS return_date, + true AS tractor_driver, + ri.pred_update_date > '${MAX_SOURCE_UPDATE_DATE}'::date as need_update, + false as need_to_delete + FROM base ri + WHERE ri.has_pred_utm_info + ) +SELECT + *, + CASE + WHEN tractor_driver = false AND status = '1' THEN 1 + ELSE 0 + END AS is_has_driver_license, + CASE + WHEN tractor_driver = true AND status = '1' AND NOT need_to_delete THEN 1 + ELSE 0 + END AS is_has_tractor_license +FROM all_data +ORDER BY recruit_id + Y + + + 768 + 1264 + + + + Unique rows + Unique + + Y + + 1 + + none + + + N + + + N + + + 1744 + 1072 + + + + delete_act_tractor + Delete + + Y + + 1 + + none + + + 10000 + ervu-dashboard + + + = + recruit_id + recruit_id + + + = + tractor_driver + tractor_driver + + + = + status + status + + ervu_dashboard + drivers_licence
+
+ + + 1232 + 1184 + +
+ + driver_licence_group_by_recruit_id + GroupBy + + Y + + 1 + + none + + + N + N + ${java.io.tmpdir} + + + has_driver_license_raw + is_has_driver_license + MAX + + + has_tractor_license_raw + is_has_tractor_license + MAX + + + N + + + recruit_id + + + N + grp + + + 768 + 1520 + + + + driver_lisence_failure_job ExecSql Y @@ -133,150 +497,15 @@ and recruitment_id = '${IDM_ID}'; - 1216 - 528 + 1552 + 1328 - Change job status on success - ExecSql - - Y - - 1 - - none - - - - - ervu-dashboard - Y - N - Y - N - N - UPDATE etl.job_execution -SET status = 'DELTA_SUCCESS', - execution_end_datetime = current_timestamp -WHERE job_name = '${JOB_NAME}' -and recruitment_id = '${IDM_ID}'; - - - - - 1408 - 192 - - - - Create job execution record - ExecSql - - Y - - 1 - - none - - - - - ervu-dashboard - N - N - Y - N - N - UPDATE etl.job_execution -SET - status = 'DELTA_PROCESSING', - execution_datetime = DEFAULT, - error_description = NULL -where job_name = '${JOB_NAME}' -and recruitment_id = '${IDM_ID}'; - - - 272 - 352 - - - - Detect empty stream - DetectEmptyStream - - Y - - 1 - - none - - - - - 544 - 192 - - - - Filter rows - FilterRows - - Y - - 1 - - none - - - - - - - = - last_row - N - - - - N - -1 - constant - -1 - Y - Boolean - - - - Change job status on success - - - 1408 - 352 - - - - Identify last row in a stream 2 - DetectLastRow - - N - - 1 - - none - - - last_row - - - 1056 - 352 - - - - Insert / update + driver_licence_insert_or_update InsertUpdate - Y + N 1 @@ -288,13 +517,9 @@ and recruitment_id = '${IDM_ID}'; = - recruit_id - recruit_id - - - = - tractor_driver - tractor_driver + source_id + source_id + ervu_dashboard drivers_licence
@@ -353,130 +578,162 @@ and recruitment_id = '${IDM_ID}'; source_update_date Y + + source_id + source_id + N +
N - 720 - 352 + 1232 + 1328
- Table input - TableInput + driver_licence_java_expression + Janino - N + Y 1 none - ervu-dashboard - N - WITH -base AS ( - SELECT - ri.recruit_id recruit_id, - ri.info, - CASE - WHEN jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' - THEN to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataSved', 'YYYY-MM-DD') - END as driver_update_date, - CASE - WHEN ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL - THEN to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataSved', 'YYYY-MM-DD') - END as akt_update_date, - CASE - WHEN ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL - THEN to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataSved', 'YYYY-MM-DD') - END as pred_update_date - FROM ervu_dashboard.recruits_info ri - JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id AND '${IDM_ID}' != '' -- Проверка на пустую строку - AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}' - --AND ri.updated_at >= '${M_R_UP_DATE}'::timestamp - WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' - OR ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL - OR ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL -), -all_data AS ( - SELECT - ri.recruit_id, - ri.driver_update_date AS source_update_date, - ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'kodStatus' AS status,-- статус удостоверения // 1 - действителен, 2 - недействителен - ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'serNomDok' AS licence_series, -- серия и номер - NULL AS licence_number, -- ?серия и номер в одном поле? - array_to_string(array( - SELECT kat->>'naimKatTS' - FROM jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS kat - WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'), ',') AS categories,-- категории водительских удостоверений - to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataVydDok', 'YYYY-MM-DD') AS start_date,-- дата выдачи - to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'srokDeistvDok', 'YYYY-MM-DD') AS close_date,-- срок действия - NULL AS replacement_date, - NULL AS return_date, - false AS tractor_driver - FROM base ri - WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' - AND ri.driver_update_date > '${MAX_SOURCE_UPDATE_DATE}'::date - - UNION ALL - - SELECT - ri.recruit_id, - ri.akt_update_date AS source_update_date, - '1' AS status, -- статус удостоверения тракториста // ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'kodStatusUTM' - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'serUTM' AS licence_series, -- серия удостоверения тракториста - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'nomUTM' AS licence_number, -- номер удостоверения тракториста - (SELECT array_to_string(ARRAY(SELECT jsonb_array_elements_text( - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->'extend'->'kodKatUTM')), ',')) AS categories, -- категории удостоверений тракториста - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVydUTM', 'YYYY-MM-DD') AS start_date, -- дата выдачи - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') AS close_date, -- дата окончания действия - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataZameny', 'YYYY-MM-DD') AS replacement_date, -- дата замены - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVozvr', 'YYYY-MM-DD') AS return_date, -- дата возврата - true AS tractor_driver - FROM base ri - WHERE ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL - AND ri.akt_update_date > '${MAX_SOURCE_UPDATE_DATE}'::date - - UNION ALL - - SELECT - ri.recruit_id, - ri.pred_update_date AS source_update_date, - '0' AS status, -- статус удостоверения тракториста // ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'kodStatusUTM' - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'serUTM' AS licence_series, -- серия удостоверения тракториста - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'nomUTM' AS licence_number, -- номер удостоверения тракториста - (SELECT array_to_string(ARRAY(SELECT jsonb_array_elements_text( - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->'extend'->'kodKatUTM')), ',')) AS categories, -- категории удостоверений тракториста - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVydUTM', 'YYYY-MM-DD') AS start_date, -- дата выдачи - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') AS close_date, -- дата окончания действия - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataZameny', 'YYYY-MM-DD') AS replacement_date, -- дата замены - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVozvr', 'YYYY-MM-DD') AS return_date, -- дата возврата - true AS tractor_driver - FROM base ri - WHERE ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL - AND ri.pred_update_date > '${MAX_SOURCE_UPDATE_DATE}'::date -) -SELECT - *, - CASE - WHEN tractor_driver is false and status = '1' THEN true - ELSE false - END AS has_driver_license, -- tractor_license // имеет удостоверение тракториста в citizen - CASE - WHEN tractor_driver is true and status = '1' THEN true - ELSE false - END AS tractor_license -- has_driver_license // признак наличия водительского удостоверения -FROM all_data - Y + + has_driver_license + has_driver_license_raw == 1 + Boolean + -1 + -1 + + + + has_tractor_license + has_tractor_license_raw == 1 + Boolean + -1 + -1 + + - 544 - 352 + 1056 + 1520 - Update + driver_licence_need_delete_filter + FilterRows + + Y + + 1 + + none + + + + + + + = + need_to_delete + N + - + + N + -1 + constant + -1 + Y + Boolean + + + + delete_act_tractor + + + 992 + 1184 + + + + driver_licence_need_update_filter + FilterRows + + Y + + 1 + + none + + + + + + + = + need_update + N + - + + N + -1 + constant + -1 + Y + Boolean + + + + driver_licence_insert_or_update + + + 992 + 1328 + + + + driver_licence_success_job + ExecSql + + Y + + 1 + + none + + + + + ervu-dashboard + + Y + + N + + Y + N + N + UPDATE etl.job_execution +SET status = 'DELTA_SUCCESS', + execution_end_datetime = current_timestamp +WHERE job_name = '${JOB_NAME}' +and recruitment_id = '${IDM_ID}'; + + + + + + 1744 + 976 + + + + update_driver_licence_flag Update N @@ -489,17 +746,19 @@ FROM all_data 10000 ervu-dashboard Y + = recruit_id recruit_id + ervu_dashboard citizen
tractor_license - tractor_license + has_tractor_license has_driver_license @@ -510,48 +769,14 @@ FROM all_data Y - 1216 - 352 - -
- - sort_by_recruit_id - SortRows - - Y - - 1 - - none - - - ${java.io.tmpdir} - srt - 100000 - - N - - Y - - - recruit_id - Y - N - N - 0 - N - - - - - 896 - 352 + 1552 + 1520 - Insert / update - Change job status on error + delete_act_tractor + driver_lisence_failure_job Y error_description @@ -562,8 +787,20 @@ FROM all_data - Update - Change job status on error + driver_licence_insert_or_update + driver_lisence_failure_job + Y + + error_description + + + + + + + + update_driver_licence_flag + driver_lisence_failure_job Y error_description diff --git a/mappings/info_recruits/citizen_tables/drivers_licence/parallel/drivers_licence_flow_repeat.hpl b/mappings/info_recruits/citizen_tables/drivers_licence/parallel/drivers_licence_flow_repeat.hpl index 3f58606..454d6ea 100644 --- a/mappings/info_recruits/citizen_tables/drivers_licence/parallel/drivers_licence_flow_repeat.hpl +++ b/mappings/info_recruits/citizen_tables/drivers_licence/parallel/drivers_licence_flow_repeat.hpl @@ -22,68 +22,73 @@ - Create job execution record - Table input + driver_license_failure_job + Abort 2 Y - Filter rows - Change job status on success + driver_lisence_job_create + drivers_licence_input Y - Detect empty stream - Change job status on success + Detect empty stream 2 + driver_licence_success_job Y - Change job status on error - Abort + Filter rows 2 + driver_licence_success_job Y - Insert / update - Change job status on error + Identify last row in a stream + Filter rows 2 Y - Update - Change job status on error + driver_licence_java_expression + update_drivers_licence_flags Y - Table input - Insert / update + driver_licence_group_by_recruit_id + driver_licence_java_expression Y - Table input - Detect empty stream + drivers_licence_input + Detect empty stream 2 Y - Insert / update - sort_by_recruit_id + drivers_licence_input + driver_licence_group_by_recruit_id Y - Update - Filter rows + update_drivers_licence_flags + driver_license_failure_job Y - sort_by_recruit_id - Identify last row in a stream 2 + drivers_licence_input + Insert / update 2 Y - Identify last row in a stream 2 - Update + Insert / update 2 + Identify last row in a stream + Y + + + Insert / update 2 + driver_license_failure_job Y - Abort + Abort 2 Abort Y @@ -98,127 +103,12 @@ 0 - 1328 - 384 + 1712 + 784 - Change job status on error - ExecSql - - Y - - 1 - - none - - - - - error_description - - - ervu-dashboard - Y - N - Y - Y - N - UPDATE etl.job_execution -SET status = 'ERROR', - error_description = ?, - execution_end_datetime = current_timestamp -WHERE job_name = '${JOB_NAME}' -and recruitment_id = '${IDM_ID}'; - - - - - 1232 - 384 - - - - Change job status on success - ExecSql - - Y - - 1 - - none - - - - - ervu-dashboard - Y - N - Y - N - N - UPDATE etl.job_execution -SET status = 'SUCCESS', - execution_end_datetime = current_timestamp -WHERE job_name = '${JOB_NAME}' -and recruitment_id = '${IDM_ID}'; - - - - - 1440 - 64 - - - - Create job execution record - ExecSql - - Y - - 1 - - none - - - - - ervu-dashboard - N - N - Y - N - N - INSERT INTO etl.job_execution ( - id, - job_name, - status, - execution_datetime, - error_description, - recruitment_id -) -VALUES ( - DEFAULT, - '${JOB_NAME}', - 'PROCESSING', - DEFAULT, - NULL, - '${IDM_ID}' -) -ON CONFLICT (job_name, recruitment_id) -DO UPDATE SET - status = 'PROCESSING', - execution_datetime = DEFAULT, - error_description = NULL - - - - 272 - 208 - - - - Detect empty stream + Detect empty stream 2 DetectEmptyStream Y @@ -230,12 +120,12 @@ DO UPDATE SET - 480 - 64 + 640 + 480 - Filter rows + Filter rows 2 FilterRows Y @@ -263,15 +153,15 @@ DO UPDATE SET - Change job status on success + driver_licence_success_job - 1440 - 208 + 1200 + 480 - Identify last row in a stream 2 + Identify last row in a stream DetectLastRow N @@ -284,15 +174,15 @@ DO UPDATE SET last_row - 1056 - 208 + 1200 + 624 - Insert / update + Insert / update 2 InsertUpdate - Y + N 1 @@ -304,15 +194,8 @@ DO UPDATE SET = - recruit_id - recruit_id - - - - = - tractor_driver - tractor_driver - + source_id + source_id ervu_dashboard drivers_licence
@@ -371,16 +254,212 @@ DO UPDATE SET source_update_date Y + + source_id + source_id + N +
Y - 672 - 208 + 1200 + 784
- Table input + driver_licence_group_by_recruit_id + GroupBy + + Y + + 1 + + none + + + N + N + ${java.io.tmpdir} + + + has_driver_license_raw + is_has_driver_license + MAX + + + has_tractor_license_raw + is_has_tractor_license + MAX + + + N + + + recruit_id + + + N + grp + + + 640 + 1024 + + + + driver_licence_java_expression + Janino + + Y + + 1 + + none + + + + has_driver_license + has_driver_license_raw == 1 + Boolean + -1 + -1 + + + + has_tractor_license + has_tractor_license_raw == 1 + Boolean + -1 + -1 + + + + + 928 + 1024 + + + + driver_licence_success_job + ExecSql + + Y + + 1 + + none + + + + + ervu-dashboard + Y + N + Y + N + N + UPDATE etl.job_execution +SET status = 'SUCCESS', + execution_end_datetime = current_timestamp +WHERE job_name = '${JOB_NAME}' +and recruitment_id = '${IDM_ID}'; + + + + + 896 + 480 + + + + driver_license_failure_job + ExecSql + + Y + + 1 + + none + + + + + error_description + + + ervu-dashboard + Y + N + Y + Y + N + UPDATE etl.job_execution +SET status = 'ERROR', + error_description = ?, + execution_end_datetime = current_timestamp +WHERE job_name = '${JOB_NAME}' +and recruitment_id = '${IDM_ID}'; + + + + + 1456 + 784 + + + + driver_lisence_job_create + ExecSql + + Y + + 1 + + none + + + + + ervu-dashboard + + N + + N + + Y + N + N + INSERT INTO etl.job_execution ( + id, + job_name, + status, + execution_datetime, + error_description, + recruitment_id +) +VALUES ( + DEFAULT, + '${JOB_NAME}', + 'PROCESSING', + DEFAULT, + NULL, + '${IDM_ID}' +) +ON CONFLICT (job_name, recruitment_id) +DO UPDATE SET + status = 'PROCESSING', + execution_datetime = DEFAULT, + error_description = NULL; + + + + 368 + 784 + + + + drivers_licence_input TableInput N @@ -392,96 +471,108 @@ DO UPDATE SET ervu-dashboard N + WITH -base AS ( - SELECT - ri.recruit_id recruit_id, - ri.info - FROM ervu_dashboard.recruits_info ri - JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id AND '${IDM_ID}' != '' -- Проверка на пустую строку - AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}' - WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' - OR ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL - OR ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL -), -all_data AS ( - SELECT - ri.recruit_id, - to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataSved', 'YYYY-MM-DD') AS source_update_date, - ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'kodStatus' AS status,-- статус удостоверения // 1 - действителен, 2 - недействителен - ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'serNomDok' AS licence_series, -- серия и номер - NULL AS licence_number, -- ?серия и номер в одном поле? - array_to_string(array( - SELECT kat->>'naimKatTS' - FROM jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS kat - WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'), ',') AS categories,-- категории водительских удостоверений - to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataVydDok', 'YYYY-MM-DD') AS start_date,-- дата выдачи - to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'srokDeistvDok', 'YYYY-MM-DD') AS close_date,-- срок действия - NULL AS replacement_date, - NULL AS return_date, - false AS tractor_driver - FROM base ri - WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' + base AS ( + SELECT + ri.recruit_id, + ri.info + FROM ervu_dashboard.recruits_info ri + JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id + WHERE ('${IDM_ID}' != '' AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}') + AND ( + jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' + OR (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM') IS NOT NULL + OR (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM') IS NOT NULL + ) + ), + all_data AS ( + -- Водительские удостоверения + SELECT + ri.recruit_id, + (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->> 'id') as source_id, + to_date((ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataSved'), 'YYYY-MM-DD') AS source_update_date, + (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'kodStatus') AS status, + (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'serNomDok') AS licence_series, + NULL AS licence_number, + array_to_string(array( + SELECT kat->>'naimKatTS' + FROM jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS kat + ), ',') AS categories, + to_date((ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataVydDok'), 'YYYY-MM-DD') AS start_date, + to_date((ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'srokDeistvDok'), 'YYYY-MM-DD') AS close_date, + NULL AS replacement_date, + NULL AS return_date, + false AS tractor_driver + FROM base ri + WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' - UNION ALL + UNION ALL - SELECT - ri.recruit_id, - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataSved', 'YYYY-MM-DD') AS source_update_date, - '1' AS status, -- статус удостоверения тракториста // ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'kodStatusUTM' - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'serUTM' AS licence_series, -- серия удостоверения тракториста - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'nomUTM' AS licence_number, -- номер удостоверения тракториста - (SELECT array_to_string(ARRAY(SELECT jsonb_array_elements_text( - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->'extend'->'kodKatUTM')), ',')) AS categories, -- категории удостоверений тракториста - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVydUTM', 'YYYY-MM-DD') AS start_date, -- дата выдачи - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') AS close_date, -- дата окончания действия - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataZameny', 'YYYY-MM-DD') AS replacement_date, -- дата замены - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVozvr', 'YYYY-MM-DD') AS return_date, -- дата возврата - true AS tractor_driver - FROM base ri - WHERE ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL + -- Действительные удостоверения тракториста + SELECT + ri.recruit_id, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->> 'id') as source_id, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataSved'), 'YYYY-MM-DD') AS source_update_date, + '1' AS status, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'serUTM') AS licence_series, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'nomUTM') AS licence_number, + (SELECT array_to_string(ARRAY( + SELECT jsonb_array_elements_text(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->'extend'->'kodKatUTM') + ), ',')) AS categories, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVydUTM'), 'YYYY-MM-DD') AS start_date, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM'), 'YYYY-MM-DD') AS close_date, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataZameny'), 'YYYY-MM-DD') AS replacement_date, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVozvr'), 'YYYY-MM-DD') AS return_date, + true AS tractor_driver + FROM base ri + WHERE (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM') IS NOT NULL - UNION ALL + UNION ALL - SELECT - ri.recruit_id, - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataSved', 'YYYY-MM-DD') AS source_update_date, - '0' AS status, -- статус удостоверения тракториста // ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'kodStatusUTM' - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'serUTM' AS licence_series, -- серия удостоверения тракториста - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'nomUTM' AS licence_number, -- номер удостоверения тракториста - (SELECT array_to_string(ARRAY(SELECT jsonb_array_elements_text( - ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->'extend'->'kodKatUTM')), ',')) AS categories, -- категории удостоверений тракториста - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVydUTM', 'YYYY-MM-DD') AS start_date, -- дата выдачи - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') AS close_date, -- дата окончания действия - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataZameny', 'YYYY-MM-DD') AS replacement_date, -- дата замены - to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVozvr', 'YYYY-MM-DD') AS return_date, -- дата возврата - true AS tractor_driver - FROM base ri - WHERE ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL -) + -- Просроченные удостоверения тракториста + SELECT + ri.recruit_id, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->> 'id') as source_id, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataSved'), 'YYYY-MM-DD') AS source_update_date, + '0' AS status, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'serUTM') AS licence_series, + (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'nomUTM') AS licence_number, + (SELECT array_to_string(ARRAY( + SELECT jsonb_array_elements_text(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->'extend'->'kodKatUTM') + ), ',')) AS categories, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVydUTM'), 'YYYY-MM-DD') AS start_date, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataOkonchUTM'), 'YYYY-MM-DD') AS close_date, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataZameny'), 'YYYY-MM-DD') AS replacement_date, + to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVozvr'), 'YYYY-MM-DD') AS return_date, + true AS tractor_driver + FROM base ri + WHERE (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM') IS NOT NULL + ) SELECT - *, - CASE - WHEN tractor_driver is false and status = '1' THEN true - ELSE false - END AS has_driver_license, -- tractor_license // имеет удостоверение тракториста в citizen - CASE - WHEN tractor_driver is true and status = '1' THEN true - ELSE false - END AS tractor_license -- has_driver_license // признак наличия водительского удостоверения -FROM all_data + *, + CASE + WHEN tractor_driver = false AND status = '1' THEN 1 + ELSE 0 + END AS is_has_driver_license, + CASE + WHEN tractor_driver = true AND status = '1' THEN 1 + ELSE 0 + END AS is_has_tractor_license +FROM all_data +ORDER BY recruit_id Y - 480 - 208 + 640 + 784 - Update + update_drivers_licence_flags Update - N + Y 1 @@ -491,17 +582,19 @@ FROM all_data 10000 ervu-dashboard Y + = recruit_id recruit_id + ervu_dashboard citizen
tractor_license - tractor_license + has_tractor_license has_driver_license @@ -512,48 +605,14 @@ FROM all_data Y - 1232 - 208 - -
- - sort_by_recruit_id - SortRows - - Y - - 1 - - none - - - ${java.io.tmpdir} - srt - 100000 - - N - - Y - - - recruit_id - Y - N - N - 0 - N - - - - - 880 - 208 + 1456 + 1024 - Insert / update - Change job status on error + Insert / update 2 + driver_license_failure_job Y error_description @@ -564,8 +623,8 @@ FROM all_data - Update - Change job status on error + update_drivers_licence_flags + driver_license_failure_job Y error_description