drivers_licence fix

This commit is contained in:
adel.ka 2025-11-10 14:50:22 +03:00
parent 2e28e88dae
commit f51a4d9ec8
4 changed files with 1141 additions and 774 deletions

View file

@ -116,7 +116,7 @@
<set_logfile>N</set_logfile> <set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished> <wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel> <parallel>N</parallel>
<xloc>1072</xloc> <xloc>1040</xloc>
<yloc>608</yloc> <yloc>608</yloc>
<attributes_hac/> <attributes_hac/>
</action> </action>
@ -228,7 +228,6 @@
</field> </field>
</fields> </fields>
<file_variable_type>CURRENT_WORKFLOW</file_variable_type> <file_variable_type>CURRENT_WORKFLOW</file_variable_type>
<filename/>
<replacevars>N</replacevars> <replacevars>N</replacevars>
<parallel>N</parallel> <parallel>N</parallel>
<xloc>240</xloc> <xloc>240</xloc>

View file

@ -21,63 +21,68 @@
</notepads> </notepads>
<order> <order>
<hop> <hop>
<from>Create job execution record</from> <from>driver_lisence_job_create</from>
<to>Table input</to> <to>drivers_licence_input</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Filter rows</from>
<to>Change job status on success</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Detect empty stream</from> <from>Detect empty stream</from>
<to>Change job status on success</to> <to>driver_licence_success_job</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Change job status on error</from> <from>driver_license_failure_job</from>
<to>Abort</to> <to>Abort</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Table output</from> <from>drivers_licence_output</from>
<to>Change job status on error</to> <to>driver_license_failure_job</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Update</from> <from>update_drivers_licence_flags</from>
<to>Change job status on error</to> <to>driver_license_failure_job</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Table output</from> <from>drivers_licence_input</from>
<to>sort_by_recruit_id</to> <to>drivers_licence_output</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Update</from> <from>drivers_licence_input</from>
<to>Detect empty stream</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>drivers_licence_input</from>
<to>driver_licence_group_by_recruit_id</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>driver_licence_group_by_recruit_id</from>
<to>driver_licence_java_expression</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>driver_licence_java_expression</from>
<to>update_drivers_licence_flags</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>drivers_licence_output</from>
<to>Identify last row in a stream </to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream </from>
<to>Filter rows</to> <to>Filter rows</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>sort_by_recruit_id</from> <from>Filter rows</from>
<to>Identify last row in a stream 2</to> <to>driver_licence_success_job</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Identify last row in a stream 2</from>
<to>Update</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Table output</to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Table input</from>
<to>Detect empty stream</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
</order> </order>
@ -97,12 +102,12 @@
<row_threshold>0</row_threshold> <row_threshold>0</row_threshold>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>1456</xloc> <xloc>1632</xloc>
<yloc>496</yloc> <yloc>512</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Change job status on error</name> <name>driver_license_failure_job</name>
<type>ExecSql</type> <type>ExecSql</type>
<description/> <description/>
<distribute>Y</distribute> <distribute>Y</distribute>
@ -118,8 +123,11 @@
</argument> </argument>
</arguments> </arguments>
<connection>ervu-dashboard</connection> <connection>ervu-dashboard</connection>
<delete_field/>
<execute_each_row>Y</execute_each_row> <execute_each_row>Y</execute_each_row>
<insert_field/>
<quoteString>N</quoteString> <quoteString>N</quoteString>
<read_field/>
<replace_variables>Y</replace_variables> <replace_variables>Y</replace_variables>
<set_params>Y</set_params> <set_params>Y</set_params>
<single_statement>N</single_statement> <single_statement>N</single_statement>
@ -131,14 +139,15 @@ WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}'; and recruitment_id = '${IDM_ID}';
</sql> </sql>
<update_field/>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>1088</xloc> <xloc>1376</xloc>
<yloc>496</yloc> <yloc>512</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Change job status on success</name> <name>driver_licence_success_job</name>
<type>ExecSql</type> <type>ExecSql</type>
<description/> <description/>
<distribute>Y</distribute> <distribute>Y</distribute>
@ -151,8 +160,11 @@ and recruitment_id = '${IDM_ID}';
<arguments> <arguments>
</arguments> </arguments>
<connection>ervu-dashboard</connection> <connection>ervu-dashboard</connection>
<delete_field/>
<execute_each_row>Y</execute_each_row> <execute_each_row>Y</execute_each_row>
<insert_field/>
<quoteString>N</quoteString> <quoteString>N</quoteString>
<read_field/>
<replace_variables>Y</replace_variables> <replace_variables>Y</replace_variables>
<set_params>N</set_params> <set_params>N</set_params>
<single_statement>N</single_statement> <single_statement>N</single_statement>
@ -163,14 +175,15 @@ WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}'; and recruitment_id = '${IDM_ID}';
</sql> </sql>
<update_field/>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>1456</xloc> <xloc>816</xloc>
<yloc>176</yloc> <yloc>208</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Create job execution record</name> <name>driver_lisence_job_create</name>
<type>ExecSql</type> <type>ExecSql</type>
<description/> <description/>
<distribute>Y</distribute> <distribute>Y</distribute>
@ -183,8 +196,11 @@ and recruitment_id = '${IDM_ID}';
<arguments> <arguments>
</arguments> </arguments>
<connection>ervu-dashboard</connection> <connection>ervu-dashboard</connection>
<delete_field/>
<execute_each_row>N</execute_each_row> <execute_each_row>N</execute_each_row>
<insert_field/>
<quoteString>N</quoteString> <quoteString>N</quoteString>
<read_field/>
<replace_variables>Y</replace_variables> <replace_variables>Y</replace_variables>
<set_params>N</set_params> <set_params>N</set_params>
<single_statement>N</single_statement> <single_statement>N</single_statement>
@ -192,10 +208,11 @@ and recruitment_id = '${IDM_ID}';
VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}'); VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</sql> </sql>
<update_field/>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>288</xloc> <xloc>288</xloc>
<yloc>320</yloc> <yloc>512</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
@ -212,7 +229,7 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>560</xloc> <xloc>560</xloc>
<yloc>176</yloc> <yloc>208</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
@ -244,15 +261,15 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</value> </value>
</condition> </condition>
</compare> </compare>
<send_true_to>Change job status on success</send_true_to> <send_true_to>driver_licence_success_job</send_true_to>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>1456</xloc> <xloc>1120</xloc>
<yloc>320</yloc> <yloc>208</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Identify last row in a stream 2</name> <name>Identify last row in a stream </name>
<type>DetectLastRow</type> <type>DetectLastRow</type>
<description/> <description/>
<distribute>N</distribute> <distribute>N</distribute>
@ -265,12 +282,85 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
<resultfieldname>last_row</resultfieldname> <resultfieldname>last_row</resultfieldname>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>1104</xloc> <xloc>1120</xloc>
<yloc>320</yloc> <yloc>352</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Table input</name> <name>driver_licence_java_expression</name>
<type>Janino</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<formula>
<field_name>has_driver_license</field_name>
<formula_string>has_driver_license_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>has_tractor_license</field_name>
<formula_string>has_tractor_license_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<attributes/>
<GUI>
<xloc>848</xloc>
<yloc>752</yloc>
</GUI>
</transform>
<transform>
<name>driver_licence_group_by_recruit_id</name>
<type>GroupBy</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<add_linenr>N</add_linenr>
<all_rows>N</all_rows>
<directory>${java.io.tmpdir}</directory>
<fields>
<field>
<aggregate>has_driver_license_raw</aggregate>
<subject>is_has_driver_license</subject>
<type>MAX</type>
</field>
<field>
<aggregate>has_tractor_license_raw</aggregate>
<subject>is_has_tractor_license</subject>
<type>MAX</type>
</field>
</fields>
<give_back_row>N</give_back_row>
<group>
<field>
<name>recruit_id</name>
</field>
</group>
<ignore_aggregate>N</ignore_aggregate>
<prefix>grp</prefix>
<attributes/>
<GUI>
<xloc>560</xloc>
<yloc>752</yloc>
</GUI>
</transform>
<transform>
<name>drivers_licence_input</name>
<type>TableInput</type> <type>TableInput</type>
<description/> <description/>
<distribute>N</distribute> <distribute>N</distribute>
@ -282,93 +372,105 @@ VALUES (DEFAULT, '${JOB_NAME}', 'PROCESSING', DEFAULT, null, '${IDM_ID}');
</partitioning> </partitioning>
<connection>ervu-dashboard</connection> <connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row> <execute_each_row>N</execute_each_row>
<limit/>
<sql>WITH <sql>WITH
base AS ( base AS (
SELECT SELECT
ri.recruit_id recruit_id, ri.recruit_id,
ri.info ri.info
FROM ervu_dashboard.recruits_info ri FROM ervu_dashboard.recruits_info ri
JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id AND '${IDM_ID}' != '' -- Проверка на пустую строку JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id
AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}' WHERE ('${IDM_ID}' != '' AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}')
WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' AND (
OR ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'
OR ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL 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, all_data AS (
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 - недействителен SELECT
ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'serNomDok' AS licence_series, -- серия и номер ri.recruit_id,
NULL AS licence_number, -- ?серия и номер в одном поле? (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->> 'id') as source_id,
array_to_string(array( to_date((ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataSved'), 'YYYY-MM-DD') AS source_update_date,
SELECT kat->>'naimKatTS' (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'kodStatus') AS status,
FROM jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS kat (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'serNomDok') AS licence_series,
WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'), ',') AS categories,-- категории водительских удостоверений NULL AS licence_number,
to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataVydDok', 'YYYY-MM-DD') AS start_date,-- дата выдачи array_to_string(array(
to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'srokDeistvDok', 'YYYY-MM-DD') AS close_date,-- срок действия SELECT kat->>'naimKatTS'
NULL AS replacement_date, FROM jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS kat
NULL AS return_date, ), ',') AS categories,
false AS tractor_driver to_date((ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataVydDok'), 'YYYY-MM-DD') AS start_date,
FROM base ri to_date((ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'srokDeistvDok'), 'YYYY-MM-DD') AS close_date,
WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' 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, SELECT
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataSved', 'YYYY-MM-DD') AS source_update_date, ri.recruit_id,
'1' AS status, -- статус удостоверения тракториста // ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'kodStatusUTM' (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->> 'id') as source_id,
ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'serUTM' AS licence_series, -- серия удостоверения тракториста to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataSved'), 'YYYY-MM-DD') AS source_update_date,
ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'nomUTM' AS licence_number, -- номер удостоверения тракториста '1' AS status,
(SELECT array_to_string(ARRAY(SELECT jsonb_array_elements_text( (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'serUTM') AS licence_series,
ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->'extend'->'kodKatUTM')), ',')) AS categories, -- категории удостоверений тракториста (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'nomUTM') AS licence_number,
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVydUTM', 'YYYY-MM-DD') AS start_date, -- дата выдачи (SELECT array_to_string(ARRAY(
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') AS close_date, -- дата окончания действия SELECT jsonb_array_elements_text(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->'extend'->'kodKatUTM')
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataZameny', 'YYYY-MM-DD') AS replacement_date, -- дата замены ), ',')) AS categories,
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'-&gt;&gt;'dataVozvr', 'YYYY-MM-DD') AS return_date, -- дата возврата to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVydUTM'), 'YYYY-MM-DD') AS start_date,
true AS tractor_driver to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM'), 'YYYY-MM-DD') AS close_date,
FROM base ri to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataZameny'), 'YYYY-MM-DD') AS replacement_date,
WHERE ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL 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, SELECT
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataSved', 'YYYY-MM-DD') AS source_update_date, ri.recruit_id,
'0' AS status, -- статус удостоверения тракториста // ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'kodStatusUTM' (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->> 'id') as source_id,
ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'serUTM' AS licence_series, -- серия удостоверения тракториста to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataSved'), 'YYYY-MM-DD') AS source_update_date,
ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'nomUTM' AS licence_number, -- номер удостоверения тракториста '0' AS status,
(SELECT array_to_string(ARRAY(SELECT jsonb_array_elements_text( (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'serUTM') AS licence_series,
ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->'extend'->'kodKatUTM')), ',')) AS categories, -- категории удостоверений тракториста (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'nomUTM') AS licence_number,
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVydUTM', 'YYYY-MM-DD') AS start_date, -- дата выдачи (SELECT array_to_string(ARRAY(
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') AS close_date, -- дата окончания действия SELECT jsonb_array_elements_text(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->'extend'->'kodKatUTM')
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataZameny', 'YYYY-MM-DD') AS replacement_date, -- дата замены ), ',')) AS categories,
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVozvr', 'YYYY-MM-DD') AS return_date, -- дата возврата to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVydUTM'), 'YYYY-MM-DD') AS start_date,
true AS tractor_driver to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataOkonchUTM'), 'YYYY-MM-DD') AS close_date,
FROM base ri to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataZameny'), 'YYYY-MM-DD') AS replacement_date,
WHERE ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL 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 SELECT
*, *,
CASE CASE
WHEN tractor_driver is false and status = '1' THEN true WHEN tractor_driver = false AND status = '1' THEN 1
ELSE false ELSE 0
END AS has_driver_license, -- tractor_license // имеет удостоверение тракториста в citizen END AS is_has_driver_license,
CASE CASE
WHEN tractor_driver is true and status = '1' THEN true WHEN tractor_driver = true AND status = '1' THEN 1
ELSE false ELSE 0
END AS tractor_license -- has_driver_license // признак наличия водительского удостоверения END AS is_has_tractor_license
FROM all_data</sql> FROM all_data
ORDER BY recruit_id </sql>
<variables_active>Y</variables_active> <variables_active>Y</variables_active>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>560</xloc> <xloc>560</xloc>
<yloc>320</yloc> <yloc>512</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Table output</name> <name>drivers_licence_output</name>
<type>TableOutput</type> <type>TableOutput</type>
<description/> <description/>
<distribute>Y</distribute> <distribute>Y</distribute>
@ -425,6 +527,10 @@ FROM all_data</sql>
<column_name>source_update_date</column_name> <column_name>source_update_date</column_name>
<stream_name>source_update_date</stream_name> <stream_name>source_update_date</stream_name>
</field> </field>
<field>
<column_name>source_id</column_name>
<stream_name>source_id</stream_name>
</field>
</fields> </fields>
<ignore_errors>N</ignore_errors> <ignore_errors>N</ignore_errors>
<only_when_have_rows>N</only_when_have_rows> <only_when_have_rows>N</only_when_have_rows>
@ -441,12 +547,12 @@ FROM all_data</sql>
<use_batch>Y</use_batch> <use_batch>Y</use_batch>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>736</xloc> <xloc>1120</xloc>
<yloc>320</yloc> <yloc>512</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Update</name> <name>update_drivers_licence_flags</name>
<type>Update</type> <type>Update</type>
<description/> <description/>
<distribute>Y</distribute> <distribute>Y</distribute>
@ -469,7 +575,7 @@ FROM all_data</sql>
<table>citizen</table> <table>citizen</table>
<value> <value>
<name>tractor_license</name> <name>tractor_license</name>
<rename>tractor_license</rename> <rename>has_tractor_license</rename>
</value> </value>
<value> <value>
<name>has_driver_license</name> <name>has_driver_license</name>
@ -480,48 +586,14 @@ FROM all_data</sql>
<use_batch>Y</use_batch> <use_batch>Y</use_batch>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>1328</xloc> <xloc>1376</xloc>
<yloc>320</yloc> <yloc>752</yloc>
</GUI>
</transform>
<transform>
<name>sort_by_recruit_id</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>srt</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruit_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>912</xloc>
<yloc>320</yloc>
</GUI> </GUI>
</transform> </transform>
<transform_error_handling> <transform_error_handling>
<error> <error>
<source_transform>Table output</source_transform> <source_transform>drivers_licence_output</source_transform>
<target_transform>Change job status on error</target_transform> <target_transform>driver_license_failure_job</target_transform>
<is_enabled>Y</is_enabled> <is_enabled>Y</is_enabled>
<nr_valuename/> <nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename> <descriptions_valuename>error_description</descriptions_valuename>
@ -532,8 +604,8 @@ FROM all_data</sql>
<min_pct_rows/> <min_pct_rows/>
</error> </error>
<error> <error>
<source_transform>Update</source_transform> <source_transform>update_drivers_licence_flags</source_transform>
<target_transform>Change job status on error</target_transform> <target_transform>driver_license_failure_job</target_transform>
<is_enabled>Y</is_enabled> <is_enabled>Y</is_enabled>
<nr_valuename/> <nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename> <descriptions_valuename>error_description</descriptions_valuename>

View file

@ -22,68 +22,73 @@
</notepads> </notepads>
<order> <order>
<hop> <hop>
<from>Create job execution record</from> <from>driver_license_failure_job</from>
<to>Table input</to> <to>Abort 2</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Filter rows</from> <from>driver_lisence_job_create</from>
<to>Change job status on success</to> <to>drivers_licence_input</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Detect empty stream</from> <from>Detect empty stream 2</from>
<to>Change job status on success</to> <to>driver_licence_success_job</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Change job status on error</from> <from>Filter rows 2</from>
<to>Abort</to> <to>driver_licence_success_job</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Insert / update</from> <from>Identify last row in a stream </from>
<to>Change job status on error</to> <to>Filter rows 2</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Update</from> <from>driver_licence_java_expression</from>
<to>Change job status on error</to> <to>update_drivers_licence_flags</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Table input</from> <from>driver_licence_group_by_recruit_id</from>
<to>Insert / update</to> <to>driver_licence_java_expression</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Table input</from> <from>drivers_licence_input</from>
<to>Detect empty stream</to> <to>Detect empty stream 2</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Insert / update</from> <from>drivers_licence_input</from>
<to>sort_by_recruit_id</to> <to>driver_licence_group_by_recruit_id</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Update</from> <from>update_drivers_licence_flags</from>
<to>Filter rows</to> <to>driver_license_failure_job</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>sort_by_recruit_id</from> <from>drivers_licence_input</from>
<to>Identify last row in a stream 2</to> <to>Insert / update 2</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop> <hop>
<from>Identify last row in a stream 2</from> <from>Insert / update 2</from>
<to>Update</to> <to>Identify last row in a stream </to>
<enabled>Y</enabled>
</hop>
<hop>
<from>Insert / update 2</from>
<to>driver_license_failure_job</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
</order> </order>
<transform> <transform>
<name>Abort</name> <name>Abort 2</name>
<type>Abort</type> <type>Abort</type>
<description/> <description/>
<distribute>Y</distribute> <distribute>Y</distribute>
@ -98,127 +103,12 @@
<row_threshold>0</row_threshold> <row_threshold>0</row_threshold>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>1328</xloc> <xloc>1712</xloc>
<yloc>384</yloc> <yloc>784</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Change job status on error</name> <name>Detect empty stream 2</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
<argument>
<name>error_description</name>
</argument>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>Y</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>Y</set_params>
<single_statement>N</single_statement>
<sql>UPDATE etl.job_execution
SET status = 'ERROR',
error_description = ?,
execution_end_datetime = current_timestamp
WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1232</xloc>
<yloc>384</yloc>
</GUI>
</transform>
<transform>
<name>Change job status on success</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>Y</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>N</set_params>
<single_statement>N</single_statement>
<sql>UPDATE etl.job_execution
SET status = 'SUCCESS',
execution_end_datetime = current_timestamp
WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1440</xloc>
<yloc>64</yloc>
</GUI>
</transform>
<transform>
<name>Create job execution record</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>N</set_params>
<single_statement>N</single_statement>
<sql>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
</sql>
<attributes/>
<GUI>
<xloc>272</xloc>
<yloc>208</yloc>
</GUI>
</transform>
<transform>
<name>Detect empty stream</name>
<type>DetectEmptyStream</type> <type>DetectEmptyStream</type>
<description/> <description/>
<distribute>Y</distribute> <distribute>Y</distribute>
@ -230,12 +120,12 @@ DO UPDATE SET
</partitioning> </partitioning>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>480</xloc> <xloc>640</xloc>
<yloc>64</yloc> <yloc>480</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Filter rows</name> <name>Filter rows 2</name>
<type>FilterRows</type> <type>FilterRows</type>
<description/> <description/>
<distribute>Y</distribute> <distribute>Y</distribute>
@ -263,15 +153,15 @@ DO UPDATE SET
</value> </value>
</condition> </condition>
</compare> </compare>
<send_true_to>Change job status on success</send_true_to> <send_true_to>driver_licence_success_job</send_true_to>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>1440</xloc> <xloc>1200</xloc>
<yloc>208</yloc> <yloc>480</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Identify last row in a stream 2</name> <name>Identify last row in a stream </name>
<type>DetectLastRow</type> <type>DetectLastRow</type>
<description/> <description/>
<distribute>N</distribute> <distribute>N</distribute>
@ -284,15 +174,15 @@ DO UPDATE SET
<resultfieldname>last_row</resultfieldname> <resultfieldname>last_row</resultfieldname>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>1056</xloc> <xloc>1200</xloc>
<yloc>208</yloc> <yloc>624</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Insert / update</name> <name>Insert / update 2</name>
<type>InsertUpdate</type> <type>InsertUpdate</type>
<description/> <description/>
<distribute>Y</distribute> <distribute>N</distribute>
<custom_distribution/> <custom_distribution/>
<copies>1</copies> <copies>1</copies>
<partitioning> <partitioning>
@ -304,15 +194,8 @@ DO UPDATE SET
<lookup> <lookup>
<key> <key>
<condition>=</condition> <condition>=</condition>
<field>recruit_id</field> <field>source_id</field>
<name>recruit_id</name> <name>source_id</name>
<name2/>
</key>
<key>
<condition>=</condition>
<field>tractor_driver</field>
<name>tractor_driver</name>
<name2/>
</key> </key>
<schema>ervu_dashboard</schema> <schema>ervu_dashboard</schema>
<table>drivers_licence</table> <table>drivers_licence</table>
@ -371,16 +254,212 @@ DO UPDATE SET
<rename>source_update_date</rename> <rename>source_update_date</rename>
<update>Y</update> <update>Y</update>
</value> </value>
<value>
<name>source_id</name>
<rename>source_id</rename>
<update>N</update>
</value>
</lookup> </lookup>
<update_bypassed>Y</update_bypassed> <update_bypassed>Y</update_bypassed>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>672</xloc> <xloc>1200</xloc>
<yloc>208</yloc> <yloc>784</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Table input</name> <name>driver_licence_group_by_recruit_id</name>
<type>GroupBy</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<add_linenr>N</add_linenr>
<all_rows>N</all_rows>
<directory>${java.io.tmpdir}</directory>
<fields>
<field>
<aggregate>has_driver_license_raw</aggregate>
<subject>is_has_driver_license</subject>
<type>MAX</type>
</field>
<field>
<aggregate>has_tractor_license_raw</aggregate>
<subject>is_has_tractor_license</subject>
<type>MAX</type>
</field>
</fields>
<give_back_row>N</give_back_row>
<group>
<field>
<name>recruit_id</name>
</field>
</group>
<ignore_aggregate>N</ignore_aggregate>
<prefix>grp</prefix>
<attributes/>
<GUI>
<xloc>640</xloc>
<yloc>1024</yloc>
</GUI>
</transform>
<transform>
<name>driver_licence_java_expression</name>
<type>Janino</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<formula>
<field_name>has_driver_license</field_name>
<formula_string>has_driver_license_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<formula>
<field_name>has_tractor_license</field_name>
<formula_string>has_tractor_license_raw == 1</formula_string>
<value_type>Boolean</value_type>
<value_length>-1</value_length>
<value_precision>-1</value_precision>
<replace_field/>
</formula>
<attributes/>
<GUI>
<xloc>928</xloc>
<yloc>1024</yloc>
</GUI>
</transform>
<transform>
<name>driver_licence_success_job</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>Y</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>N</set_params>
<single_statement>N</single_statement>
<sql>UPDATE etl.job_execution
SET status = 'SUCCESS',
execution_end_datetime = current_timestamp
WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>896</xloc>
<yloc>480</yloc>
</GUI>
</transform>
<transform>
<name>driver_license_failure_job</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
<argument>
<name>error_description</name>
</argument>
</arguments>
<connection>ervu-dashboard</connection>
<execute_each_row>Y</execute_each_row>
<quoteString>N</quoteString>
<replace_variables>Y</replace_variables>
<set_params>Y</set_params>
<single_statement>N</single_statement>
<sql>UPDATE etl.job_execution
SET status = 'ERROR',
error_description = ?,
execution_end_datetime = current_timestamp
WHERE job_name = '${JOB_NAME}'
and recruitment_id = '${IDM_ID}';
</sql>
<attributes/>
<GUI>
<xloc>1456</xloc>
<yloc>784</yloc>
</GUI>
</transform>
<transform>
<name>driver_lisence_job_create</name>
<type>ExecSql</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<arguments>
</arguments>
<connection>ervu-dashboard</connection>
<delete_field/>
<execute_each_row>N</execute_each_row>
<insert_field/>
<quoteString>N</quoteString>
<read_field/>
<replace_variables>Y</replace_variables>
<set_params>N</set_params>
<single_statement>N</single_statement>
<sql>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;</sql>
<update_field/>
<attributes/>
<GUI>
<xloc>368</xloc>
<yloc>784</yloc>
</GUI>
</transform>
<transform>
<name>drivers_licence_input</name>
<type>TableInput</type> <type>TableInput</type>
<description/> <description/>
<distribute>N</distribute> <distribute>N</distribute>
@ -392,96 +471,108 @@ DO UPDATE SET
</partitioning> </partitioning>
<connection>ervu-dashboard</connection> <connection>ervu-dashboard</connection>
<execute_each_row>N</execute_each_row> <execute_each_row>N</execute_each_row>
<limit/>
<sql>WITH <sql>WITH
base AS ( base AS (
SELECT SELECT
ri.recruit_id recruit_id, ri.recruit_id,
ri.info ri.info
FROM ervu_dashboard.recruits_info ri FROM ervu_dashboard.recruits_info ri
JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id AND '${IDM_ID}' != '' -- Проверка на пустую строку JOIN ervu_dashboard.citizen r ON r.recruit_id = ri.recruit_id
AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}' WHERE ('${IDM_ID}' != '' AND COALESCE(ri.current_recruitment_id, ri.target_recruitment_id) = '${IDM_ID}')
WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' AND (
OR ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'
OR ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL 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, all_data AS (
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 - недействителен SELECT
ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'serNomDok' AS licence_series, -- серия и номер ri.recruit_id,
NULL AS licence_number, -- ?серия и номер в одном поле? (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->> 'id') as source_id,
array_to_string(array( to_date((ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataSved'), 'YYYY-MM-DD') AS source_update_date,
SELECT kat->>'naimKatTS' (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'kodStatus') AS status,
FROM jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS kat (ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'serNomDok') AS licence_series,
WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array'), ',') AS categories,-- категории водительских удостоверений NULL AS licence_number,
to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataVydDok', 'YYYY-MM-DD') AS start_date,-- дата выдачи array_to_string(array(
to_date(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'srokDeistvDok', 'YYYY-MM-DD') AS close_date,-- срок действия SELECT kat->>'naimKatTS'
NULL AS replacement_date, FROM jsonb_array_elements(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') AS kat
NULL AS return_date, ), ',') AS categories,
false AS tractor_driver to_date((ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'dataVydDok'), 'YYYY-MM-DD') AS start_date,
FROM base ri to_date((ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->>'srokDeistvDok'), 'YYYY-MM-DD') AS close_date,
WHERE jsonb_typeof(ri.info->'svedFL'->'svedVoditUdost'->'voditUdost'->'svedKat') = 'array' 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, SELECT
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataSved', 'YYYY-MM-DD') AS source_update_date, ri.recruit_id,
'1' AS status, -- статус удостоверения тракториста // ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'kodStatusUTM' (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->> 'id') as source_id,
ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'serUTM' AS licence_series, -- серия удостоверения тракториста to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataSved'), 'YYYY-MM-DD') AS source_update_date,
ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'nomUTM' AS licence_number, -- номер удостоверения тракториста '1' AS status,
(SELECT array_to_string(ARRAY(SELECT jsonb_array_elements_text( (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'serUTM') AS licence_series,
ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->'extend'->'kodKatUTM')), ',')) AS categories, -- категории удостоверений тракториста (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'nomUTM') AS licence_number,
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVydUTM', 'YYYY-MM-DD') AS start_date, -- дата выдачи (SELECT array_to_string(ARRAY(
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') AS close_date, -- дата окончания действия SELECT jsonb_array_elements_text(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->'extend'->'kodKatUTM')
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataZameny', 'YYYY-MM-DD') AS replacement_date, -- дата замены ), ',')) AS categories,
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'-&gt;&gt;'dataVozvr', 'YYYY-MM-DD') AS return_date, -- дата возврата to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataVydUTM'), 'YYYY-MM-DD') AS start_date,
true AS tractor_driver to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataOkonchUTM'), 'YYYY-MM-DD') AS close_date,
FROM base ri to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM'->>'dataZameny'), 'YYYY-MM-DD') AS replacement_date,
WHERE ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'aktUTM' IS NOT NULL 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, SELECT
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataSved', 'YYYY-MM-DD') AS source_update_date, ri.recruit_id,
'0' AS status, -- статус удостоверения тракториста // ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'kodStatusUTM' (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->> 'id') as source_id,
ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'serUTM' AS licence_series, -- серия удостоверения тракториста to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataSved'), 'YYYY-MM-DD') AS source_update_date,
ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'nomUTM' AS licence_number, -- номер удостоверения тракториста '0' AS status,
(SELECT array_to_string(ARRAY(SELECT jsonb_array_elements_text( (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'serUTM') AS licence_series,
ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->'extend'->'kodKatUTM')), ',')) AS categories, -- категории удостоверений тракториста (ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'nomUTM') AS licence_number,
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVydUTM', 'YYYY-MM-DD') AS start_date, -- дата выдачи (SELECT array_to_string(ARRAY(
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataOkonchUTM', 'YYYY-MM-DD') AS close_date, -- дата окончания действия SELECT jsonb_array_elements_text(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->'extend'->'kodKatUTM')
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataZameny', 'YYYY-MM-DD') AS replacement_date, -- дата замены ), ',')) AS categories,
to_date(ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVozvr', 'YYYY-MM-DD') AS return_date, -- дата возврата to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataVydUTM'), 'YYYY-MM-DD') AS start_date,
true AS tractor_driver to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataOkonchUTM'), 'YYYY-MM-DD') AS close_date,
FROM base ri to_date((ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM'->>'dataZameny'), 'YYYY-MM-DD') AS replacement_date,
WHERE ri.info->'svedFL'->'svedUdostTraktMash'->'udostTraktMash'->'predUTM' IS NOT NULL 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 SELECT
*, *,
CASE CASE
WHEN tractor_driver is false and status = '1' THEN true WHEN tractor_driver = false AND status = '1' THEN 1
ELSE false ELSE 0
END AS has_driver_license, -- tractor_license // имеет удостоверение тракториста в citizen END AS is_has_driver_license,
CASE CASE
WHEN tractor_driver is true and status = '1' THEN true WHEN tractor_driver = true AND status = '1' THEN 1
ELSE false ELSE 0
END AS tractor_license -- has_driver_license // признак наличия водительского удостоверения END AS is_has_tractor_license
FROM all_data</sql> FROM all_data
ORDER BY recruit_id </sql>
<variables_active>Y</variables_active> <variables_active>Y</variables_active>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>480</xloc> <xloc>640</xloc>
<yloc>208</yloc> <yloc>784</yloc>
</GUI> </GUI>
</transform> </transform>
<transform> <transform>
<name>Update</name> <name>update_drivers_licence_flags</name>
<type>Update</type> <type>Update</type>
<description/> <description/>
<distribute>N</distribute> <distribute>Y</distribute>
<custom_distribution/> <custom_distribution/>
<copies>1</copies> <copies>1</copies>
<partitioning> <partitioning>
@ -491,17 +582,19 @@ FROM all_data</sql>
<commit>10000</commit> <commit>10000</commit>
<connection>ervu-dashboard</connection> <connection>ervu-dashboard</connection>
<error_ignored>Y</error_ignored> <error_ignored>Y</error_ignored>
<ignore_flag_field/>
<lookup> <lookup>
<key> <key>
<condition>=</condition> <condition>=</condition>
<field>recruit_id</field> <field>recruit_id</field>
<name>recruit_id</name> <name>recruit_id</name>
<name2/>
</key> </key>
<schema>ervu_dashboard</schema> <schema>ervu_dashboard</schema>
<table>citizen</table> <table>citizen</table>
<value> <value>
<name>tractor_license</name> <name>tractor_license</name>
<rename>tractor_license</rename> <rename>has_tractor_license</rename>
</value> </value>
<value> <value>
<name>has_driver_license</name> <name>has_driver_license</name>
@ -512,48 +605,14 @@ FROM all_data</sql>
<use_batch>Y</use_batch> <use_batch>Y</use_batch>
<attributes/> <attributes/>
<GUI> <GUI>
<xloc>1232</xloc> <xloc>1456</xloc>
<yloc>208</yloc> <yloc>1024</yloc>
</GUI>
</transform>
<transform>
<name>sort_by_recruit_id</name>
<type>SortRows</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<directory>${java.io.tmpdir}</directory>
<prefix>srt</prefix>
<sort_size>100000</sort_size>
<free_memory/>
<compress>N</compress>
<compress_variable/>
<unique_rows>Y</unique_rows>
<fields>
<field>
<name>recruit_id</name>
<ascending>Y</ascending>
<case_sensitive>N</case_sensitive>
<collator_enabled>N</collator_enabled>
<collator_strength>0</collator_strength>
<presorted>N</presorted>
</field>
</fields>
<attributes/>
<GUI>
<xloc>880</xloc>
<yloc>208</yloc>
</GUI> </GUI>
</transform> </transform>
<transform_error_handling> <transform_error_handling>
<error> <error>
<source_transform>Insert / update</source_transform> <source_transform>Insert / update 2</source_transform>
<target_transform>Change job status on error</target_transform> <target_transform>driver_license_failure_job</target_transform>
<is_enabled>Y</is_enabled> <is_enabled>Y</is_enabled>
<nr_valuename/> <nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename> <descriptions_valuename>error_description</descriptions_valuename>
@ -564,8 +623,8 @@ FROM all_data</sql>
<min_pct_rows/> <min_pct_rows/>
</error> </error>
<error> <error>
<source_transform>Update</source_transform> <source_transform>update_drivers_licence_flags</source_transform>
<target_transform>Change job status on error</target_transform> <target_transform>driver_license_failure_job</target_transform>
<is_enabled>Y</is_enabled> <is_enabled>Y</is_enabled>
<nr_valuename/> <nr_valuename/>
<descriptions_valuename>error_description</descriptions_valuename> <descriptions_valuename>error_description</descriptions_valuename>