Files
sam-docs/changes/20260128_kd_items_migration_phase3.md
권혁성 0c30f576c3 docs: Phase 3 완료 상태 업데이트
- kd-items-migration-plan.md: Phase 3 완료 체크리스트 업데이트
- 20260128_kd_items_migration_phase3.md: Phase 3 변경 내용 요약
- 진행률: 75% (Phase 1~3 완료)
- 최종 결과: items 651건, prices 651건, BOM 18건

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 21:29:19 +09:00

3.9 KiB

변경 내용 요약 - 경동기업 품목/단가 마이그레이션 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-020PM-032: 제어기 (6P18P, 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: 화이바원단, 와이어원단

중복 확인 로직:

// 기존 품목명과 비교하여 중복 제외
$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 기타 ⏭️ 스킵 (비활성)

실행 방법

# 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)

🔗 관련 문서