From c2b25fa4cad36ee380d63f503cf09f140c9006ef Mon Sep 17 00:00:00 2001 From: Dwi Swandhana Date: Fri, 30 Jan 2026 09:36:19 +0700 Subject: [PATCH] push --- htdocs/app/Services/AstmMessageService.php | 125 +++++++++------------ 1 file changed, 54 insertions(+), 71 deletions(-) diff --git a/htdocs/app/Services/AstmMessageService.php b/htdocs/app/Services/AstmMessageService.php index f1aabf81..ea28677c 100644 --- a/htdocs/app/Services/AstmMessageService.php +++ b/htdocs/app/Services/AstmMessageService.php @@ -657,32 +657,17 @@ class AstmMessageService $lines = preg_split("/\r\n|\n|\r/", $clean); - $messages = []; - $current = []; - + $final = []; foreach ($lines as $line) { - - // Ketemu H baru → simpan pesan sebelumnya - if (str_starts_with($line, 'H|') && !empty($current)) { - $messages[] = implode("\n", $current); - $current = []; - } - - $current[] = $line; - - // Akhir pesan - if (str_starts_with($line, 'L|')) { - $messages[] = implode("\n", $current); - $current = []; + if (!preg_match('/^[A-Z]\|/', $line)) { + $final[count($final)-1] .= $line; + } else { + $final[] = $line; } } + $lines = $final; - // sisa buffer - if (!empty($current)) { - $messages[] = implode("\n", $current); - } - - return $messages; + return $lines; } protected function reassembleAstmFrames(string $raw): string { @@ -699,8 +684,6 @@ class AstmMessageService return trim($buffer); } - - protected function processBDAstmResponse(string $raw, $data): bool { try { @@ -766,15 +749,17 @@ class AstmMessageService elseif (str_starts_with($line, 'R|')) { $f = explode('|', $line); $test = explode('^', $f[2] ?? ''); - $resultDateTime = $this->astmToDateTime($f[11] ?? null); + $resultDateTime = $this->astmToDateTime($f[9] ?? null); + $updated_date = $this->parseUpdatedDate($f[10] ?? null); // Instrument detail di akhir baris preg_match('/(MGIT960|BACTECFX)[^|]*/', $line, $inst); $parsed['result'] = [ - 'organism' => $test[2] ?? null, - 'test_status' => explode('^', $f[3] ?? '')[0], - 'result_status_datetime' => $this->astmToDateTime($f[11] ?? null), + 'organism' => $test[2] ?? null, + 'test_status' => explode('^', $f[3] ?? '')[0], + 'result_status_datetime' => $resultDateTime, + 'updated_datetime' => $updated_date ]; $parsed['instrument'] = [ @@ -827,7 +812,43 @@ class AstmMessageService return false; } } - + public function processAstmMessagesLokal($dataListener) { + foreach ($dataListener as $data) { + try { + $response = $data->rawdt; + if ($data->no_id != ''){ + $messages = $this->splitBDAstmMessages($data->rawdt); + foreach ($messages as $msg) { + $assembled = $this->reassembleAstmFrames($msg); + $ok = $this->processBDAstmResponse($assembled, $data); + } + DB::table('lis_phoenix')->where('id', $data->id)->update([ + 'processed' => $ok ? 1 : 9 + ]); + Periksa::where('nofoto', $data->no_id)->whereNotIn('status', ['Selesai', 'Arsip', 'Dibatalkan (Arsip)', 'Batal'])->update([ + 'status' => 'Data BD di Terima ('.$data->organisme.')', + ]); + KomponenJawaban::updateOrCreate( + [ + 'accnumber' => $data->no_id, + 'komponen' => 'bd_result', + 'isidata' => $data->organisme, + ], + [ + 'template' => 'Kultur', + 'created_by' => 'BD' + ] + ); + } else { + DB::table('lis_phoenix')->where('id', $data->id)->update([ + 'processed' => 9 + ]); + } + } catch (\Exception $e) { + Log::critical($e->getMessage()); + } + } + } /** * Proses data ASTM Response */ @@ -838,10 +859,10 @@ class AstmMessageService $response = $data->rawdt; if ($data->alat == 'BD Mikro 1'){ if ($data->no_id != ''){ - $assembled = $this->reassembleAstmFrames($data->rawdt); - $messages = $this->splitBDAstmMessages($assembled); + $messages = $this->splitBDAstmMessages($data->rawdt); foreach ($messages as $msg) { - $ok = $this->processBDAstmResponse($msg, $data); + $assembled = $this->reassembleAstmFrames($msg); + $ok = $this->processBDAstmResponse($assembled, $data); } DataListiner::where('urut', $data->urut)->update([ 'processed' => $ok ? 1 : 9 @@ -883,43 +904,5 @@ class AstmMessageService } } } - public function processAstmMessagesLokal($dataListener) { - foreach ($dataListener as $data) { - try { - // Ambil pesan ASTM dari kolom 'message' atau yang relevan - $response = $data->rawdt; - if ($data->no_id != ''){ - $assembled = $this->reassembleAstmFrames($data->rawdt); - $messages = $this->splitBDAstmMessages($assembled); - foreach ($messages as $msg) { - $ok = $this->processBDAstmResponse($msg, $data); - } - DB::table('lis_phoenix')->where('id', $data->id)->update([ - 'processed' => $ok ? 1 : 9 - ]); - Periksa::where('nofoto', $data->no_id)->whereNotIn('status', ['Selesai', 'Arsip', 'Dibatalkan (Arsip)', 'Batal'])->update([ - 'status' => 'Data BD di Terima ('.$data->organisme.')', - ]); - KomponenJawaban::updateOrCreate( - [ - 'accnumber' => $data->no_id, - 'komponen' => 'bd_result', - 'isidata' => $data->organisme, - ], - [ - 'template' => 'Kultur', - 'created_by' => 'BD' - ] - ); - - } else { - DB::table('lis_phoenix')->where('id', $data->id)->update([ - 'processed' => 9 - ]); - } - } catch (\Exception $e) { - Log::critical($e->getMessage()); - } - } - } + }