Phase 4 주문접수/판매/반품/불출 관리 구현

- DB: shop_order, shop_order_item, bag_sale, bag_issue 테이블
- 주문접수: 지정판매소 선택, 품목별 수량, 소비자가 연동, 포장단위 환산
  - 접수/취소, 배달일 기간 필터
- 판매/반품: 지정판매소별 봉투 판매+반품, 재고 자동 감산/가산
- 무료용 불출: 연도/분기/불출처/봉투코드, 재고 감산, 취소 시 복원
- E2E 테스트 7개 전체 통과

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
javamon1174
2026-03-25 18:22:30 +09:00
parent d9d3ef46c1
commit 6e8bd84182
16 changed files with 1017 additions and 0 deletions

View File

@@ -0,0 +1,81 @@
-- ============================================
-- 주문/판매/불출 관리 테이블 (Phase 4)
-- ============================================
-- 주문 접수 (P4-01~03)
CREATE TABLE IF NOT EXISTS `shop_order` (
`so_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`so_lg_idx` INT UNSIGNED NOT NULL,
`so_ds_idx` INT UNSIGNED NULL COMMENT '지정판매소 FK',
`so_ds_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '판매소명(스냅샷)',
`so_order_date` DATE NOT NULL COMMENT '접수일',
`so_delivery_date` DATE NULL COMMENT '배달일',
`so_payment_type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '이체/가상계좌',
`so_paid` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '입금여부 1=예',
`so_received` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '수령여부 1=예',
`so_total_qty` INT UNSIGNED NOT NULL DEFAULT 0,
`so_total_amount` DECIMAL(14,2) NOT NULL DEFAULT 0,
`so_status` VARCHAR(10) NOT NULL DEFAULT 'normal' COMMENT 'normal/cancelled',
`so_orderer_idx` INT UNSIGNED NULL,
`so_regdate` DATETIME NOT NULL,
PRIMARY KEY (`so_idx`),
KEY `idx_so_lg_idx` (`so_lg_idx`),
KEY `idx_so_ds_idx` (`so_ds_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='주문 접수';
-- 주문 상세
CREATE TABLE IF NOT EXISTS `shop_order_item` (
`soi_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`soi_so_idx` INT UNSIGNED NOT NULL,
`soi_bag_code` VARCHAR(50) NOT NULL,
`soi_bag_name` VARCHAR(100) NOT NULL DEFAULT '',
`soi_unit_price` DECIMAL(12,2) NOT NULL DEFAULT 0,
`soi_qty` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '접수량(낱장)',
`soi_amount` DECIMAL(14,2) NOT NULL DEFAULT 0,
`soi_box_count` INT UNSIGNED NOT NULL DEFAULT 0,
`soi_pack_count` INT UNSIGNED NOT NULL DEFAULT 0,
`soi_sheet_count` INT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`soi_idx`),
KEY `idx_soi_so_idx` (`soi_so_idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='주문 상세';
-- 판매 (P4-04~07)
CREATE TABLE IF NOT EXISTS `bag_sale` (
`bs_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`bs_lg_idx` INT UNSIGNED NOT NULL,
`bs_so_idx` INT UNSIGNED NULL COMMENT '주문 FK (NULL=직접판매)',
`bs_ds_idx` INT UNSIGNED NULL COMMENT '지정판매소 FK',
`bs_ds_name` VARCHAR(100) NOT NULL DEFAULT '',
`bs_sale_date` DATE NOT NULL,
`bs_bag_code` VARCHAR(50) NOT NULL,
`bs_bag_name` VARCHAR(100) NOT NULL DEFAULT '',
`bs_qty` INT NOT NULL DEFAULT 0 COMMENT '판매수량(낱장, 음수=반품)',
`bs_unit_price` DECIMAL(12,2) NOT NULL DEFAULT 0,
`bs_amount` DECIMAL(14,2) NOT NULL DEFAULT 0,
`bs_type` VARCHAR(20) NOT NULL DEFAULT 'sale' COMMENT 'sale/return/cancel',
`bs_regdate` DATETIME NOT NULL,
PRIMARY KEY (`bs_idx`),
KEY `idx_bs_lg_idx` (`bs_lg_idx`),
KEY `idx_bs_ds_idx` (`bs_ds_idx`),
KEY `idx_bs_sale_date` (`bs_sale_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='판매/반품';
-- 불출 (P4-08~10)
CREATE TABLE IF NOT EXISTS `bag_issue` (
`bi2_idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`bi2_lg_idx` INT UNSIGNED NOT NULL,
`bi2_year` YEAR NOT NULL,
`bi2_quarter` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '분기(1~4)',
`bi2_issue_type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '무료용/공공용',
`bi2_issue_date` DATE NOT NULL,
`bi2_dest_type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '불출처 구분(동사무소 등)',
`bi2_dest_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '불출처명',
`bi2_bag_code` VARCHAR(50) NOT NULL,
`bi2_bag_name` VARCHAR(100) NOT NULL DEFAULT '',
`bi2_qty` INT NOT NULL DEFAULT 0 COMMENT '불출수량(낱장, 음수=취소)',
`bi2_status` VARCHAR(10) NOT NULL DEFAULT 'normal' COMMENT 'normal/cancelled',
`bi2_regdate` DATETIME NOT NULL,
PRIMARY KEY (`bi2_idx`),
KEY `idx_bi2_lg_idx` (`bi2_lg_idx`),
KEY `idx_bi2_date` (`bi2_issue_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='무료용 불출';