This commit is contained in:
Dwi Swandhana
2026-01-25 17:09:41 +07:00
parent eff628ae2a
commit 355ba42865
+19 -3
View File
@@ -684,6 +684,21 @@ class AstmMessageService
return $messages; return $messages;
} }
protected function reassembleAstmFrames(string $raw): string
{
$buffer = '';
$frames = preg_split('/\x02\d/', $raw); // STX + sequence number
foreach ($frames as $frame) {
// buang ETX, checksum, EOT
$frame = preg_replace('/\x03.*$/s', '', $frame);
$frame = preg_replace('/\x04/', '', $frame);
$buffer .= $frame;
}
return trim($buffer);
}
protected function processBDAstmResponse(string $raw, $data): bool protected function processBDAstmResponse(string $raw, $data): bool
{ {
@@ -712,7 +727,7 @@ class AstmMessageService
if (str_starts_with($line, 'H|')) { if (str_starts_with($line, 'H|')) {
$f = explode('|', $line); $f = explode('|', $line);
$parsed['header'] = [ $parsed['header'] = [
'sender_name' => $data->alat, 'sender_name' => $data->alat ?? ($f[4] ?? 'BD Instrument'),
'version_number' => $f[12] ?? 'V1.0', 'version_number' => $f[12] ?? 'V1.0',
'message_datetime' => $this->astmToDateTime($f[13] ?? null) 'message_datetime' => $this->astmToDateTime($f[13] ?? null)
]; ];
@@ -821,9 +836,10 @@ class AstmMessageService
$response = $data->rawdt; $response = $data->rawdt;
if ($data->alat == 'BD Mikro 1'){ if ($data->alat == 'BD Mikro 1'){
if ($data->no_id != ''){ if ($data->no_id != ''){
$messages = $this->splitBDAstmMessages($data->rawdt); $assembled = $this->reassembleAstmFrames($data->rawdt);
$messages = $this->splitBDAstmMessages($assembled);
foreach ($messages as $msg) { foreach ($messages as $msg) {
$ok = $this->processBDAstmResponse($msg, $data->alat); $ok = $this->processBDAstmResponse($msg, $data);
} }
DataListiner::where('urut', $data->urut)->update([ DataListiner::where('urut', $data->urut)->update([
'processed' => $ok ? 1 : 9 'processed' => $ok ? 1 : 9