From d9a39775f841c5aa55410001ed1da22d9ee48be5 Mon Sep 17 00:00:00 2001 From: Ruslan Date: Mon, 31 Mar 2025 11:00:57 +0300 Subject: [PATCH] parallel array --- .../mil_com/job_recruitments_milcom.hwf | 151 ++----- ...in_dashboard.waiting_registration(m_c).hwf | 367 ++++++++++++++++++ ...shboard.waiting_registration_pr1(m_c).hpl} | 132 +------ ...ashboard.waiting_registration_pr2(m_c).hpl | 267 +++++++++++++ ...ashboard.waiting_registration_pr3(m_c).hpl | 267 +++++++++++++ ...ashboard.waiting_registration_pr4(m_c).hpl | 267 +++++++++++++ ...ashboard.waiting_registration_pr5(m_c).hpl | 267 +++++++++++++ .../array_recruitment_for_parallel.hpl | 113 ++++++ 8 files changed, 1605 insertions(+), 226 deletions(-) create mode 100644 v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hwf rename v1_apache-hop dash mapping/mil_com/{main_dashboard.waiting_registration(m_c).hpl => main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr1(m_c).hpl} (72%) create mode 100644 v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr2(m_c).hpl create mode 100644 v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr3(m_c).hpl create mode 100644 v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr4(m_c).hpl create mode 100644 v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr5(m_c).hpl create mode 100644 v1_apache-hop dash mapping/mil_com/parameters/array_recruitment_for_parallel.hpl diff --git a/v1_apache-hop dash mapping/mil_com/job_recruitments_milcom.hwf b/v1_apache-hop dash mapping/mil_com/job_recruitments_milcom.hwf index bc60904..5c33771 100644 --- a/v1_apache-hop dash mapping/mil_com/job_recruitments_milcom.hwf +++ b/v1_apache-hop dash mapping/mil_com/job_recruitments_milcom.hwf @@ -153,7 +153,7 @@ Y N 1248 - 960 + 1040 @@ -163,36 +163,6 @@ N 1456 - 960 - - - - main_dashboard.waiting_registration(m_c).hpl - - PIPELINE - - N - N - N - N - N - Y - ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c).hpl - Basic - - - ARR_MC - ARRAY_MIL_COM - - Y - - Y - local - N - N - Y - N - 1248 1040 @@ -203,7 +173,7 @@ N 1456 - 1040 + 960 @@ -672,23 +642,6 @@ WHERE recording_date = current_date 1120 - - SQL main_dashboard.recruitment_campaign - - SQL - - ervu-dashboard - N - DELETE FROM main_dashboard.recruitment_campaign -WHERE recording_date = current_date - AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region') - N - N - N - 576 - 880 - - SQL main_dashboard.total_registered @@ -699,24 +652,6 @@ WHERE recording_date = current_date DELETE FROM main_dashboard.total_registered WHERE recording_date = current_date AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region') - - N - N - N - 928 - 960 - - - - SQL main_dashboard.waiting_registration - - SQL - - ervu-dashboard - N - DELETE FROM main_dashboard.waiting_registration -WHERE recording_date = current_date - AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region') N N @@ -978,6 +913,32 @@ AND postponement_granted IS NULL; 800 + + main_dashboard.waiting_registration(m_c).hwf + + WORKFLOW + + N + N + N + N + ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hwf + + + Nothing + + Y + + N + local + N + N + Y + N + 928 + 960 + + @@ -987,13 +948,6 @@ AND postponement_granted IS NULL; Y N - - main_dashboard.waiting_registration(m_c).hpl - Success 4 - Y - Y - N - total_registered.reg_mil_cat(m_c).hpl Success 7 @@ -1113,13 +1067,6 @@ AND postponement_granted IS NULL; Y Y - - array_recruitments.hpl - SQL main_dashboard.recruitment_campaign - N - Y - N - array_recruitments.hpl SQL main_dashboard.total_registered @@ -1134,20 +1081,6 @@ AND postponement_granted IS NULL; Y Y - - array_recruitments.hpl - SQL main_dashboard.waiting_registration - Y - Y - N - - - SQL main_dashboard.waiting_registration - main_dashboard.waiting_registration(m_c).hpl - Y - Y - Y - array_recruitments.hpl SQL total_registered.removed_registry @@ -1274,20 +1207,6 @@ AND postponement_granted IS NULL; Y Y - - SQL main_dashboard.recruitment_campaign - main_dashboard.recruitment_campaign(m_c).hwf - N - N - Y - - - Start - SQL main_dashboard.recruitment_campaign - N - Y - Y - Start main_dashboard.recruitment_campaign(m_c).hwf @@ -1330,6 +1249,20 @@ AND postponement_granted IS NULL; N Y + + main_dashboard.waiting_registration(m_c).hwf + Success 4 + Y + Y + N + + + Start + main_dashboard.waiting_registration(m_c).hwf + Y + Y + Y + diff --git a/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hwf b/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hwf new file mode 100644 index 0000000..f2f0284 --- /dev/null +++ b/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration(m_c).hwf @@ -0,0 +1,367 @@ + + + main_dashboard.waiting_registration(m_c) + Y + + + + - + 2025/03/31 10:12:19.214 + - + 2025/03/31 10:12:19.214 + + + + + Start + + SPECIAL + + 1 + 12 + 60 + 0 + 0 + N + 0 + 1 + N + 688 + 416 + + + + array_recruitment_for_parallel.hpl + + PIPELINE + + N + N + N + N + N + N + ${PROJECT_HOME}/mil_com/parameters/array_recruitment_for_parallel.hpl + Basic + + Y + + N + local + N + N + Y + Y + 1216 + 416 + + + + main_dashboard.waiting_registration_pr1(m_c).hpl + + PIPELINE + + N + N + N + N + N + Y + ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr1(m_c).hpl + Basic + + + ARR_PR_1 + PART_RECRUITMENT_1 + + Y + + Y + local + N + N + Y + N + 1568 + 256 + + + + main_dashboard.waiting_registration_pr2(m_c).hpl + + PIPELINE + + N + N + N + N + N + Y + ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr2(m_c).hpl + Basic + + + ARR_PR_2 + PART_RECRUITMENT_2 + + Y + + Y + local + N + N + Y + N + 1568 + 336 + + + + main_dashboard.waiting_registration_pr3(m_c).hpl + + PIPELINE + + N + N + N + N + N + Y + ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr3(m_c).hpl + Basic + + + ARR_PR_3 + PART_RECRUITMENT_3 + + Y + + Y + local + N + N + Y + N + 1568 + 416 + + + + main_dashboard.waiting_registration_pr4(m_c).hpl + + PIPELINE + + N + N + N + N + N + Y + ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr4(m_c).hpl + Basic + + + ARR_PR_4 + PART_RECRUITMENT_4 + + Y + + Y + local + N + N + Y + N + 1568 + 496 + + + + Success + + SUCCESS + + N + 1808 + 256 + + + + Success 2 + + SUCCESS + + N + 1808 + 336 + + + + Success 3 + + SUCCESS + + N + 1808 + 416 + + + + Success 4 + + SUCCESS + + N + 1808 + 496 + + + + main_dashboard.waiting_registration_pr5(m_c).hpl + + PIPELINE + + N + N + N + N + N + Y + ${PROJECT_HOME}/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr5(m_c).hpl + Basic + + + ARR_PR_5 + PART_RECRUITMENT_5 + + Y + + Y + local + N + N + Y + N + 1568 + 576 + + + + Success 5 + + SUCCESS + + N + 1808 + 576 + + + + SQL main_dashboard.waiting_registration + + SQL + + ervu-dashboard + N + DELETE FROM main_dashboard.waiting_registration +WHERE recording_date = current_date + AND schema IN ('Department', 'MD_LVL', 'REG_LVL', 'empty', 'Organization', 'Region') + + N + N + N + 928 + 416 + + + + + + array_recruitment_for_parallel.hpl + main_dashboard.waiting_registration_pr1(m_c).hpl + Y + Y + N + + + array_recruitment_for_parallel.hpl + main_dashboard.waiting_registration_pr2(m_c).hpl + Y + Y + N + + + array_recruitment_for_parallel.hpl + main_dashboard.waiting_registration_pr3(m_c).hpl + Y + Y + N + + + array_recruitment_for_parallel.hpl + main_dashboard.waiting_registration_pr4(m_c).hpl + Y + Y + N + + + main_dashboard.waiting_registration_pr1(m_c).hpl + Success + Y + Y + N + + + main_dashboard.waiting_registration_pr2(m_c).hpl + Success 2 + Y + Y + N + + + main_dashboard.waiting_registration_pr3(m_c).hpl + Success 3 + Y + Y + N + + + main_dashboard.waiting_registration_pr4(m_c).hpl + Success 4 + Y + Y + N + + + array_recruitment_for_parallel.hpl + main_dashboard.waiting_registration_pr5(m_c).hpl + Y + Y + N + + + main_dashboard.waiting_registration_pr5(m_c).hpl + Success 5 + Y + Y + N + + + Start + SQL main_dashboard.waiting_registration + Y + Y + Y + + + SQL main_dashboard.waiting_registration + array_recruitment_for_parallel.hpl + Y + Y + Y + + + + + + diff --git a/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c).hpl b/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr1(m_c).hpl similarity index 72% rename from v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c).hpl rename to v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr1(m_c).hpl index 1ac7202..2727104 100644 --- a/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c).hpl +++ b/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr1(m_c).hpl @@ -1,7 +1,7 @@ - main_dashboard.waiting_registration(m_c) + main_dashboard.waiting_registration_pr1(m_c) Y @@ -21,60 +21,12 @@ - - Get variables 5 - Select values 5 - N - - - Select values 5 - Insert / update (main_dashboard.waiting_registration) 2 - N - - - Table input 2 (person_registry) регион - Get variables 5 - N - Table input 2 (person_registry) регион Insert / update (main_dashboard.waiting_registration) 2 Y - - Get variables 5 - GetVariable - - Y - - 1 - - none - - - - - -1 - REC_ID - -1 - none - String - - - -1 - SCM - -1 - none - String - - - - - 576 - 416 - - Insert / update (main_dashboard.waiting_registration) 2 InsertUpdate @@ -159,60 +111,6 @@ 240 - - Select values 5 - SelectValues - - Y - - 1 - - none - - - - N - - REC_ID - REC_ID - String - -2 - -2 - - false - - - false - - - - - - - - SCM - SCM - String - -2 - -2 - - false - - - false - - - - - - - - - - 720 - 416 - - Table input 2 (person_registry) регион TableInput @@ -229,7 +127,11 @@ 0 WITH ids AS ( - SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id + SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_1}'), ','))::uuid AS recruitment_id +), + r_ids AS (SELECT id as recruit_id, gender, birth_date,target_recruitment_id from public.recruits + where (target_recruitment_id IS NULL OR target_recruitment_id = (SELECT recruitment_id FROM ids)) + AND current_recruitment_id is null ), last_status as (select recruit_id, max(rh.date_time) filter (where rh.status in ('1', '12.7', '8.2', '8.3')) max_date_time @@ -249,7 +151,7 @@ notregistered as ( ), vse AS ( SELECT - r.id AS r_id, + r.recruit_id AS r_id, ri.recruit_id AS recruit_id, coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id, r.gender, @@ -260,7 +162,7 @@ vse AS ( EXISTS ( SELECT 1 FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd - WHERE uchet_pnd->>'dataSnyatUchet' <= current_date::text + WHERE uchet_pnd->>'dataSnyatUchet' &lt;= current_date::text ) ELSE false @@ -270,16 +172,12 @@ vse AS ( ELSE true END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет ri.info - FROM public.recruits AS r + FROM r_ids r JOIN public.recruits_info AS ri - ON ri.recruit_id = r.id - JOIN public.recruits_history rh on rh.recruit_id=r.id - LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id - WHERE - r.id in (SELECT recruit_id FROM notregistered) and - rh.id in (SELECT recruit_history_id FROM notregistered) and - coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids) - --AND r.current_recruitment_id is null + ON ri.recruit_id = r.recruit_id + JOIN public.recruits_history rh on rh.recruit_id=r.recruit_id + LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.recruit_id + WHERE coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid = (SELECT recruitment_id FROM ids) ), extracted_children AS ( SELECT @@ -301,7 +199,7 @@ children_count AS ( recruit_id, COUNT(*) AS children_under_16 FROM children_birth_dates - WHERE AGE(make_date(year, month, day)) < interval '16 years' + WHERE AGE(make_date(year, month, day)) &lt; interval '16 years' GROUP BY recruit_id ), recruit_data AS ( @@ -313,7 +211,7 @@ recruit_data AS ( COUNT(distinct ri.recruit_id) FILTER ( WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет - AND COALESCE(cc.children_under_16, 0) < 5 + AND COALESCE(cc.children_under_16, 0) &lt; 5 ) AS mobilization_criterion, -- критерии от 03.06.2025 COUNT(distinct ri.recruit_id) FILTER ( diff --git a/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr2(m_c).hpl b/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr2(m_c).hpl new file mode 100644 index 0000000..27cdecc --- /dev/null +++ b/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr2(m_c).hpl @@ -0,0 +1,267 @@ + + + + main_dashboard.waiting_registration_pr2(m_c) + Y + + + + Normal + 0 + + + N + 1000 + 100 + - + 2024/08/02 11:56:22.507 + - + 2024/08/02 11:56:22.507 + + + + + + Table input 2 (person_registry) регион + Insert / update (main_dashboard.waiting_registration) 2 + Y + + + + Insert / update (main_dashboard.waiting_registration) 2 + InsertUpdate + + Y + + 1 + + none + + + 100 + ervu-dashboard + + + = + recruitment_id + recruitment_id + + + = + recording_date + recording_date + + main_dashboard + waiting_registration
+ + waiting_registration + waiting_count + Y + + + "waiting_registration_M" + male_count + Y + + + "waiting_registration_W" + female_count + Y + + + mobilization_criterion + mobilization_criterion + Y + + + volunteer_criterion + volunteer_criterion + Y + + + contract_criterion + contract_criterion + Y + + + mobilization_criterion_percent + mobilization_criterion_percent + Y + + + volunteer_criterion_percent + volunteer_criterion_percent + Y + + + contract_criterion_percent + contract_criterion_percent + Y + + + recruitment_id + recruitment_id + N + +
+ N + + + 1024 + 240 + +
+ + Table input 2 (person_registry) регион + TableInput + + Y + + 1 + + none + + + ervu_person_registry + N + 0 + WITH +ids AS ( + SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_2}'), ','))::uuid AS recruitment_id +), + r_ids AS (SELECT id as recruit_id, gender, birth_date,target_recruitment_id from public.recruits + where (target_recruitment_id IS NULL OR target_recruitment_id = (SELECT recruitment_id FROM ids)) + AND current_recruitment_id is null +), +last_status as (select recruit_id, + max(rh.date_time) filter (where rh.status in ('1', '12.7', '8.2', '8.3')) max_date_time + from recruits_history rh + join recruits r on r.id = rh.recruit_id + where rh.status in ('1', '12.7', '8.2', '8.3') + and r.current_recruitment_id is null + group by rh.recruit_id), +notregistered as ( + select + distinct rh.recruit_id, + rh.id as recruit_history_id + from recruits_history rh + join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time + where rh.status in ('1', '12.7', '8.2', '8.3') +--and rh.source is not null +), +vse AS ( + SELECT + r.recruit_id AS r_id, + ri.recruit_id AS recruit_id, + coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id, + r.gender, + r.birth_date, + -- r.conscription, + CASE + WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd + WHERE uchet_pnd->>'dataSnyatUchet' &lt;= current_date::text + ) + ELSE + false + END AS uchet_pnd, + CASE + WHEN ddd.hidden IS false THEN ddd.hidden + ELSE true + END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет + ri.info + FROM r_ids r + JOIN public.recruits_info AS ri + ON ri.recruit_id = r.recruit_id + JOIN public.recruits_history rh on rh.recruit_id=r.recruit_id + LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.recruit_id + WHERE coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid = (SELECT recruitment_id FROM ids) +), +extracted_children AS ( + SELECT + ri.recruit_id, + jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child + FROM vse ri + WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array' +), +children_birth_dates AS ( + SELECT + recruit_id, + (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day, + (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month, + (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year + FROM extracted_children +), +children_count AS ( + SELECT + recruit_id, + COUNT(*) AS children_under_16 + FROM children_birth_dates + WHERE AGE(make_date(year, month, day)) &lt; interval '16 years' + GROUP BY recruit_id +), +recruit_data AS ( + SELECT + ri.r_target_recruitment_id::uuid AS recruitment_id, + COUNT(distinct ri.recruit_id) AS waiting_count, + COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count, + COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count, + COUNT(distinct ri.recruit_id) FILTER ( + WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет + OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет + AND COALESCE(cc.children_under_16, 0) &lt; 5 + ) AS mobilization_criterion, -- критерии от 03.06.2025 + + COUNT(distinct ri.recruit_id) FILTER ( + WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30 + AND gender = 'MALE' + AND hidden IS true -- нет отсрочки и нет освобождения от службы + ) AS volunteer_criterion, -- критерии от 03.06.2025 + + COUNT(distinct ri.recruit_id) FILTER ( + WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50 + AND gender = 'MALE' + AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1' + OR uchet_pnd is false) + AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ + --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1' + ) AS contract_criterion -- критерии от 03.06.2025 + FROM vse AS ri + LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id + GROUP BY ri.r_target_recruitment_id +) +SELECT + rd.recruitment_id, + current_date AS recording_date, + COALESCE(rd.waiting_count, 0) AS waiting_count, + COALESCE(rd.male_count, 0) AS male_count, + COALESCE(rd.female_count, 0) AS female_count, + COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion, + COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion, + COALESCE(rd.contract_criterion, 0) AS contract_criterion, + CASE + WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2) + ELSE 0 + END AS mobilization_criterion_percent, + CASE + WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2) + ELSE 0 + END AS volunteer_criterion_percent, + CASE + WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2) + ELSE 0 + END AS contract_criterion_percent +FROM recruit_data AS rd + Y + + + 336 + 240 + + + + + +
diff --git a/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr3(m_c).hpl b/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr3(m_c).hpl new file mode 100644 index 0000000..8b243c1 --- /dev/null +++ b/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr3(m_c).hpl @@ -0,0 +1,267 @@ + + + + main_dashboard.waiting_registration_pr3(m_c) + Y + + + + Normal + 0 + + + N + 1000 + 100 + - + 2024/08/02 11:56:22.507 + - + 2024/08/02 11:56:22.507 + + + + + + Table input 2 (person_registry) регион + Insert / update (main_dashboard.waiting_registration) 2 + Y + + + + Insert / update (main_dashboard.waiting_registration) 2 + InsertUpdate + + Y + + 1 + + none + + + 100 + ervu-dashboard + + + = + recruitment_id + recruitment_id + + + = + recording_date + recording_date + + main_dashboard + waiting_registration
+ + waiting_registration + waiting_count + Y + + + "waiting_registration_M" + male_count + Y + + + "waiting_registration_W" + female_count + Y + + + mobilization_criterion + mobilization_criterion + Y + + + volunteer_criterion + volunteer_criterion + Y + + + contract_criterion + contract_criterion + Y + + + mobilization_criterion_percent + mobilization_criterion_percent + Y + + + volunteer_criterion_percent + volunteer_criterion_percent + Y + + + contract_criterion_percent + contract_criterion_percent + Y + + + recruitment_id + recruitment_id + N + +
+ N + + + 1024 + 240 + +
+ + Table input 2 (person_registry) регион + TableInput + + Y + + 1 + + none + + + ervu_person_registry + N + 0 + WITH +ids AS ( + SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_3}'), ','))::uuid AS recruitment_id +), + r_ids AS (SELECT id as recruit_id, gender, birth_date,target_recruitment_id from public.recruits + where (target_recruitment_id IS NULL OR target_recruitment_id = (SELECT recruitment_id FROM ids)) + AND current_recruitment_id is null +), +last_status as (select recruit_id, + max(rh.date_time) filter (where rh.status in ('1', '12.7', '8.2', '8.3')) max_date_time + from recruits_history rh + join recruits r on r.id = rh.recruit_id + where rh.status in ('1', '12.7', '8.2', '8.3') + and r.current_recruitment_id is null + group by rh.recruit_id), +notregistered as ( + select + distinct rh.recruit_id, + rh.id as recruit_history_id + from recruits_history rh + join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time + where rh.status in ('1', '12.7', '8.2', '8.3') +--and rh.source is not null +), +vse AS ( + SELECT + r.recruit_id AS r_id, + ri.recruit_id AS recruit_id, + coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id, + r.gender, + r.birth_date, + -- r.conscription, + CASE + WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd + WHERE uchet_pnd->>'dataSnyatUchet' &lt;= current_date::text + ) + ELSE + false + END AS uchet_pnd, + CASE + WHEN ddd.hidden IS false THEN ddd.hidden + ELSE true + END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет + ri.info + FROM r_ids r + JOIN public.recruits_info AS ri + ON ri.recruit_id = r.recruit_id + JOIN public.recruits_history rh on rh.recruit_id=r.recruit_id + LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.recruit_id + WHERE coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid = (SELECT recruitment_id FROM ids) +), +extracted_children AS ( + SELECT + ri.recruit_id, + jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child + FROM vse ri + WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array' +), +children_birth_dates AS ( + SELECT + recruit_id, + (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day, + (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month, + (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year + FROM extracted_children +), +children_count AS ( + SELECT + recruit_id, + COUNT(*) AS children_under_16 + FROM children_birth_dates + WHERE AGE(make_date(year, month, day)) &lt; interval '16 years' + GROUP BY recruit_id +), +recruit_data AS ( + SELECT + ri.r_target_recruitment_id::uuid AS recruitment_id, + COUNT(distinct ri.recruit_id) AS waiting_count, + COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count, + COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count, + COUNT(distinct ri.recruit_id) FILTER ( + WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет + OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет + AND COALESCE(cc.children_under_16, 0) &lt; 5 + ) AS mobilization_criterion, -- критерии от 03.06.2025 + + COUNT(distinct ri.recruit_id) FILTER ( + WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30 + AND gender = 'MALE' + AND hidden IS true -- нет отсрочки и нет освобождения от службы + ) AS volunteer_criterion, -- критерии от 03.06.2025 + + COUNT(distinct ri.recruit_id) FILTER ( + WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50 + AND gender = 'MALE' + AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1' + OR uchet_pnd is false) + AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ + --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1' + ) AS contract_criterion -- критерии от 03.06.2025 + FROM vse AS ri + LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id + GROUP BY ri.r_target_recruitment_id +) +SELECT + rd.recruitment_id, + current_date AS recording_date, + COALESCE(rd.waiting_count, 0) AS waiting_count, + COALESCE(rd.male_count, 0) AS male_count, + COALESCE(rd.female_count, 0) AS female_count, + COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion, + COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion, + COALESCE(rd.contract_criterion, 0) AS contract_criterion, + CASE + WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2) + ELSE 0 + END AS mobilization_criterion_percent, + CASE + WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2) + ELSE 0 + END AS volunteer_criterion_percent, + CASE + WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2) + ELSE 0 + END AS contract_criterion_percent +FROM recruit_data AS rd + Y + + + 336 + 240 + + + + + +
diff --git a/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr4(m_c).hpl b/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr4(m_c).hpl new file mode 100644 index 0000000..fc8ee34 --- /dev/null +++ b/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr4(m_c).hpl @@ -0,0 +1,267 @@ + + + + main_dashboard.waiting_registration_pr4(m_c) + Y + + + + Normal + 0 + + + N + 1000 + 100 + - + 2024/08/02 11:56:22.507 + - + 2024/08/02 11:56:22.507 + + + + + + Table input 2 (person_registry) регион + Insert / update (main_dashboard.waiting_registration) 2 + Y + + + + Insert / update (main_dashboard.waiting_registration) 2 + InsertUpdate + + Y + + 1 + + none + + + 100 + ervu-dashboard + + + = + recruitment_id + recruitment_id + + + = + recording_date + recording_date + + main_dashboard + waiting_registration
+ + waiting_registration + waiting_count + Y + + + "waiting_registration_M" + male_count + Y + + + "waiting_registration_W" + female_count + Y + + + mobilization_criterion + mobilization_criterion + Y + + + volunteer_criterion + volunteer_criterion + Y + + + contract_criterion + contract_criterion + Y + + + mobilization_criterion_percent + mobilization_criterion_percent + Y + + + volunteer_criterion_percent + volunteer_criterion_percent + Y + + + contract_criterion_percent + contract_criterion_percent + Y + + + recruitment_id + recruitment_id + N + +
+ N + + + 1024 + 240 + +
+ + Table input 2 (person_registry) регион + TableInput + + Y + + 1 + + none + + + ervu_person_registry + N + 0 + WITH +ids AS ( + SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_4}'), ','))::uuid AS recruitment_id +), + r_ids AS (SELECT id as recruit_id, gender, birth_date,target_recruitment_id from public.recruits + where (target_recruitment_id IS NULL OR target_recruitment_id = (SELECT recruitment_id FROM ids)) + AND current_recruitment_id is null +), +last_status as (select recruit_id, + max(rh.date_time) filter (where rh.status in ('1', '12.7', '8.2', '8.3')) max_date_time + from recruits_history rh + join recruits r on r.id = rh.recruit_id + where rh.status in ('1', '12.7', '8.2', '8.3') + and r.current_recruitment_id is null + group by rh.recruit_id), +notregistered as ( + select + distinct rh.recruit_id, + rh.id as recruit_history_id + from recruits_history rh + join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time + where rh.status in ('1', '12.7', '8.2', '8.3') +--and rh.source is not null +), +vse AS ( + SELECT + r.recruit_id AS r_id, + ri.recruit_id AS recruit_id, + coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id, + r.gender, + r.birth_date, + -- r.conscription, + CASE + WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd + WHERE uchet_pnd->>'dataSnyatUchet' &lt;= current_date::text + ) + ELSE + false + END AS uchet_pnd, + CASE + WHEN ddd.hidden IS false THEN ddd.hidden + ELSE true + END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет + ri.info + FROM r_ids r + JOIN public.recruits_info AS ri + ON ri.recruit_id = r.recruit_id + JOIN public.recruits_history rh on rh.recruit_id=r.recruit_id + LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.recruit_id + WHERE coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid = (SELECT recruitment_id FROM ids) +), +extracted_children AS ( + SELECT + ri.recruit_id, + jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child + FROM vse ri + WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array' +), +children_birth_dates AS ( + SELECT + recruit_id, + (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day, + (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month, + (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year + FROM extracted_children +), +children_count AS ( + SELECT + recruit_id, + COUNT(*) AS children_under_16 + FROM children_birth_dates + WHERE AGE(make_date(year, month, day)) &lt; interval '16 years' + GROUP BY recruit_id +), +recruit_data AS ( + SELECT + ri.r_target_recruitment_id::uuid AS recruitment_id, + COUNT(distinct ri.recruit_id) AS waiting_count, + COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count, + COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count, + COUNT(distinct ri.recruit_id) FILTER ( + WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет + OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет + AND COALESCE(cc.children_under_16, 0) &lt; 5 + ) AS mobilization_criterion, -- критерии от 03.06.2025 + + COUNT(distinct ri.recruit_id) FILTER ( + WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30 + AND gender = 'MALE' + AND hidden IS true -- нет отсрочки и нет освобождения от службы + ) AS volunteer_criterion, -- критерии от 03.06.2025 + + COUNT(distinct ri.recruit_id) FILTER ( + WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50 + AND gender = 'MALE' + AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1' + OR uchet_pnd is false) + AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ + --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1' + ) AS contract_criterion -- критерии от 03.06.2025 + FROM vse AS ri + LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id + GROUP BY ri.r_target_recruitment_id +) +SELECT + rd.recruitment_id, + current_date AS recording_date, + COALESCE(rd.waiting_count, 0) AS waiting_count, + COALESCE(rd.male_count, 0) AS male_count, + COALESCE(rd.female_count, 0) AS female_count, + COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion, + COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion, + COALESCE(rd.contract_criterion, 0) AS contract_criterion, + CASE + WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2) + ELSE 0 + END AS mobilization_criterion_percent, + CASE + WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2) + ELSE 0 + END AS volunteer_criterion_percent, + CASE + WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2) + ELSE 0 + END AS contract_criterion_percent +FROM recruit_data AS rd + Y + + + 336 + 240 + + + + + +
diff --git a/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr5(m_c).hpl b/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr5(m_c).hpl new file mode 100644 index 0000000..6d904af --- /dev/null +++ b/v1_apache-hop dash mapping/mil_com/main_dashboard.waiting_registration(m_c)/main_dashboard.waiting_registration_pr5(m_c).hpl @@ -0,0 +1,267 @@ + + + + main_dashboard.waiting_registration_pr5(m_c) + Y + + + + Normal + 0 + + + N + 1000 + 100 + - + 2024/08/02 11:56:22.507 + - + 2024/08/02 11:56:22.507 + + + + + + Table input 2 (person_registry) регион + Insert / update (main_dashboard.waiting_registration) 2 + Y + + + + Insert / update (main_dashboard.waiting_registration) 2 + InsertUpdate + + Y + + 1 + + none + + + 100 + ervu-dashboard + + + = + recruitment_id + recruitment_id + + + = + recording_date + recording_date + + main_dashboard + waiting_registration
+ + waiting_registration + waiting_count + Y + + + "waiting_registration_M" + male_count + Y + + + "waiting_registration_W" + female_count + Y + + + mobilization_criterion + mobilization_criterion + Y + + + volunteer_criterion + volunteer_criterion + Y + + + contract_criterion + contract_criterion + Y + + + mobilization_criterion_percent + mobilization_criterion_percent + Y + + + volunteer_criterion_percent + volunteer_criterion_percent + Y + + + contract_criterion_percent + contract_criterion_percent + Y + + + recruitment_id + recruitment_id + N + +
+ N + + + 1024 + 240 + +
+ + Table input 2 (person_registry) регион + TableInput + + Y + + 1 + + none + + + ervu_person_registry + N + 0 + WITH +ids AS ( + SELECT unnest(string_to_array(trim(both '{}' from '${ARR_PR_5}'), ','))::uuid AS recruitment_id +), + r_ids AS (SELECT id as recruit_id, gender, birth_date,target_recruitment_id from public.recruits + where (target_recruitment_id IS NULL OR target_recruitment_id = (SELECT recruitment_id FROM ids)) + AND current_recruitment_id is null +), +last_status as (select recruit_id, + max(rh.date_time) filter (where rh.status in ('1', '12.7', '8.2', '8.3')) max_date_time + from recruits_history rh + join recruits r on r.id = rh.recruit_id + where rh.status in ('1', '12.7', '8.2', '8.3') + and r.current_recruitment_id is null + group by rh.recruit_id), +notregistered as ( + select + distinct rh.recruit_id, + rh.id as recruit_history_id + from recruits_history rh + join last_status ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time + where rh.status in ('1', '12.7', '8.2', '8.3') +--and rh.source is not null +), +vse AS ( + SELECT + r.recruit_id AS r_id, + ri.recruit_id AS recruit_id, + coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS r_target_recruitment_id, + r.gender, + r.birth_date, + -- r.conscription, + CASE + WHEN jsonb_typeof(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') = 'array' THEN + EXISTS ( + SELECT 1 + FROM jsonb_array_elements(ri.info->'svedFL'->'svedPND'->'svedUchetDisp'->'svedUchet') AS uchet_pnd + WHERE uchet_pnd->>'dataSnyatUchet' &lt;= current_date::text + ) + ELSE + false + END AS uchet_pnd, + CASE + WHEN ddd.hidden IS false THEN ddd.hidden + ELSE true + END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет + ri.info + FROM r_ids r + JOIN public.recruits_info AS ri + ON ri.recruit_id = r.recruit_id + JOIN public.recruits_history rh on rh.recruit_id=r.recruit_id + LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.recruit_id + WHERE coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid = (SELECT recruitment_id FROM ids) +), +extracted_children AS ( + SELECT + ri.recruit_id, + jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child + FROM vse ri + WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array' +), +children_birth_dates AS ( + SELECT + recruit_id, + (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day, + (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month, + (child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year + FROM extracted_children +), +children_count AS ( + SELECT + recruit_id, + COUNT(*) AS children_under_16 + FROM children_birth_dates + WHERE AGE(make_date(year, month, day)) &lt; interval '16 years' + GROUP BY recruit_id +), +recruit_data AS ( + SELECT + ri.r_target_recruitment_id::uuid AS recruitment_id, + COUNT(distinct ri.recruit_id) AS waiting_count, + COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count, + COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count, + COUNT(distinct ri.recruit_id) FILTER ( + WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет + OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет + AND COALESCE(cc.children_under_16, 0) &lt; 5 + ) AS mobilization_criterion, -- критерии от 03.06.2025 + + COUNT(distinct ri.recruit_id) FILTER ( + WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30 + AND gender = 'MALE' + AND hidden IS true -- нет отсрочки и нет освобождения от службы + ) AS volunteer_criterion, -- критерии от 03.06.2025 + + COUNT(distinct ri.recruit_id) FILTER ( + WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50 + AND gender = 'MALE' + AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1' + OR uchet_pnd is false) + AND ri.info->'svedFL'->'svedUchetVICH'->>'prOtsSvedUchetVICH' = '1' -- признак отсутствия сведений о заболевании ВИЧ + --AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1' + ) AS contract_criterion -- критерии от 03.06.2025 + FROM vse AS ri + LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id + GROUP BY ri.r_target_recruitment_id +) +SELECT + rd.recruitment_id, + current_date AS recording_date, + COALESCE(rd.waiting_count, 0) AS waiting_count, + COALESCE(rd.male_count, 0) AS male_count, + COALESCE(rd.female_count, 0) AS female_count, + COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion, + COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion, + COALESCE(rd.contract_criterion, 0) AS contract_criterion, + CASE + WHEN rd.waiting_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.waiting_count * 100, 2) + ELSE 0 + END AS mobilization_criterion_percent, + CASE + WHEN rd.waiting_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.waiting_count * 100, 2) + ELSE 0 + END AS volunteer_criterion_percent, + CASE + WHEN rd.waiting_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.waiting_count * 100, 2) + ELSE 0 + END AS contract_criterion_percent +FROM recruit_data AS rd + Y + + + 336 + 240 + + + + + +
diff --git a/v1_apache-hop dash mapping/mil_com/parameters/array_recruitment_for_parallel.hpl b/v1_apache-hop dash mapping/mil_com/parameters/array_recruitment_for_parallel.hpl new file mode 100644 index 0000000..396b2c5 --- /dev/null +++ b/v1_apache-hop dash mapping/mil_com/parameters/array_recruitment_for_parallel.hpl @@ -0,0 +1,113 @@ + + + + array_recruitment_for_parallel + Y + + + + Normal + + + N + 1000 + 100 + - + 2025/03/31 10:14:04.435 + - + 2025/03/31 10:14:04.435 + + + + + + Table input + Copy rows to result + Y + + + + Copy rows to result + RowsToResult + + Y + + 1 + + none + + + + + 1040 + 384 + + + + Table input + TableInput + + Y + + 1 + + none + + + ervu-dashboard + N + 0 + WITH ids AS ( + SELECT idm_id, + NTILE(5) OVER (ORDER BY idm_id) AS part -- Разбиваем на 5 частей + FROM ervu_dashboard.recruitment + WHERE schema IN ('Department', 'Organization', 'Region') +), +grouped AS ( + SELECT + array_agg(idm_id) FILTER (WHERE part = 1) AS part_1, + array_agg(idm_id) FILTER (WHERE part = 2) AS part_2, + array_agg(idm_id) FILTER (WHERE part = 3) AS part_3, + array_agg(idm_id) FILTER (WHERE part = 4) AS part_4, + array_agg(idm_id) FILTER (WHERE part = 5) AS part_5 + FROM ids +), +split_parts AS ( + SELECT + gs.row_num, + (SELECT array_agg(val) FROM unnest(part_1) WITH ORDINALITY AS t(val, ord) + WHERE ord > array_length(part_1, 1) * (gs.row_num - 1) / 2 + AND ord <= array_length(part_1, 1) * gs.row_num / 2) AS PART_RECRUITMENT_1, + (SELECT array_agg(val) FROM unnest(part_2) WITH ORDINALITY AS t(val, ord) + WHERE ord > array_length(part_2, 1) * (gs.row_num - 1) / 2 + AND ord <= array_length(part_2, 1) * gs.row_num / 2) AS PART_RECRUITMENT_2, + (SELECT array_agg(val) FROM unnest(part_3) WITH ORDINALITY AS t(val, ord) + WHERE ord > array_length(part_3, 1) * (gs.row_num - 1) / 2 + AND ord <= array_length(part_3, 1) * gs.row_num / 2) AS PART_RECRUITMENT_3, + (SELECT array_agg(val) FROM unnest(part_4) WITH ORDINALITY AS t(val, ord) + WHERE ord > array_length(part_4, 1) * (gs.row_num - 1) / 2 + AND ord <= array_length(part_4, 1) * gs.row_num / 2) AS PART_RECRUITMENT_4, + (SELECT array_agg(val) FROM unnest(part_5) WITH ORDINALITY AS t(val, ord) + WHERE ord > array_length(part_5, 1) * (gs.row_num - 1) / 2 + AND ord <= array_length(part_5, 1) * gs.row_num / 2) AS PART_RECRUITMENT_5 + FROM grouped + CROSS JOIN generate_series(1, 2) gs(row_num) +) +SELECT +PART_RECRUITMENT_1, +PART_RECRUITMENT_2, +PART_RECRUITMENT_3, +PART_RECRUITMENT_4, +PART_RECRUITMENT_5 +FROM split_parts; + N + + + 672 + 384 + + + + + +