- DB 스키마: ASSET_ORG, ASSET_EQUIP, ASSET_CONTACT, ASSET_UPLOAD_LOG 4개 테이블 - 초기 데이터: 84개 기관, 469개 장비, 86개 담당자 시드 - 백엔드: assetsService + assetsRouter (기관 목록/상세/업로드이력 3개 API) - 프론트: AssetManagement, AssetMap, AssetUpload mock → API 호출 전환 - ShipInsurance: 외부 API 의존 데모 데이터 컴포넌트 내부 상수로 이동 - assetMockData.ts 의존성 완전 제거 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
84 lines
4.4 KiB
SQL
84 lines
4.4 KiB
SQL
-- ============================================================
|
|
-- 008_assets.sql — 방제자산 테이블 (기관 + 장비 + 담당자)
|
|
-- ============================================================
|
|
|
|
SET search_path TO wing;
|
|
|
|
-- ============================================================
|
|
-- 1. 기관/조직 마스터
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS ASSET_ORG (
|
|
ORG_SN SERIAL PRIMARY KEY,
|
|
ORG_TP VARCHAR(30) NOT NULL, -- 유형: 해경관할, 해경경찰서, 파출소, 관련기관, 해양환경공단, 업체, 지자체, 기름저장시설, 정유사, 해군, 기타
|
|
JRSD_NM VARCHAR(50) NOT NULL, -- 관할청명: 중부지방해양경찰청, 서해지방해양경찰청 등
|
|
AREA_NM VARCHAR(30) NOT NULL, -- 지역명: 인천, 여수, 부산 등
|
|
ORG_NM VARCHAR(100) NOT NULL, -- 기관명
|
|
ADDR VARCHAR(300), -- 주소
|
|
TEL VARCHAR(30), -- 대표 전화
|
|
LAT NUMERIC(9,6), -- 위도
|
|
LNG NUMERIC(10,6), -- 경도
|
|
PIN_SIZE VARCHAR(5) DEFAULT 'md', -- 지도 핀 크기: hq, lg, md
|
|
VESSEL_CNT SMALLINT DEFAULT 0, -- 방제선 수
|
|
SKIMMER_CNT SMALLINT DEFAULT 0, -- 유회수기 수
|
|
PUMP_CNT SMALLINT DEFAULT 0, -- 이송펌프 수
|
|
VEHICLE_CNT SMALLINT DEFAULT 0, -- 방제차량 수
|
|
SPRAYER_CNT SMALLINT DEFAULT 0, -- 살포장치 수
|
|
TOTAL_ASSETS SMALLINT DEFAULT 0, -- 총 자산 수
|
|
USE_YN CHAR(1) DEFAULT 'Y',
|
|
REG_DTM TIMESTAMPTZ DEFAULT NOW(),
|
|
MDFCN_DTM TIMESTAMPTZ,
|
|
CONSTRAINT CK_ASSET_ORG_PIN CHECK (PIN_SIZE IN ('hq','lg','md'))
|
|
);
|
|
|
|
-- ============================================================
|
|
-- 2. 장비 상세
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS ASSET_EQUIP (
|
|
EQUIP_SN SERIAL PRIMARY KEY,
|
|
ORG_SN INTEGER NOT NULL REFERENCES ASSET_ORG(ORG_SN) ON DELETE CASCADE,
|
|
CTGR_NM VARCHAR(50) NOT NULL, -- 장비 카테고리: 방제선, 유회수기, 비치크리너, ...
|
|
ICON VARCHAR(10), -- 이모지 아이콘
|
|
QTY SMALLINT DEFAULT 0, -- 수량
|
|
SORT_ORD SMALLINT DEFAULT 0,
|
|
UNIQUE(ORG_SN, CTGR_NM)
|
|
);
|
|
|
|
-- ============================================================
|
|
-- 3. 담당자
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS ASSET_CONTACT (
|
|
CONTACT_SN SERIAL PRIMARY KEY,
|
|
ORG_SN INTEGER NOT NULL REFERENCES ASSET_ORG(ORG_SN) ON DELETE CASCADE,
|
|
ROLE_NM VARCHAR(50), -- 역할: 방제과장, 방제담당, 담당 등
|
|
CONTACT_NM VARCHAR(50), -- 이름
|
|
TEL VARCHAR(30), -- 전화번호
|
|
SORT_ORD SMALLINT DEFAULT 0
|
|
);
|
|
|
|
-- ============================================================
|
|
-- 4. 업로드 이력
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS ASSET_UPLOAD_LOG (
|
|
LOG_SN SERIAL PRIMARY KEY,
|
|
FILE_NM VARCHAR(200) NOT NULL, -- 파일명
|
|
UPLOADER_NM VARCHAR(50), -- 업로더 이름/부서
|
|
UPLOAD_CNT INTEGER DEFAULT 0, -- 처리 건수
|
|
REG_DTM TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
-- ============================================================
|
|
-- 인덱스
|
|
-- ============================================================
|
|
CREATE INDEX IF NOT EXISTS IDX_ASSET_ORG_JRSD ON ASSET_ORG(JRSD_NM);
|
|
CREATE INDEX IF NOT EXISTS IDX_ASSET_ORG_TP ON ASSET_ORG(ORG_TP);
|
|
CREATE INDEX IF NOT EXISTS IDX_ASSET_EQUIP_ORG ON ASSET_EQUIP(ORG_SN);
|
|
CREATE INDEX IF NOT EXISTS IDX_ASSET_CONTACT_ORG ON ASSET_CONTACT(ORG_SN);
|
|
|
|
-- ============================================================
|
|
-- 초기 데이터: 업로드 이력 샘플
|
|
-- ============================================================
|
|
INSERT INTO ASSET_UPLOAD_LOG (FILE_NM, UPLOADER_NM, UPLOAD_CNT, REG_DTM) VALUES
|
|
('여수서_장비자재_2601.xlsx', '남해청_방제과', 45, '2026-01-25 14:30:00+09'),
|
|
('인천서_오일펜스현황.xlsx', '중부청_방제과', 12, '2026-01-22 10:15:00+09'),
|
|
('전체_방제정_현황.xlsx', '본청_방제과', 18, '2026-01-20 09:00:00+09');
|