➕ 기능 추가
무엇 — 1개 히어로코드에 개수·배수·박스 단위 수량 구간별 가격을 부여하고, 스캔 오류로 생긴 복제코드를 대표코드로 병합·정리한다.📍 위치: 상품관리 › 가격 관리 › 수량별 가격
핵심 결정
가격 모델
1개 코드에 개수·배수·박스 단위 수량 구간별 단가 (예: 1개 5,000 / 10개~ 4,000×박스 / 20개~ 3,500×박스)
구현 방식
텍스트 전용인 기존 seller_product_option은 가격을 못 담아 구간 단가표(신규) 추가로 확장
복제 규모
parent_hero_code 보유 118건 / 부모 68개 → 대표코드로 수작업 병합
넷 공급가
구간마다 net_price(소문자) 저장, 판매가<net 시 역마진 경고
결정 대기
🔴 박스 수량 마스터 산출물 형태(신규 컬럼 vs 마스터 테이블) 미정
01화면 — 먼저 보기
이 티켓이 실제로 어떤 화면이 되는지 먼저 봅니다
착수 전 박스 수량 마스터 산출물과 개수/배수/박스 단위 정책 확정 필요(💬 논의). 복제코드는 실측 118건·부모 68개로 수작업 정리(대폭 완화).
현행 화면 · 실제 캡처현행 「가격수정」 모달(수량 탭) — 수량별 가격 + 복제코드 정리
변경안 · 제안 화면
상품관리 › 가격 관리 › 수량별 가격기능 추가
복제여부 ▾🔍 히어로코드·상품명 검색구간 추가복제코드 정리
▲ 수량별 가격 목록 — 바뀌는 컬럼은 🆕 로 표시(예시 데이터)
1가격 관리 진입 — 상품관리 › 가격 관리 › 수량별 가격 목록에서 상품을 검색. 가격 구간 수·최저 단가·복제여부가 한눈에 표시된다.
2구간 추가 모달 — 상품 행에서 '구간 추가'를 열어 개수/배수/박스 단위로 시작수량과 단가를 입력. 박스 선택 시 박스당 수량을 함께 지정한다.
3구간 검증·넷 표시 — 저장 시 구간 겹침·역순을 검증하고, 구간별 넷 공급가(net)를 표시. 판매가가 net보다 낮으면 역마진 경고를 띄운다.
4복제여부로 묶음 검색 — '복제코드 정리'에서 복제여부/부모 코드로 검색해 스캔 오류 중복 묶음(부모 68개)을 조회한다.
5대표코드 병합 — 묶음에서 대표(부모)를 지정하고, 자식의 주문내역을 대표코드로 이어붙임. 장바구니·북마크 참조를 확인 후 병합/삭제한다.
6반영·이력 기록 — 병합 결과와 이어붙인 주문 건수를 merge_log에 기록. 구간 가격은 앱(사장님)에 수량별 단가로 노출된다.
seller_product_volume_price 신규
hero_product_codePK varchar(20)
tier_noPK integer
min_qtyinteger
unit_typevarchar(10)
box_qtyinteger
sell_priceinteger
net_pricebigint
created_byvarchar(20)
created_ontimestamp
수량 구간별 가격표(신규). 히어로코드 1개에 구간·단위·단가·넷 공급가를 여러 행으로.
seller_product WRITE
hero_product_codePK varchar(100)
parent_hero_codeFK varchar(20)
priceinteger
net_pricebigint
box_quantityinteger
상품 마스터. parent_hero_code로 복제 관계 보유(실측 118/부모68). 박스 수량 마스터 컬럼 추가(가정).
seller_product_option READ
hero_product_codePK varchar(20)
select_keyPK integer
option_valuevarchar(50)
기존 옵션(색상/사이즈 등 텍스트 속성). 가격 필드가 없어 이 티켓의 구간 단가는 신규 표로 확장.
hero_code_mapping READ
hero_product_codePK varchar(100)
typePK varchar(30)
specific_codevarchar(100)
관리코드 매핑(현재 type='hub' 356건 = DC 작업 코드). 병합 시 대표코드로 재매핑 대상.
member_order_details READ
hero_product_codevarchar
parent_hero_codevarchar(20)
주문 상세. parent_hero_code 보유 → 복제 병합 시 과거 주문을 대표코드로 이어붙일 근거.
seller_product_volume_price.hero_product_code = seller_product.hero_product_code (구간표 → 상품, 1:N)
seller_product.parent_hero_code → seller_product.hero_product_code (복제 자식→부모 자기참조)
hero_code_mapping.hero_product_code = seller_product.hero_product_code (type='hub' → DC 작업 코드, 병합 시 재매핑)
member_order_details.hero_product_code = seller_product.hero_product_code (병합 시 대표코드로 이어붙이기)
member_cart.hero_product_code = seller_product.hero_product_code (삭제 전 참조 확인)
-- 1) 수량 구간별 가격표 (신규)
CREATE TABLE seller_product_volume_price (
hero_product_code varchar(20) NOT NULL, -- 대상 히어로코드(FK)
tier_no integer NOT NULL, -- 구간 번호(1,2,3…)
min_qty integer NOT NULL, -- 구간 시작 수량(이상)
unit_type varchar(10) NOT NULL DEFAULT 'EACH', -- EACH개수 / MULTIPLE배수 / BOX박스
box_qty integer NULL, -- 박스당 수량(unit_type=BOX일 때) — 가정
sell_price integer NOT NULL, -- 해당 구간 판매 단가
net_price bigint NULL, -- 해당 구간 넷 공급가(소문자 net)
created_by varchar(20) NOT NULL, -- 등록 관리자
created_on timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT seller_product_volume_price_pk PRIMARY KEY (hero_product_code, tier_no),
CONSTRAINT seller_product_volume_price_fk
FOREIGN KEY (hero_product_code) REFERENCES seller_product (hero_product_code),
CONSTRAINT chk_unit_type CHECK (unit_type IN ('EACH','MULTIPLE','BOX')),
CONSTRAINT chk_box_qty CHECK (unit_type <> 'BOX' OR box_qty IS NOT NULL)
);
-- 동일 상품 내 구간 시작수량 겹침 방지
CREATE UNIQUE INDEX ux_volume_price_min_qty
ON seller_product_volume_price (hero_product_code, min_qty);
COMMENT ON TABLE seller_product_volume_price IS '히어로코드별 수량 구간 가격(개수·배수·박스)';
-- 2) 박스 수량 마스터 (가정: 상품 컬럼 추가) — 🔴 결정 필요(마스터 테이블 분리안과 택1)
ALTER TABLE seller_product
ADD COLUMN box_quantity integer NULL; -- 상품별 박스당 수량 마스터
COMMENT ON COLUMN seller_product.box_quantity IS '박스당 수량 마스터(BOX 단위 단가 환산용) — 결정 대기';
-- 3) 복제 병합 감사 로그 (신규, 이력·이어붙이기 추적)
CREATE TABLE seller_product_merge_log (
id bigserial PRIMARY KEY,
parent_hero_code varchar(20) NOT NULL, -- 존치한 대표코드
child_hero_code varchar(20) NOT NULL, -- 병합된 자식코드
moved_order_cnt integer NOT NULL DEFAULT 0, -- 대표코드로 이어붙인 주문 건수
action varchar(10) NOT NULL, -- MERGE 병합 / DELETE 삭제
merged_by varchar(20) NOT NULL, -- 처리 관리자
merged_on timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
COMMENT ON TABLE seller_product_merge_log IS '복제코드 정리(병합/삭제) 이력';
04화면 상세 — 세부 표·규칙
목록 외 품목표·모달·규칙 등 세부 화면
수량 구간별 가격 모달 (구간표)
시작 수량 오름차순·겹침 금지. 박스 단위는 박스당 수량(마스터) 필수. 판매가
복제코드 정리 (부모 묶음)
주문 건수>0이면 물리 삭제 차단·병합만 허용(주문내역 이어붙이기). 병합 시 DC 작업코드(hub) 매핑도 대표코드로 재매핑.