Загрузка данных
Вставка записи
insert into back_office.report_conformity_pu_bu(
m_y_report,
"version",
service_type,
user_id,
form_date
)
values (
:date_report,
now(),
:service_type,
:user_id,
:date_form
)
Вставка детализации
with dates as (
select to_date(:startDate, 'DD.MM.YYYY') as startDate,
to_date(:endDate, 'DD.MM.YYYY') as endDate
)
, temp_sum as (
select ed.account_dt as acc,
coalesce(ed.pension_scheme_id, et.pens_schema_dt) as pension_scheme_id,
tran.strategy_id, et.contract_class_code,
sum(tran.sumoper) as sum_dt, null as sum_ct
from back_office.operation o
join dates d
on o.operation_date between d.startDate and d.endDate
join back_office.eps_transaction_source s
on o.id = s.operation_id
join back_office.eps_transaction et
on s.id = et.eps_transaction_source_id
join ourpension.eps e
on e.id = et.eps_id
join ourpension.eps_detail ed
on ed.eps_id = e.id
left join lateral
(select te.strategy_id, sum(t.value) as sumoper
from back_office.transaction t
left join back_office.transaction_extended te
on te.transaction_id = t.id
where t.operation_id = o.id
group by te.strategy_id
) tran on true
where e."service_type" = :service_type
group by ed.account_dt, ed.pension_scheme_id, tran.strategy_id,
et.contract_class_code, et.pens_schema_dt
union all
select ed.account_ct, coalesce(ed.pension_scheme_id, et.pens_schema_ct) as pension_scheme_id, tran.strategy_id,
et.contract_class_code, null, sum(tran.sumoper)
from back_office.operation o
join dates d
on o.operation_date between d.startDate and d.endDate
join back_office.eps_transaction_source s
on o.id = s.operation_id
join back_office.eps_transaction et
on s.id = et.eps_transaction_source_id
join ourpension.eps e
on e.id = et.eps_id
join ourpension.eps_detail ed
on ed.eps_id = e.id
left join lateral
(select te.strategy_id, sum(t.value) as sumoper
from back_office.transaction t
left join back_office.transaction_extended te
on te.transaction_id = t.id
where t.operation_id = o.id
group by te.strategy_id
) tran on true
where e."service_type" = :service_type
group by ed.account_ct, ed.pension_scheme_id, tran.strategy_id,
et.contract_class_code, et.pens_schema_ct
union all
select ed.account_dt, coalesce(ed.pension_scheme_id, et.pens_schema_dt) as pension_scheme_id, null as strategy_id,
et.contract_class_code, coalesce(io.value, 0) as sum_dt,
null as sum_ct
from back_office.incoming_order io
join dates d
on io.date between d.startDate and d.endDate
join back_office.eps_transaction_source s
on io.id = s.incoming_order_id
join back_office.eps_transaction et
on s.id = et.eps_transaction_source_id
join ourpension.eps e
on e.id = et.eps_id
join ourpension.eps_detail ed
on ed.eps_id = e.id
where e."service_type" = :service_type
union all
select ed.account_ct, coalesce(ed.pension_scheme_id, et.pens_schema_ct) as pension_scheme_id, null, et.contract_class_code,
null, coalesce(io.value, 0) as sum_dt
from back_office.incoming_order io
join dates d
on io.date between d.startDate and d.endDate
join back_office.eps_transaction_source s
on io.id = s.incoming_order_id
join back_office.eps_transaction et
on s.id = et.eps_transaction_source_id
join ourpension.eps e
on e.id = et.eps_id
join ourpension.eps_detail ed
on ed.eps_id = e.id
where e."service_type" = :service_type
)
insert into back_office.report_conformity_pu_bu_detail(
report_conformity_pu_bu_id,
account,
pension_scheme_id,
strategy_id,
contract_class_code,
sum_dt_pu,
sum_ct_pu
)
select currval('back_office.report_conformity_pu_bu_id_seq'),
acc, pension_scheme_id, strategy_id, contract_class_code,
sum(sum_dt) as sum_dt,
sum(sum_ct) as sum_ct
from temp_sum
group by acc, pension_scheme_id, strategy_id, contract_class_code
Данные БУ
MERGE INTO back_office.report_conformity_pu_bu_detail as target
USING (with str_acc as (
select string_agg(sa.account,',') as acc
from ourpension.spr_accounts_indicator_bu sa
)
select t.account, t.debitbalance, t.creditbalance, t.uidpensionscheme, t.uidsubtypeactivity
from str_acc s
join mtrustgate.get_list_account_balances_bu(to_date(:endDate, 'DD.MM.YYYY'), '1147799009115', :service_type, s.acc) t on 1=1
) as source
on (target.account = source.account
and target.report_conformity_pu_bu_id = currval('back_office.report_conformity_pu_bu_id_seq')
and target.uidpensionscheme = source.uidpensionscheme
and target.uidsubtypeactivity = source.uidsubtypeactivity)
WHEN MATCHED THEN
update set (sum_dt_bu, sum_ct_bu) = (select source.debitbalance,
source.creditbalance)
WHEN NOT MATCHED THEN
INSERT (
report_conformity_pu_bu_id,
account,
uidpensionscheme,
uidsubtypeactivity,
sum_dt_bu,
sum_ct_bu)
VALUES ( currval('back_office.report_conformity_pu_bu_id_seq'),
source.account, source.uidpensionscheme, source.uidsubtypeactivity,
source.debitbalance, source.creditbalance
)