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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user