feat: [재공품] STOCK 작업지시 dynamic_bom 생성 + 자재 매칭 구현

- BendingCodeService: lengthCodeToMm() public static 메서드 추가
- BendingInfoBuilder: buildDynamicBomForStockItem() 신규 메서드
  - bending_lot(prodCode/specCode/lengthCode) + partKey → BD 품목 코드 → dynamic_bom 엔트리 생성
  - PrefixResolver 활용하여 정확한 prefix 매핑
- OrderService: STOCK 확정 시 bending_lot 기반 dynamic_bom 자동 생성
- WorkOrderService: 기존 STOCK 호환 fallback (getMaterials + getMaterialsForItem)
  - dynamic_bom 없는 기존 재공품도 bending_lot.material로 원자재 검색
This commit is contained in:
김보곤
2026-03-22 14:54:11 +09:00
parent af69f2df0c
commit a8b04e15c3
4 changed files with 305 additions and 1 deletions

View File

@@ -284,4 +284,31 @@ public function getBendingWidthByItemCode(string $itemCode): ?float
return isset($last['sum']) ? (float) $last['sum'] : null;
}
/**
* length_code → mm 변환
*
* @param string $prodCode 제품코드 (G=연기차단재 전용 길이)
* @param string $lengthCode 길이코드 (24, 30, 53 등)
*/
public static function lengthCodeToMm(string $prodCode, string $lengthCode): int
{
// 연기차단재 전용 길이
if ($prodCode === 'G') {
return match ($lengthCode) {
'53', '83' => 3000,
'54', '84' => 4000,
default => 0,
};
}
// 일반 길이
$map = [
'06' => 610, '12' => 1219, '17' => 1750, '20' => 2000,
'24' => 2438, '30' => 3000, '35' => 3500, '40' => 4000,
'41' => 4150, '42' => 4200, '43' => 4300, '45' => 4500,
];
return $map[$lengthCode] ?? 0;
}
}