- 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>
183 lines
10 KiB
SQL
183 lines
10 KiB
SQL
-- ============================================================
|
|
-- 016_rescue.sql — 구조 시나리오(Rescue) 탭 테이블 + 초기 데이터
|
|
-- RESCUE_OPS (5건), RESCUE_SCENARIO (5건)
|
|
-- ============================================================
|
|
|
|
SET search_path TO wing, public;
|
|
|
|
-- ============================================================
|
|
-- 1. RESCUE_OPS — 구조 작전 정보
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS RESCUE_OPS (
|
|
RESCUE_OPS_SN SERIAL PRIMARY KEY,
|
|
ACDNT_SN INTEGER REFERENCES ACDNT(ACDNT_SN),
|
|
OPS_CD VARCHAR(20) NOT NULL UNIQUE,
|
|
ACDNT_TP_CD VARCHAR(20),
|
|
VESSEL_NM VARCHAR(100),
|
|
COMMANDER_NM VARCHAR(50),
|
|
LON NUMERIC(10,6),
|
|
LAT NUMERIC(9,6),
|
|
GEOM GEOMETRY(Point, 4326),
|
|
LOC_DC VARCHAR(100),
|
|
DEPTH_M NUMERIC(6,1),
|
|
CURRENT_DC VARCHAR(50),
|
|
GM_M NUMERIC(5,2),
|
|
LIST_DEG NUMERIC(5,1),
|
|
TRIM_M NUMERIC(5,2),
|
|
BUOYANCY_PCT NUMERIC(5,1),
|
|
OIL_RATE_LPM NUMERIC(8,1),
|
|
BM_RATIO_PCT NUMERIC(5,1),
|
|
TOTAL_CREW INTEGER,
|
|
SURVIVORS INTEGER,
|
|
MISSING INTEGER,
|
|
HYDRO_DATA JSONB,
|
|
GMDSS_DATA JSONB,
|
|
STTS_CD VARCHAR(20) DEFAULT 'ACTIVE',
|
|
USE_YN CHAR(1) DEFAULT 'Y',
|
|
REG_DTM TIMESTAMPTZ DEFAULT NOW(),
|
|
MDFCN_DTM TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_rescue_ops_acdnt ON RESCUE_OPS(ACDNT_SN);
|
|
CREATE INDEX IF NOT EXISTS idx_rescue_ops_geom ON RESCUE_OPS USING GIST(GEOM);
|
|
|
|
-- ============================================================
|
|
-- 2. RESCUE_SCENARIO — 시나리오 타임스텝
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS RESCUE_SCENARIO (
|
|
SCENARIO_SN SERIAL PRIMARY KEY,
|
|
RESCUE_OPS_SN INTEGER NOT NULL REFERENCES RESCUE_OPS(RESCUE_OPS_SN) ON DELETE CASCADE,
|
|
TIME_STEP VARCHAR(10) NOT NULL,
|
|
SCENARIO_DTM TIMESTAMPTZ,
|
|
SVRT_CD VARCHAR(20),
|
|
GM_M NUMERIC(5,2),
|
|
LIST_DEG NUMERIC(5,1),
|
|
TRIM_M NUMERIC(5,2),
|
|
BUOYANCY_PCT NUMERIC(5,1),
|
|
OIL_RATE_LPM NUMERIC(8,1),
|
|
BM_RATIO_PCT NUMERIC(5,1),
|
|
DESCRIPTION TEXT,
|
|
COMPARTMENTS JSONB,
|
|
ASSESSMENT JSONB,
|
|
ACTIONS JSONB,
|
|
SORT_ORD INTEGER DEFAULT 0,
|
|
REG_DTM TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_rescue_scenario_ops ON RESCUE_SCENARIO(RESCUE_OPS_SN);
|
|
|
|
-- ============================================================
|
|
-- 3. RESCUE_OPS 시드 데이터 (5건)
|
|
-- ============================================================
|
|
INSERT INTO RESCUE_OPS (
|
|
ACDNT_SN, OPS_CD, ACDNT_TP_CD, VESSEL_NM, COMMANDER_NM,
|
|
LON, LAT, GEOM, LOC_DC, DEPTH_M, CURRENT_DC,
|
|
GM_M, LIST_DEG, TRIM_M, BUOYANCY_PCT, OIL_RATE_LPM, BM_RATIO_PCT,
|
|
TOTAL_CREW, SURVIVORS, MISSING,
|
|
HYDRO_DATA, GMDSS_DATA,
|
|
STTS_CD, USE_YN
|
|
) VALUES
|
|
(
|
|
1, 'RSC-2026-001', 'collision', 'M/V SEA GUARDIAN', NULL,
|
|
126.25, 37.467,
|
|
ST_SetSRID(ST_MakePoint(126.25::float, 37.467::float), 4326),
|
|
'37°28''N, 126°15''E', 25.0, '2.5kn NE',
|
|
0.8, 15.0, 2.5, 30.0, 100.0, 92.0,
|
|
20, 15, 5,
|
|
'{"displacement":"8,420t","draft":"5.8m","kg":"6.2m","km":"6.9m","tpc":"18.5","mtc":"195"}',
|
|
'{"mmsi":"440234567","dscAlert":"VHF Ch.16 자동발신"}',
|
|
'ACTIVE', 'Y'
|
|
),
|
|
(
|
|
2, 'RSC-2026-002', 'grounding', 'M/V OCEAN BREEZE', NULL,
|
|
128.62, 35.09,
|
|
ST_SetSRID(ST_MakePoint(128.62::float, 35.09::float), 4326),
|
|
'35°05''N, 128°37''E', 12.0, '1.8kn SW',
|
|
0.3, 22.0, 4.8, 15.0, 250.0, 78.0,
|
|
18, 18, 0,
|
|
NULL, NULL,
|
|
'ACTIVE', 'Y'
|
|
),
|
|
(
|
|
3, 'RSC-2026-003', 'flooding', 'F/V DONG JIN', NULL,
|
|
129.08, 35.15,
|
|
ST_SetSRID(ST_MakePoint(129.08::float, 35.15::float), 4326),
|
|
'35°09''N, 129°05''E', 30.0, '3.0kn N',
|
|
0.5, 8.0, 1.5, 45.0, 50.0, 85.0,
|
|
8, 7, 1,
|
|
NULL, NULL,
|
|
'ACTIVE', 'Y'
|
|
),
|
|
(
|
|
4, 'RSC-2025-045', 'capsizing', 'M/V PACIFIC STAR', NULL,
|
|
126.57, 33.24,
|
|
ST_SetSRID(ST_MakePoint(126.57::float, 33.24::float), 4326),
|
|
'33°14''N, 126°34''E', 45.0, '2.0kn SE',
|
|
0.1, 35.0, 6.0, 10.0, 300.0, 65.0,
|
|
25, 20, 5,
|
|
NULL, NULL,
|
|
'RESOLVED', 'Y'
|
|
),
|
|
(
|
|
5, 'RSC-2025-040', 'turning', 'M/V GOLDEN WAVE', NULL,
|
|
127.68, 34.73,
|
|
ST_SetSRID(ST_MakePoint(127.68::float, 34.73::float), 4326),
|
|
'34°44''N, 127°41''E', 18.0, '1.5kn W',
|
|
1.2, 5.0, 0.8, 65.0, 20.0, 95.0,
|
|
12, 12, 0,
|
|
NULL, NULL,
|
|
'RESOLVED', 'Y'
|
|
);
|
|
|
|
-- ============================================================
|
|
-- 4. RESCUE_SCENARIO 시드 데이터 (5건, RESCUE_OPS_SN=1 기준)
|
|
-- ============================================================
|
|
INSERT INTO RESCUE_SCENARIO (
|
|
RESCUE_OPS_SN, TIME_STEP, SCENARIO_DTM, SVRT_CD,
|
|
GM_M, LIST_DEG, TRIM_M, BUOYANCY_PCT, OIL_RATE_LPM, BM_RATIO_PCT,
|
|
DESCRIPTION, COMPARTMENTS, ASSESSMENT, ACTIONS, SORT_ORD
|
|
) VALUES
|
|
(
|
|
1, 'T+0h', '2024-10-27 10:30:00+09', 'CRITICAL',
|
|
0.8, 15.0, 2.5, 30.0, 100.0, 92.0,
|
|
'좌현 35° 충돌로 No.1P 화물탱크 파공, 벙커C유 유출 개시. 좌현 경사 15°, GM 위험수준.',
|
|
'[{"name":"#1 FP Tank","status":"FLOODED","color":"var(--red)"},{"name":"#1 Port Tank","status":"BREACHED","color":"var(--red)"},{"name":"#2 Port Tank","status":"RISK","color":"var(--orange)"},{"name":"Engine Room","status":"INTACT","color":"var(--green)"},{"name":"#3 Stbd Tank","status":"INTACT","color":"var(--green)"}]',
|
|
'[{"label":"복원력","value":"위험 (GM < 1.0m)","color":"var(--red)"},{"label":"유출 위험","value":"활발 유출중","color":"var(--red)"},{"label":"선체 강도","value":"BM 92% (경계)","color":"var(--orange)"},{"label":"승선인원","value":"15/20 확인, 5명 수색중","color":"var(--red)"}]',
|
|
'[{"time":"10:30","text":"충돌 발생, VHF Ch.16 조난 통보","color":"var(--red)"},{"time":"10:35","text":"해경 3009함 출동 지시","color":"var(--orange)"},{"time":"10:42","text":"인근 선박 구조 활동 개시","color":"var(--cyan)"},{"time":"10:50","text":"유출유 방제선 배치 요청","color":"var(--orange)"}]',
|
|
1
|
|
),
|
|
(
|
|
1, 'T+2h', '2024-10-27 12:30:00+09', 'HIGH',
|
|
0.6, 18.0, 3.2, 25.0, 150.0, 88.0,
|
|
'침수 확대로 경사 증가, 유출량 증가 추세. 긴급 이초 작업 검토 필요.',
|
|
'[{"name":"#1 FP Tank","status":"FLOODED","color":"var(--red)"},{"name":"#1 Port Tank","status":"FLOODED","color":"var(--red)"},{"name":"#2 Port Tank","status":"FLOODED","color":"var(--red)"},{"name":"Engine Room","status":"RISK","color":"var(--orange)"},{"name":"#3 Stbd Tank","status":"INTACT","color":"var(--green)"}]',
|
|
'[{"label":"복원력","value":"위험 (GM 0.6m)","color":"var(--red)"},{"label":"유출 위험","value":"증가 추세","color":"var(--red)"},{"label":"선체 강도","value":"BM 88%","color":"var(--orange)"},{"label":"승선인원","value":"전원 퇴선 완료","color":"var(--green)"}]',
|
|
'[{"time":"12:00","text":"2차 침수 확인 (#2 PT)","color":"var(--red)"},{"time":"12:15","text":"긴급 이초 작업 개시","color":"var(--orange)"},{"time":"12:20","text":"오일펜스 1차 전개 완료","color":"var(--cyan)"},{"time":"12:30","text":"항공기 유출유 촬영 요청","color":"var(--cyan)"}]',
|
|
2
|
|
),
|
|
(
|
|
1, 'T+6h', '2024-10-27 16:30:00+09', 'HIGH',
|
|
0.4, 12.0, 2.8, 35.0, 80.0, 90.0,
|
|
'평형수 이동으로 경사 일부 복원. 유출률 감소 추세.',
|
|
'[{"name":"#1 FP Tank","status":"FLOODED","color":"var(--red)"},{"name":"#1 Port Tank","status":"FLOODED","color":"var(--red)"},{"name":"#2 Port Tank","status":"FLOODED","color":"var(--red)"},{"name":"Engine Room","status":"RISK","color":"var(--orange)"},{"name":"#3 Stbd Tank","status":"RISK","color":"var(--orange)"}]',
|
|
'[{"label":"복원력","value":"개선 추세 (GM 0.4m)","color":"var(--orange)"},{"label":"유출 위험","value":"감소 추세","color":"var(--orange)"},{"label":"선체 강도","value":"BM 90%","color":"var(--orange)"},{"label":"구조 상황","value":"구조 작전 진행중","color":"var(--cyan)"}]',
|
|
'[{"time":"14:00","text":"평형수 이동 작업 개시","color":"var(--cyan)"},{"time":"15:00","text":"해상크레인 도착","color":"var(--cyan)"},{"time":"15:30","text":"잔류유 이적 작업 개시","color":"var(--orange)"},{"time":"16:30","text":"예인준비 완료","color":"var(--green)"}]',
|
|
3
|
|
),
|
|
(
|
|
1, 'T+12h', '2024-10-27 22:30:00+09', 'MEDIUM',
|
|
0.6, 8.0, 1.5, 50.0, 30.0, 94.0,
|
|
'예인 작업 진행중, 선체 안정화 확인. 유출 대부분 차단.',
|
|
'[{"name":"#1 FP Tank","status":"FLOODED","color":"var(--red)"},{"name":"#1 Port Tank","status":"FLOODED","color":"var(--red)"},{"name":"#2 Port Tank","status":"SEALED","color":"var(--orange)"},{"name":"Engine Room","status":"INTACT","color":"var(--green)"},{"name":"#3 Stbd Tank","status":"INTACT","color":"var(--green)"}]',
|
|
'[{"label":"복원력","value":"안정 (GM 0.6m)","color":"var(--orange)"},{"label":"유출 위험","value":"대부분 차단","color":"var(--green)"},{"label":"선체 강도","value":"BM 94%","color":"var(--green)"},{"label":"예인 상태","value":"목포항 예인 진행중","color":"var(--cyan)"}]',
|
|
'[{"time":"18:00","text":"예인 개시 (목포항 방향)","color":"var(--cyan)"},{"time":"19:00","text":"유출유 차단 확인","color":"var(--green)"},{"time":"20:00","text":"야간 감시 체제 전환","color":"var(--orange)"},{"time":"22:30","text":"예인 50% 진행","color":"var(--cyan)"}]',
|
|
4
|
|
),
|
|
(
|
|
1, 'T+24h', '2024-10-28 10:30:00+09', 'RESOLVED',
|
|
1.2, 3.0, 0.5, 75.0, 5.0, 98.0,
|
|
'목포항 도착, 선체 안정. 잔류유 이적 완료.',
|
|
'[{"name":"#1 FP Tank","status":"SEALED","color":"var(--orange)"},{"name":"#1 Port Tank","status":"SEALED","color":"var(--orange)"},{"name":"#2 Port Tank","status":"SEALED","color":"var(--orange)"},{"name":"Engine Room","status":"INTACT","color":"var(--green)"},{"name":"#3 Stbd Tank","status":"INTACT","color":"var(--green)"}]',
|
|
'[{"label":"복원력","value":"안전 (GM 1.2m)","color":"var(--green)"},{"label":"유출 위험","value":"차단 완료","color":"var(--green)"},{"label":"선체 강도","value":"BM 98% 정상","color":"var(--green)"},{"label":"예인 상태","value":"목포항 접안 완료","color":"var(--green)"}]',
|
|
'[{"time":"06:00","text":"목포항 접근","color":"var(--cyan)"},{"time":"08:00","text":"도선사 승선, 접안 개시","color":"var(--cyan)"},{"time":"09:30","text":"접안 완료","color":"var(--green)"},{"time":"10:30","text":"잔류유 이적 완료, 상황 종료","color":"var(--green)"}]',
|
|
5
|
|
);
|