incorrect but interesting

This commit is contained in:
2026-10-19 22:17:47 +03:00
parent 1ac73a7be2
commit b95fdb3869
+99 -26
View File
@@ -64,11 +64,25 @@
('Закрыта неуспешно',7,0),('Закрыта успешно',6,100),('Договор подписан',5,100),('Договор на подписании',15,90),('Договор на согласовании',12,70),
('Тестирование',8,50),('Отправлено ТКП',10,20),('Внутреннее согласование',37,10),('Проработка решения',4,10),('Сбор потребностей',1,0)
)
select upper(trim(k.id_klienta)) as wz, k.__id::text as contragent_uid,
select upper(trim(k.id_klienta)) as wz,
k.__id::text as contragent_uid,
p.code,
SUBSTRING(p.code FROM 1 FOR LENGTH(p.code) - 2) as sku_code,
p.price, p.discount as component_discount, k.__name as contragent, a.__name as contract, a.__id::text as contract_uid, d.__name as deal, d.__id::text as deal_uid, siv.abstractive_service as abstract_service, siv.modifier, siv.user_description, siv.hash as line_key
,siv.date_nop as serviceStart, siv.date_end as serviceEnd, siv.discount as service_discount, siv.cnt as service_quantity
p.price,
p.discount as component_discount,
k.__name as contragent,
a.__name as contract,
a.__id::text as contract_uid,
d.__name as deal,
d.__id::text as deal_uid,
siv.abstractive_service as abstract_service,
siv.modifier, siv.user_description,
siv.hash as line_key
,siv.date_nop as serviceStart,
siv.date_end as serviceEnd,
siv.discount as service_discount, siv.cnt as service_quantity
/*,p.__name as line_key*/, p.ed_izm, p.name as component, p.type, p.cnt*coalesce(siv.cnt,1) as component_quantity,
aa.__name as additional_agreement, aa.__id::text as additional_agreement_uid
--, aa.is_actual
@@ -515,24 +529,54 @@ FULL JOIN, потому что нам нужны бесхозные записи
<cfquery name="qCharge" datasource="inmem">
/*EXPLAIN PLAN FOR*/
WITH
metric as (select count(*) as cnt, wz, code, max(dimension1) as dimension1, max(unit) as unit, max(raw_metric) as raw_metric, max(metric) as metric
from qUnifiedMetric
group by wz,code
),
spec as (select count(*) as cnt, wz, sku_code,
max(end_customer_wz) as wze,
max(code) as code,
max(component_quantity) as component_quantity,
max(service_quantity) as service_quantity,
max(service_discount) as service_discount,
max(type) as type,
max(ed_izm) as ed_izm,
max(coalesce(service_quantity*(100.-service_discount)/100.*price*(100.-component_discount)/100., 0.)) as discounted_price,
max(serviceStart) as serviceStart,
max(serviceEnd) as serviceEnd,
max(line_key) as line_key,
max(price) as price,
max(component_discount) as component_discount,
max(contract) as contract,
max(contract_uid) as contract_uid,
max(additional_agreement) as additional_agreement,
max(additional_agreement_uid) as additional_agreement_uid,
max(deal) as deal,
max(deal_uid) as deal_uid,
max(abstract_service) as abstract_service,
max(modifier) as modifier,
max(component) as component,
max(user_description) as user_description,
max(CASE type WHEN 1 THEN 'install' WHEN 2 THEN 'fix' WHEN 3 THEN 'payg' ELSE NULL END) as pricing_model
from qSpec
group by wz, sku_code
)
SELECT
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
<d:field title="WZ">coalesce(coalesce(c.wz, m.wz), s.wz) as wz</d:field>
<d:field title="WZ spec">s.wz as wzs</d:field>
<d:field title="WZ contragent">c.wz as wzc</d:field>
<d:field title="WZ metric">m.wz as wzm</d:field>
<d:field title="WZ конечника">s.end_customer_wz as wze</d:field>
<d:field title="WZ конечника">s.wze</d:field>
<d:field title="Артикул">coalesce(s.sku_code, m.code) as code</d:field>
<d:field title="Артикул по специф.">s.code as s_code</d:field><!--- содержит суффикс типа тарификации --->
<d:field title="SKU code по специф.">s.sku_code as sku_code</d:field><!--- без суффикса --->
<d:field title="Артикул по метрикам">m.code as m_code</d:field><!--- без суффикса --->
<d:field title="Кол-во компонента по спец." cfSqlType="CF_SQL_NUMERIC">s.component_quantity</d:field>
<d:field title="Кол-во сервиса по спец." cfSqlType="CF_SQL_NUMERIC">s.service_quantity</d:field>
<d:field title="Скидка на сервис" cfSqlType="CF_SQL_NUMERIC">s.service_discount</d:field>
<d:field title="Free Tier" cfSqlType="CF_SQL_NUMERIC">coalesce(ft.free_tier,0) as free_tier</d:field>
<d:field>m.dimension1</d:field>
<d:field title="Тип по спец.">s.type</d:field>
<d:field title="Ед.изм.">m.unit</d:field>
<d:field title="Скидка на сервис" cfSqlType="CF_SQL_NUMERIC">s.service_discount</d:field>
<d:field title="Тип по спец.">s.type</d:field>
<d:field title="Ед.изм.">s.ed_izm</d:field>
<d:field title="Цена &##8381; с НДС" cfSqlType="CF_SQL_NUMERIC">coalesce(s.service_quantity*(100.-s.service_discount)/100.*s.price*(100.-s.component_discount)/100., 0.) as discounted_price</d:field>
<d:field title="Дата НОУ" cfSqlType="CF_SQL_TIMESTAMP">s.serviceStart</d:field>
@@ -540,14 +584,6 @@ SELECT
<d:field title="Ключ строки">s.line_key</d:field>
<d:field title="Цена с НДС" cfSqlType="CF_SQL_NUMERIC">s.price</d:field>
<d:field title="Скидка % на компонент" cfSqlType="CF_SQL_NUMERIC">s.component_discount</d:field>
<d:field title="Сырая метрика" cfSqlType="CF_SQL_NUMERIC">m.raw_metric</d:field>
<d:field title="Приведенная метрика" cfSqlType="CF_SQL_NUMERIC">m.metric</d:field>
<d:field title="Контрагент">c.contragent</d:field>
<d:field title="contragent_uid">c.contragent_uid</d:field>
<d:field title="Ответственный">c.responsible</d:field>
<d:field title="Email отв-го">c.responsible_email</d:field>
<d:field title="Статус отв-го">c.responsible_status</d:field>
<d:field title="Договор">s.contract</d:field>
<d:field title="contract_uid">s.contract_uid</d:field>
<d:field title="Допник">s.additional_agreement</d:field>
@@ -559,22 +595,40 @@ SELECT
<d:field title="Компонент">s.component</d:field>
<d:field title="Клиентс. назв.">s.user_description</d:field>
<d:field title="Pricing Model">CASE s.type WHEN 1 THEN 'install' WHEN 2 THEN 'fix' WHEN 3 THEN 'payg' ELSE NULL END as pricing_model</d:field>
<d:field title="Артикул по метрикам">m.code as m_code</d:field><!--- без суффикса --->
<d:field>m.dimension1</d:field>
<d:field title="Ед.изм.">m.unit</d:field>
<d:field title="Сырая метрика" cfSqlType="CF_SQL_NUMERIC">m.raw_metric</d:field>
<d:field title="Приведенная метрика" cfSqlType="CF_SQL_NUMERIC">m.metric</d:field>
<d:field title="Free Tier" cfSqlType="CF_SQL_NUMERIC">coalesce(ft.free_tier,0) as free_tier</d:field>
<d:field title="Контрагент">c.contragent</d:field>
<d:field title="contragent_uid">c.contragent_uid</d:field>
<d:field title="Ответственный">c.responsible</d:field>
<d:field title="Email отв-го">c.responsible_email</d:field>
<d:field title="Статус отв-го">c.responsible_status</d:field>
<d:field>s.cnt AS occurrences_spec</d:field>
<d:field>m.cnt AS occurrences_metric</d:field>
<!---<d:field>COUNT(*) OVER(PARTITION BY COALESCE(s.wz, m.wz), COALESCE(s.sku_code, m.code)) AS total_row_cardinality</d:field> --->
</d:field_set>
,'***' as delim,s.*
FROM qUnifiedMetric m
<!--- --,'***' as delim,s.* --->
FROM metric m
<cfif local.inner_join>
INNER
<cfelse>
FULL
</cfif>
JOIN qSpec s ON (m.wz=s.wz AND m.code=s.sku_code) -- сервис или компонент, но не цена с типом тарификации, суффикс типа тарификации отрезан
JOIN spec s ON (m.wz=s.wz AND m.code=s.sku_code) -- сервис или компонент, но не цена с типом тарификации, суффикс типа тарификации отрезан
--left outer join (values ('paas.s3.ceph.vol-m',1),('paas.s3.ceph.get-m',10),('paas.s3.ceph.put-m',1),('paas.s3.ceph.trf-m',100)) as ft(code,free_tier) ON (m.code=ft.code)
left outer join (values ('paas.s3.ceph.vol',1),('paas.s3.ceph.get',10),('paas.s3.ceph.put',1),('paas.s3.ceph.trf',100)) as ft(code,free_tier) ON (m.code=ft.code)
LEFT JOIN qContragent c ON ((coalesce(s.wz,m.wz))=(c.wz)) -- пробелы в составе WZ стоили нескольких часов работы
--(поскольку trim слева в джойне катастрофически замедляет работу, делаем чистку выше при формировании исходных резалтсетов)
<!--- --(поскольку trim слева в джойне катастрофически замедляет работу, делаем чистку выше при формировании исходных резалтсетов) --->
WHERE 1=1
<cfif only_articles_in_spec>
AND EXISTS(select * from qSpec qs where qs.wz=m.wz AND qs.type=3)
AND EXISTS(select * from spec qs where qs.wz=m.wz AND qs.type=3)
<!--- вообще-то есть смысл добавить и все строки, где что-то намеряли --->
</cfif>
<cfif len(wz)>
@@ -659,7 +713,7 @@ S3 операции и трафик: <b<cfif datediff("h",qS3OpsTrfAge.dt_load,
<table class="worktable">
<thead>
<td width="1%"></td>
<!--- <th width="3%">WZ</th> --->
<th width="3%"></th>
<th width="7%">Услуга</th>
<th width="7%">Артикул специф.</th>
<th width="5%">Кол-во специф.</th>
@@ -697,8 +751,7 @@ S3 операции и трафик: <b<cfif datediff("h",qS3OpsTrfAge.dt_load,
<td width="5%">Договор</td>
<td width="10%">Допник</td>
<td width="10%">Сделка</td>
<td width="3%">Конечник</td>
<td width="3%">Конечник</td>
</thead>
<cfoutput query="qCharge" group="wz">
@@ -736,6 +789,26 @@ S3 операции и трафик: <b<cfif datediff("h",qS3OpsTrfAge.dt_load,
<!--- детализация --->
<tr<cfif !len(unit)> class="gray"</cfif>>
<td>#currentRow#</a></td>
<td>#occurrences_spec#|#occurrences_metric#
<cfif occurrences_spec EQ 1 AND occurrences_metric EQ 1>
<span style="color:green">EXACT MATCH</span>
<cfelseif occurrences_spec GT 1 AND occurrences_metric GT 1 >
<span style="color:red">CRITICAL: Many-to-Many Explosion (Duplicates on BOTH sides)</span>
<cfelseif occurrences_spec GT 1 >
<span style="color:red">DUPLICATION: Multiple entries for this key in Spec</span>
<cfelseif occurrences_metric GT 1>
<span style="color:red">DUPLICATION: Multiple entries for this key in Metrics</span>
<cfelseif occurrences_spec GT 0 AND NOT occurrences_metric GT 0>
<span style="color:red">ORPHAN: Only in Spec</span>
<cfelseif NOT occurrences_spec GT 0 AND occurrences_metric GT 0>
<span style="color:red">ORPHAN: Only in Metrics</span>
<cfelse>
<span style="color:red">Other Discrepancy</span>
</cfif><!---
-- Key matches 1:1, but numeric values differ
WHEN occurrences_in_a = 1 AND occurrences_in_b = 1 AND amount_a != amount_b
THEN 'KEY MATCH / AMOUNT MISMATCH' --->
</td>
<td>#abstract_service#<cfif len(modifier)>: #modifier#</cfif></a></td>
<td><div<cfif type EQ 3> style="background:lightgreen;color:black;"</cfif>>#s_code#</div></td>
<td class=<cfif type EQ 3 AND component_quantity NEQ 1>"err r"<cfelse>"r"</cfif>>#component_quantity#</td>