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;
}
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
{
@@ -712,7 +727,7 @@ class AstmMessageService
if (str_starts_with($line, 'H|')) {
$f = explode('|', $line);
$parsed['header'] = [
'sender_name' => $data->alat,
'sender_name' => $data->alat ?? ($f[4] ?? 'BD Instrument'),
'version_number' => $f[12] ?? 'V1.0',
'message_datetime' => $this->astmToDateTime($f[13] ?? null)
];
@@ -821,9 +836,10 @@ class AstmMessageService
$response = $data->rawdt;
if ($data->alat == 'BD Mikro 1'){
if ($data->no_id != ''){
$messages = $this->splitBDAstmMessages($data->rawdt);
$assembled = $this->reassembleAstmFrames($data->rawdt);
$messages = $this->splitBDAstmMessages($assembled);
foreach ($messages as $msg) {
$ok = $this->processBDAstmResponse($msg, $data->alat);
$ok = $this->processBDAstmResponse($msg, $data);
}
DataListiner::where('urut', $data->urut)->update([
'processed' => $ok ? 1 : 9