8.4 KiB
8.4 KiB
생산관리 자재투입·문서·현황판·재고 종합 개선
날짜: 2026-03-22 작업자: Claude Code
변경 개요
재공품 자재 투입, 재고생산 품목코드, 수주서 절곡품 이미지, 생산현황판 탭 구조, 자재투입 배정 버그, 작업자화면 자동 완료, 작업정보 자동저장, 출고관리 STOCK 제외, 재고조정 오류, 재고 최종입출고 컬럼 등 생산관리 전반 12건의 개선/수정 작업을 수행했다.
수정된 파일
API (sam/api)
| 파일 | 변경 내용 |
|---|---|
app/Services/BendingCodeService.php |
lengthCodeToMm() public static 메서드 추가 |
app/Services/Production/BendingInfoBuilder.php |
buildDynamicBomForStockItem() 신규 — STOCK용 dynamic_bom 생성 |
app/Services/OrderService.php |
STOCK 확정 시 dynamic_bom 생성 블록 추가 |
app/Services/WorkOrderService.php |
STOCK 호환 fallback + buildBendingImageUrls public 변경 |
app/Services/QmsLotAuditService.php |
수주서 bending_parts 이미지 + bending_images 맵 포함 |
app/Services/ShipmentService.php |
출고 목록/통계에서 STOCK 수주 제외 |
app/Services/StockService.php |
재고조정 Item ID fallback + adjustments 동일 적용 |
app/Models/Tenants/Stock.php |
last_receipt_date/last_issue_date cast date:Y-m-d (UTC 변환 방지) |
React (sam/react)
| 파일 | 변경 내용 |
|---|---|
src/components/production/WorkerScreen/actions.ts |
searchStockByCode 필드 매핑 + itemType 필터 + StepProgressItem.work_order_status_changed + updateWorkOrderInfo |
src/components/production/WorkerScreen/MaterialInputModal.tsx |
원자재 필터 + 배정 뱃지 토글 + physicalAvail 교차추적 + DEV 강제입고 |
src/components/production/WorkerScreen/index.tsx |
탭 축소 + 자동 완료 + 작업정보 onChange 자동저장 + saveWorkOrderField |
src/components/stocks/BendingLotForm.tsx |
expectedItemCode — 품목코드 동적 반영 |
src/components/stocks/StockProductionList.tsx |
품목코드 검색 + '생산완료' 통일 |
src/components/stocks/StockProductionDetail.tsx |
'생산완료' 통일 |
src/components/orders/documents/SalesOrderDocument.tsx |
R2 bending_images 기반 이미지 연결 |
src/components/orders/documents/OrderDocumentModal.tsx |
bendingImages prop 전달 |
src/components/production/ProductionDashboard/index.tsx |
절곡 탭 depth 구조 |
src/components/production/ProductionDashboard/types.ts |
TabOption.children + WorkOrder.assigneeId |
src/components/material/StockStatus/StockStatusList.tsx |
최종 입출고 컬럼 + 날짜 기준 정렬 |
src/components/material/StockStatus/types.ts |
StockItem.lastTransactionDate 필드 |
src/components/material/StockStatus/actions.ts |
lastTransactionDate 계산 (receipt/issue 최신) |
상세 변경 사항
1. 재공품 자재 투입 검색 로직 수정
searchStockByCode: API 응답 필드 매핑 수정 (Item 모델code/name→itemCode/itemName)- 재공품(
isWipOrder) 자재 투입 시item_type=RM(원자재) 필터 자동 적용 handleStockSearch의query파라미터 null 안전 처리
2. 재고생산 품목코드 동적 반영
expectedItemCode상태: 품목 선택 시 즉시 품목코드 input에 반영- 저장 시
resolvedItem?.item_code || expectedItemCodefallback - 수정 화면 진입 시
initialData.items[0].itemCode로 초기화 - 재고생산 목록 검색에 품목코드 필터 추가
completed상태 라벨을 '생산완료'로 통일
3. STOCK 작업지시 dynamic_bom 생성
BendingInfoBuilder::buildDynamicBomForStockItem(): bending_lot + partKey → BD 코드 → DynamicBomEntryOrderService::confirmAndCreateWorkOrders(): STOCK 확정 시 자동 호출WorkOrderService: 기존 STOCK 호환 fallback (bending_lot.material 기반 RM 검색)BendingCodeService::lengthCodeToMm(): 길이코드→mm 변환 공유
4. 수주서 절곡품 이미지 연동
- R2 bending_images 맵:
WorkOrderService::buildBendingImageUrls()공유 (작업일지와 동일 소스) SalesOrderDocument:getBendingImageUrl()유틸로 productCode 기반 정확한 이미지 매칭- 가이드레일/케이스/하단마감재/연기차단재 모든 위치에 실제 이미지 표시
- 인증 문제 해결:
/api/proxy/files/{id}/view프록시 경유
5. 생산현황판 탭 depth 구조
- 절곡 계열 공정(P-003~P-007)을 부모(절곡) + 하위 그룹화
TabOption.children필드 추가- 재공품 라벨 간소화: "절곡 (재공품-가이드레일)" → "가이드레일"
- 작업자화면 탭 width 축소 (
md:w-full→w-max)
6. 자재투입 자동입력 배정수량 버그 수정
- 원인: 같은 물리 LOT가 다른 BOM 그룹에서 사용될 때
lotInputtedQty가 그룹마다 달라 부정확한 교차 차감 - 수정:
physicalAvail = lotAvailableQty + SUM(모든 그룹의 lotInputtedQty) - 배정완료 뱃지 클릭 → 미배정 그룹만 토글 필터
- 배정 미완료 그룹에서만 DEV 강제입고 버튼 표시
7. 작업자화면 전 공정 자동 완료 처리
StepProgressItem.work_order_status_changed필드 추가handleStepClick: 자동 완료 감지 → 목록 새로고침 + 토스트handleInspectionComplete: 검사 완료 후에도 자동 완료 토스트- 슬랫/스크린/절곡 모든 공정에 동일 적용
8. 작업정보 onChange 자동 저장
saveWorkOrderField헬퍼: API 저장 +workOrdersstate 동시 동기화- 부서 변경 →
team_id즉시 저장 - 담당자 변경 →
assignee_id즉시 저장 - 생산일자 변경 →
scheduled_date즉시 저장 - 작업지시 전환 시 저장된 값 복원 (
assigneeId포함) useEffect의존성 정리: 사용자 수정값이 덮어쓰이지 않도록 개선
9. 생산일자 자동 저장 (3개 시점)
- 단계 완료 시: 생산일자가 비어있으면 오늘 날짜로 자동 저장
- 검사 완료 시: 항상 오늘 날짜로 저장
- 전체 완료 시: 항상 오늘 날짜로 저장
10. 출고관리 STOCK 제외
ShipmentService::index():whereDoesntHave('order', STOCK)조건 추가ShipmentService::stats(): 모든 통계 쿼리에 동일 조건 적용- 재공품 수주의 출고가 목록/통계에서 제외
11. 재고 조정 Item ID 호환
- 원인: 재고 목록 API가 Item ID를 반환하는데, 재고조정 API는 Stock ID 기대 → 404 에러
- 수정:
adjustments()/createAdjustment()에서 Stock ID 검색 실패 시item_id로 재검색
12. 재고 현황 최종 입출고 컬럼 + UTC 수정
StockItem.lastTransactionDate:last_receipt_date/last_issue_date중 최신 표시- 테이블에 '최종 입출고' 컬럼 추가
- 기본 정렬: 최종 입출고 일자 내림차순 (최신 거래가 위)
- UTC 변환 오류 수정: Stock 모델의 date cast를
date:Y-m-d로 변경 → JSON 직렬화 시 UTC 변환 없이 날짜 문자열만 반환 (한국시간 3/22가 UTC 3/21로 표시되던 문제 해결)
테스트 체크리스트
- 재공품 자재 투입 검색 시 원자재만 표시
- 재고생산 품목코드 저장 후 수정/목록에서 표시
- 재고생산 상태 '생산완료' 통일
- STOCK 작업지시 확정 시 dynamic_bom 생성 확인
- 기존 STOCK 작업지시 fallback 자재 매칭
- 수주서 절곡품 이미지 표시 (가이드레일/케이스/하단마감재)
- 생산현황판 절곡 탭 depth 구조
- 자재투입 자동입력 배정수량 정확성
- 배정완료 뱃지 토글 필터
- 작업자화면 단계 완료 시 자동 완료 전환
- 작업정보 onChange 자동 저장 (부서/담당자/생산일자)
- 출고관리에서 STOCK 수주 제외
- 재고 조정 등록 정상 동작
- 재고 현황 최종 입출고 컬럼 표시
- 최종 입출고 일자 한국시간 정확 표시
- 연기차단재 이미지 (기초관리에 데이터 등록 필요)
- 실제 운영 데이터로 자동 완료 흐름 검증
관련 문서
rules/wip-production-policy.md— 재공품 생산 정책 (자재 매칭/자동 완료 섹션 추가됨)frontend/api-specs/stock-production-api.md— 재고생산 API 명세frontend/api-specs/bending-lot-api.md— 절곡품 LOT API
최종 업데이트: 2026-03-22