046 versioning fixes

This commit is contained in:
2026-04-28 13:28:26 +03:00
parent c9a229cc8e
commit 2a3cf0482f
9 changed files with 1149 additions and 304 deletions
+240 -229
View File
@@ -24,234 +24,246 @@ WITH
('Внутреннее согласование',37,10),
('Проработка решения',4,10) ,
('Сбор потребностей',1,0)
),
line_expanded as
(
SELECT
siv.__id as siv_uid ,
siv.discount ,
siv.type as line_pricing_model_id ,
siv.hash as line_key ,
siv.is_actual as siv_is_actual ,
siv.version::numeric as line_version ,
d.__index as deal_index ,
d._companies ,
a.index as agreement_version ,
siv.date_nop::date as dt_from ,
siv.date_end::date as dt_to ,
siv.is_easy as is_simple ,
siv.cnt ,
s.probability_pc ,
a.__id as agreement_uid ,
a.contract_uid ,
a.is_actual as agreement_is_actual ,
a.deal_uid ,
d.__name as deal ,
d.__status_status as deal_status_id ,
siv.user_description ,
unnest(siv.params) as param_id
FROM
elma.deals_services siv
JOIN elma.deals d on (d.__id = ANY(siv.deal))
JOIN status s on (d.__status_status=s.status_id)
LEFT JOIN elma.additional_agreements a on (a.__id = ANY(siv.additional_agreement))
WHERE
siv.is_actual
AND siv."__deletedAt" IS NULL
and d."__deletedAt" IS NULL
and a."__deletedAt" IS NULL
and s.probability_pc >= 50
--and a.is_actual
and siv.type IN (2,3)
),
component as
(
SELECT
-- price*cnt*(100.0-COALESCE(discount,0))/100.0 as cost ,
-- price ,
cnt ,
code ,
__id
FROM
elma.service_parametrs
where
"__deletedAt" IS NULL
),
stair as
(
select
*
FROM
(
SELECT
*,
MIN(dt_from) OVER (PARTITION BY line_key ORDER BY deal_index desc) running_min_dt
FROM
line_expanded
--line
WHERE
probability_pc > 0
) t
WHERE
t.dt_from = t.running_min_dt
AND ( t.dt_to > CURRENT_TIMESTAMP OR t.dt_to IS NULL )
),
alloc as
(
select
c."WZ" as wz ,
round(sum(c."VM_RAM_Allocated")) as ram ,
round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_RAM_Allocated" ELSE 0 END)) as ram_on ,
round(sum(c."VM_vCPU_count")) as cpu ,
round(sum(CASE WHEN "VM_is_ON" > 0 then c."VM_vCPU_count" ELSE 0 END)) as cpu_on
from
vmreports.compute c
where
ts= (select max(ts) from vmreports.compute)
group by c."WZ"
),
disk_alloc as
(
select
c."WZ" as wz ,
round(sum(c."Disk_Allocated")) as disk_alloc
from
vmreports.storage c
where
ts= (select max(ts) from vmreports.compute)
group by
c."WZ" ),
sold_ram as
(
SELECT
z.id_klienta as WZ ,
z.__name as client ,
z.__id as company_uid,
round(sum(c.cnt*o.cnt)) as quantity ,
count(*) as lines ,
STRING_AGG(distinct c.code,', ' order by c.code) as codes
FROM
stair o
JOIN elma.companies z on o._companies=z.__id
LEFT JOIN component c on c.__id = o.param_id
--LEFT JOIN component c on (c.__id = ANY (o.params))
WHERE
--c.code SIMILAR TO 'iaas.(ngc|dcp).%.ram-_'
(c.code LIKE 'iaas.ngc.%.ram-_' OR c.code LIKE 'iaas.dcp.%.ram-_')
AND c.cnt <> 0
AND o.cnt <> 0
GROUP BY
z.id_klienta,
z.__id ,
z.__name
),
sold_cpu as
(
SELECT
z.id_klienta as WZ ,
z.__name as client ,
z.__id as company_uid,
round(sum(c.cnt*o.cnt)) as quantity ,
count(*) as lines ,
STRING_AGG(distinct c.code,', ' order by c.code) as codes
FROM
stair o
JOIN
elma.companies z on (o._companies=z.__id)
LEFT JOIN component c on c.__id = o.param_id
--LEFT JOIN component c on (c.__id = ANY (o.params))
WHERE
--c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_'
(c.code LIKE 'iaas.ngc.%.vcpu%-_' OR c.code LIKE 'iaas.dcp.%.vcpu%-_')
AND c.cnt <> 0
AND o.cnt <> 0
GROUP BY
z.id_klienta,
z.__id ,
z.__name
),
sold_disk as
(
SELECT
z.id_klienta as WZ ,
z.__name as client ,
z.__id as company_uid,
round(sum(c.cnt*o.cnt)) as quantity ,
count(*) as lines ,
STRING_AGG(distinct c.code,', ' order by c.code) as codes
FROM
stair o
JOIN elma.companies z on (o._companies=z.__id)
LEFT JOIN component c on c.__id = o.param_id
--LEFT JOIN component c on (c.__id = ANY (o.params))
WHERE
--c.code SIMILAR TO 'iaas.(ngc|dcp).%.(ssd|fstssd|sata)-_'
(c.code LIKE 'iaas.ngc.%.ssd-_' OR c.code LIKE 'iaas.dcp.%.ssd-_'
or c.code LIKE 'iaas.ngc.%.fstssd-_' OR c.code LIKE 'iaas.dcp.%.fstssd-_'
or c.code LIKE 'iaas.ngc.%.sata-_' OR c.code LIKE 'iaas.dcp.%.sata-_'
)
AND c.cnt <> 0
AND o.cnt <> 0
GROUP BY
z.id_klienta,
z.__id ,
z.__name
),
sold_gpu as
(
SELECT
z.id_klienta as WZ ,
z.__name as client ,
z.__id as company_uid,
round(sum(c.cnt*o.cnt)) as quantity ,
count(*) as lines ,
STRING_AGG(distinct c.code,', ' order by c.code) as codes
FROM
stair o
JOIN
elma.companies z on (o._companies=z.__id)
LEFT JOIN component c on c.__id = o.param_id
WHERE
--c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_'
(c.code LIKE 'iaas.ngc.%.gpu%-_' OR c.code LIKE 'iaas.dcp.%.gpu%-_')
AND c.cnt <> 0
AND o.cnt <> 0
GROUP BY
z.id_klienta,
z.__id ,
z.__name
),
gpu_alloc as
(
select
c."ClientID" as wz ,
-- json_agg("GPU") as gpu,
string_agg("GPU"::text||' '||"OrgStatus",', ') as gpu,
count(*) as gpu_alloc
from
vmreports.vm_gpu c
where
ts= (select max(ts) from vmreports.vm_gpu)
group by
c."ClientID" ),
deal_stat as
(
select
STRING_AGG(distinct deal_status_id::text,', ' order by deal_status_id::text) as status_ids,
ARRAY_AGG(distinct deal_status_id order by deal_status_id) as ar_status_ids,
STRING_AGG(distinct line_pricing_model_id::text,', ' order by line_pricing_model_id::text) as line_pricing_model_ids ,
ARRAY_AGG(distinct line_pricing_model_id order by line_pricing_model_id) as ar_line_pricing_model_id,
z.id_klienta as WZ
from
line_expanded o
--line o
join elma.companies z on (o._companies=z.__id)
GROUP BY
z.id_klienta
)
)
,line
AS (
SELECT siv.__id AS siv_uid
,siv.discount
,siv.type AS line_pricing_model_id
,siv.HASH AS line_key
,siv.is_actual AS siv_is_actual
,siv.version::NUMERIC AS line_version
,d.__index AS deal_index
,d._companies
,a.INDEX AS agreement_version
,siv.date_nop::DATE AS dt_from
,siv.date_end::DATE AS dt_to
,siv.is_easy AS is_simple
,siv.cnt
,s.probability_pc
,a.__id AS agreement_uid
,a.contract_uid
,a.is_actual AS agreement_is_actual
,a.deal_uid
,d.__name AS deal
,d.__status_status AS deal_status_id
,siv.user_description
,siv.params
FROM elma.deals_services siv
JOIN elma.deals d ON (d.__id = ANY (siv.deal))
JOIN STATUS s ON (d.__status_status = s.status_id)
LEFT JOIN elma.additional_agreements a ON (a.__id = ANY (siv.additional_agreement))
WHERE siv.is_actual
AND siv."__deletedAt" IS NULL
AND d."__deletedAt" IS NULL
AND a."__deletedAt" IS NULL
AND s.probability_pc >= 50
--and a.is_actual
AND siv.type IN (2, 3)
)
,component
AS (
SELECT
-- price*cnt*(100.0-COALESCE(discount,0))/100.0 as cost ,
-- price ,
cnt
,code
,__id
FROM elma.service_parametrs
WHERE "__deletedAt" IS NULL
)
,stair
AS (
SELECT *
FROM (
SELECT *
,MIN(dt_from) OVER (
PARTITION BY line_key ORDER BY deal_index DESC
) running_min_dt
,COALESCE((
LEAD(dt_from) OVER (
PARTITION BY line_key ORDER BY dt_from
,deal_index
)
), (
SELECT CURRENT_TIMESTAMP + INTERVAL '1 day'
)) dt_next
FROM line
WHERE probability_pc > 0
) t
WHERE t.dt_from = t.running_min_dt
AND (
t.dt_to > CURRENT_TIMESTAMP
OR t.dt_to IS NULL
)
)
,line_expanded
AS (
SELECT line.*
,unnest(line.params) AS param_id
FROM line
)
,alloc
AS (
SELECT c."WZ" AS wz
,round(sum(c."VM_RAM_Allocated")) AS ram
,round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_RAM_Allocated" ELSE 0 END)) AS ram_on
,round(sum(c."VM_vCPU_count")) AS cpu
,round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_vCPU_count" ELSE 0 END)) AS cpu_on
FROM vmreports.COMPUTE c
WHERE ts = (
SELECT max(ts)
FROM vmreports.COMPUTE
)
GROUP BY c."WZ"
)
,disk_alloc
AS (
SELECT c."WZ" AS wz
,round(sum(c."Disk_Allocated")) AS disk_alloc
FROM vmreports.storage c
WHERE ts = (
SELECT max(ts)
FROM vmreports.COMPUTE
)
GROUP BY c."WZ"
)
,sold_ram
AS (
SELECT z.id_klienta AS WZ
,z.__name AS client
,z.__id AS company_uid
,round(sum(c.cnt * o.cnt)) AS quantity
,count(*) AS lines
,STRING_AGG(DISTINCT c.code, ', ' ORDER BY c.code) AS codes
FROM stair o
JOIN elma.companies z ON o._companies = z.__id
--LEFT JOIN component c on (c.__id = ANY (o.params))
LEFT JOIN line_expanded e ON o.siv_uid = e.siv_uid
LEFT JOIN component c ON c.__id = e.param_id
WHERE
--c.code SIMILAR TO 'iaas.(ngc|dcp).%.ram-_'
(
c.code LIKE 'iaas.ngc.%.ram-_'
OR c.code LIKE 'iaas.dcp.%.ram-_'
)
AND c.cnt <> 0
AND o.cnt <> 0
GROUP BY z.id_klienta
,z.__id
,z.__name
)
,sold_cpu
AS (
SELECT z.id_klienta AS WZ
,z.__name AS client
,z.__id AS company_uid
,round(sum(c.cnt * o.cnt)) AS quantity
,count(*) AS lines
,STRING_AGG(DISTINCT c.code, ', ' ORDER BY c.code) AS codes
FROM stair o
JOIN elma.companies z ON (o._companies = z.__id)
--LEFT JOIN component c ON c.__id = o.param_id
--LEFT JOIN component c on (c.__id = ANY (o.params))
LEFT JOIN line_expanded e ON o.siv_uid = e.siv_uid
LEFT JOIN component c ON c.__id = e.param_id
WHERE
--c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_'
(
c.code LIKE 'iaas.ngc.%.vcpu%-_'
OR c.code LIKE 'iaas.dcp.%.vcpu%-_'
)
AND c.cnt <> 0
AND o.cnt <> 0
GROUP BY z.id_klienta
,z.__id
,z.__name
)
,sold_disk
AS (
SELECT z.id_klienta AS WZ
,z.__name AS client
,z.__id AS company_uid
,round(sum(c.cnt * o.cnt)) AS quantity
,count(*) AS lines
,STRING_AGG(DISTINCT c.code, ', ' ORDER BY c.code) AS codes
FROM stair o
JOIN elma.companies z ON (o._companies = z.__id)
--LEFT JOIN component c ON c.__id = o.param_id
--LEFT JOIN component c on (c.__id = ANY (o.params))
LEFT JOIN line_expanded e ON o.siv_uid = e.siv_uid
LEFT JOIN component c ON c.__id = e.param_id
WHERE
--c.code SIMILAR TO 'iaas.(ngc|dcp).%.(ssd|fstssd|sata)-_'
(
c.code LIKE 'iaas.ngc.%.ssd-_'
OR c.code LIKE 'iaas.dcp.%.ssd-_'
OR c.code LIKE 'iaas.ngc.%.fstssd-_'
OR c.code LIKE 'iaas.dcp.%.fstssd-_'
OR c.code LIKE 'iaas.ngc.%.sata-_'
OR c.code LIKE 'iaas.dcp.%.sata-_'
)
AND c.cnt <> 0
AND o.cnt <> 0
GROUP BY z.id_klienta
,z.__id
,z.__name
)
,sold_gpu
AS (
SELECT z.id_klienta AS WZ
,z.__name AS client
,z.__id AS company_uid
,round(sum(c.cnt * o.cnt)) AS quantity
,count(*) AS lines
,STRING_AGG(DISTINCT c.code, ', ' ORDER BY c.code) AS codes
FROM stair o
JOIN elma.companies z ON (o._companies = z.__id)
--LEFT JOIN component c ON c.__id = o.param_id
--LEFT JOIN component c on (c.__id = ANY (o.params))
LEFT JOIN line_expanded e ON o.siv_uid = e.siv_uid
LEFT JOIN component c ON c.__id = e.param_id
WHERE
--c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_'
(
c.code LIKE 'iaas.ngc.%.gpu%-_'
OR c.code LIKE 'iaas.dcp.%.gpu%-_'
)
AND c.cnt <> 0
AND o.cnt <> 0
GROUP BY z.id_klienta
,z.__id
,z.__name
)
,gpu_alloc
AS (
SELECT c."ClientID" AS wz
,
-- json_agg("GPU") as gpu,
string_agg("GPU"::TEXT || ' ' || "OrgStatus", ', ') AS gpu
,count(*) AS gpu_alloc
FROM vmreports.vm_gpu c
WHERE ts = (
SELECT max(ts)
FROM vmreports.vm_gpu
)
GROUP BY c."ClientID"
)
,deal_stat
AS (
SELECT STRING_AGG(DISTINCT deal_status_id::TEXT, ', ' ORDER BY deal_status_id::TEXT) AS status_ids
,ARRAY_AGG(DISTINCT deal_status_id ORDER BY deal_status_id) AS ar_status_ids
,STRING_AGG(DISTINCT line_pricing_model_id::TEXT, ', ' ORDER BY line_pricing_model_id::TEXT) AS line_pricing_model_ids
,ARRAY_AGG(DISTINCT line_pricing_model_id ORDER BY line_pricing_model_id) AS ar_line_pricing_model_id
,z.id_klienta AS WZ
FROM stair d
--LEFT JOIN LATERAL unnest(d.params) AS arr(param_id) ON TRUE
--JOIN component p ON (p.__id = arr.param_id)
JOIN elma.companies z ON (d._companies = z.__id)
WHERE d.dt_from <= CURRENT_TIMESTAMP
AND (CURRENT_TIMESTAMP < d.dt_next)
GROUP BY z.id_klienta
)
select
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
<d:field title="WZ Elma">r.wz as wz_sold</d:field>
@@ -368,7 +380,6 @@ S3 операции и трафик: <b>#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M
<th width="10%"><layout:column_head name="gpu"/></th>
<!--- <th width="3%"><layout:column_head name="disk_sold"/></th> --->
</layout:grid_head>
</thead>