🆕 신규 화면 개발 (이지어드민 업로드)
무엇 — 이지어드민 재고 엑셀을 업로드해 우리 재고와 대사·동기화. 여러 MD가 하루 10회 내외 올려도 안전하게(중복·순서 관리).📍 위치: 재고관리 › 이지어드민 업로드 (신규)
핵심 결정
방향
API 실시간 연동 폐기 → 엑셀 업로드 · API는 설치비 200만 + 매달 20만+@ 고정비라 이 기능 하나엔 과함
방식
스냅샷 동기화(덮어쓰기) — 증분 아님. 엑셀 = 그 시점 이지어드민 재고 스냅샷 → 그 값으로 맞춤
타입
타입1 전체(전체 덮어쓰기) · 타입2 담당분(담당 범위 내만 덮어쓰기 — 남의 상품 안 건드림)
안전장치
기준시각 역행 차단 · 중복 스냅샷 무시 · 멱등 반영 · 업로드 이력 — 3명이 하루 10회 올려도 안전
매핑
엑셀은 이지어드민 코드(=DC 작업 코드)로 옴 → MD-03 매핑으로 히어로코드 연결 · 미매핑은 수기 큐
01화면 — 먼저 보기
재고관리 › 이지어드민 업로드 (신규 화면)
흐름 — ① MD가 이지어드민에서 재고 엑셀 다운로드 → ② 어드민 「이지어드민 업로드」에서 타입 선택 + 엑셀 첨부 → ③ 프리뷰(대사)로 반영/스킵/미매핑 확인 → ④ 반영 → 재고 동기화. 그다음 재고회전(MD-04) 산출.
◆ OrderHero 어드민🔍 통합검색morty ▾
📊 대시보드
📦 상품관리
🧾 주문관리
🏬 재고관리
🎯 프로모션
💳 정산
⚙️ 설정
재고관리 › 이지어드민 업로드 신규 화면
업로드일 ▾타입 ▾업로더 ▾+ 엑셀 업로드
▲ 이지어드민 업로드 회차 목록 — 타입·기준시각·미매핑·상태로 중복/역행을 한눈에
1엑셀 업로드 진입 — [+ 엑셀 업로드] → 모달: 타입 선택(전체/담당분) + 엑셀 첨부 + (담당분이면 범위 확인)
2파싱 & 매핑 — 이지어드민 코드(=DC 작업 코드)를 MD-03 매핑으로 히어로코드에 붙임 · 미매핑 행 표시
3프리뷰(대사) — 어드민 현재고 vs 엑셀 스냅샷 비교 → 반영/스킵/미매핑 요약 · 기준시각 역행이면 차단 · 동일 스냅샷이면 중복 무시
4반영 — 스냅샷 값으로 동기화(덮어쓰기) → stock_entry append + stock_balance 재계산 (멱등)
5미매핑 수기 큐 — 코드 매핑 안 된 행은 수기 확인 큐로 · 이력(누가·언제·몇 건)
용어 정의
정책 (규칙)
확인 필요타입2 "담당 범위" 기준을 하나 정해야 합니다 — 그룹코드 범위 / 카테고리 / 공급사 / MD 담당 지정 중 무엇? (기본안: 카테고리 또는 공급사 단위)
03ERD
업로드 헤더/라인 + 재고 원장(재사용)
ez_upload 신규
idPK
uploaded_byMD
upload_typeFULL/PARTIAL
snapshot_at기준시각
scope_ref담당범위
total/appliedint
skipped/unmatchedint
statusenum
file_urlvarchar
업로드 회차 헤더 · 중복/역행 판정 기준
ez_upload_line 신규
idPK
upload_idFK
dc_work_code이지 코드
hero_code매핑
center_code
ez_qty엑셀 재고
admin_qty_before반영 전
match_statusmatched/unmatched
applied_entry_idFK null
라인별 대사·반영 결과
stock_entry WRITE
idPK
hero_codeFK
change_qty± 동기화분
source'ez_upload'
idempotency_key멱등
created_by/at
MD-01·04와 공유하는 재고 원장(append)
hero_code_mapping READ
hero_product_code기존
type='hub'DC
specific_codeDC 작업 코드
MD-03가 채운 매핑(엑셀 코드↔히어로)
ez_upload_line.upload_id → ez_upload.id
ez_upload_line.dc_work_code → hero_code_mapping.specific_code (type='hub') → hero_code
반영: 스냅샷 diff → stock_entry append(source='ez_upload', idempotency_key=upload_id+line) → stock_balance 재계산
중복/역행: 동일 snapshot_at·내용 → skip · snapshot_at < 최근 반영본 → 차단
-- 이지어드민 엑셀 업로드 회차
CREATE TABLE ez_upload (
id BIGSERIAL PRIMARY KEY,
uploaded_by VARCHAR NOT NULL, -- 업로더(MD)
upload_type VARCHAR NOT NULL, -- FULL(전체) / PARTIAL(담당분)
snapshot_at TIMESTAMPTZ NOT NULL, -- 엑셀 기준시각(역행 차단)
scope_ref VARCHAR, -- 담당 범위(카테고리/공급사 등) · PARTIAL만
total_lines INT, applied_lines INT, skipped_lines INT, unmatched_lines INT,
status VARCHAR NOT NULL, -- previewed/applied/blocked/duplicated
file_url VARCHAR,
created_at TIMESTAMPTZ DEFAULT now()
);
-- 라인별 대사·반영 결과
CREATE TABLE ez_upload_line (
id BIGSERIAL PRIMARY KEY,
upload_id BIGINT NOT NULL REFERENCES ez_upload(id) ON DELETE CASCADE,
dc_work_code VARCHAR NOT NULL, -- 이지어드민 코드(=DC 작업 코드)
hero_code VARCHAR, -- 매핑 결과(미매핑 시 NULL)
center_code VARCHAR,
ez_qty INT, -- 엑셀 재고(스냅샷)
admin_qty_before INT, -- 반영 전 어드민 재고
match_status VARCHAR NOT NULL, -- matched / unmatched
applied_entry_id BIGINT -- 반영된 stock_entry FK
);
CREATE INDEX ON ez_upload (snapshot_at);
04타입1 / 타입2 · 화면 상세
업로드 모달과 두 타입의 차이
🔵 타입1 · 전체
전체 재고 엑셀 업로드 → 전 상품 스냅샷 동기화. 엑셀에 없는(0인) 상품은 정책에 따라 0 처리 또는 유지 (확인 필요). 가장 단순.
🟡 타입2 · 담당분
담당 MD의 범위(카테고리/공급사) 안에서만 덮어쓰기. 범위 밖 상품은 그대로 유지. 3명이 각자 담당분만 올려도 서로 안 밟음.
업로드 모달
대사 라인 (프리뷰 예시)
엑셀 재고가 어드민 재고와 다르면 그 차이만큼 stock_entry로 반영해 스냅샷 값에 맞춤. 미매핑은 수기 큐로.