Добавить reglament.sql
This commit is contained in:
+182
@@ -0,0 +1,182 @@
|
||||
-- =============================================================================
|
||||
-- Отчет по регламентным работам для периферийного оборудования (на месяц)
|
||||
-- =============================================================================
|
||||
|
||||
WITH
|
||||
-- 1. Получаем уникальные устройства из Zabbix и размножаем их
|
||||
devices_raw AS (
|
||||
SELECT DISTINCT
|
||||
h.host AS host_name,
|
||||
COALESCE(h.name, h.host) AS visible_name,
|
||||
COALESCE(hinv."name", 'не указан') AS equipment_type,
|
||||
COALESCE(hinv.notes, '') AS object_number,
|
||||
CASE
|
||||
WHEN hinv.location_lat IS NOT NULL AND hinv.location_lon IS NOT NULL
|
||||
AND hinv.location_lat != '' AND hinv.location_lon != ''
|
||||
THEN hinv.location_lat || ' / ' || hinv.location_lon
|
||||
WHEN hinv.location_lat IS NOT NULL AND hinv.location_lat != ''
|
||||
THEN hinv.location_lat
|
||||
WHEN hinv.location_lon IS NOT NULL AND hinv.location_lon != ''
|
||||
THEN hinv.location_lon
|
||||
ELSE ''
|
||||
END AS coordinates,
|
||||
CAST(nullif(regexp_replace(hinv.notes, 'ОБЪЕКТ №\s*', '', 'g'),'') AS INTEGER) AS object_num
|
||||
FROM hosts h
|
||||
LEFT JOIN host_inventory hinv
|
||||
ON hinv.hostid = h.hostid
|
||||
WHERE
|
||||
h.status = 0
|
||||
AND h.host NOT LIKE '%WiMAX'
|
||||
AND hinv."name" NOT LIKE '%Датчик дорожного полотна%'
|
||||
AND hinv."name" != 'Дорожный контроллер Синтез-Д'
|
||||
AND (CAST(nullif(regexp_replace(hinv.notes, 'ОБЪЕКТ №\s*', '', 'g'),'') AS INTEGER)
|
||||
IN (1,2,4,5,8,9,11,12,14,24,25,27,28,29,30,31,32,34,35,36,38,40,41,42,43,44,45,46,48,49,50,51,53,54,55,57,58,60,62,63,64,65,66,67,68,69,70,76,77,81,82,84,85)
|
||||
OR CAST(nullif(regexp_replace(hinv.notes, 'ОБЪЕКТ №\s*', '', 'g'),'') AS INTEGER)
|
||||
IN (16,39,75,23))
|
||||
AND h.hostid != 10725
|
||||
AND (
|
||||
hinv."name" LIKE '%Видеокамера%'
|
||||
OR hinv."name" LIKE '%Маршрутизатор%'
|
||||
OR hinv."name" LIKE '%Детектор%'
|
||||
OR hinv."name" LIKE '%Метеостанция%'
|
||||
OR hinv."name" LIKE '%Коммутационный шкаф%'
|
||||
)
|
||||
),
|
||||
|
||||
-- Размножаем устройства: если есть Маршрутизатор и Коммутационный шкаф, создаем две записи
|
||||
devices AS (
|
||||
-- Видеокамеры
|
||||
SELECT
|
||||
host_name,
|
||||
visible_name,
|
||||
equipment_type,
|
||||
'Видеокамера' AS report_type,
|
||||
equipment_type AS full_equipment_name,
|
||||
object_number,
|
||||
coordinates,
|
||||
object_num
|
||||
FROM devices_raw
|
||||
WHERE equipment_type LIKE '%Видеокамера%'
|
||||
|
||||
UNION ALL
|
||||
|
||||
-- Детекторы
|
||||
SELECT
|
||||
host_name,
|
||||
visible_name,
|
||||
equipment_type,
|
||||
'Детектор' AS report_type,
|
||||
equipment_type AS full_equipment_name,
|
||||
object_number,
|
||||
coordinates,
|
||||
object_num
|
||||
FROM devices_raw
|
||||
WHERE equipment_type LIKE '%Детектор%'
|
||||
|
||||
UNION ALL
|
||||
|
||||
-- Маршрутизаторы (если есть слово Маршрутизатор)
|
||||
SELECT
|
||||
host_name,
|
||||
visible_name,
|
||||
equipment_type,
|
||||
'Маршрутизатор' AS report_type,
|
||||
REGEXP_REPLACE(equipment_type, '/ Коммутационный шкаф.*$', '') AS full_equipment_name,
|
||||
object_number,
|
||||
coordinates,
|
||||
object_num
|
||||
FROM devices_raw
|
||||
WHERE equipment_type LIKE '%Маршрутизатор%'
|
||||
|
||||
UNION ALL
|
||||
|
||||
-- Коммутационные шкафы (если есть слово Коммутационный шкаф)
|
||||
SELECT
|
||||
host_name,
|
||||
visible_name,
|
||||
equipment_type,
|
||||
'Коммутационный шкаф' AS report_type,
|
||||
'Коммутационный шкаф' AS full_equipment_name,
|
||||
object_number,
|
||||
coordinates,
|
||||
object_num
|
||||
FROM devices_raw
|
||||
WHERE equipment_type LIKE '%Коммутационный шкаф%'
|
||||
|
||||
UNION ALL
|
||||
|
||||
-- Метеостанции
|
||||
SELECT
|
||||
host_name,
|
||||
visible_name,
|
||||
equipment_type,
|
||||
'Метеостанция' AS report_type,
|
||||
equipment_type AS full_equipment_name,
|
||||
object_number,
|
||||
coordinates,
|
||||
object_num
|
||||
FROM devices_raw
|
||||
WHERE equipment_type LIKE '%Метеостанция%'
|
||||
),
|
||||
|
||||
-- 2. Соединяем устройства с регламентными работами
|
||||
report_base AS (
|
||||
SELECT
|
||||
d.host_name,
|
||||
d.visible_name,
|
||||
d.equipment_type,
|
||||
d.report_type,
|
||||
d.full_equipment_name,
|
||||
d.object_number,
|
||||
d.coordinates,
|
||||
d.object_num,
|
||||
TO_CHAR(
|
||||
CASE
|
||||
WHEN ${end_dt} IS NOT NULL THEN to_date(${end_dt}, 'yyyymmdd')
|
||||
ELSE NOW()::date
|
||||
END,
|
||||
'DD.MM.YYYY'
|
||||
) AS report_date,
|
||||
r.briefdescription AS work_description,
|
||||
r."Result" AS work_result,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY d.host_name, d.report_type
|
||||
ORDER BY r.briefdescription
|
||||
) AS work_num
|
||||
FROM devices d
|
||||
CROSS JOIN report.reglamentsuka r
|
||||
WHERE
|
||||
d.report_type = r."type"
|
||||
)
|
||||
|
||||
-- 3. Финальный вывод
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (
|
||||
ORDER BY
|
||||
object_num NULLS LAST,
|
||||
CASE report_type
|
||||
WHEN 'Видеокамера' THEN 1
|
||||
WHEN 'Детектор' THEN 2
|
||||
WHEN 'Маршрутизатор' THEN 3
|
||||
WHEN 'Коммутационный шкаф' THEN 4
|
||||
WHEN 'Метеостанция' THEN 5
|
||||
ELSE 6
|
||||
END,
|
||||
host_name,
|
||||
work_num
|
||||
) AS "№ п/п",
|
||||
-- Формируем название оборудования
|
||||
CASE
|
||||
WHEN report_type = 'Коммутационный шкаф' THEN 'Коммутационный шкаф'
|
||||
WHEN report_type = 'Маршрутизатор' THEN 'Маршрутизатор'
|
||||
WHEN report_type IN ('Видеокамера', 'Детектор', 'Метеостанция')
|
||||
THEN full_equipment_name
|
||||
ELSE full_equipment_name
|
||||
END AS "Оборудование",
|
||||
object_num AS "Объект",
|
||||
coordinates AS "Координаты",
|
||||
work_description AS "Описание_работ",
|
||||
report_date AS "Дата",
|
||||
work_result AS "Результат"
|
||||
FROM report_base
|
||||
ORDER BY "№ п/п";
|
||||
Reference in New Issue
Block a user