MD-10 · 카테고리 일괄 변경

카테고리 일괄 변경 (공급사 상품 다중 재분류)

「공급사 상품 관리」 목록에서 상품 여러 개를 체크해 카테고리(대>중>소)를 한 번에 바꾸는 벌크 액션. 페이지 넘겨도 선택 유지·실행 전 확인창·건별 부분 실패 표시.

🟢 바로 착수 어드민 상품관리 일괄 처리
➕ 기능 추가
무엇 — 「공급사 상품 관리」 목록에서 상품 여러 개를 체크해 카테고리(대>중>소)를 한 번에 바꾸는 벌크 액션. 페이지 넘겨도 선택 유지·실행 전 확인창·건별 부분 실패 표시.📍 위치: 상품관리 › 공급사 상품 관리

핵심 결정

진입점
공급사 상품 관리 목록(행 체크박스) — 별도 화면 신설 없음
대상 데이터
seller_product.category1/2/3 동시 갱신 (대>중>소 3뎁스)
실행 단위
건별 트랜잭션 — 일부 실패해도 성공분은 커밋, 결과표로 표시
이력
신규 seller_product_category_change_history에 건별 전/후 기록
범위 제외
앱 카테고리 아이콘 수정(quick_menu_icon 연결)은 별건
01

화면 — 먼저 보기

이 티켓이 실제로 어떤 화면이 되는지 먼저 봅니다

앱에 노출되는 카테고리 아이콘 수정은 이번 범위 제외 — category 테이블에 아이콘 컬럼이 없어 quick_menu_icon 소스 연결이 필요한 별건. 이 화면은 분류(category1/2/3) 재지정만 다룬다.
현행 화면 · 실제 캡처
현행 「상품 카테고리」 — 일괄 변경 대상
현행 「상품 카테고리」 — 일괄 변경 대상
변경안 · 제안 화면
상품관리 › 공급사 상품 관리기능 추가
카테고리 ▾공급사 ▾🔍 히어로코드·상품명 검색카테고리 일괄 변경선택 해제
히어로코드공급사상품코드상품명공급사카테고리(대>중>소)넷 공급가사용
HP0012345SKU-88231한돈 삼겹살 1kg대상축산축산 > 돼지고기 > 삼겹살8,900사용
HP0012346A-77120청정 대파 500g팔도농산농산 > 채소 > 대파1,200사용
HP0012350B-33019냉동 새우살 1kg오션푸드미분류12,400사용

▲ 공급사 상품 관리 — 바뀌는 컬럼은 🆕 로 표시(예시 데이터)

1
목록 진입 & 대상 좁히기 — 공급사 상품 관리에서 카테고리·공급사·검색(히어로코드/상품명)으로 재분류할 상품을 필터링한다.
2
다중 선택 — 행 체크박스로 여러 건 선택. 페이지를 넘기거나 필터를 바꿔도 선택이 유지되고, 하단에 '3건 선택됨' 벌크바가 뜬다.
3
일괄 변경 실행 — 벌크바의 '카테고리 일괄 변경'을 누르면 대상 분류 지정 모달이 열린다. 대>중>소를 상위 자식만 노출하며 순차 선택.
4
확인창 — '선택한 N건을 「대>중>소」로 변경합니다'로 건수와 대상 경로를 재확인시킨 뒤 실행. 0건이면 진입 불가.
5
건별 처리 & 결과표 — 건별 트랜잭션으로 category1/2/3을 갱신하고 이력에 전/후를 남긴다. 성공 N·실패 M 요약과 건별 결과표를 표시.
6
부분 실패 후속 — 실패분은 사유(예: 삭제된 상품)를 확인하고 실패분만 재시도하거나 CSV로 내보낸다. 성공분은 즉시 목록에 반영.
02

정책 / 정의

용어를 못 박고, 규칙을 명확히

용어 정의
용어정의
히어로코드상품 표준 식별키. seller_product.hero_product_code(PK). 선택/변경/이력의 기준 키.
공급사상품코드공급사(매입처)가 부여한 코드. seller_product.product_code. 목록 표시·검색용.
복제코드 / DC 작업 코드복제코드=mscd, DC 작업 코드(허브코드)=pluto_code(가정). 이번 기능은 미변경·표시만.
카테고리 3뎁스대>중>소 = category1/2/3. 각 값은 category.id를 참조하며 parent_id로 트리 구성.
일괄 변경(벌크)체크한 N개 상품의 category1/2/3을 지정한 단일 대상 분류로 한 번에 덮어쓰는 액션.
선택 유지필터·페이지네이션을 넘어가도 체크 상태를 hero_product_code 기준으로 유지하는 동작.
부분 실패배치 중 일부 건만 실패한 상태. 성공분은 반영되고 실패분은 사유와 함께 결과표에 표시.
정책 (규칙)
#규칙비고
10개 선택 시 실행 차단선택 0건이면 '카테고리 일괄 변경' 버튼 비활성. 하단 벌크바 자체가 1건 이상일 때만 노출.
2페이지 넘겨도 선택 유지선택은 hero_product_code 집합으로 클라이언트 보관. '전체 선택'은 현재 페이지 기준, '조건 전체 선택'은 현재 필터 기준(가정).
3대상 분류는 3뎁스 모두 지정대>중>소를 소분류까지 지정해야 실행 가능(가정). 하위는 상위의 자식만 노출. category1/2/3 동시 갱신.
4실행 전 확인창 필수'선택한 N건을 「대>중>소」로 변경합니다. 되돌리려면 다시 지정해야 합니다.' 문구로 건수+대상 경로 명시.
5건별 트랜잭션·부분 실패 허용한 건 실패가 전체 롤백을 유발하지 않음. 성공 N·실패 M 요약과 실패 사유를 결과표로 표시.
6변경 이력 기록건별 이전/이후 category1/2/3, batch_id, changed_by를 seller_product_category_change_history에 남김. updated_by/updated_on도 함께 갱신.
7삭제·비노출 상품 처리use_yn='D'(삭제) 등은 실패로 처리하고 사유 노출(가정). 노출여부(open_yn)는 변경하지 않음.
8아이콘은 범위 제외category 테이블에 아이콘 컬럼 없음. 앱 카테고리 아이콘 수정은 quick_menu_icon 소스 연결이 필요한 별건으로 분리.
9권한상품관리 권한 보유 관리자만 실행(가정). 이력의 changed_by에 실행자 ID 저장.
03

ERD

데이터 구조 · 관계 · DDL

seller_product WRITE
hero_product_codePK varchar(100)
seller_idvarchar(100)
product_codevarchar(30)
category1FK varchar(10)
category2FK varchar(10)
category3FK varchar(10)
product_nametext
use_ynvarchar(1)
updated_byvarchar(100)
updated_ontimestamp
공급사 상품 마스터(약 6.2만 건). 이번 기능은 category1/2/3만 갱신, 스키마 변경 없음.
category READ
idPK varchar(10)
parent_idFK varchar(10)
category_namevarchar(20)
sort_nointeger
delete_flagboolean
카테고리 트리(자기참조). 대상 분류 선택 드롭다운 소스. 아이콘 컬럼 없음.
seller_product_category_change_history 신규
idPK bigserial
batch_iduuid
hero_product_codeFK varchar(100)
before_category1varchar(10)
before_category2varchar(10)
before_category3varchar(10)
after_category1varchar(10)
after_category2varchar(10)
after_category3varchar(10)
statusvarchar(10)
fail_reasonvarchar(200)
changed_byvarchar(100)
changed_attimestamp
카테고리 일괄 변경 이력(건별). 부분 실패 결과 표시·재시도·감사 근거.
seller_product.category1 → category.id (대분류)
seller_product.category2 → category.id (중분류, parent_id=category1)
seller_product.category3 → category.id (소분류, parent_id=category2)
seller_product_category_change_history.hero_product_code → seller_product.hero_product_code
category.parent_id → category.id (자기참조 트리)
-- 기존 seller_product.category1/2/3 로 분류를 저장하므로 상품 테이블 스키마 변경은 없음.
-- 부분 실패 표시·재시도·감사를 위한 일괄 변경 이력 테이블만 신규.

CREATE TABLE seller_product_category_change_history (
    id                bigserial      PRIMARY KEY,                 -- 이력 PK
    batch_id          uuid           NOT NULL,                    -- 한 번의 일괄 실행 묶음
    hero_product_code varchar(100)   NOT NULL,                    -- 대상 히어로코드
    before_category1  varchar(10),                                -- 변경 전 대분류
    before_category2  varchar(10),                                -- 변경 전 중분류
    before_category3  varchar(10),                                -- 변경 전 소분류
    after_category1   varchar(10),                                -- 변경 후 대분류
    after_category2   varchar(10),                                -- 변경 후 중분류
    after_category3   varchar(10),                                -- 변경 후 소분류
    status            varchar(10)    NOT NULL,                    -- SUCCESS / FAIL
    fail_reason       varchar(200),                               -- 실패 사유(성공 시 null)
    changed_by        varchar(100)   NOT NULL,                    -- 실행 관리자 ID
    changed_at        timestamp      NOT NULL DEFAULT now()       -- 처리 시각
);

COMMENT ON TABLE  seller_product_category_change_history IS '공급사 상품 카테고리 일괄 변경 이력(건별)';
COMMENT ON COLUMN seller_product_category_change_history.batch_id IS '한 번의 일괄 실행 단위 식별자';
COMMENT ON COLUMN seller_product_category_change_history.status  IS '건별 처리 결과: SUCCESS/FAIL';

CREATE INDEX idx_spcch_batch  ON seller_product_category_change_history (batch_id);
CREATE INDEX idx_spcch_hero   ON seller_product_category_change_history (hero_product_code);

-- 참고: 실행 로직은 건별 트랜잭션으로 아래를 수행(성공분만 커밋).
-- UPDATE seller_product
--    SET category1 = :c1, category2 = :c2, category3 = :c3,
--        updated_by = :admin_id, updated_on = now()
--  WHERE hero_product_code = :hero_code;
04

화면 상세 — 세부 표·규칙

목록 외 품목표·모달·규칙 등 세부 화면

대상 카테고리 선택 & 확인 모달
단계선택비고
대분류축산 ▾category1
중분류돼지고기 ▾category2 (대분류의 자식만)
소분류목살 ▾category3 (중분류의 자식만)
3뎁스 모두 선택해야 [변경] 활성. 확인 문구: "선택한 12건을 '축산 > 돼지고기 > 목살'로 변경합니다. 되돌리려면 다시 지정해야 합니다."
실행 결과 (부분 실패 표시)
히어로코드상품명이전 카테고리변경 결과사유
HP0012345한돈 삼겹살 1kg축산>돼지고기>삼겹살성공-
HP0012346청정 대파 500g농산>채소>대파성공-
HP0012350냉동 새우살 1kg미분류실패삭제된 상품(use_yn=D)
상단 요약 '성공 11 · 실패 1'. [실패분만 재시도] / [결과 CSV 내보내기]. 성공분은 이미 반영됨.