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
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
+
+
+
+
+ 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
@@ -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
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
@@ -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
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