fix: [bending] 기초자료 변형코드 3자리(.001~.999) 변경 — 표준형상은 BD-XX, 변형은 BD-XX.nnn

This commit is contained in:
김보곤
2026-03-21 11:16:37 +09:00
parent d9be03824e
commit 980b00cc5a

View File

@@ -146,46 +146,41 @@ private function buildOptions(array $data): ?array
/**
* 기초자료 코드 자동 채번
*
* 해당 분류에 기존 항목이 없으면: BD-XX (순번 없음)
* 기존 1건(BD-XX)이면: 기존을 BD-XX.01로 변경 후 BD-XX.02 반환
* 기존 다수(BD-XX.nn)면: 마지막 순번 +1 반환
* BD-XX : 표준 형상 (재공품 코드 앞 5자리와 동일)
* BD-XX.nnn : 표준 대비 변형 (주문 수정 형상, 최대 999종)
*
* 첫 등록 → BD-XX (표준), 이후 → BD-XX.001~ (변형)
*/
private function generateCode(string $prefix): string
{
$prefix = strtoupper($prefix);
// BD-XX.nn 형태 중 가장 큰 순번 조회
// BD-XX.nnn 형태 중 가장 큰 순번 조회
$lastDotCode = BendingItem::withoutGlobalScopes()
->where('code', 'like', "BD-{$prefix}.%")
->orderByRaw('CAST(SUBSTRING(code, ?) AS UNSIGNED) DESC', [strlen("BD-{$prefix}.") + 1])
->value('code');
// BD-XX (순번 없음) 존재 여부
// BD-XX (표준 형상) 존재 여부
$plainExists = BendingItem::withoutGlobalScopes()
->where('code', "BD-{$prefix}")
->exists();
if (! $lastDotCode && ! $plainExists) {
// 해당 분류 첫 등록 → BD-XX
// 해당 분류 첫 등록 → BD-XX (표준 형상)
return "BD-{$prefix}";
}
if ($plainExists && ! $lastDotCode) {
// 기존 1건(BD-XX)만 있음 → BD-XX를 BD-XX.01로 변경하고, 신규는 BD-XX.02
$existing = BendingItem::withoutGlobalScopes()->where('code', "BD-{$prefix}")->first();
$existing->code = "BD-{$prefix}.01";
$existing->timestamps = false;
$existing->saveQuietly();
return "BD-{$prefix}.02";
// 표준만 있고 변형 없음 → 변형 001번 부여
return "BD-{$prefix}.001";
}
// BD-XX.nn이 이미 있음 → 마지막 +1
// 변형이 이미 있음 → 마지막 +1
preg_match('/\.(\d+)$/', $lastDotCode, $m);
$nextSeq = (int) ($m[1] ?? 0) + 1;
$pad = $nextSeq >= 100 ? 3 : 2;
return "BD-{$prefix}.".str_pad($nextSeq, $pad, '0', STR_PAD_LEFT);
return "BD-{$prefix}.".str_pad($nextSeq, 3, '0', STR_PAD_LEFT);
}
/**