0|1, 'error_message' => string|null] */ public function execute( int $deviceId, ?string $processName, ?string $jobName, string $status, string $statusComment, string $createdDate, string $updatedDate ): array { try { Log::info('SHJ-8 バッチ処理ログ作成開始', [ 'device_id' => $deviceId, 'process_name' => $processName, 'job_name' => $jobName, 'status' => $status, 'status_comment' => $statusComment, 'created_date' => $createdDate, 'updated_date' => $updatedDate ]); // 【処理1】入力パラメーターをチェックする $validationResult = $this->validateParameters( $deviceId, $processName, $jobName, $status, $statusComment, $createdDate, $updatedDate ); // 【判断1】チェック結果 if (!$validationResult['valid']) { // パラメーターNG $errorMessage = $validationResult['error_message']; Log::warning('SHJ-8 パラメーターチェックNG', [ 'error_message' => $errorMessage ]); // 【処理3】異常終了の結果を返却 return [ 'result' => 1, 'error_message' => $errorMessage ]; } // 【処理2】バッチ処理ログを登録する $batJobLog = $this->createBatchJobLog( $deviceId, $processName, $jobName, $status, $statusComment, $createdDate, $updatedDate ); Log::info('SHJ-8 バッチ処理ログ作成完了', [ 'job_log_id' => $batJobLog->job_log_id, 'device_id' => $batJobLog->device_id, 'process_name' => $batJobLog->process_name, 'job_name' => $batJobLog->job_name ]); // 【処理3】正常終了の結果を返却 return [ 'result' => 0 ]; } catch (\Exception $e) { Log::error('SHJ-8 バッチ処理ログ作成エラー', [ 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); // 例外発生時の処理結果を返却 return [ 'result' => 1, 'error_code' => $e->getCode(), 'error_message' => $e->getMessage(), 'stack_trace' => $e->getTraceAsString() ]; } } /** * 【処理1】入力パラメーターをチェックする * * 修正版:7項目チェック(status_comment追加) * 1. デバイスID: 必須、device表に存在チェック * 2. プロセス名: 「プロセス名」「ジョブ名」いずれか必須 * 3. ジョブ名: 「プロセス名」「ジョブ名」いずれか必須 * 4. ステータス: 必須 * 5. ステータスコメント: 必須、≤255文字 * 6. 登録日時: 日付型(yyyy/mm/dd形式) * 7. 更新日時: 日付型(yyyy/mm/dd形式) * * @param int $deviceId デバイスID * @param string|null $processName プロセス名 * @param string|null $jobName ジョブ名 * @param string $status ステータス * @param string $statusComment ステータスコメント * @param string $createdDate 登録日時 * @param string $updatedDate 更新日時 * @return array 検証結果 ['valid' => bool, 'error_message' => string|null] */ private function validateParameters( int $deviceId, ?string $processName, ?string $jobName, string $status, string $statusComment, string $createdDate, string $updatedDate ): array { $errors = []; // 1. デバイスIDチェック (必須、存在チェック) if ($deviceId <= 0) { $errors[] = "パラメーターNG:デバイスID/{$deviceId}"; } elseif (!Device::where('device_id', $deviceId)->exists()) { $errors[] = "パラメーターNG:デバイスID/{$deviceId}"; } // 2. プロセス名とジョブ名のいずれか必須チェック if (empty($processName) && empty($jobName)) { $errors[] = "パラメーターNG:プロセス名/<空>"; $errors[] = "パラメーターNG:ジョブ名/<空>"; } // 3. ステータス必須チェック if (empty($status)) { $errors[] = "パラメーターNG:ステータス/<空>"; } // 4. ステータスコメント必須チェック、255文字以内 if (empty($statusComment)) { $errors[] = "パラメーターNG:ステータスコメント/<空>"; } elseif (mb_strlen($statusComment) > 255) { $errors[] = "パラメーターNG:ステータスコメント/長さ超過(" . mb_strlen($statusComment) . "文字)"; } // 5. 登録日時の日付型チェック if (!$this->isValidDateFormat($createdDate)) { $errors[] = "パラメーターNG:登録日時/{$createdDate}"; } // 6. 更新日時の日付型チェック if (!$this->isValidDateFormat($updatedDate)) { $errors[] = "パラメーターNG:更新日時/{$updatedDate}"; } // エラーがある場合 if (!empty($errors)) { // 複数のエラーがある場合は全角カンマ(、)で連結 $errorMessage = implode('、', $errors); return [ 'valid' => false, 'error_message' => $errorMessage ]; } // 正常終了 return [ 'valid' => true, 'error_message' => null ]; } /** * 日付形式の検証 * * yyyy/mm/dd形式かチェック * * @param string $date 日付文字列 * @return bool 有効な日付形式かどうか */ private function isValidDateFormat(string $date): bool { // yyyy/mm/dd形式の正規表現チェック if (!preg_match('/^\d{4}\/\d{2}\/\d{2}$/', $date)) { return false; } // 実際の日付として有効かチェック $dateParts = explode('/', $date); return checkdate((int)$dateParts[1], (int)$dateParts[2], (int)$dateParts[0]); } /** * 【処理2】バッチ処理ログを登録する * * bat_job_logテーブルにINSERT * 修正版:ステータスコメントは呼び出し元から受け取る(固定値廃止) * * @param int $deviceId デバイスID * @param string|null $processName プロセス名 * @param string|null $jobName ジョブ名 * @param string $status ステータス * @param string $statusComment ステータスコメント(業務固有) * @param string $createdDate 登録日時 (yyyy/mm/dd形式) * @param string $updatedDate 更新日時 (yyyy/mm/dd形式) * @return BatJobLog 作成されたバッチジョブログ */ private function createBatchJobLog( int $deviceId, ?string $processName, ?string $jobName, string $status, string $statusComment, string $createdDate, string $updatedDate ): BatJobLog { // 日付文字列をdatetime型に変換(現在時刻を使用) $createdDatetime = Carbon::createFromFormat('Y/m/d', $createdDate); $updatedDatetime = Carbon::createFromFormat('Y/m/d', $updatedDate); // bat_job_logテーブルに登録(status_commentは呼び出し元から受け取った値を使用) $batJobLog = BatJobLog::create([ 'device_id' => $deviceId, 'process_name' => $processName, 'job_name' => $jobName, 'status' => $status, 'status_comment' => $statusComment, 'created_at' => $createdDatetime, 'updated_at' => $updatedDatetime ]); return $batJobLog; } }