From 980b00cc5a3b47e02f4845eabd7ba94885606fee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sat, 21 Mar 2026 11:16:37 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[bending]=20=EA=B8=B0=EC=B4=88=EC=9E=90?= =?UTF-8?q?=EB=A3=8C=20=EB=B3=80=ED=98=95=EC=BD=94=EB=93=9C=203=EC=9E=90?= =?UTF-8?q?=EB=A6=AC(.001~.999)=20=EB=B3=80=EA=B2=BD=20=E2=80=94=20?= =?UTF-8?q?=ED=91=9C=EC=A4=80=ED=98=95=EC=83=81=EC=9D=80=20BD-XX,=20?= =?UTF-8?q?=EB=B3=80=ED=98=95=EC=9D=80=20BD-XX.nnn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/BendingItemService.php | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/app/Services/BendingItemService.php b/app/Services/BendingItemService.php index f9674df2..7b290cfe 100644 --- a/app/Services/BendingItemService.php +++ b/app/Services/BendingItemService.php @@ -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); } /**