WITH src AS (SELECT DISTINCT ON (phone) fid,
phone
FROM json_to_recordset(#{json}::json) AS src(
fid int,
phone bigint
)
order by phone),
to_lock AS (select dst.id
from signals_phones_map dst
join src on src.phone = dst.phone
order by dst.phone
for update)
update signals_phones_map dst
set fid = src.fid,
searched_at = now()
FROM json_to_recordset(#{json}::json) AS src(
fid int,
phone bigint
)
where dst.phone = src.phone
AND dst.id in (select id from to_lock);
WITH src AS (SELECT DISTINCT ON (phone) phone,
flag_debt5000,
flag_90_12
FROM json_to_recordset(#{json}::json) AS src(
phone bigint,
flag_debt5000 smallint,
flag_90_12 smallint
)
order by phone),
to_lock AS (select dst.id
from signals_phones_map dst
join src on src.phone = dst.phone
order by dst.phone
for update)
update signals_phones_map dst
set flag_debt5000 = src.flag_debt5000,
flag_90_12 = src.flag_90_12,
calculated_at = now()
FROM json_to_recordset(#{json}::json) AS src(
phone bigint,
flag_debt5000 smallint,
flag_90_12 smallint
)
where dst.phone = src.phone
AND dst.id in (select id from to_lock);
update signals_phones_map dst
set fid = null,
flag_debt5000 = null,
flag_90_12 = null,
calculated_at = null,
searched_at = now()
FROM json_to_recordset(#{json}::json) AS src(
phone bigint)
where dst.phone = src.phone
update signals_phones_map dst
set searched_at = now()
FROM json_to_recordset(#{json}::json) AS src(
phone bigint)
where dst.phone = src.phone
DELETE
FROM signals_phones_map spm
WHERE NOT EXISTS (SELECT 1
FROM signals_phone_fid_map spr
JOIN signals_user_packages sup
ON sup.id = spr.package_id
WHERE spr.phone_l = spm.phone
AND sup.status IN
(
'ON_MONITORING',
'PROCESSING',
'PROCESSING_REPEATED'
))