# 변경 내용 요약 - 경동기업 품목/단가 마이그레이션 Phase 3 **날짜:** 2026-01-28 **작업자:** Claude Code **관련 문서:** docs/plans/kd-items-migration-plan.md ## 📋 변경 개요 경동기업(tenant_id=287) 레거시 DB(chandj)의 price_* 테이블에서 누락된 품목을 SAM DB(samdb)로 추가 마이그레이션 ## 📁 수정된 파일 | 파일 | 설명 | |------|------| | `api/database/seeders/Kyungdong/KyungdongItemSeeder.php` | Phase 3.1, 3.2 메서드 추가 | | `docs/plans/kd-items-migration-plan.md` | Phase 3 완료 상태 업데이트 | ## 🔧 상세 변경 사항 ### 1. KyungdongItemSeeder.php 확장 **Phase 3.1: migratePriceMotor()** - price_motor JSON에서 KDunitprice에 없는 품목 추가 - 220V/380V 모터는 스킵 (KDunitprice에 "KD모터*Kg단상/삼상"으로 존재) - 추가 항목 (13건): - PM-020~PM-032: 제어기 (6P~18P, 20회선~100회선) - PM-033~PM-035: 방화/방범 콘트롤박스, 스위치 **Phase 3.2: migratePriceRawMaterials()** - price_raw_materials JSON에서 KDunitprice에 없는 품목 추가 - 추가 항목 (4건): - RM-007: 신설비상문 (3x2 300*200) - RM-008~RM-009: 제연커튼 (연기차단원단, 불투명) - RM-010~RM-011: 화이바원단, 와이어원단 **중복 확인 로직:** ```php // 기존 품목명과 비교하여 중복 제외 $existingItemNames = DB::table('items') ->where('tenant_id', $tenantId) ->pluck('name') ->map(fn($n) => mb_strtolower($n)) ->toArray(); // 품목명이 이미 존재하면 스킵 if (in_array(mb_strtolower($itemName), $existingItemNames)) { continue; } ``` ### 2. Phase 3 분석 결과 **price_* 테이블 분석 (10개):** | 테이블 | 역할 | 처리 | |--------|------|------| | price_motor | 모터/제어기 단가 | ✅ 누락 품목 추가 (13건) | | price_raw_materials | 원자재 단가 | ✅ 누락 품목 추가 (4건) | | price_shaft | 감기샤프트 계산 참조 | ⏭️ 스킵 (품목 마스터 아님) | | price_pipe | 파이프 계산 참조 | ⏭️ 스킵 (품목 마스터 아님) | | price_angle | 앵글 계산 참조 | ⏭️ 스킵 (품목 마스터 아님) | | price_bend | 절곡 계산 참조 | ⏭️ 스킵 (품목 마스터 아님) | | price_pole | 폴 계산 참조 | ⏭️ 스킵 (품목 마스터 아님) | | price_screenplate | 스크린플레이트 계산 참조 | ⏭️ 스킵 (품목 마스터 아님) | | price_smokeban | 연기차단 계산 참조 | ⏭️ 스킵 (품목 마스터 아님) | | price_etc | 기타 | ⏭️ 스킵 (비활성) | ## ✅ 실행 방법 ```bash # Docker 컨테이너 내부에서 실행 docker exec sam-api-1 php artisan db:seed --class="Database\\Seeders\\Kyungdong\\KyungdongItemSeeder" # 또는 Docker 환경에서 직접 실행 cd /var/www/html && php artisan db:seed --class="Database\\Seeders\\Kyungdong\\KyungdongItemSeeder" ``` ## 📊 최종 결과 | 테이블 | Phase 1~2 | Phase 3 추가 | 최종 | |--------|-----------|-------------|------| | items | 634건 | +17건 | **651건** | | prices | 634건 | +17건 | **651건** | | BOM (items.bom) | 18건 | 0건 | **18건** | **item_type별 분포:** | item_type | 건수 | |-----------|------| | FG (완제품) | 100건 | | PT (부품) | 110건 | | SM (부자재) | 256건 | | RM (원자재) | 108건 | | CS (소모품) | 77건 | ## ⚠️ 주의사항 1. **기존 데이터 유지**: Phase 3는 기존 데이터를 삭제하지 않고 누락 품목만 추가 2. **Seeder 재실행 시**: 전체 Seeder는 idempotent (삭제 후 재생성) 방식 3. **코드 형식**: PM-XXX (price_motor), RM-XXX (price_raw_materials) ## 🔗 관련 문서 - [kd-items-migration-plan.md](../plans/kd-items-migration-plan.md) - 전체 마이그레이션 계획 - [20260128_kd_items_migration_phase1.md](./20260128_kd_items_migration_phase1.md) - Phase 1 변경 내용 - [kd-orders-migration-plan.md](../plans/kd-orders-migration-plan.md) - 입고/재고/주문 마이그레이션 (연관)