- 개발팀 전용 폴더 dev/ 생성 (standards, guides, quickstart, changes, deploys, data, history, dev_plans 이동) - 프론트엔드 전용 폴더 frontend/ 생성 (api/ → frontend/api-specs/) - 기획팀 폴더 requests/ 생성 - plans/ → dev/dev_plans/ 이름 변경 - README.md 신규 (사람용 안내), INDEX.md 재작성 (Claude Code용) - resources.md 신규 (노션 링크용, assets/brochure 이관 예정) - CURRENT_WORKS.md 삭제, TODO.md → dev/ 이동 - 전체 참조 경로 업데이트 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.9 KiB
3.9 KiB
변경 내용 요약 - 경동기업 품목/단가 마이그레이션 Phase 3
날짜: 2026-01-28 작업자: Claude Code 관련 문서: docs/dev_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/dev_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: 제어기 (6P18P, 20회선~100회선) - PM-033~PM-035: 방화/방범 콘트롤박스, 스위치
- PM-020
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건 |
⚠️ 주의사항
- 기존 데이터 유지: Phase 3는 기존 데이터를 삭제하지 않고 누락 품목만 추가
- Seeder 재실행 시: 전체 Seeder는 idempotent (삭제 후 재생성) 방식
- 코드 형식: PM-XXX (price_motor), RM-XXX (price_raw_materials)
🔗 관련 문서
- kd-items-migration-plan.md - 전체 마이그레이션 계획
- 20260128_kd_items_migration_phase1.md - Phase 1 변경 내용
- kd-orders-migration-plan.md - 입고/재고/주문 마이그레이션 (연관)