➕ 기능 추가
무엇 — 공급사 1곳에 센터를 하나씩 매칭하던 작업을, 검색→전체선택→한 번에 매칭과 신규 센터→다중 공급사 일괄 추가로 단축한다.📍 위치: 공급사 관리 › 매칭 센터 설정
핵심 결정
대상 테이블
기존 seller_center (공급사↔센터, PK=seller_id+center_id) 재사용 — 신규 매핑 테이블 없음
방향 2종
①공급사 → 다중 센터 일괄 매칭 ②신규 센터 → 다중 공급사 일괄 추가
선택 가속
검색결과 전체선택 버튼(예: [동부] 검색→일괄 선택) + 센터 그룹 불러오기
안전장치
0개 선택 차단 · 기존 매칭 덮어쓰기 확인 · 없는(비활성) 센터 차단
감사
신규 seller_center_bulk_log에 실행 단위(신규/덮어쓴/건너뜀 건수) 기록
01화면 — 먼저 보기
이 티켓이 실제로 어떤 화면이 되는지 먼저 봅니다
(지방)대구 같은 신규 센터 신설 시 모든 공급사에 하나씩 추가하던 반복 작업을 없앤다. 검색 결과 전체선택 + 다중 매칭으로 수십 번 클릭을 1회로 줄인다.
현행 화면 · 실제 캡처현행 「센터 관리」 — 센터값 일괄 매칭
변경안 · 제안 화면
공급사 관리 › 매칭 센터 설정기능 추가
센터 유형 ▾🔍 센터명·코드 검색 (예: 동부)선택 센터 일괄 매칭검색결과 전체선택센터 그룹 불러오기
▲ 공급사 관리 › 매칭 센터 설정 — 바뀌는 컬럼은 🆕 로 표시(예시 데이터)
1공급사 선택 → 매칭 센터 진입 — 공급사 관리에서 대상 공급사를 열고 '매칭 센터 설정' 탭에 들어간다. 현재 매칭된 센터와 전체 센터 목록이 체크박스로 보인다.
2검색·필터로 좁히기 — '동부' 검색 또는 센터 유형 칩으로 목록을 좁힌다. 비활성 센터는 흐리게 표시되고 선택 불가.
3검색결과 전체선택 / 그룹 불러오기 — '검색결과 42건 전체선택' 버튼으로 필터된 전체를 한 번에 체크, 또는 '센터 그룹 불러오기'로 그룹 단위로 채운다.
4일괄 매칭 실행 & 확인 — '선택 센터 일괄 매칭' 클릭. 신규 N건/덮어쓰기 M건/건너뜀 K건을 요약한 확인 모달이 뜨고, 덮어쓰기 M건은 확인해야 진행.
5저장 & 결과 반영 — seller_center에 upsert + bulk_log 1행 기록(같은 트랜잭션). 완료 토스트로 결과 건수 표기, 목록의 매칭 상태 즉시 갱신.
6역방향: 신규 센터 → 다중 공급사 — (지방)대구 등 센터 신설 화면에서 '다중 공급사 일괄 추가' 모달을 열어 공급사를 다중 선택, 같은 안전장치로 한 번에 매칭.
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화면 상세 — 세부 표·규칙
목록 외 품목표·모달·규칙 등 세부 화면
일괄 매칭 확인 모달
'검색결과 42건 전체선택 → 성동/광진 외 39곳 신규' 식으로 대상 요약. 덮어쓰기 2건은 체크 확인해야 [매칭 실행] 활성화. 취소 시 원복.
신규 센터 → 다중 공급사 일괄 추가 모달
신규 센터 신설 직후 진입. 기본 전체 미체크(오추가 방지), [전 공급사 선택] 별도 버튼. 이미 매칭된 공급사는 덮어쓰기로 표시되고 확인 대상. direction=SELLERS_TO_CENTER로 bulk_log 기록.