Files
dbx-main/scripts/sql/cupang_box_rules_seed2.sql
T
king 354eebeaac chore(cupang): 박스 입수량 박스명을 '쿠팡박스' 로 통일
운영 DB 일괄 변경 스크립트(cupang_box_rules_unify_box_name.sql) 추가.
기존 호수(2호/3호/6호)는 사라지지 않게 memo 뒤로 옮긴다
(예: "피킹비 750원 · 2호").

시드 SQL 2개도 같은 규칙으로 맞춰, 재실행해도 호수 박스명이
되살아나지 않게 했다.

주의: 박스명은 박스 계산의 "자투리 혼합" 그룹 기준이라, 통일 후에는
2호/3호/6호 자투리가 한 박스에 섞여 계산된다(사용자 확인됨).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-29 02:22:52 +09:00

84 lines
3.7 KiB
PL/PgSQL

-- ════════════════════════════════════════════════════════════
-- 쿠팡 밀크런 — 박스 입수량 규칙 2차 입력 (cupang_db)
-- 미라클통/미라클백/빠져락/멀티/점보 19건
--
-- 실행:
-- docker exec -i postgres-db psql -U postgres -d cupang_db \
-- < /opt/www/main/scripts/sql/cupang_box_rules_seed2.sql
--
-- 제품코드는 cupang_products 카탈로그에서 제품명으로 매칭한다.
-- (공백 무시 + 대소문자 무시 비교)
-- 카탈로그에 없는 제품은 입력되지 않고 마지막 SELECT 에 출력된다.
-- → 제품명 설정 화면의 "수기 추가"로 제품코드를 등록한 뒤 이 파일을 다시 실행.
-- 같은 product_code 는 덮어쓴다(ON CONFLICT DO UPDATE).
-- 피킹비는 전용 컬럼이 없어 memo 에 기록한다.
-- ════════════════════════════════════════════════════════════
BEGIN;
-- box_no: 원자료의 박스 호수. 박스명은 '쿠팡박스' 로 통일하고 호수는 memo 에 남긴다.
CREATE TEMP TABLE _seed2 (
product_name TEXT,
picking_fee INTEGER,
units_per_box INTEGER,
box_no TEXT
) ON COMMIT DROP;
INSERT INTO _seed2 (product_name, picking_fee, units_per_box, box_no) VALUES
('미라클통 550x4', 700, 40, '2호'),
('미라클통 550x6', 700, 30, '2호'),
('미라클통 750x5', 700, 30, '2호'),
('미라클통 950x4', 700, 24, '2호'),
('미라클통 950x6', 700, 18, '2호'),
('미라클통 1800x4', 700, 16, '2호'),
('미라클통 1800x6', 700, 14, '2호'),
('미라클통 2200x4', 700, 14, '2호'),
('미라클통 2200x6', 700, 10, '2호'),
('미라클통 3200x4', 700, 10, '2호'),
('빠져락 x1', 500, 35, '2호'),
('빠져락 x3', 580, 8, '2호'),
('빠져락 x5', 780, 8, '2호'),
('미라클백 2.5L', 500, 30, '5호'),
('미라클백 6.0L', 500, 23, '6호'),
('멀티 5,000ml x2', 700, 8, '2호'),
('멀티 5,000ml x4', 680, 2, '3호'),
('점보 7,000ml x2', 700, 6, '2호'),
('점보 황토 7,000ml x2', 700, 6, '2호');
INSERT INTO cupang_box_rules
(product_code, product_name_snapshot, box_name, units_per_box, memo, active)
SELECT p.product_code,
p.product_name,
'쿠팡박스',
s.units_per_box,
'피킹비 ' || s.picking_fee || '원 · ' || s.box_no,
TRUE
FROM _seed2 s
JOIN cupang_products p
ON lower(regexp_replace(p.product_name, '\s', '', 'g'))
= lower(regexp_replace(s.product_name, '\s', '', 'g'))
ON CONFLICT (product_code) DO UPDATE
SET product_name_snapshot = EXCLUDED.product_name_snapshot,
box_name = EXCLUDED.box_name,
units_per_box = EXCLUDED.units_per_box,
memo = EXCLUDED.memo,
active = TRUE;
-- 카탈로그에 없어 입력되지 않은 제품 (수기 추가 후 재실행 대상)
SELECT s.product_name AS "카탈로그_미등록_제품명",
s.units_per_box AS "입수량",
s.box_no AS "박스호수"
FROM _seed2 s
WHERE NOT EXISTS (
SELECT 1 FROM cupang_products p
WHERE lower(regexp_replace(p.product_name, '\s', '', 'g'))
= lower(regexp_replace(s.product_name, '\s', '', 'g'))
)
ORDER BY s.product_name;
COMMIT;
-- 결과 확인
SELECT product_code, product_name_snapshot, box_name, units_per_box, memo
FROM cupang_box_rules
ORDER BY product_code;