- Board: 매뉴얼 CRUD + 첨부파일 API (012_board_ext.sql) - HNS: 분석 CRUD 5개 API (013_hns_analysis.sql) - Prediction: 분석/역추적/오일펜스 7개 API (014_prediction.sql) - Aerial: 미디어/CCTV/위성 6개 API + PostGIS (015_aerial.sql) - Rescue: 구난 작전/시나리오 3개 API + JSONB (016_rescue.sql) - backtrackMockData.ts 삭제 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
131 lines
6.1 KiB
SQL
131 lines
6.1 KiB
SQL
-- ============================================================
|
|
-- 013_hns_analysis.sql
|
|
-- HNS 대기확산 분석 테이블 + 시드 데이터
|
|
-- ============================================================
|
|
|
|
SET search_path TO wing, public;
|
|
|
|
CREATE TABLE IF NOT EXISTS HNS_ANALYSIS (
|
|
HNS_ANLYS_SN SERIAL PRIMARY KEY,
|
|
ACDNT_SN INTEGER REFERENCES ACDNT(ACDNT_SN),
|
|
ANLYS_NM VARCHAR(200) NOT NULL,
|
|
ACDNT_DTM TIMESTAMPTZ,
|
|
LOC_NM VARCHAR(200),
|
|
-- 위치 (표준: LON/LAT/GEOM)
|
|
LON NUMERIC(10,6),
|
|
LAT NUMERIC(9,6),
|
|
GEOM GEOMETRY(Point, 4326),
|
|
LOC_DC VARCHAR(100),
|
|
-- 물질 정보
|
|
SBST_SN INTEGER,
|
|
SBST_NM VARCHAR(100),
|
|
UN_NO VARCHAR(10),
|
|
CAS_NO VARCHAR(20),
|
|
SPIL_QTY NUMERIC(10,2),
|
|
SPIL_UNIT_CD VARCHAR(10) DEFAULT 'KL',
|
|
SPIL_TP_CD VARCHAR(20),
|
|
FCST_HR INTEGER,
|
|
ALGO_CD VARCHAR(20),
|
|
CRIT_MDL_CD VARCHAR(10),
|
|
-- 기상 조건
|
|
WIND_SPD NUMERIC(5,1),
|
|
WIND_DIR VARCHAR(10),
|
|
TEMP NUMERIC(4,1),
|
|
HUMID NUMERIC(4,1),
|
|
ATM_STBL_CD VARCHAR(10),
|
|
-- 실행 상태
|
|
EXEC_STTS_CD VARCHAR(20) DEFAULT 'COMPLETED',
|
|
RISK_CD VARCHAR(20),
|
|
ANALYST_NM VARCHAR(50),
|
|
-- 결과
|
|
RSLT_DATA JSONB,
|
|
USE_YN CHAR(1) DEFAULT 'Y',
|
|
REG_DTM TIMESTAMPTZ DEFAULT NOW(),
|
|
MDFCN_DTM TIMESTAMPTZ DEFAULT NOW(),
|
|
CONSTRAINT CK_HNS_STTS CHECK (EXEC_STTS_CD IN ('PENDING','RUNNING','COMPLETED','FAILED'))
|
|
);
|
|
|
|
-- ============================================================
|
|
-- HNS_ANALYSIS 시드 데이터 (8건 — 기존 mock 데이터 기반)
|
|
-- ============================================================
|
|
|
|
INSERT INTO HNS_ANALYSIS (
|
|
ANLYS_NM, ACDNT_DTM, LOC_NM, LON, LAT, GEOM, LOC_DC,
|
|
SBST_NM, SPIL_QTY, SPIL_UNIT_CD, FCST_HR, ALGO_CD, CRIT_MDL_CD,
|
|
WIND_SPD, WIND_DIR, TEMP, HUMID, ATM_STBL_CD,
|
|
EXEC_STTS_CD, RISK_CD, ANALYST_NM,
|
|
RSLT_DATA, REG_DTM
|
|
) VALUES
|
|
(
|
|
'울산 온산항 톨루엔 누출', '2025-02-11 14:15'::timestamptz,
|
|
'부산항 신항', 129.067, 35.078, ST_SetSRID(ST_MakePoint(129.067, 35.078), 4326), '129.067 + 35.078',
|
|
'톨루엔 (Toluene)', 12.0, 'KL', 24, 'ALOHA', 'AEGL',
|
|
5.2, 'SW', 18.5, 65, 'D',
|
|
'COMPLETED', 'HIGH', '운영팀, 방재팀',
|
|
'{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "1.8 km", "zones": [{"level":"AEGL-3","radius":500},{"level":"AEGL-2","radius":1000},{"level":"AEGL-1","radius":1500}]}'::jsonb,
|
|
'2025-02-11 14:15'::timestamptz
|
|
),
|
|
(
|
|
'여수 엠프시아 누출', '2025-02-09 08:40'::timestamptz,
|
|
'여수항', 127.662, 34.740, ST_SetSRID(ST_MakePoint(127.662, 34.740), 4326), '127.662 + 34.740',
|
|
'벤젠 (Benzene)', 5.0, 'TON', 12, 'ALOHA', 'AEGL',
|
|
4.1, 'NE', 12.3, 58, 'C',
|
|
'COMPLETED', 'HIGH', '남해팀, 방재팀',
|
|
'{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "2.4 km", "zones": [{"level":"AEGL-3","radius":600},{"level":"AEGL-2","radius":1200},{"level":"AEGL-1","radius":1800}]}'::jsonb,
|
|
'2025-02-09 08:40'::timestamptz
|
|
),
|
|
(
|
|
'부산 수소 추진연 폭발', '2025-02-07 12:15'::timestamptz,
|
|
'부산항', 129.043, 35.097, ST_SetSRID(ST_MakePoint(129.043, 35.097), 4326), '129.043 + 35.097',
|
|
'수소 (Hydrogen)', 0.8, 'TON', 6, 'CAMEO', 'AEGL',
|
|
6.5, 'W', 15.0, 55, 'D',
|
|
'COMPLETED', 'CRITICAL', '남해팀, 방재팀',
|
|
'{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "0.22 km", "zones": [{"level":"AEGL-3","radius":100},{"level":"AEGL-2","radius":150},{"level":"AEGL-1","radius":220}]}'::jsonb,
|
|
'2025-02-07 12:15'::timestamptz
|
|
),
|
|
(
|
|
'인천항 메탄올 유출', '2025-02-03 16:50'::timestamptz,
|
|
'인천항', 126.598, 37.449, ST_SetSRID(ST_MakePoint(126.598, 37.449), 4326), '126.598 + 37.449',
|
|
'메탄올 (Methanol)', 8.5, 'KL', 24, 'ALOHA', 'AEGL',
|
|
3.8, 'SE', 8.2, 72, 'E',
|
|
'COMPLETED', 'MEDIUM', '중부팀, 방재팀',
|
|
'{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "1.2 km", "zones": [{"level":"AEGL-3","radius":300},{"level":"AEGL-2","radius":700},{"level":"AEGL-1","radius":1200}]}'::jsonb,
|
|
'2025-02-03 16:50'::timestamptz
|
|
),
|
|
(
|
|
'평택항 LPG 누출', '2025-01-28 09:20'::timestamptz,
|
|
'평택항', 126.822, 36.969, ST_SetSRID(ST_MakePoint(126.822, 36.969), 4326), '126.822 + 36.969',
|
|
'LPG', 3.2, 'TON', 12, 'CAMEO', 'AEGL',
|
|
4.5, 'N', 5.5, 68, 'D',
|
|
'COMPLETED', 'MEDIUM', '중부팀, 방재팀',
|
|
'{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "0.95 km", "zones": [{"level":"AEGL-3","radius":250},{"level":"AEGL-2","radius":550},{"level":"AEGL-1","radius":950}]}'::jsonb,
|
|
'2025-01-28 09:20'::timestamptz
|
|
),
|
|
(
|
|
'광양항 벤젠 누출', '2025-01-22 11:30'::timestamptz,
|
|
'광양항', 127.736, 34.930, ST_SetSRID(ST_MakePoint(127.736, 34.930), 4326), '127.736 + 34.930',
|
|
'벤젠 (Benzene)', 6.0, 'KL', 24, 'ALOHA', 'AEGL',
|
|
3.2, 'S', 10.1, 60, 'C',
|
|
'COMPLETED', 'LOW', '남해팀, 방재팀',
|
|
'{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "1.5 km", "zones": [{"level":"AEGL-3","radius":400},{"level":"AEGL-2","radius":800},{"level":"AEGL-1","radius":1500}]}'::jsonb,
|
|
'2025-01-22 11:30'::timestamptz
|
|
),
|
|
(
|
|
'목포항 염소스가 유출', '2025-01-15 14:10'::timestamptz,
|
|
'서구항', 126.392, 34.793, ST_SetSRID(ST_MakePoint(126.392, 34.793), 4326), '126.392 + 34.793',
|
|
'염소 (Chlorine)', 2.0, 'TON', 12, 'CAMEO', 'AEGL',
|
|
5.0, 'NW', 7.5, 62, 'D',
|
|
'COMPLETED', 'LOW', '서해팀, 방재팀',
|
|
'{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "1.0 km", "zones": [{"level":"AEGL-3","radius":300},{"level":"AEGL-2","radius":600},{"level":"AEGL-1","radius":1000}]}'::jsonb,
|
|
'2025-01-15 14:10'::timestamptz
|
|
),
|
|
(
|
|
'제주 에탄올링 탱크 파열', '2025-01-08 07:55'::timestamptz,
|
|
'제주항', 126.528, 33.519, ST_SetSRID(ST_MakePoint(126.528, 33.519), 4326), '126.528 + 33.519',
|
|
'에탄올 (Ethanol)', 1.5, 'TON', 6, 'CAMEO', 'AEGL',
|
|
6.8, 'NE', 12.0, 55, 'C',
|
|
'COMPLETED', 'LOW', '제주팀, 일대팀',
|
|
'{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "0.8 km", "zones": [{"level":"AEGL-3","radius":200},{"level":"AEGL-2","radius":450},{"level":"AEGL-1","radius":800}]}'::jsonb,
|
|
'2025-01-08 07:55'::timestamptz
|
|
);
|