MD-22 · 센터값 일괄 매칭

센터값 일괄 매칭 (공급사 관리 · 검색 전체선택 & 다중 매칭)

공급사 1곳에 센터를 하나씩 매칭하던 작업을, 검색→전체선택→한 번에 매칭신규 센터→다중 공급사 일괄 추가로 단축한다.

🟢 확정 (바로 착수) 공급사 관리 seller_center 재사용 UX 개선
➕ 기능 추가
무엇 — 공급사 1곳에 센터를 하나씩 매칭하던 작업을, 검색→전체선택→한 번에 매칭신규 센터→다중 공급사 일괄 추가로 단축한다.📍 위치: 공급사 관리 › 매칭 센터 설정

핵심 결정

대상 테이블
기존 seller_center (공급사↔센터, PK=seller_id+center_id) 재사용 — 신규 매핑 테이블 없음
방향 2종
①공급사 → 다중 센터 일괄 매칭  ②신규 센터 → 다중 공급사 일괄 추가
선택 가속
검색결과 전체선택 버튼(예: [동부] 검색→일괄 선택) + 센터 그룹 불러오기
안전장치
0개 선택 차단 · 기존 매칭 덮어쓰기 확인 · 없는(비활성) 센터 차단
감사
신규 seller_center_bulk_log에 실행 단위(신규/덮어쓴/건너뜀 건수) 기록
01

화면 — 먼저 보기

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

(지방)대구 같은 신규 센터 신설 시 모든 공급사에 하나씩 추가하던 반복 작업을 없앤다. 검색 결과 전체선택 + 다중 매칭으로 수십 번 클릭을 1회로 줄인다.
현행 화면 · 실제 캡처
현행 「센터 관리」 — 센터값 일괄 매칭
현행 「센터 관리」 — 센터값 일괄 매칭
변경안 · 제안 화면
🔍 통합검색관리자 ▾
📊 대시보드
📦 상품관리
🧾 주문관리
🏬 재고관리
🎯 프로모션
💳 정산
⚙️ 설정
공급사 관리 › 매칭 센터 설정기능 추가
센터 유형 ▾🔍 센터명·코드 검색 (예: 동부)선택 센터 일괄 매칭검색결과 전체선택센터 그룹 불러오기
선택센터명센터 코드유형매칭 상태 🆕마진율(net)
성동seongdong_jangjiMFC매칭됨8.0%
광진gwangjinMFC미매칭-
일레븐테스트eleventestMFC비활성(선택불가)-
총 128건 · 20/page123

▲ 공급사 관리 › 매칭 센터 설정 — 바뀌는 컬럼은 🆕 로 표시(예시 데이터)

1
공급사 선택 → 매칭 센터 진입 — 공급사 관리에서 대상 공급사를 열고 '매칭 센터 설정' 탭에 들어간다. 현재 매칭된 센터와 전체 센터 목록이 체크박스로 보인다.
2
검색·필터로 좁히기 — '동부' 검색 또는 센터 유형 칩으로 목록을 좁힌다. 비활성 센터는 흐리게 표시되고 선택 불가.
3
검색결과 전체선택 / 그룹 불러오기 — '검색결과 42건 전체선택' 버튼으로 필터된 전체를 한 번에 체크, 또는 '센터 그룹 불러오기'로 그룹 단위로 채운다.
4
일괄 매칭 실행 & 확인 — '선택 센터 일괄 매칭' 클릭. 신규 N건/덮어쓰기 M건/건너뜀 K건을 요약한 확인 모달이 뜨고, 덮어쓰기 M건은 확인해야 진행.
5
저장 & 결과 반영 — seller_center에 upsert + bulk_log 1행 기록(같은 트랜잭션). 완료 토스트로 결과 건수 표기, 목록의 매칭 상태 즉시 갱신.
6
역방향: 신규 센터 → 다중 공급사 — (지방)대구 등 센터 신설 화면에서 '다중 공급사 일괄 추가' 모달을 열어 공급사를 다중 선택, 같은 안전장치로 한 번에 매칭.
02

정책 / 정의

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

용어 정의
용어정의
공급사(seller)식자재 매입처. seller.id가 표준 식별자이며 화면상 공급사명은 seller_name. 현재 151개.
센터물류거점(성동·광진·이천 등). center.id/center_code로 식별, center_type=MFC/etc, use_flag로 활성 여부 구분.
매칭 센터해당 공급사의 상품이 취급·배송되는 센터. seller_center 한 행 = 공급사-센터 1쌍.
센터 그룹여러 센터를 한 번에 불러오기 위한 묶음. 본 기능에선 center_type(MFC/etc) 및 지역을 그룹 기준으로 사용(가정).
검색결과 전체선택현재 검색어(예: '동부')로 필터된 목록 전체를 체크박스로 일괄 선택하는 동작.
일괄 매칭선택된 다중 항목을 seller_center에 한 번의 실행으로 upsert하는 처리. 실행 단위는 seller_center_bulk_log에 남김.
덮어쓰기선택 항목 중 이미 매칭된 쌍이 있을 때 margin_rate 등 값을 갱신하는 것. 확인 모달 후에만 수행.
정책 (규칙)
#규칙비고
1선택 0개면 '일괄 매칭' 버튼 비활성 + 실행 차단티켓 명시 '0개 선택 막기'. 클릭 시 '센터를 1개 이상 선택하세요' 토스트.
2기존에 매칭된 쌍이 포함되면 덮어쓰기 확인 모달을 띄운다티켓 명시. 모달에 '신규 N건 / 기존 덮어쓰기 M건'을 분리 표기, 확인 시에만 M건 갱신.
3비활성(use_flag=false)·존재하지 않는 센터는 선택 불가 및 저장 차단티켓 '없는 센터 막기'. 검색결과 전체선택 시에도 비활성 센터는 자동 제외하고 건너뜀 건수로 집계.
4'검색결과 전체선택'은 현재 필터(검색어+유형칩)에 걸린 행만 대상페이지네이션 넘어간 전체 결과 포함. 화면에 '검색결과 42건 전체선택' 문구로 대상 수 명시.
5신규 센터 신설 후 '다중 공급사 일괄 추가' 진입 시 기본은 전 공급사 미체크오추가 방지. 관리자가 공급사를 명시 선택해야 저장(가정: 전체선택 별도 버튼 제공).
6일괄 매칭 1회 = seller_center upsert + bulk_log 1행을 같은 트랜잭션으로 처리부분 실패 시 전체 롤백. 성공 시 결과 요약(신규/덮어쓴/건너뜀)을 반환·표기.
7upsert 시 신규 행은 created_by/created_on, 덮어쓰기 행은 updated_by/updated_on 기록seller_center에 updated_by/updated_on 컬럼 추가(ALTER). 감사 추적용.
8margin_rate 등 부가값은 일괄 매칭 시 입력 없으면 신규는 NULL, 기존은 유지덮어쓰기가 값을 지우지 않도록. 값 일괄 지정 옵션은 모달에서 선택(가정).
9'센터 그룹 불러오기'는 그룹 기준값을 bulk_log.group_key에 기록어떤 그룹으로 대량 매칭했는지 사후 추적 가능하도록.
03

ERD

데이터 구조 · 관계 · DDL

seller_center WRITE
seller_idPK varchar(100)
center_idPK varchar(20)
center_codevarchar(20)
margin_ratedouble precision
created_byvarchar(20)
created_ontimestamp
updated_byvarchar(20)
updated_ontimestamp
공급사↔센터 매칭(핵심). PK=(seller_id, center_id). 일괄 매칭이 여기에 upsert. updated_by/on 컬럼 신규 추가.
center READ
idPK varchar(20)
center_codevarchar(20)
center_namevarchar(100)
center_typevarchar(10)
use_flagboolean
센터 마스터. 검색·전체선택·그룹불러오기·유효성(use_flag) 판정 소스.
seller READ
idPK varchar(100)
seller_namevarchar(20)
use_flagboolean
deletedboolean
공급사 마스터. '다중 공급사 일괄 추가' 대상·목록 소스. 현재 151개.
seller_center_bulk_log 신규
idPK bigserial
directionvarchar(20)
seller_idsjsonb
center_idsjsonb
source_typevarchar(20)
overwrite_cntinteger
created_byvarchar(20)
일괄 매칭 실행 단위 감사 로그. 방향/출처/건수 기록.
seller_center.seller_id → seller.id (N:1, 공급사)
seller_center.center_id → center.id (N:1, 센터)
seller_center = seller ↔ center 다대다 연결 테이블(PK 복합)
seller_center_bulk_log.seller_ids[] / center_ids[] → 실행 대상 스냅샷(FK 아님, jsonb 배열)
-- =========================================================
-- MD-22 센터값 일괄 매칭
-- 기존 seller_center(공급사↔센터 매칭)를 재사용한다. 스키마 변경 최소.
-- 신규는 일괄작업 감사 로그 1종만 추가(덮어쓰기/건너뜀 추적용).
-- =========================================================

-- (변경) 일괄 매칭 시 덮어쓰기 판단·감사에 쓰도록 수정자/시각 컬럼 추가
ALTER TABLE public.seller_center
  ADD COLUMN IF NOT EXISTS updated_by character varying(20),   -- 최종 수정 관리자 ID
  ADD COLUMN IF NOT EXISTS updated_on timestamp without time zone; -- 최종 수정 시각(덮어쓰기 시 갱신)

-- (신규) 일괄 매칭 작업 로그 : 한 번의 "일괄 매칭" 실행 단위를 기록
CREATE TABLE public.seller_center_bulk_log (
  id            bigserial   PRIMARY KEY,                 -- 로그 PK
  direction     varchar(20) NOT NULL,                   -- 방향: 'CENTER_TO_SELLERS'(센터→다중공급사) | 'SELLERS_TO_CENTER'(공급사→다중센터)
  seller_ids    jsonb       NOT NULL DEFAULT '[]'::jsonb,-- 대상 공급사 ID 배열(seller.id)
  center_ids    jsonb       NOT NULL DEFAULT '[]'::jsonb,-- 대상 센터 ID 배열(center.id)
  source_type   varchar(20),                            -- 선택 출처: 'SEARCH_ALL'(검색결과 전체선택) | 'GROUP'(센터 그룹 불러오기) | 'MANUAL'
  group_key     varchar(50),                            -- source_type='GROUP'일 때 그룹 기준값(center_type 등)
  matched_cnt   integer     NOT NULL DEFAULT 0,          -- 신규 매칭 건수
  overwrite_cnt integer     NOT NULL DEFAULT 0,          -- 기존 매칭 덮어쓴 건수
  skipped_cnt   integer     NOT NULL DEFAULT 0,          -- 유효하지 않아 건너뛴 건수(없는 센터 등)
  created_by    varchar(20) NOT NULL,                    -- 실행 관리자 ID
  created_on    timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP -- 실행 시각
);
COMMENT ON TABLE public.seller_center_bulk_log IS 'MD-22 센터값 일괄 매칭 실행 단위 감사 로그';

CREATE INDEX ix_scbl_created_on ON public.seller_center_bulk_log (created_on DESC);
04

화면 상세 — 세부 표·규칙

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

일괄 매칭 확인 모달
구분건수비고
신규 매칭39건그대로 추가
기존 덮어쓰기2건margin_rate 유지, updated_on 갱신
건너뜀1건비활성 센터 제외
'검색결과 42건 전체선택 → 성동/광진 외 39곳 신규' 식으로 대상 요약. 덮어쓰기 2건은 체크 확인해야 [매칭 실행] 활성화. 취소 시 원복.
신규 센터 → 다중 공급사 일괄 추가 모달
선택공급사명공급사 ID기존 (지방)대구 매칭
늘품유통S-000123없음
대구식자재S-000455없음
신선나라S-000210이미 매칭(덮어쓰기)
신규 센터 신설 직후 진입. 기본 전체 미체크(오추가 방지), [전 공급사 선택] 별도 버튼. 이미 매칭된 공급사는 덮어쓰기로 표시되고 확인 대상. direction=SELLERS_TO_CENTER로 bulk_log 기록.