push
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user