Files
jongryangje/writable/database/order_tables.sql
javamon1174 d9d3ef46c1 Phase 3 발주/입고/재고 관리 구현
- DB: bag_order, bag_order_item, bag_receiving, bag_inventory 테이블
- 발주: UUID v4, SHA-256 해시, LOT번호 자동생성, 봉투별 품목 관리
  - 포장단위 연동 (박스→낱장 자동 환산), 단가 연동 (금액 자동 계산)
  - 발주 현황 (기간/상태 필터), 상세 조회, 취소/삭제 (상태 변경)
- 입고: 발주건 기반 입고 처리, 박스→낱장 환산, 재고 자동 가산
- 재고: 지자체별 봉투 종류별 현재 재고 조회
- E2E 테스트 7개 전체 통과

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 18:13:01 +09:00

74 lines
3.8 KiB
SQL

-- ============================================
-- 발주/입고 관리 테이블 (Phase 3)
-- ============================================
-- 발주 (P3-01~04)
CREATE TABLE IF NOT EXISTS `bag_order` (
`bo_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`bo_uuid` CHAR(36) NOT NULL COMMENT 'UUID v4',
`bo_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '발주 버전',
`bo_lg_idx` INT UNSIGNED NOT NULL COMMENT '지자체 FK',
`bo_gugun_code` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '구/군 코드',
`bo_dong_code` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '동 코드',
`bo_company_idx` INT UNSIGNED NULL COMMENT '제작업체 FK (company)',
`bo_agency_idx` INT UNSIGNED NULL COMMENT '입고처(대행소) FK (sales_agency)',
`bo_fee_rate` DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT '수수료율(%)',
`bo_order_date` DATE NOT NULL COMMENT '발주일',
`bo_lot_no` VARCHAR(50) NOT NULL DEFAULT '' COMMENT 'LOT 번호',
`bo_hash` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'SHA-256 해시',
`bo_status` VARCHAR(10) NOT NULL DEFAULT 'normal' COMMENT 'normal/cancelled/deleted',
`bo_orderer_idx` INT UNSIGNED NULL COMMENT '발주자 mb_idx',
`bo_regdate` DATETIME NOT NULL,
`bo_moddate` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`bo_idx`),
UNIQUE KEY `uk_bo_uuid_ver` (`bo_uuid`, `bo_version`),
KEY `idx_bo_lg_idx` (`bo_lg_idx`),
KEY `idx_bo_status` (`bo_status`),
KEY `idx_bo_order_date` (`bo_order_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='발주';
-- 발주 상세 (봉투 종류별 수량)
CREATE TABLE IF NOT EXISTS `bag_order_item` (
`boi_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`boi_bo_idx` INT UNSIGNED NOT NULL COMMENT 'bag_order FK',
`boi_bag_code` VARCHAR(50) NOT NULL COMMENT '봉투코드(code_detail O)',
`boi_bag_name` VARCHAR(100) NOT NULL DEFAULT '',
`boi_unit_price` DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '발주 단가',
`boi_qty_box` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '발주 박스 수',
`boi_qty_sheet` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '낱장 환산 수량',
`boi_amount` DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT '금액(단가*낱장수)',
PRIMARY KEY (`boi_idx`),
KEY `idx_boi_bo_idx` (`boi_bo_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='발주 상세';
-- 입고 (P3-06~09)
CREATE TABLE IF NOT EXISTS `bag_receiving` (
`br_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`br_bo_idx` INT UNSIGNED NOT NULL COMMENT 'bag_order FK',
`br_lg_idx` INT UNSIGNED NOT NULL,
`br_bag_code` VARCHAR(50) NOT NULL,
`br_bag_name` VARCHAR(100) NOT NULL DEFAULT '',
`br_qty_box` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '입고 박스 수',
`br_qty_sheet` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '입고 낱장 수',
`br_receive_date` DATE NOT NULL,
`br_receiver_idx` INT UNSIGNED NULL COMMENT '인수자 mb_idx',
`br_sender_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '인계자명',
`br_type` VARCHAR(20) NOT NULL DEFAULT 'scanner' COMMENT 'scanner/batch',
`br_regdate` DATETIME NOT NULL,
PRIMARY KEY (`br_idx`),
KEY `idx_br_bo_idx` (`br_bo_idx`),
KEY `idx_br_lg_idx` (`br_lg_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='발주 입고';
-- 재고 (P3-10)
CREATE TABLE IF NOT EXISTS `bag_inventory` (
`bi_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`bi_lg_idx` INT UNSIGNED NOT NULL,
`bi_bag_code` VARCHAR(50) NOT NULL,
`bi_bag_name` VARCHAR(100) NOT NULL DEFAULT '',
`bi_qty` INT NOT NULL DEFAULT 0 COMMENT '현재 재고(낱장)',
`bi_updated_at` DATETIME NOT NULL,
PRIMARY KEY (`bi_idx`),
UNIQUE KEY `uk_bi_lg_bag` (`bi_lg_idx`, `bi_bag_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='봉투 재고';