✏️ 기존 화면 수정 · 탭 추가
무엇 — 지금은 고객(업장)별 가격만 있어 업종·세부업종별 판매가를 못 정한다(예: 카페 6,900 / 서양식 7,500). 기존 member_discounts(discount_type=biz_type_product)를 재사용해 업종별 판매가를 추가하고, 값이 겹치면 최저가를 적용한다.📍 위치: 상품관리 › 가격 관리 › 가격수정
핵심 결정
우선순위
최저가 — 업장가·업종가·세부업종가가 겹치면 계산 결과가 가장 싼 가격 적용
재사용
member_discounts (discount_type=biz_type_product) — 신규 테이블 0
지원 범위
업종 + 세부업종까지 (biz_type.parent_id 계층 재사용)
업종 없는 업장
매칭 실패 시 기본가 적용(폴백)
선행/2차
선행A 가격표 추가 필요 · 2차 '조건별 판매(옵션)'로 통합해 복제코드 근본해결
01화면 — 먼저 보기
이 티켓이 실제로 어떤 화면이 되는지 먼저 봅니다
DB(member_discounts.biz_type_id·sub_biz_type_id)와 코드값(biz_type_product)은 이미 존재. 화면(가격수정)에 '업종별' 탭만 없다 — 선행A(가격표 추가) 착수 후 진행.
현행 화면 · 실제 캡처현행 「가격수정」 모달 — 여기에 업종별 탭 추가
변경안 · 제안 화면
◆ OrderHero 어드민🔍 통합검색관리자 ▾
📊 대시보드
📦 상품관리
🧾 주문관리
🏬 재고관리
🎯 프로모션
💳 정산
⚙️ 설정
상품관리 › 가격 관리 › 가격수정탭 추가
업종 전체 ▾상태 ▾🔍 히어로코드·상품명 검색업종가 추가엑셀 일괄 등록
▲ 가격수정 모달 › 업종별 탭 — 바뀌는 컬럼은 🆕 로 표시(예시 데이터)
1가격 관리 진입 — 상품관리 › 가격 관리에서 히어로코드/상품명으로 상품을 찾고, 행의 '가격수정'을 연다. 목록에 '업종가 N건' 배지로 등록 여부가 보인다.
2업종별 탭 선택 — 가격수정 모달에서 기존 '고객별' 탭 옆 신설 '업종별' 탭으로 이동. 현재 걸린 업종가 목록(업종·세부업종·판매가·기간)이 뜬다.
3업종가 추가 — 업종(예: 카페)·세부업종(선택)·판매가(예: 6,900)·적용기간 입력. 저장 시 기본가 대비 discount_rate로 역산되어 biz_type_product 행으로 기록.
4중복·충돌 검증 — 동일 업종×세부업종에 활성 행이 있으면 저장 차단(기존 종료 후 재등록 유도). 세부업종가와 업종 전체가 공존은 허용(세부 우선).
5주문 시 적용 — 식당이 담으면 그 업장의 업종/세부업종에 맞는 가격을 매칭. 업장가·업종가·구간 등 후보가 겹치면 최저가로 결정. 업종 없으면 기본가.
6이력 확인 — 변경 내역은 member_discounts_his에 적재되어 누가·언제·어떤 율로 바꿨는지 추적. 2차에서 조건별 판매(옵션)로 통합 예정.
member_discounts WRITE
idPK bigint
discount_typevarchar(30)
member_idFK varchar(20)
biz_type_idFK varchar(30)
sub_biz_type_idFK varchar(30)
hero_product_codeFK varchar(100)
discount_ratenumeric(10,3)
entered_priceinteger
start_datetimestamp
end_datedate
가격 조정 본체. 이번 기능은 discount_type='biz_type_product' 행을 화면에서 CRUD. 컬럼 이미 전부 존재, 인덱스·보조컬럼만 보강.
biz_type READ
idPK varchar(30)
type_namevarchar(100)
parent_idFK varchar(30)
업종/세부업종 마스터. parent_id 자기참조로 계층. 업종가 등록 시 드롭다운 소스.
member READ
idPK varchar(20)
biz_type_idFK varchar(30)
sub_biz_type_idFK varchar(30)
식당(업장). 주문 시 이 업장의 업종/세부업종으로 업종가 매칭.
member_discounts_his WRITE
idPK bigint
parametervarchar(10)
biz_type_idvarchar(30)
discount_ratenumeric(10,3)
insert_idvarchar(20)
가격 변경 이력. biz_type/sub_biz_type 컬럼 이미 존재 → 업종가 변경도 자동 적재.
member_discounts.biz_type_id → biz_type.id (업종, parent_id IS NULL)
member_discounts.sub_biz_type_id → biz_type.id (세부업종, parent_id = 업종)
member.biz_type_id / member.sub_biz_type_id → 주문 시 이 업장에 맞는 업종가 매칭
member_discounts.hero_product_code → seller_product(히어로코드)
member_discounts → member_discounts_his (변경 이력 적재)
-- [MD-06] 업종별 판매가
-- 핵심: 신규 테이블 없음. 기존 member_discounts를 그대로 재사용한다.
-- · 고객(업장)별 → discount_type='member_product', member_id 채움
-- · 업종/세부업종별 → discount_type='biz_type_product', biz_type_id(+sub_biz_type_id) 채움 (member_id NULL)
-- 아래 ALTER는 '업종가' 운영을 위한 최소 보강(무결성 가드)만 추가한다.
-- 1) 활성 업종가 중복 방지: 같은 (히어로코드 × 업종 × 세부업종)에 종료일 없는 행이 2개 이상 못 생기게.
-- 세부업종이 NULL이면 업종 전체가로 취급(부분 유니크). ※ 가정: '활성=end_date IS NULL' 규칙
CREATE UNIQUE INDEX IF NOT EXISTS uq_member_discounts_biz_active
ON public.member_discounts (biz_type_id, sub_biz_type_id, hero_product_code)
WHERE discount_type = 'biz_type_product' AND end_date IS NULL;
COMMENT ON INDEX public.uq_member_discounts_biz_active
IS '업종별 판매가: 동일 히어로코드×업종×세부업종의 활성 행 중복 차단';
-- 2) 관리자 입력 편의를 위한 '입력 판매가' 보조 컬럼(가정).
-- 운영은 discount_rate로 계산하지만, 관리자는 목표 판매가(예: 카페 6,900)를 직접 입력한다.
-- 입력값을 감사/역산 근거로 함께 보관. 실제 주문 계산은 discount_rate 기준 유지.
ALTER TABLE public.member_discounts
ADD COLUMN IF NOT EXISTS entered_price integer; -- 관리자가 입력한 업종 판매가(원). NULL=율 직접입력
COMMENT ON COLUMN public.member_discounts.entered_price
IS '관리자 입력 업종/업장 판매가(원). 저장 시 기본가 기준 discount_rate로 역산·검증 (선행A 가격표의 기본가 사용)';
-- 참고(선행A): 기본가(정가) 소스는 「가격표 추가(선행A)」가 제공. 본 티켓은 그 위에 업종가 레이어만 얹는다.
-- 이력은 기존 member_discounts_his 트리거/배치 경로 그대로 사용(biz_type_id/sub_biz_type_id 컬럼 이미 존재).
04화면 상세 — 세부 표·규칙
목록 외 품목표·모달·규칙 등 세부 화면
가격 관리 상품 목록 (진입 화면)
'업종가' 컬럼 신설 — 업종별 판매가 등록 건수. 0건이면 기본가만 적용됨을 즉시 판별.
겹칠 때 최저가 결정 규칙표
미팅 확정 규칙: 우선순위는 '지정 우선순위'가 아니라 계산된 최저가. 향후 다중 업종이 생겨도 동일 규칙으로 수렴.