service->getCodeMap(); }, __('message.fetched')); } /** * 드롭다운 선택 → 품목 매핑 조회 */ public function resolveItem(Request $request): JsonResponse { return ApiResponse::handle(function () use ($request) { $prodCode = $request->query('prod'); $specCode = $request->query('spec'); $lengthCode = $request->query('length'); if (! $prodCode || ! $specCode || ! $lengthCode) { return ['error' => 'MISSING_PARAMS', 'code' => 400, 'message' => 'prod, spec, length 파라미터가 필요합니다.']; } $item = $this->service->resolveItem($prodCode, $specCode, $lengthCode); if (! $item) { return ['error' => 'NOT_MAPPED', 'code' => 404, 'message' => '해당 조합에 매핑된 품목이 없습니다.']; } return $item; }, __('message.fetched')); } /** * LOT 번호 생성 (프리뷰 + 일련번호 확정) */ public function generateLotNumber(Request $request): JsonResponse { return ApiResponse::handle(function () use ($request) { $prodCode = $request->input('prod_code'); $specCode = $request->input('spec_code'); $lengthCode = $request->input('length_code'); $regDate = $request->input('reg_date', now()->toDateString()); if (! $prodCode || ! $specCode || ! $lengthCode) { return ['error' => 'MISSING_PARAMS', 'code' => 400, 'message' => 'prod_code, spec_code, length_code가 필요합니다.']; } $dateCode = BendingCodeService::generateDateCode($regDate); $lotBase = "{$prodCode}{$specCode}{$dateCode}-{$lengthCode}"; $lotNumber = $this->service->generateLotNumber($lotBase); $material = BendingCodeService::getMaterial($prodCode, $specCode); return [ 'lot_base' => $lotBase, 'lot_number' => $lotNumber, 'date_code' => $dateCode, 'material' => $material, ]; }, __('message.fetched')); } }